寻迹小车 FOLLOWME—— 之五:电机测速及转速控制 |
此篇涉及电机的测速和转速控制。寻迹小车 FollowMe—— 之五:电机测速及转速控制作者:Hanker 前面已完成了车的主体,控制部分中的电机驱动器设计,轨迹采样及逻辑控制部分硬件设计和开环控制功能,此篇涉及电机的测速和转速控制。 6.1.3.3 转速测量因为本项目的主要目的是学习单片机的应用,能够低成本的实现功能是主要目标,性能的要求相对弱一些,所以测速选择了简易码盘作为速度反馈信号,使用反射式采样,由于担心反射式采样的分辨率有限,所以只设计10个黑印,我所选择的反射采样器是Sharp的GP330,其特点是反射距离远,受自然光干涉少,作为轨迹采样十分适合,但作为码盘采样有些“粗”了。建议有意尝试者改用其它的小体积、近距离的反射采样器,这样分辨率会高一些,可以多印一些黑印,以提高转速测量的速度和精度。 最好使用透射式码盘,但是那样结构就相对复杂一些,但测量的分辨率可以大大提高。
设置2对时间计数器,分别记录对应跳变的上次时间和本次时间,即可计算出相应的周期。之所以在硬件上还要通过调整使输出尽量接近50%,是为了输出的速度数据尽量分布均匀,便于调速功能使用。 使用这种方式使一圈可以输出20个速度值,提高了一倍。 因为这种周期测速方式,速度值的输出间隔和转速相关,不像使用测脉冲频率的方式,可以基本保证一个等时间间隔,这对于PID方式的调速控制有些麻烦,因为数字化的PID控制算法多数是以等时间间隔为基础的,为此测速部分除了要返回转速值外,还要返回本次测速经历的时间(即周期),以便于PID控制部分作相应的修正。 为减少中断服务的时间,在中断中只记录时间,不做速度计算,建立标志后又主程序负责计算。 6.1.3.4 行走距离控制这是测速功能的一个副产品,利用对码盘的脉冲计数,可以方便的实现对行走距离的控制,按目前的码盘精度,可以控制到1.3 cm左右(轮子周长约 13 cm,一圈10个分割)。因为占空比不能保证,所以只能取一个边沿信号计数。 程序中设计为正跳沿处理脉冲计数。因为是控制行走距离,所以应当在结束时采用“刹车”控制,使轮子尽快停下。 这个功能还是有些作用的,比如预先知道轨迹的情况下,提前在转弯处减速,以保证寻迹的可靠。 6.1.3.5 电机PID调速控制PID控制算法源于模拟控制方式,其控制的结果和反馈是连续不断的,可以用一个数学模型来表示。而数字式的PID控制算法如果要接近模拟的效果,采样的间隔必须足够小,也就是要求有足够快的采样速度,否则会由于数据反馈的滞后带来较大的偏差,导致系统不稳定。 由于目前所用的简易码盘方式不可能有快速的采样,而且还会由于速度的变化使采样间隔发生变化,相当于在控制回路中增加了一个较大的滞后环节,所以系统的特性不会很好,只是能够借此学习一下PID控制的算法,体会一下PID控制的感觉。由于控制对象的不确定、不理想,倒是增加了学习的挑战性。 从这里分析可以看出,要想得到好的电机控制效果,良好的速度采样机构是必须的,所以在FIRA足球机器人中,所用的电机多为Fanhaimer的空心杯电机,且带有512线(直接连在电机输出轴上,一圈512个脉冲)的码盘,由于它的电机转速较高,其减速比也较大,综合后相当于我们这个的1000倍,这样的采样分辨率就可以采用定间隔频率采样方式了。 基于学习的目的,这里还是参照《电动机的单片机控制》书中所介绍的算法对PID控制做一个尝试,至少可以让转速作相应变化,不至于出现以下现象: 因为电机的负载太轻(尤其是经过减速的电机),即使供给最小的PWM值,电机还是以全速转动,但是负载加大一点,电机又不转了,失去了调速的功能。 书中介绍了两种数字PID算法,对于直流电机的控制,应当采用位置式PID控制。从便于实现的角度考虑,采用通过增量式控制算法递推得到,详见书中描述:
书中所提供的程序是汇编语言实现的,此处采用C语言实现,原理一样,只是可读性会好一些。 程序的基础是上面文中的 (4-7)式和(4-9)式,作为原始数据,保存最近三次的速度值和最近两次的时间间隔,通过计算可以得到: Ek、Ek-1、Ek-2 以及对应的变化量,取两次时间间隔的平均值作为T,此处也可以看出,必须要调整硬件参数,以尽量保证输出脉冲的占空比为50%,因为测量的时间间隔就是脉冲的高、低电平时间(见程序中的速度计算函数)。 而算式中的Kp、Td、Ti将作为待调整参数,可以通过参数设置命令设置。在调试时确定。 目前的程序先从PWM初值“10%”开始,调试时如果感觉效果不好,考虑通过测量PWM值和转速之间的关系,得到一个根据命令转速值确定一个对应PWM初值的关系式,在收到速度命令后设定一个PWM初值,尤其在启动以及转速变化较大时。 具体实现过程见程序。 至此,一个完整的电机控制程序已完成,期望可以实现“调功”和“调速”两种功能,但实际的效果有待调试后才能知道,下次将描述电机控制部分调试中遇到的问题及效果。 附件:1、电机驱动模块程序压缩包 参考资料:1、 STC12C54XX 数据手册 http://www.robotdiy.net/index.php?option=com_content&view=article&id=264:-followme-&catid=29:the-cms&Itemid=37 |