在CPLD/FPGA中加入步进电机运动控制器

文章作者:Stephan Roche

了解CPLD或FPGA如何成为步进电机运动控制器和驱动器的家。

这个设计思想进一步建立在之前将步进电机驱动器集成到CPLD(文献1)的基础上。但是,这个思想不仅集成了驱动器,而且集成了一个简单的单轴步进电机运动控制器。根据目标CPLD的大小,可以在单个设备中实现多个运动控制器。例如,在Xilinx XC95108中,一个单轴运动控制器使用68个或63%的可用宏单元格。运动控制器顺时针或逆时针旋转步进电机给定的步数与给定的速度剖面与时间。当运动开始时,控制器加速直到达到巡航速度,然后在停止前减速(图1)。

[EDNAOL 2016JUN01 AN 01Fig1] 图1:本设计可控制16速电机。在巡航阶段的最大速度是这样的电机每16个时钟周期使一步或半步。

控制器可以将电机速度调整为16值,v = v马克斯×speed/16,速率为整数,取值范围为1 ~ 16。在加速阶段,速度从1上升到16;在巡航阶段,速度保持在16;最后,在减速阶段,速度在停车前下降到1。如果没有足够的步骤使控制器达到巡航阶段,控制器直接从加速阶段进入减速阶段。你可以在程序中通过恒定的“accel”调整加速/减速率,它可以是1到255。加速度值越高,加速/减速速度越慢,加速度值越低,加速/减速速度越快。CPLD步进电机控制器的输入有时钟、方向、全/半步、复位、Nstep、启动、停止。
时钟输入在时钟脉冲的正边缘上有效。最大电机速度每16个时钟是一步。方向输入确定电机的旋转方向。电机顺时针或逆时针运行,具体取决于该输入和电机连接的电平。开始变高后,该值在第一个上升时钟边缘锁定。全/半步骤输入为每个时钟脉冲确定电动机的角度旋转。在低状态下,电动机为每个应用时钟脉冲进行全步,并且在高状态下,电动机进行半步。复位输入上的高电平在定义状态下设置电机。重置高时电机忽略任何时钟脉冲。16bit nstep值定义下一个运动的步骤数。 That value is latched at the first rising clock edge after start goes high. A high level on the start input starts the motion, and a high level on the stop input stops the motion, aborting the current motion.

[EDNAOL 2016JUN01 AN 01Fig2] 图2:FPGA/CPLD需要外部驱动。

CPLD步进电机驱动器输出为A、A_N、B、B_N (图2)。A和A_N输出通过电源驱动器控制电机的一个线圈,B和B_N输出通过电源驱动器控制电机的第二线圈。
CPLD/FPGA不能直接驱动电机,需要外部驱动。驱动器必须达到电机的标称电压。肖特基二极管位于每个驱动器的输出端,允许电流在电机线圈中自由流动。如果你使用MOSFET驱动器,外部肖特基二极管应该是不必要的,因为MOSFET有内置二极管;Microchip的TC4424A双驱动器可以驱动电机线圈到18V和3A。
参考
在CPLD中实现步进电机驱动器经济日报2007年2月15日,第90页。

这篇文章是由编辑挑选的重新出版的设计构思。它于2007年6月21日首次发表在EDN.com上。

留下你的评论