一、舵机的原理
标准的舵机有3条导线,分别是:电源线、地线、控制线,如图2所示。

以日本FUTABA-S3003型舵机为例,图1是FUFABA-S3003型舵机的内部电路。
3003舵机的工作原理是:PWM信号由接收通道进入信号解调电路BA6688的12脚进行解调,获得一个直流偏置电压。该直流偏置电压与电位器的电压比较,获得电压差由BA6688的3脚输出。该输出送入电机驱动集成电路BAL6686,以驱动电机正反转。当电机转动时,通过级联减速齿轮带动电位器Rw1旋转,直到电压差为O,电机停止转动。
舵机的控制信号是PWM信号,利用占空比的变化,改变舵机的位置。
有个很有趣的技术话题可以稍微提一下,就是BA6688是有EMF控制的,主要用途是控制在高速时候电机最大转速。
原理是这样的:
收到1个脉冲以后,BA6688内部也产生1个以5K电位器实际电压为基准的脉冲,2个脉冲比较以后展宽,输出给驱动使用。当输出足够时候,马达就开始加速,马达就能产生EMF,这个和转速成正比的。
因为取的是中心电压,所以正常不能检测到的,但是运行以后就电平发生倾斜,就能检测出来。超过EMF判断电压时候就减小展宽,甚至关闭,让马达减速或者停车。这样的好处是可以避免过冲现象(就是到了定位点还继续走,然后回头,再靠近)
一些国产便宜舵机用的便宜的芯片,就没有EMF控制,马达、齿轮的机械惯性就容易发生过冲现象,产生抖舵
电源线和地线用于提供舵机内部的直流电机和控制线路所需的能源.电压通常介于4~6V,一般取5V。注意,给舵机供电电源应能提供足够的功率。控制线的输入是一个宽度可调的周期性方波脉冲信号,方波脉冲信号的周期为20 ms(即频率为50 Hz)。当方波的脉冲宽度改变时,舵机转轴的角度发生改变,角度变化与脉冲宽度的变化成正比。某型舵机的输出轴转角与输入信号的脉冲宽度之间的关系可用围3来表示。
二、数码舵机 VS 模拟舵机
数码舵机比传统的模拟舵机,在工作方式上有一些优点,但是这些优点也同时带来了一些缺点。
传统的舵机在空载的时候,没有动力被传到舵机马达。当有信号输入使舵机移动,或者舵机的摇臂受到外力的时候,舵机会作出反应,向舵机马达输出驱动电压。由第一节的电路分析我们知道——马达是否获得驱动电压,取决于BA6688的第3脚是否输出一个电压信号给BAL6686马达驱动IC。
数码舵机最大的差别是在于它处理接收机的输入信号的方式。相对与传统的50脉冲/秒的PWM信号解调方式,数码舵机使用信号预处理方式,将频率提高到300脉冲/秒。因为频率高的关系,意味着舵机动作会更精确,“无反应区”变小。
以下的三个图表各显示了两个周期的开/关脉冲。
图1是空载的情况;图2是脉冲宽度较窄,比较小的动力信号被输入马达;图3是更宽,持续时间更长的脉冲,更多的输入动力。
您可以想象,一个短促的脉冲,紧接着很长的停顿,这意味着舵机控制精度是不够高的,这也是为什么模拟舵机有“无反应区”的存在。比如说,舵机对于发射机的细小动作,反应迟钝或者根本就没有反应。
而数码舵机提升了脉冲密度,轻微的信号改变都会变的可以读取,这样无论是遥控杆的轻微变动,或者舵机摇臂在外力作用下的极轻微变动,都会能够检测出来,从而进行更细微的修正。
三、数码舵机的缺点:
以上我们已经知道数码舵机会更精确这个优点,那么我们来看数码舵机的缺点
1、数码舵机需要消耗更多的动力。其实这是很自然的。数码舵机以更高频率去修正马达,这一定会增加总体的动力消耗。
2、相对教短的寿命。其实这是很自然的。马达总在转来转去做修正,这一定会增加马达等转动部位的消耗。
四、拟人化比喻
技术性的东西说了这么多,也许很多对电路原理不熟悉的朋友还是不明白,呵呵,举个简单的例子来说明吧!
比如遥控器是老师,舵机控制电路是家长,舵机的马达是小孩
现在的任务是老师要求家长辅导孩子做一个动作,比如倒立
以数字舵机而言,家长自主地给这个动作设置了非常非常严格的标准,他要求孩子倒立时在鞋面上摆一个竖立的硬币,然后盯着硬币,硬币向左一震动他在右边给孩子一鞭子,硬币向右一震动他在左边给孩子一鞭子.........总之他要求的不再是老师要求的“倒立”,而是倒立以后顶一枚不倒的硬币..........
模拟舵机的家长部分则是柔和派,老师要求倒立是吧?他忠实地按老师的要求,让孩子倒立起来,孩子身体的轻微调整他不去关注了,他只关心是不是偏移了老师的标准,呵呵
五、实际应用选择
我们已经知道模拟舵机对于极轻微的外力干扰导致舵机盘移位的敏感度,和舵机执行命令的精确度,是不如数码舵机的了,那么我们是不是应该尽量使用数码舵机呢?我个人而言不是这么认为。
首先——舵机的素质,其实不单纯是电路决定的,还有舵机的齿轮精度,还有非常非常关键的舵机电位器的精度。一颗质量上乘的模拟舵机,往往比电路虽然是数码但是零件却是普通货色的数码舵机更准确,更不会抖舵。
其次,要知道我们在模型车上应用的时候,很多时候太高的精度并不是好事!比如你玩1/8的车,特别是大脚车和越野车,那么烂的路面导致车时而滑动适合腾空,动不动就是零点几秒、N公分的偏差,舵机的微秒级别敏感、微米级别精度对整个事件能起怎么改善那叫神经质的舵机反应...........
其实应用在1/8车辆上,一颗0.1秒反应的模拟舵机是更合适的搭配。它会更省电,更顺滑,不会那么神经质。而且最重要的——它不会在一台转向虚位有几毫米的1/8越野车上,去不停地吱吱叫着去找那0.1毫米的居中(其实你即使把舵机连杆给它拆掉,让舵机空转,它也往往找不到那0.1毫米的居中,只是自己不停地吱吱叫着折腾自己而已,哈哈)
实际的应用上,我建议是1/10的竞赛级别房车,暴力型的飞机,可以选用数码舵机。所谓神经质配神经质,呵呵。
其实我个人选择舵机,更看重的是品牌和玩家反响,而不是某些山寨工厂一力鼓吹的什么狗屁数码........
下面这篇文章,我大致看过,是符合科学原理的,想学习知识的可以看看。
注意吸收知识,要由根本上去分析,而不是以讹传讹!否则你必定就象很多人一样去坚守“数码舵机比模拟舵机快”这个完全错误的观点,呵呵,那会被真正掌握知识的人暗地里面耻笑的
单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。
发一个自己原来写的简单的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,jd;
sbit pwm=P1^0;
sbit jia=P3^2;
sbit jian=P3^3;
uchar code table[10] = {0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
//延时函数
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
}
//定时器初始化
void Time0_init()
{
TMOD=0x01; //定时器0工作方式1
IE=0x82;
TH0=0xfe;
TL0=0x33; //11.0592MHZ晶振,0.5ms
TR0=1;
}
//定时器0中断程序
void Time0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd) //判断0.5ms次数是否小于角度标识
pwm=1; //是,pwm输出高电平
else
pwm=0; //否,输出低电平
count=count+1;
count=count%40; //次数始终保持为40,即保持周期为20ms
}
//按键扫描

void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd++; //角度增加 1
count=0; //按键按下则20ms周期重新开始计时
if(jd==6)
jd=5; //已经是180度,保持
while(jia==0);
}
}
if(jian==0)
{
delay(10);
if(jian==0)
{
jd--;
count=0;
if(jd==0)
jd=1; //已经0度,保持
while(jian==0);
}
}
}
//数码管显示
void display()
{
uchar bai ,shi,ge ;
switch(jd)
{
case 1:
bai=0;
shi=0;
ge=0;
break;
case 2:
bai=0;
shi=4;
ge=5;
break;
case 3:
bai=0;
shi=9;
ge=0;
break;
case 4:
bai=1;
shi=3;
ge=5;
break;
case 5:
bai=1;
shi=8;
ge=0;
break;
}
P0=table[bai];
P2=1;
delay(5);
P0=table[shi];
P2=2;
delay(5);
P0=table[ge];
P2=3;
delay(5);
}
void main()
{
//jd=1;
count=0;
Time0_init();
while(1)
{

keyscan();
display();
}
}
电路图很简单的,几个按键,再在单片机最小系统上接出一个信号线,再给舵机供上电就可以了。


