单片机PWM舵机控制原理

舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;

 

如下图可形象地表示脉冲与角度关系

 



[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <reg52.h>  
  2. unsigned char count;            //0.5ms次数标识  
  3. sbit pwm=P1^0;              //信号输出  
  4. sbit jia=P1^1;              //角度增加按键  
  5. sbit jan=P1^2;              //角度减小按键  
  6. char jd;                    //角度标识  
  7. void delay(unsigned int i)  
  8. {  
  9.     unsigned int j,k;  
  10.     for(j=i;j>0;j--)  
  11.         for(k=125;k>0;k--);  
  12. }  
  13. void Time0_init()           //定时器初始化  
  14. {  
  15.     TMOD=0x01;  
  16.     IE=0x82;  
  17.     TH0=0xff;  
  18.     TL0=0x19;               //12晶振,0.25ms  
  19.     TR0=1;                 //定时器开始  
  20. }  
  21. void Time0_int() interrupt 1            //中断程序  
  22. {  
  23.     TH0=0xff;  
  24.     TL0=0x19;  
  25.     if(count<jd) //输出count个高电平  
  26.         pwm=1;  
  27.     else  
  28.     pwm=0;    //其余输出低电平  
  29.     count++;  
  30.     count=count%40;  //时钟保持40个count 即20ms  
  31. }  
  32. void keyscan()              //按键扫描  
  33. {  
  34.     if(jia==0)              //角度增加键是否按下  
  35.     {  
  36.         delay(50);          //按下延时,消抖  
  37.         if(jia==0)  
  38.         {  
  39.             jd++;           //角度标识加1  
  40.             count=0;        //按键按下,则20ms周期重新开始  
  41.             if(jd==50)  
  42.                 jd=9;            //已经是180°则保持  
  43.                 while(jia==0);   //等待按键放开  
  44.         }  
  45.     }  
  46.     if(jan==0)                   //角度减小键是否按下  
  47.     {  
  48.         delay(10);  
  49.         if(jd==0);  
  50.         {  
  51.             jd--;                //角度标识减1  
  52.             count=0;  
  53.             if(jd==0)  
  54.                 jd=1;  
  55.             while(jan==0);  
  56.         }  
  57.     }  
  58. }  
  59.   
  60. void main()  
  61. {  
  62.     jd=1;  
  63.     count=0;  
  64.     Time0_init();  
  65.     while(1)  
  66.     {  
  67.         keyscan();  
  68. //      display();  
  69.     }  
  70. }  
  • 35
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
51单片机可以使用PWM(脉宽调制)方式来控制直流舵机PWM是一种通过改变信号脉冲的高电平时间来实现电平控制的方法。直流舵机则是一种可以改变转动角度的执行器。 首先,需要了解直流舵机的工作原理。直流舵机内部有一个内置的电机和一组电路控制电机的转动。它接收到的信号是一个脉冲信号,脉冲的高电平时间决定了舵机的转动角度。 在51单片机上,可以通过配置定时器和IO口来实现PWM信号的产生。具体步骤如下: 1. 配置定时器工作模式为PWM模式。51单片机中通常有多个定时器可供选择,选择其中一个,并设置其工作模式为PWM。 2. 设置PWM的周期。根据直流舵机的要求,设置PWM的周期,一般在20ms左右。 3. 设置PWM的占空比。根据需要转动的角度,计算出对应的占空比,然后在每个周期内按照占空比的要求产生相应的脉冲信号。 4. 将PWM信号输出到控制直流舵机的IO口。通过串口、并口等方式将PWM信号输出到直流舵机的控制输入脚。 5. 不断循环执行上述步骤,使得直流舵机能够持续地转动到目标角度。 需要注意的是,不同的直流舵机可能对PWM信号的周期和占空比有不同的要求,所以在实际应用中需要根据直流舵机的说明书进行相应的设置。 总结起来,51单片机可以通过配置定时器和IO口来产生PWM信号,然后将该信号输出到控制直流舵机的脚上,从而实现对直流舵机的精确控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值