51单片机 精确控制舵机pwm

本文介绍了一种使用50Hz频率及0.5-2.5ms占空比时间的PWM信号来精确控制舵机的方法。通过设定不同级别的占空比(0-100级),实现了对舵机角度的精细调节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
实现特定pwm 100级别舵机控制输出,其他级别也很简单,太低了可能不行


前提条件:
1. 舵机控制频率是 50hz
2. 舵机占空比时间是0.5 - 2.5 ms
算法:
0.5 - 2.5 跨度是2ms (2000 us)
要实现精确控制,100级别, 2ms / 100 = 20us,定时器基准时间就是20us
内部计数器pwm_cnt 取值范围是25 - 125 产生0.5 ms - 2.5ms的高电平时间
低电平,不精确调整,采用500us定时基准,有一定的误差,但是应该不影响。
*/


//TL0 = 0xEE; //设置定时初值
//TH0 = 0xFF; //设置定时初值 20us 重装值


//TL0 = 0x33; //设置定时初值
//TH0 = 0xFE; //设置定时初值 500 us重装值
unsigned char pwm_flag;
unsigned char pwm_cnt;


unsigned char duty_cycle; //舵机占空比 (0 - 100)
sbit pwm_out = P1 ^ 1;


void timer0_isr(void) interrupt 1 using 1
{
    if(pwm_flag)
    {
        TL0 = 0xEE;
        TH0 = 0xFF;//重装20us值
        pwm_cnt++;
        if(pwm_cnt == duty_cycle + 25)
        {
            pwm_out = 0;
            pwm_cnt = 0;
            pwm_flag = 0;   //翻转pwm_out
        }else
        {
            pwm_out = 1;
        }


    }else
    {
        TL0 = 0x33;
        TH0 = 0xFE;//重装500us值     
        pwm_cnt++;
        if(pwm_cnt == 35)
        {
            pwm_cnt = 0;
            pwm_out = 1;
            pwm_flag = 1;   //翻转pwm_out
        }else{
            pwm_out = 0;
        }
    }


}


void Timer0Init(void) //20微秒@11.0592MHz
{
    TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
    TL0 = 0xEE;                     //initial timer0 low byte
    TH0 = 0xFF;                //initial timer0 high byte
    TR0 = 1;                        //timer0 start running
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch


    pwm_cnt = 0;
    pwm_flag = 1;               // 高电平先行
}
void main(void)
{
    Timer0Init();
    duty_cycle = 99;
    while(1);
    return;

}


用模拟器调试,应该可以,没有在实际的舵机上调试,应该超不多。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值