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
定时器中断里面的程序太长了
只是个简单的演示程序,勿怪:) 多少钱来着 霸气侧漏 发表于 2014-4-25 10:19
多少钱来着
忘了,挺便宜的,二三十块钱吧。 MARK 。 玩航模舵机 情有独钟 全塑料的,好像10几 这个我也看,感觉如果做机器手臂什么的,还是体积大。要是有更小的就好了 学习了 感谢楼主分享
页:
[1]