51单片机控制常见9克舵机的资料,自己写的。

2020-01-23 14:48发布

今日在淘宝买了一个舵机,以便我小车的超声波探头能进行转动,判断左右障碍物的距离,进而判断往哪边行走用。购买的舵机图片如下,非常常见,网上搜索了一下信息,使用也很简单,在这简单说一下。
2.jpg (30.59 KB, 下载次数: 0) 下载附件 2014-4-25 09:46 上传


明白了原理,再根据原理发出PWM波形,就可以驱动了,挺简单的,我的小车超声波探头已经能转动了。:)
下边是我的测试程序:
  1. #include <reg52.h>  
  2.   
  3. int time_count =0;//时间标志  
  4. sbit pwmout =P2^1;//pwm输出IO  
  5. int  pwm_count = 0;  
  6. int  pwmout_count = 0;  
  7. int direction = 0;  
  8.   
  9. void ss() interrupt 1 //0.1ms定时器  
  10. {  
  11.     TH0 = 0xff;  
  12.     TL0 = 0xa4;  
  13.     time_count ++;  
  14.     if (time_count == 200) //20毫秒,调整pwm_count     
  15.     {     
  16.         if (direction ==0)//方向(增加)   
  17.         {     
  18.             pwm_count ++;     
  19.             if (pwm_count >= 30 )//到达周期,调整增长方向,datasheet里说是20MS,但是我实际用30MS才能转到最大,奇怪,希望有知道的告知一声。   
  20.             {     
  21.                 direction = 1;   
  22.             }     
  23.         }  
  24.       
  25.         if (direction == 1)//方向(减小)   
  26.         {     
  27.             pwm_count --;     
  28.             if (pwm_count <= 5)   
  29.             { direction = 0; }   
  30.         }   
  31.         time_count = 0;   
  32.         pwmout_count = pwm_count;   
  33.     }   
  34.       
  35.     if (pwmout_count > 5)      
  36.     {     
  37.         pwmout = 1;   
  38.         pwmout_count --;//0.1ms执行一次,一直到占空比结束      
  39.     }     
  40.     else      
  41.     {     
  42.     pwmout = 0; //占空比结束本周期内其他时间低电平  
  43.     }  
  44. }  
  45.   
  46. void main()  
  47.   
  48. {  
  49.     pwmout = 0;      
  50.     pwm_count = 5; //起始0.5ms-2.5ms            
  51.     TMOD = 0x01;  
  52.     TH0 = 0xff;  
  53.     TL0 = 0xa4;  
  54.     ET0 = 1;//允许T0中断  
  55.     EA = 1;      //开启总中断  
  56.     TR0 = 1;  
  57.     while(1);  
  58. }  
复制代码

小广告:更多访问www.yanpengfei.cn进行查看:)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。