1)舵机的用途
伺服舵机一般也简称为舵机,是一种可以精确控制位置的电机系统,它可以通过控制指令输出指定的旋转角度。
与普通直流电机的区别主要在:直流电机是一圈圈转动的,舵机只能在一定角度内转动,到达指定的位置后就停止;舵机一般有最大旋转角度,不能360°旋转。普通直流电机一般是整圈转动适合做动力用,舵机是控制某物体转动一定角度用,适合用于控制转向、姿态、或者用作运动关节。
2)舵机的参数
扭力,由于舵机的动力来自于电机和减速齿轮组,它的输出扭力比较大,常见的玩具级别的9g舵机也能提供1.5kg/cm~1.8kg/cm的扭力,见下图:
舵机的另一个重要的参数是速度,就是上图中的Operating Speed参数,主要表征了舵机最快能转动的角速率,如上图中,在6V电压无负载的情况下,这款舵机0.1s时间能转过60°角。
3)舵机的工作原理
舵机的内部是由直流电机、减速齿轮组、传感器和控制电路组成,是一个闭环的控制系统,它的原理框图如下:
舵机的轴上连接有一个电位器作为位置检测传感器,舵轴转动时,电位器输出的电压会变化(也就是可以通过电压得知舵轴的角度)。外部输入控制信号时,控制电路会比较控制信号与舵轴位置是否有偏差,如果不同,则会控制马达驱动舵轴转到预定的位置,直到控制信号与舵轴位置相同。这个控制系统一般也是由PID实现的。
我们在使用舵机时,可以不用考虑它内部是如何工作的,只需要按规则给出合适的控制信号即可。
舵机对外的接口一般是三根线:
正极、负极用于供电;信号线用于接收控制信号,这个控制信号一般是PWM波,利用PWM波的占空比来控制舵机的输出角度。
具体控制规则是:PWM波的周期为20ms,脉冲高电平一般为0.5ms~2.5ms。0.5ms时舵机输出最大负角度,2.5ms时舵机输出最大正角度,中间的脉宽和角度线性对应,如下图所示:
了解了上述的驱动规则,就不难理解为什么很多成品的航模遥控装置,其接收机的各通道输出,既可以接到电调上,也可以接到舵机上,因为电调和舵机都可以通过PWM波控制的。
4)舵机驱动编程实践
现在我们就编写一个程序来实现舵机的驱动,还是使用stm32f103C8t6最小系统板作为硬件。
舵机的负极连GND,正极连5V,信号线连到单片机的PB1引脚上。
在cubemx中建立工程,如下设置,使用定时器3的ch4输出pwm:
PWM波的参数,配置为20ms周期,初值脉冲宽度为0.5ms,生成keil工程。
然后再keil工程中添加代码:
Tim.c文件中添加修改PWM脉宽的函数,调用这个函数可以方便地修改定时器3的ch4输出的pwm的脉宽:
、
Main.c文件中,主函数初始化时添加启动PWM输出的函数,并且在主循环中每隔1s钟修改一次PWM的宽度,以观察是否能驱动舵机运动:
编译上述代码下载到开发板运行,可以看到舵机每隔1s会运动到一个新位置,运动到最大角度后,下一次会回到初始位置。