微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 在HCS08系列MCU上用软件实现仪表步进电机的驱动

在HCS08系列MCU上用软件实现仪表步进电机的驱动

时间:11-30 来源:互联网 点击:
步进电机由于具有角位移和输入脉冲数成正比并且没有累积误差的特点,而被广泛的用作汽车仪表的显示部件,其中具有代表性的是伟力驱动技术(深圳)有限公司的VID29系列步进电机。在多数情况下,人们会使用专用的驱动芯片来驱动步进电机,主控制器只需要给出方向控制信号和控制转动步数的脉冲就行了。另外,也有集成了步进电机驱动电路的MCU,如Freescale的MC9S12HY系列,其使用方法也比较简单。然而,在很多较低端的汽车仪表,如微型车、农用车、三轮货车和摩托车的仪表上,人们为了降低成本,希望能够不用专用驱动芯片或相对较贵的带驱动电路的MCU,而是用普通的MCU直接去驱动步进电机。本应用笔记介绍了在Freescale的HCS08系列MCU上,如何用软件来实现对VID29系列步进电机的直接驱动。本文所附带的程序,已经在Freescale的LG32 Cluster ReferenceDesign演示板上运行验证过。

VID29系列步进电机的工作原理

VID29系列步进电机是两相步进电机经三级齿轮减速传动输出的。该步进电机的工作原理可以用下面的简化的结构图(图1~4)进行说明。在象VID29系列这样的两相步进电机中,转子是一个永磁体,定子上安装了两组线圈。当给定子线圈通上电流的时候,就在转子周围的气隙中产生了一个磁场,转子就会在磁力的作用下转动到使它自身的磁场方向和线圈电流产生的气隙磁场方向平行的位置(下文中把它叫做平衡位置)。要让步进电机连续地旋转,可以按如下步骤进行:

1. 如图1所示,在线圈A中通上电流,转子就会转过90度到图2所示的位置;



2. 如图2所示,断开线圈A中的电流,给线圈B通上电流,转子又会继续旋转90度到图3
所示的位置;



3. 如图3所示,断开线圈B中的电流,给线圈A通上跟步骤1中方向相反的电流,转子继续旋转90度到图4所示的位置;



4. 如图4所示,断开线圈A中的电流,给线圈B通上跟步骤2中方向相反的电流,转子继续旋转90度回到图1所示的位置;



5. 重复步骤1~4,步进电机就会连续地旋转起来了。

如果将步骤1~4的顺序颠倒过来,那么步进电机就会以相反的方向旋转。另外,如果将A和B两个线圈同时通以大小相同的电流,那么产生的合成磁场的方向就和一个线圈单独通电时的磁场方向成45度夹角,这样转子就将旋转45度,而不是90度。

实际的步进电机由于转子的形状和定子线圈的安装方位跟上述的简化结构不同,所以工作时驱动电流的时序和转子每一步旋转的角度也不完全一样。对于VID29系列步进电机来说,它的驱动脉冲序列和转子相应的旋转角度如图5所示。



分步驱动和微步驱动

步进电机的驱动通常有分步方式和微步方式两种,图5中的脉冲序列是分步方式下的驱动信号。分步方式的优点是驱动信号的幅度只有0和电源电压(5V)两种,与数字信号的低电平和高电平完全一一对应,因此只要使用MCU的普通数字I/O口(GPIO)就可以产生驱动信号,驱动程序也比较简单。但是由于分步方式下,定子线圈产生的气隙磁场的方向在每走一步的过程中都发生一个较大的跳变——对于VID29系列步进电机而言是60度的跳变,定子磁场从原来的方向跳变到下一个平衡位置的方向,转子则在磁力的作用下加速向下一个平衡位置转动,当它到达平衡位置的那个瞬间,速度达到最大值,而磁场力则变为零(只考虑切向力,不考虑径向力,因为径向力与转动无关。下同);然后,如果驱动信号没有变化的话,转子就会在惯性的作用下继续往前转动偏离平衡位置,这时磁场力将会增大,而其方向却变成跟刚才相反,于是就使转子减速,当转子与平衡位置的偏离达到最大时,其速度减为零,然后在磁场力作用下往回加速转动;当转子转回平衡位置时,磁场力又变为零,而速度不为零,于是在惯性的作用下继续转动偏离平衡位置……如此反复,只要驱动信号还没有再次改变,转子就会象荡秋千一样在平衡位置附近来回振荡,并在摩擦力的作用下幅度逐渐减小。这种振荡还会产生一定的噪声,所以用分步方式驱动时,步进电机的噪声和抖动会比较大。

为了减小步进电机运行时的噪声和抖动,人们设法让定子线圈的磁场方向的跳变幅度变小,把一个分步一次的大跳变分成若干次较小的跳变来完成,于是就有了微步驱动方式,也叫细分驱动方式。

根据矢量合成的原理,当步进电机中的两个线圈各自产生的磁场的强度按照正/余弦规律变化的时候,它们的合成磁场的方向就会匀速旋转,而合成磁场的强度保持不变,如图6所示。线圈产生的磁场强度与通过它的电流大小成正比,因此微步驱动方式就是让通过线圈的驱动电流不是象分步方式那样在0和最大值之间跳变,而是按照正/余弦规律分成几个阶梯逐步变化,如图7所示。



那么如何来产生阶梯变化的驱动电流呢?通常的做法是将一个PWM波形电压信号施加到线圈上;同时串联一个阻值较小的电阻作为电流传感器,将电流信号转换成电压信号反馈回PWM控制器中;PWM控制器根据反馈信号调整输出脉冲的占空比,从而使线圈上的平均电流等于所需的阶梯电流。目前,常见的步进电机专用驱动芯片就是依据这个原理来工作的。在使用MCU直接驱动步进电机的时候,因为MCU内部也集成了PWM模块,所以我们也可以采用这个方法。但是,这种方法还需要使用ADC来测量反馈信号的大小,并且要实时地计算出所需的PWM脉冲的占空比,因此将会占用太多的MCU的资源,使MCU几乎无法再处理其他的事情。



为了减少对MCU资源的占用,我们可以将其中的反馈环节删掉,从闭环控制变为开环控制。对每个阶梯电流,我们事先计算出所需的PWM脉冲的占空比,并做成查找表存放在FLASH中。在驱动步进电机转动的时候,每走一个微步就从表中取出相应的占空比来对PWM模块进行设置,然后在当前的这一步结束之前不再改变PWM脉冲的占空比。这样一来就极大的减少了计算量,使MCU有足够的资源去处理其他的事情。然而,由于定子线圈具有一定的电感,所以通过线圈的平均电流和PWM脉冲的占空比并不是线性关系,要想精确的计算出每个阶梯电流对应的占空比是相当困难的;另外,当转子旋转的时候,还会在定子线圈中产生感生电动势,这个感生电动势会使通过线圈的电流发生改变,而它的大小又与转子永磁体的磁场强度和旋转速度相关。因此,事实上在开环控制中不管你使用多么复杂的数学公式来计算占空比,都无法使通过线圈的平均电流总是等于预期的阶梯电流。不过,所幸的是:在低端的汽车仪表中,并不要求对步进电机的转动控制到那么精确的程度,我们可以姑且认为通过线圈的平均电流是和PWM脉冲的占空比成正比的,反正只要减小了每一步跳变的角度(相对于分步方式而言),就可以让步进电机转动得更平稳一些了,噪声也能减小一些。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top