ypengfei 发表于 2014-4-25 09:47:12

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

今日在淘宝买了一个舵机,以便我小车的超声波探头能进行转动,判断左右障碍物的距离,进而判断往哪边行走用。购买的舵机图片如下,非常常见,网上搜索了一下信息,使用也很简单,在这简单说一下。

具体参数如下:

名 称: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波形,就可以驱动了,挺简单的,我的小车超声波探头已经能转动了。:)
下边是我的测试程序:
#include <reg52.h>

int time_count =0;//时间标志
sbit pwmout =P2^1;//pwm输出IO
intpwm_count = 0;
intpwmout_count = 0;
int direction = 0;

void ss() interrupt 1 //0.1ms定时器
{
    TH0 = 0xff;
    TL0 = 0xa4;
    time_count ++;
    if (time_count == 200) //20毫秒,调整pwm_count   
    {   
      if (direction ==0)//方向(增加)   
      {   
            pwm_count ++;   
            if (pwm_count >= 30 )//到达周期,调整增长方向,datasheet里说是20MS,但是我实际用30MS才能转到最大,奇怪,希望有知道的告知一声。   
            {   
                direction = 1;   
            }   
      }
      
      if (direction == 1)//方向(减小)   
      {   
            pwm_count --;   
            if (pwm_count <= 5)   
            { direction = 0; }   
      }   
      time_count = 0;   
      pwmout_count = pwm_count;   
    }   
      
    if (pwmout_count > 5)      
    {   
      pwmout = 1;   
      pwmout_count --;//0.1ms执行一次,一直到占空比结束      
    }   
    else      
    {   
    pwmout = 0; //占空比结束本周期内其他时间低电平
    }
}

void main()

{
    pwmout = 0;      
    pwm_count = 5; //起始0.5ms-2.5ms            
    TMOD = 0x01;
    TH0 = 0xff;
    TL0 = 0xa4;
    ET0 = 1;//允许T0中断
    EA = 1;      //开启总中断
    TR0 = 1;
    while(1);
}

小广告:更多访问www.yanpengfei.cn进行查看:)

饭桶 发表于 2014-4-25 09:52:18

定时器中断里面的程序太长了

ypengfei 发表于 2014-4-25 09:54:58

饭桶 发表于 2014-4-25 09:52
定时器中断里面的程序太长了

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

霸气侧漏 发表于 2014-4-25 10:19:03

   多少钱来着

ypengfei 发表于 2014-4-25 10:22:17

霸气侧漏 发表于 2014-4-25 10:19
多少钱来着

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

lyg407 发表于 2014-4-25 10:39:42

MARK 。   玩航模舵机 情有独钟

devcang 发表于 2014-4-26 00:09:16

全塑料的,好像10几

bingtuohun 发表于 2014-4-26 08:25:25

这个我也看,感觉如果做机器手臂什么的,还是体积大。要是有更小的就好了

magsino 发表于 2014-4-27 19:17:38

学习了 感谢楼主分享
页: [1]
查看完整版本: 51单片机控制常见9克舵机的资料,自己写的。