汽车仪表步进电机控制算法的仿真
扫描二维码
随时随地手机看文章
在经历了机械式、电气式、模拟电子式仪表时代后,汽车仪表进入了如今的步进电机全数字式仪表时代。目前,国内部分中、高档轿车,均配套使用步进电机汽车仪表。其它汽车也正在配套该类型的仪表。步进电机汽车仪表,将是未来一段时间内汽车仪表的主导产品,有着十分广阔的市场前景。
今后,汽车仪表的功能将更加侧重由软件来完成。这对于产品数量大并且对成本极为敏感的汽车仪表有着特殊意义。与仅由电子硬件组成的汽车仪表相比,带有ECU的汽车仪表功能的实现手段更加灵活多样,产品的“柔性”更好,即在推出新款产品时,能最大限度地利用以前产品的软、硬件设计成果,这在产品更新换代很快的今天和未来显得尤为重要。
目前,很多半导体芯片制造商都生产汽车仪表板的微控制器,比如NEC、freescale、Fujitsu和Micronas等公司。在此介绍一种基于Micronas CDC3207G微控制器的汽车仪表板步进电机控制的解决方案。
步进电机控制
步进电机又称脉冲电动机,它能将输入的脉冲信号变成电动机轴的步进转动,是一种将电脉冲转化为角位移的执行机构。在非超载的情况下,电机的转速以及停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。
控制步进电机实际上是控制输入脉冲序列,使步进电机轴按照预定方向转动需要的角度。汽车仪表中应用的主要是两相步进电机,有两个独立绕组。通过控制两个独立绕组上的脉冲信号,就能实现对步进电机的控制。此外,一般步进电机内部在电机转轴与指针之间都装有降速齿轮组,使得转动轴与指针之间有一定的降速比,这样可以降低指针转动的抖动,使电机指针转动更加平滑。
本控制算法采用Microcomponents公司的SWITEC步进电机,其电机转动轴与指针之间的转速比为180:1,即步进电机转动轴旋转180°,步进电机的指针旋转1°。
步进电机控制算法
控制算法基本功能
控制算法主要功能是控制步进电机以完成仪表的显示,主要是根据实时数据计算得到显示仪表的位置信息,再根据位置信息计算出步进电机控制指令。对于内部集成了步进电机控制模块的微控制器,控制算法最终输出控制寄存器的数值,微控制器根据寄存器的数值产生驱动信号,实现对步进电机的控制。
CDC3207G微控制器
CDC3207G微控制器是Micronas(微开)公司的一款基于ARM7TDMI内核的32位[0]微控制器,它集成了7个步进电机模块,再加上PWM软件模拟最多可以直接驱动8路步进电机。每个步进电机模块通过4个控制器内部连接了H桥的高电流输出端口,直接驱动两相步进电机。通过软件便可以产生步进电机定位需要的各种脉冲。
CDC3207G的步进电机模块可以提供多通道的PWM输出,输出信号频率通过硬件设置来选择,并且各个步进电机模块输出信号的时序具有偏移,可以提高电磁兼容性能(EMC)。
根据控制两相步进电机的需要,CDC3207G内部提供了3个8位的寄存器,用于通过软件来产生控制脉冲。其中两个寄存器通过模块中的比较器与模块计时器进行比较,用于产生驱动电机的PWM信号,另外一个寄存器用来选择相应步进电机模块以及选择四个输出引脚的极性。这样,通过软件对三个寄存器的操作就能方便地对每一路步进电机进行控制。
此外,CDC3207G还具有零位检测功能,即检测电机运转时的感应电流,得到电机运行的位置信息,据此判断电机是否达到初始位置(即汽车仪表的零位)。
控制算法的实现
软件的主要任务是根据不断更新的步进电机位置信息,计算控制寄存器的数值。同时,为了满足仪表指示的实时性要求,本方案采用周期性调用步进电机控制函数的办法,根据实际需要选择周期。本方案中,调用步进电机控制函数的周期为2ms。
除了需要满足实时性以外,步进电机控制函数还需要控制步进电机平滑地运转,这样,指针的显示才不会在视觉上给人以不适的感觉。为此,控制函数需要限制步进电机的速度以及加速度。由于周期性更新步进电机位置信息,所以控制函数是通过比较当前位置与给定位置来计算每周期的步进量,最终完成给定位置的显示。控制函数流程图如图1所示。
图1 步进电机控制函数流程图
本方案的SWITEC步进电机的指针显示范围为330°,指针每转动一度,步进电机转动轴需要转动180°,在软件中分为256步来实现。所以,按照步进数计算的步进电机量程为330×256=84480步。
为保证指针显示上平滑,流畅,需要限制每一周期的最大步进数以及相邻两个周期步进数量差,以常量MAX_SPEED以及MAX_ACC分别对电机运行速度和加速度进行限制。
由于需要周期性更新步进电机的位置,且每一周期时间很短,步进数量有限,所以,对于一个新的仪表位置,步进电机要完成显示往往需要多个周期来实现。
部分变量的简单说明见表1。
表1 变量说明
变量名称
pos_set
pos_act
pos_new
delay_time
speed
speed_old
含义
目标地址
当前位置
本周期结束位置
响应时间
本周期步进数
上周期步进数
由于程序中的位置信息都是按照步进数来表示的,因此,可以预先定义一个常数数组,保存步进数对应的控制寄存器的数值。这样,根据需要步进数查表便可以得到所需要的寄存器的数值。
控制算法分析
为了进一步分析本算法的性能,用LabVIEW编程软件进行算法仿真,这样就可以很方便地在不连接步进电机的情况下对算法进行分析。在LabVIEW7.1中可以采用图2的框图对本算法进行分析。
图2 LabVIEW的算法框图
在LabVIEW中,用一个while结构来周期地对算法的目标地址进行处理,每次循环都得到pos_new的数值,即每周期结束后步进电机的显示数值,然后将该数值输出到LabVIEW的前面板上。前面板如图3所示。
图3 LabVIEW的算法前面板
通过前面板中Start按钮可以控制循环的开始与结束,手动改变pos_set的数值来模拟实际仪表中的数据变化。本例中该值的变化范围为0至100,并且每次试验都使该值由0突变为100。再用Gauge(量具)来仿真步进电机的显示,可以很方便地观察到不同参数改变后显示的视觉效果。此外,还可以通过LabVIEW提供的绘图功能得到控制算法中一些重要变量随时间变化的图像,更加直观地进行性能分析。
图4 pos_new随时间的变化
图4为步进电机目标值pos_set由0突变为100的过程中,步进电机实际输出值pos_new随时间的变化曲线图。由于设定的while循环周期为1ms,所以,时间轴显示每周期步进电机输出,纵坐标POS即为步进电机的显示结果。
观察0至128ms区间的曲线,可以看出此阶段曲线的斜率是逐渐增加的,表明步进电机在加速运行,因为初始阶段步进电机目标位置与实际位置之间的差值很大,计算得到的speed_delta数值超过了MAX_ACC这一常数的限制。128ms至475ms区间的曲线为直线,说明在此区间步进电机已达到最大速度MAX_SPEED,并以该速度匀速运行。
余下区间的曲线,斜率是逐渐减小的,这时步进电机在减速运行,因为这时目标位置与实际位置的差值已经很小,计算得到的speed_delta数值已经处于由MAX_ACC限制的范围内。变量speed随时间的变化曲线更能清楚地分辨出这三个过程。如图5所示。
图5 speed随时间的变化
将常数MAX_ACC(即相邻周期步进数量的变化)由1改为10,仿真得到结果如图6所示。从中可以看出,增大MAX_ACC后,曲线中起始阶段变陡了,即步进电机起步阶段的加速变快了,而步进电机由初始值0到100的完成时间受到的影响不是很大。
图6 改变MAX_ACC后pos_new随时间的变化
由流程图中不难看出,常数MAX_ACC只是限制了相邻两个周期步进数的变化,而每周期步进数的限制是由MAX_SPEED来设定的。将该数值由原来的128改变为256再作同上的试验可以发现,曲线中200ms至400ms之间变得更陡,步进电机由0到100的完成时间缩短的比较明显。这说明通过改变每周期步进数量的限制可以比较显著地改变步进电机的完成时间。
当然,最后的显示结果与仿真得到的结果,由于步进电机自身性能的原因会有偏差,并且实际步进电机还会有诸如噪音等一些用LabVIEW无法仿真出来的问题。因此,用LabVIEW进行的算法仿真只能作为参考,最后参数的确定还需要通过在实际步进电机上进行试验后才能完成。
结语
对于本控制方案,设计开发人员可以根据实际的硬件(如步进电机型号)以及仪表产品的需要,在程序中修改相应变量的上下限等常量数值,就能改变步进电机指示的量程、指示的平滑性、响应速度等一序列指标。修改调试起来十分方便。
虽然本方案是针对CDC3207G微控制器而设计的,但是软件设计中的控制算法思想,对于汽车仪表步进电机的控制具有普遍的适用性。