本文将会系统阐述在做智能车过程中舵机学习的注意事项
当拿到一个舵机我们应该怎么做?事先应该去做什么准备验证工作?
舵机的概念
舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。能够利用简单的输入信号比较精确的转动给定角度的电机系统。 舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文servo。
舵机的结构
舵机的主体结构如下图所示,主要有几个部分:外壳、减速齿轮组、电机、电位器、控制电路。简单的工作原理是控制电路接收信号源的控制信号,并驱动电机转动;齿轮组将电机的速度成大倍数缩小,并将电机的输出扭矩放大响应倍数,然后输出;电位器和齿轮组的末级一起转动,测量舵机轴转动角度;电路板检测并根据电位器判断舵机转动角度,然后控制舵机转动到目标角度或保持在目标角度。
舵机的硬件准备
舵机的周期
这里我们就以全国大学生智能汽车竞赛中C车模的S3010舵机为例来进行下面的阐述。 首先我们来看一下S3010在周期为20ms时的占空比与角度的关系:
C车使用的是S3010舵机,我们选用的S3010舵机的频率是50HZ也就是20ms为一个周期,其实,舵机的频率选择一般都是50HZ~100HZ之间,但是要注意的是频率越高,舵机反应是变快了但是输出的力却变小了,所以要根据需要权衡一下速度与力。
舵机的机械调中
这里所讲的机械调中是粗略的调中,简单地说就是调到一个大致中值的范围,但不一定就是说这个环节就完成了,安装到车上就舵机中值调正了,还需要具体安装到车上后,进行软件微调,才最终确定舵机的中值。 下面来说机械调中的方法:拆开舵机紧扣的地方,然后给舵机1.5ms脉冲,会看到舵机打齿,然后静止,这就说明大致到了一个舵机中值的范围,重新扣上舵机即可。
如何给舵机1.5ms脉冲?
这里我们需要知道两个概念:一是FTM模块中的精度问题;二是由精度解算占空比的问题。
舵机FTM精度
舵机是通过程序中的FTM模块输出方波来使舵机打角的,顾名思义精度设置越大,相同舵机输出下的PWM也就被分的越多,也就是更加精确。舵机的精度要高点因为误差大的话打角就不准了,最终影响车速,所以要提前确定,后面再改很是麻烦,所以选定一个精度就无需更改。所以准确设置精度是开启舵机控制的前提,需结合自身所需合理设定。 这里所谈到的精度,都应该在FTM.h文件中能够找到,直接在.h文件中修改即可(本文讲解的程序库都是基于逐飞科技提供的k66库函数)
由精度解算占空比
前文已经说到,舵机安装之前是需要将舵机机械调中的,那舵机的占空比怎么算呢? 先了解下图所示:
可以用如上一个式子来计算,需要注意的是,占空比与占空比分子是不一样的,根据使用库的不同看传递的是占空比分子还是占空比(多传递的是占空比分子)例如舵机调中时可用舵机0度时的占空比,根据上图输入脉宽与转角的关系知道舵机0度时对应高电平时间为1.5ms,那么根据上面公式来计算就是:占空比分子=(1.5/20)10000(我们设置的周期为20ms也就是50HZ,精度是10000)最后算出为750,这就可以将750这个占空比分子作为舵机中值,然后代入到程序中,进行舵机大致的机械调中。
即将750带入到自己定义的中值里,如图即为 S3010_MID (这里使用的宏定义,便于硬件改变时,软件无需大改,只要在宏定义处修改接口或数值即可)
舵机的软件调中
精确调中
前面已经讲述了舵机的机械调中,使得舵机确定了大致的中值范围,然后我们需要将调好的舵机安装到车模上,如下图:
水平箭头在舵机在中值的时候,应该尽可能呈现水平或者略微倒V形,并且完美对称。 然后我们在通过软件进行舵机中值的细调,最终确定中值的参考依据是,调好后的中值,然后把车模放到赛道上,推车,观察是否沿直线行进,如若偏移,再进行细调。
舵机电压的调节
S3010舵机一般电压是4.8V~6V之间调节,但是还是允许在7V之下的,但是不能在电池刚充满的情况下调到那么高,以免烧掉,当然,电压提高了,舵机力度也会提升。我们舵机选用的电压是6V,反应以及力度都是比较不错的。
总结
经过本文以上讲述,舵机的中值就可以充分确定了,本文对于舵机的控制,舵机的机械结构不再详细具体讲述,舵机的控制我会放到PID控制策略里一起讲解,尽量用通俗易懂的语言给初学者带来一点指引与启发。 以上纯属个人理解,如有错误,请批评指正! 编译环境基于:IAR 程序库函数基于:逐飞科技k66库 硬件舵机:C车模 S3010 图片调用使用作者为:博客园 Blue Mountain博主