双极步进马达加速和减速过程应用
扫描二维码
随时随地手机看文章
引言
就 DC 马达而言,通过升高电压(如果使用脉宽调制,则增加占空比),可以控制马达传动轴达到某个指定速度的快慢。但是,如果是步进马达,则改变电压不会对马达速度产生任何影响。没错,改变电压大小可以改变绕组电流电荷的速率,从而改变步进马达的最大速度,但是,马达速度是由绕组电流开关或者整流的速率所决定。
我们可以做这样的假设吗:步进马达是一些不需要受控加速过程的机器?如果可以,那么我们就可以无所顾忌地让步进马达工作在任何目标速度下吗?事实是,相比其他马达拓扑结构,步进马达更加需要通过加速和减速过程来激励。以任意速度启动步进马达,可能会带来可怕的后果。
本文中,我们假设读者已熟悉如何利用市场上已有集成微步进驱动器,对步进马达进行控制。步进驱动器(例如:TI DRV8818等)的输出与方波(“步进输入”)频率成正比。每个“步进”脉冲均等于驱动器步进逻辑定义步进(即微步进)。因此,改变方波频率,也会相应改变步进马达的速率。
图 1 显示了某个马达制造厂商的传统步进速率/扭矩曲线图,其中起始频率fs为一个重要参数。我们必须知道,要想正常启动这种特殊的马达,必须使用一个小于 fs 的步进速率。使用大于 fs 的步进速率启动马达,可能会使马达停转,并失去同步性。一旦出现这种情况,马达转动控制将受到严重的影响。表面看起来,这是一个严重的问题,但实际却很容易解决。您需要做的只是让马达以某个低于fs的步进速率启动,然后提高速度,直到达到目标速度为止。遵循这一原则以后,步进马达便可以通过远超 fs 的步进速率来驱动—只要速度保持在所示扭矩/速度曲线以下。
图 1 双极恒流步进马达的扭矩/速度曲线
同样重要的是,不能简单地通过停止“步进”脉冲来让马达停止。相反,应把步进速率从目标速度降至某个能使马达停止下来且没有传动轴惯性的更低速率,因为传动轴惯性会引起多余、无用的步进。请记住,如果在定位应用中使用步进马达,则如果马达在应该停止时还继续转动,马达传动轴便会失去定位。由于闭环位置反馈很少用于驱动步进马达,因此确保仅执行指令性步进至关重要。
加速/减速过程
为了使步进马达从起始速度加速至某个期望目标速度,只需以周期性间隔改变当前速度。大多数工程师都使用微控制器来实现步进马达控制。最常见的实现方法是只使用两个定时器。第一个是每秒步进 (SPS) 定时器,用于产生一种精确的步进速率计时功能。另外一个是加速定时器,用于周期性地改变第一个定时器。由于速度受到周期性改变,在本质上得到与时间相关的角速度 (dv/dt)。这一过程被称作加速度,即速度随时间变化情况。图 2 显示了一个典型的基于微控制器的加速度分布图放大图,并描述了步进马达加速至目标速度的过程。
图 2 典型加速过程放大图
SPS 是我们希望获得的每秒步进数,即马达转动的步进速率。必须对 SPS 定时器编程,实现以该速率发出脉冲。根据定时器的振荡器频率,典型方程式为:
其中SPS_timer_register 为一个 16 位数字,它告诉定时器产生后续“步进”脉冲的所需时长,而 timer_oscillator 为一个常量,表示定时器的兆赫单位运行速度。
以函数形式将该方程式存储起来,因为经常会用到它。为了理解它的工作过程,我们假设定时器振荡器工作在 8 MHz 下,并且期望的马达步进速率为 200 SPS。根据该方程式,程序代码使 SPS_timer_register 值等于 40000。那么,定时器每计时到 40000,便产生一次“步进”脉冲。这会产生每秒 200 脉冲的定时器型输出以及 200SPS 的传动轴旋转。
这种事件每次发生时,都会产生一次中断,并且定时器被清空。“步进”输入上升沿计时对于微步进驱动器精确度至关重要,但只要其在下一个“步进”上升沿之前,下降沿几乎随时会出现。
定义加速度曲线需要两个参数:(1)SPS 值变化频率;(2)SPS 值变化程度。加速度曲线与这两个参数成正比;也就是说,SPS 值变化越频繁,其值也越大,而加速度曲线也会越大起大落。加速度定时器同时控制这两个参数:定时器函数起作用的次数与 SPS 值每秒的变化次数相同,另外,定时器的中断服务程序 (ISR) 通过一个预先确定的因数定期增加当前SPS,从而确定新的速度。
使用每秒每秒步进 (SPSPS),或者当前 SPS 速率改变的每秒次数,来测定加速速率。如果通过增加 1 来改变 SPS 值,则每次加速速率改变都必须调用(触发)加速度定时器的 ISR。例如,加速速率为 1000 SPSPS 时,马达速度以 200SPS 开始,并周期性增加 1,直至其达到 1200SPS。那么,加速度定时器的 ISR 需要调用 1000 次。
另外一种方法是,加速度定时器调用频率减半,然后 SPS 周期性增加 2。相比前一个例子,加速度定时器的 ISR 仅调用了 500 次,但马达仍然以 200SPS 启动,并在 1 秒内达到 1200SPS。两者的差别是更实时的可用性,但代价是分辨率下降。换句话说,为了达到 999 SPSPS 的精确加速速率,必须使用第一种方法。
必须在两种方法之间进行权衡,因为您的选择决定了可以达到什么样的马达工作质量。例如,如果要求有很多粒度以达到所有可能的加速度过程,则需要尽可能地调用加速度定时器的 ISR。
但是,在前面的 SPS 定时器方程式中,存在除运算。根据所使用处理器内核的不同,这种除运算可能会极大限制 ISR 被有效调用并正确产生新 SPS 速率的次数。在使用 TI MSP430™ 且 CPU 运行在 16 MHz下的实现中,一次除运算耗时约 500 µs。结果,ISR 每秒被调用的最大次数为 2000 次。这种限制决定了增量因数的大小。加速速率大于 2000 时,必须使用大于 1 的增量。
在马达启动前不久,便进行一次加速速率计算。负责该计算的软件,确定加速度定时器的时间间隔和增量因数大小,然后对各变量进行相应的配置。同时使用这些变量,直到对 SPS 速率的修改足以达到目标速度为止。一旦达到目标速度,加速终止。
减速过程与加速过程基本一致,但增量因数为负而非正的情况除外。另外,必须规定一个马达能够安全停止的新目标速度。
图 3 显示了一个加速/减速过程,其中,加速和减速速率对称。也可以使用非对称速率。
图 3 加速/减速过程
位置控制
到目前为止,在速度控制环路中操作马达看似十分简单。马达达到某个目标速度,然后在某个时刻收到停止指令。但是,当需要在某段预定时间内执行某个预定步进数时,结果会怎样呢?加速/减速过程变得比任何时候都要重要。在这种运行控制拓扑结构中,所有计划步进都执行完毕后马达便停止,这一点至关重要。规定步进数的变量被称作 number_of_steps。
必须对马达运动情况编码,以使马达在规定时间停止,不用等待减速命令。实现这个目标的一个方法是对一个名叫steps_to_stop的变量编程,使其小于number_of_steps。之后,软件通过监测steps_to_stop,确定需要开始减速的时机。
在达到目标速度以前,加速会一直执行。达到目标速度后,在达到steps_to_stop计数(开始减速之时)以前,仍允许步进马达运行。例如,1000步进运行时,steps_to_stop设置为800。因此,马达通过一个加速过程启动,持续运行至步进800,此时马达开始减速,直到停止运行。
根据所有系统变量的配置,我们需要研究下列5种情况(参见图 4):
情况1:在马达达到目标速度以前所有步进结束。
情况2:马达达到目标速度时所有步进结束。
情况3:达到停止速度以前所有步进结束。
情况4:达到停止速度时所有步进结束。
情况5:达到停止速度后所有步进结束。
图 4 5 种加速/减速情况
恰好在达到停止速度时马达停止(情况4)是一种理想情况。在达到停止速度前不久(情况3)或者以后(情况5)马达停止是可以接受的,具体取决于出现这些情况时距离理想情况还差多少个步进。例如,如果马达转动过快时所有步进结束,则马达传动轴可能会因转动惯量而失去位置。但是,如果在所有步进执行完以前达到停止速度,则执行该次马达运动控制所需的总时间会过长。
情况1和2仅为说明需要,应该不会出现,因为设计人员应始终确保steps_to_stop小于number_of_steps。了解所有可能出现的情况以后,设计人员可以简单地对系统进行微调,以获得最佳响应。
只需少许微调的另一种方法是,将步进总数分割成几个百分数,分配给每个加速/减速过程特定区域。在这种算法实现中,可选择步进总数的20%用以对马达加速,60%用以使马达恒速运行,其余20%用以对马达减速(参见图5)。如果number_of_steps为1000,则马达以预设加速度加速200个步进,然后无论它达到何种步进速率都停止加速。之后,以这种速率执行600个步进,并且最后200个步进执行完全部减速过程。
图 5 基于百分比的加速/减速过程
请注意,使用这种算法时,假设正确选择百分比的情况下,步进不可能在马达运动过程的错误部分耗尽。就图5所示例子而言,由于加速和减速部分都很平衡,因此马达最可能以相同速度开始和停止。这种方法的缺点是,很难保证达到目标速度。如果目标速度不那么重要,则可以使用这种算法来确保马达始终在安全速度下停止。
如果速度达到对应用来说过慢,使用这种算法加速马达传动轴的唯一方法是,提高加速速率,或者增加加速/减速区域中使用的步进数百分比。但是,设计人员必须小心操作,不要让马达运行速度违反马达扭矩/速度曲线。
结论
双极步进马达加速和减速,是所有步进马达应用设计的关键部分。尽管在过去十年里,功率级控制已得到极大简化,但是加速和减速过程应用程序仍未从应用处理器领域销声匿迹。由于各色步进马达解决方案的存在,能够正确处理应用步进马达运动控制的一些算法,更加容易编码和微调。通过正确地对马达加速和减速,设计人员可以确保应用高效运行,并达到各种规范要求。