舵机的组成
一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等,如图4、图5所示
舵机的输入线共有三条,如图6所示,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会搞错。
舵机工作原理
控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止。其工作流程为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。
流,才可发挥舵机应有的性能。
舵机的控制信号周期为20MS的脉宽调制(PWM)信号,其中脉冲宽度从0.5-2.5MS,相对应的舵盘位置为0-180度,呈线性变化。也就是说,给他提供一定的脉宽,它的输出轴就会保持一定对应角度上,无论外界转矩怎么改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应位置上如图7所求。舵机内部有一个基准电路,产生周期为20MS,宽度1.5MS的基准信号,有一个比出较器,将外加信号与基准信号相比较,判断出方向和大小,从而生产电机的转动信号。由此可见,舵机是一种位置伺服驱动器,转动范围不能超过180度,适用于那些需要不断变化并可以保持的驱动器中,比如说机器人的关节、飞机的舵面等。
舵机选购
市场上的舵机有塑料齿、金属齿、小尺寸、标准尺寸、大尺寸,另外还有薄的标准尺寸舵机,及低重心的型号。小舵机一般称为微型舵机,扭力都比较小,市面上2.5g,3.7g,4.4g,7g,9g等舵机指的是舵机的重量分别是多少克,体积和扭力也是逐渐增大。微型舵机内部多数都是塑料齿,9g舵机有金属齿的型号,扭力也比塑料齿的要大些。futaba S3003,辉盛 MG995是标准舵机,体积差不多,但前者是塑料齿,后者金属齿,两者标称的扭力也差很多。春天sr403p,Dynamixel AX-12+是机器人专用舵机,不同的是前者是国产,后者是韩国产,两者都是金属齿标称扭力13kg以上,但前者只是改改样子的模拟舵机,后者则是RS485串口通信,具有位置反馈,而且还具有速度反馈与温度反馈功能的数字舵机,两者在性能和价格上相差很大。
除了体积,外形和扭力的不同选择,舵机的反应速度和虚位也要考虑,一般舵机的标称反应速度常见0.22 秒/60°,0.18 秒/60°,好些的舵机有0.12 秒/60°等的,数值小反应就快。
厂商所提供的舵机规格资料,都会包含外形尺寸(mm)、扭力(kg/cm)、速度(秒/60°)、测试电压(V)及重量(g)等基本资料。扭力的单位是 kg/cm,意思是在摆臂长度 1 公分处,能吊起几公斤重的物体。这就是力臂的观念,因此摆臂长度愈长,则扭力愈小。速度的单位是 sec/60°,意思是舵机转动 60°所需要的时间。 电压会直接影响舵机的性能,例如 Futaba S-9001 在 4.8V 时扭力为 3.9kg/cm、速度为 0.22 秒/60°,在 6.0V 时扭力为 5.2kg/cm、速度为 0.18 秒/60° 。若无特别注明,JR 的舵机都是以 4.8V 为测试电压,Futaba则是以 6.0V 作为测试电压。速度快、扭力大的舵机,除了价格贵,还会伴随著高耗电的特点。因此使用高级的舵机时,务必搭配高品质、高容量的电池,能提供稳定且充裕的。
现在市面上的舵机鱼龙混杂,总体来说仿品不如正品,便宜的不如贵的,塑料齿的不如金属齿的,老的不如新的,国内的不如外国的等等,大家不必过于追求极致,根据自身购买力选择够用的就行。
舵机使用中应注意的事项
1)、常用舵机的额定工作电压为6V,可以使用LM1117等芯片提供6V的电压,如果为了简化硬件上的设计直接使用5V的供电影响也不是很大,但最好和单片机进行分开供电,否则会造成单片机无法正常工作。
2)、一般来说可以将来信号线连接至单片机的任意引脚,对于51单片机需通过定时器模块出PWM才能进行控制。但是如果连接像飞思卡尔之类的芯片,由于飞思卡尔内部带有PWM模块,可以直接输出PWM信号,此时应将来信号连于专用的PWM输出引脚上。
辉盛S90舵机简介
由于辉盛S90良好的性价比,目前市面上的价格一般为10-15元,因而广泛应用机器人和智能小车制作设计中,图8和图9分别为S90的外观和参数。
电位器控制舵机的程序
单片机是12c5a60s2,晶振12mhz,具体情况不同(比如说电位器电压不同)最好修改一些数据
#include "stc.h"
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit k=P2^0;//信号控制口
uint a=0,v,c;
/************定义相应操作位***************/
#define ADC_POWER 0x80 //ADC电源控制位,0:关闭,1:打开
#define ADC_FLAG 0x10 //ADC结束标志位
#define ADC_START 0x08 //ADC启动控制位
#define ADC_SPEEDLL 0x00 //540 clocks___________选择转换速度
void InitTimer0()//定时器,每一次定成10us
{
EA=1;
TMOD=0x01;
ET0=1;
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
}
/*-------------------------------- ADC 取值 ------------------------------*/
uint GetADCResult(uchar ch)
{
int V;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //Must wait before inquiry
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG)); //Wait complete flag
ADC_CONTR &=~ADC_FLAG; //Close ADC
V=ADC_RES;
return V; //Return ADC result
}
void Delay(uint n) //ad所需的延时
{
uint x;
while (n--)
{
x = 500;
while (x--);
}
}
/*---------------------------- 初始化ADC特殊功能寄存器 -------------------*/
void InitADC()
{
P1ASF = P1 | 0x3f; //Set P1.0 - P1.5 as analog input port
ADC_RES = 0; //Clear previous result
ADC_RESL = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL ;
Delay(20); //ADC power-on delay and Start A/D conversion
}
void kongzhi()//舵机转角控制
{
c=(v+50);
if(a<=c)
k=1;
else
k=0;
}
/*-------------------------------- 主函数 --------------------------------*/
void main()
{
InitTimer0();
while(1)
{
InitADC();
GetADCResult(1);
v=GetADCResult(1);
c=0;//c必须清零一次
}
}
void Timer0() interrupt 1
{
TH0=(65536-10)/256;
TL0=(65536-10)%256;
a++;
kongzhi();
if(a==2000)
a=0;
}
评论