搜索
bottom↓
回复: 8

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

[复制链接]

出0入0汤圆

发表于 2014-4-25 09:47:12 | 显示全部楼层 |阅读模式
今日在淘宝买了一个舵机,以便我小车的超声波探头能进行转动,判断左右障碍物的距离,进而判断往哪边行走用。购买的舵机图片如下,非常常见,网上搜索了一下信息,使用也很简单,在这简单说一下。

具体参数如下:

名 称:9克舵机  9G MICRO SERVO

尺 寸:23mmX12.2mmX29mm

重 量:9克

扭 矩:1.5kg/cm

工 作 电 压: 4.2-6V

温 度 范 围:0℃–55℃

运 行 速 度:0.3秒/60度

通过网上查询,此舵机使用的芯片是KC5188,datasheet说明如下:

KC5188 与外围PNP 晶体管可组成一个直流脉宽调制电路。当控制输入端PIN2(IN)输入一个周期为20ms,脉宽为1.0-2.0ms 的可变脉冲时,对应的桥式PWM 电路可输出一个正向-负向可逆的驱动电压。当输入脉宽为1.5ms 时为零点,此时桥式电路的晶体管输出一个2.5v 左右的对称电压,从而使负载上的平均电压为零。当输入脉冲宽度增大(减小)时,桥式电路的一侧(或另一侧)开始导通。导通时间与输入脉宽与零点(1.5ms)之差成正比。当脉宽为2.0ms 时负载上的电压接近为+Vcc。而脉宽为1.0ms 时,负载上电压接近-Vcc。当输入脉宽为零点值(1.5ms)时,如输出不为零点,可调整PIN11 脚的电位,使其恢复零点。利用这一特性,可用桥式电路驱动一个机械位置传感器(电位器),形成位置闭环,从而组成一个位置控制器。

根据说明,一个周期为20ms,其中占空比在1.0-2.0ms的PWM就可以驱动了,转向在0-180度,当1.5ms的占空比时舵机处于0点。

此舵机驱动需要的电流非常小,4mA左右,所以不需要外加驱动电路,单片机的IO口直接就可以驱动了。

死区是20us,但是看说明死区的设定应该是此芯片通过串电阻的方式进行设定了,所以程序里也不必考虑死区的问题了,依据如下:




明白了原理,再根据原理发出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进行查看:)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出10入113汤圆

发表于 2014-4-25 09:52:18 | 显示全部楼层
定时器中断里面的程序太长了

出0入0汤圆

 楼主| 发表于 2014-4-25 09:54:58 | 显示全部楼层
饭桶 发表于 2014-4-25 09:52
定时器中断里面的程序太长了

只是个简单的演示程序,勿怪:)

出0入0汤圆

发表于 2014-4-25 10:19:03 | 显示全部楼层
     多少钱来着

出0入0汤圆

 楼主| 发表于 2014-4-25 10:22:17 | 显示全部楼层

忘了,挺便宜的,二三十块钱吧。

出0入0汤圆

发表于 2014-4-25 10:39:42 | 显示全部楼层
MARK 。   玩航模  舵机 情有独钟

出0入0汤圆

发表于 2014-4-26 00:09:16 | 显示全部楼层
全塑料的,好像10几

出0入0汤圆

发表于 2014-4-26 08:25:25 | 显示全部楼层
这个我也看,感觉如果做机器手臂什么的,还是体积大。要是有更小的就好了

出0入0汤圆

发表于 2014-4-27 19:17:38 | 显示全部楼层
学习了 感谢楼主分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 04:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表