前言
做过机器人、智能车或者玩航模的朋友应该对舵机不会陌生,这种舵机也是很常用的。
舵机只是我们通俗的叫法,它的本质是一个伺服电机,也可以叫做位置(角度)伺服驱动器。一般被应用在那些需要控制角度变化的系统中,可以方便的实现转动任意的角度,实现控制角度的变化。
sg90舵机的图示:
(1)航模
在很多的航模中,sg90舵机都被用于两翼的位置控制,从而实现航模的转向,倾斜之类的。因为航模本身的要求,需要尽量的控制航模的自重,而sg90舵机的重量本身就很轻,扭矩也大,所以能很好的满足要求。如下:
(2)智能小车的转向桥
因为sg90舵机的精准角度控制,所以在很多的智能小车类中被用作转向控制。如下的一个简易转向桥:
(3)云台控制
将sg90用于云台控制也是很常见,如下:
(1)sg90舵机的一些重要特性参数:
1)工作扭矩:16KG/CM
2)反应速度:0.12 - 0.13秒/60°
3)温度范围:-30° ~ +60°
4)死区设定:5微妙
5)转动角度:常见0°、90°、180°、360°
6)电压范围:3V - 5V
(2)sg90舵机的接线定义
sg90舵机的接线定义如下:
sg90舵机模块内是有控制电路的,控制信号通过信号线输入到内部的控制电路中,调制芯片将输入的信号进行调制,获得直流偏置电压。然后再由内部的基准电路产生周期为20ms,宽度为1.5ms的基准信号,将直流偏置电压和电位器电压进行比较,从而获得输出的电压差。由电压差控制舵机的转动,这个电压差的正负控制舵机正反转。大致原理就是这样!
至于如何驱动sg90电机也是比较简单的。
驱动原理:产生一个周期为20ms,高电平宽度为0.5ms-2.5ms的方波就能驱动sg90舵机。
换一种说法就是需要一个50Hz的pwm波,然后通过改变占空比来控制sg90舵机的转动角度。
下面以180°舵机为例说明,高电平宽度和sg90舵机的转动角度的关系表如下:
占空比如下:
方波示意如下:
或者看下面的演示图就更加形象:
(素材源自网络,侵删!)
按照理解的话,可以根据角度和高电平的时间推断一个公式:
PWM的高电平时间 = 0.5ms +(转动角度/180°)*2ms
注意:这是根据高电平宽度和角度推算的,不一定准确,使用中还是需要根据实际情况进行参数调整
据我所知道的,sg90舵机是分为两种的,一种是转角范围180°的舵机,另外一种是360°转角的舵机。这两种是存在一定的差别的。
(1)180°舵机
180°舵机是给一个PWM信号就转动到一定的角度,然后保持在这个转动之后的位置,直到有下一个不同的PWM信号,才会转到其他的角度。
转动的角度和PWM高电平的时间关系如下:
0.5ms ---- 0度;
1ms ---- 45度;
1.5ms ---- 90度;
2ms ---- 135度;
2.5ms ---- 180度;
(2)360°舵机
360°舵机是给一个PWM信号,就会按照一定的速度转动,这是和180°舵机不同的地方。但是按照我自己的测试中发现,其实360°舵机按照180°舵机的控制方式,每次只发一个周期的PWM的话,也是可以控制360°舵机按照一定的角度转动的。
转动的速度和PWM高电平的时间关系如下:
0.5ms --- 正向最大转速;
1.5ms --- 速度为0;
2.5ms --- 反向最大转速;
注意:其他的转速也是可以调的!
(1)用中断的方式
中断的方式的话,大致的步骤如下:(以转动45°为例)
1)使用一个定时器,并开启中断;
2)第一次:先设置定时器的中断时间为1ms,这段时间IO输出高电平;
3)第二次:1ms时间到了,在中断里面让IO输出低电平,并同时设置下一次中断时间为19ms。就可以产生一个周期20ms,高电平时间为1ms的PWM方波控制信号。
4)一直循环上面的 2)3)的操作
(2)用MCU的PWM输出功能
这个方法比用中断的方式就容易多了,毕竟中断过于频繁的话,对于控制程序也不好,特别是有操作系统的时候,可能会影响系统的实时性能。
MCU自动生成PWM的方式就很好了,这个过程不需要MCU的参与,极大的释放了MCU的压力。有很多的MCU本身甚至可以产生很多路的PWM输出,可以用于控制很多路的舵机。