本设计实例基于摩托罗拉(现为飞思卡尔)广为使用但已淘汰的 SAA1042 步进电机驱动器 IC,用一片 CPLD(复杂可编程逻辑器件)实现了步进电机驱动器,它也可以代替基于 SAA1027 或 UCN5804B 设计中的驱动器。本设计只使用了 Xilinx XC9536 CPLD 中的6个宏单元,因此可以在一个小容量 CPLD 中实现多个步进电机驱动器。CPLD 步进电机驱动器需要时钟、方向、步长和复位输入。时钟输入接受逻辑电平脉冲,并在脉冲正沿上有效。

方向(或 CW 顺时针/CCW 逆时针)输入决定了电机的旋转方向。根据电机的电气连接,将该输入保持在 0V 一般会产生 CW 旋转,而逻辑 1 输入产生 CCW 旋转。步长(整步或半步)输入决定了电机对每个时钟脉冲的旋转角度。将此输入保持为低电平时,电机对每个施加的时钟脉冲执行一个整步,而高电平输入则是半步。复位输入的高电平使电机进入一个预定的状态,并使 CPLD 忽略任何输入的时钟脉冲。

CPLD 的输出包括 A 和 A_n,以及 B 和 B_n 相位,每一个输出都通过外部功率驱动器 IC2 和IC3(它们
工作在电机的标称电压下)控制着电机两个线圈之一(图 1)。每个驱动器的输出端都有一对肖特基二极管,用于在绕组电流反向造成的电感电压瞬变期间,保护驱动器输出。由于使用了具有内置二极管的 MOSFET 驱动器(如 Microchip 的 TC4424A 双驱动器),可以无需外接二极管。
CPLD程序包括一个8态 Moore 有限状态机,分别对应于电机的8个半步长状态。表 1 列出了驱动器对每种机器状态的输出。在整步状态模式,状态机只执行 Step 0、Step 2、Step 4 和 Step 6。在每个时钟脉冲的上升沿,如果 CW/CCW 为高,机器状态从 Step(n) 变化到 Step(n+1);或者如果 CW/CCW 为低,则机器状态从 Step(n) 变化为 Step(n-1)。可以下载步进电机驱动器固件的一般 VHDL 实现。尽管这个代码是为 XC9536 CPLD 编写的,但它也适用于任何 CPLD 或 FPGA 目标器件。
。