步进电机是一种将电脉冲信号转换成相应的角位移的特殊电机,每改变一次通电状态,步进电机的转子就转动一步。目前大多数步进电机控制器需要主控制器发送时钟信号,并且要至少一个I/O口来辅助控制和*步进电机的运行情况。在单片机或DSP的应用系统中,经常配合CPLD或者FPGA来实现特定的功能。本文介绍通过FPGA实现的步进电机控制器。该控制器可以作为单片机或DSP的一个直接数字控制的外设,只需向控制器的控制寄存器和分频寄存器写入数据,即可实现对步进电机的控制。
data[7~0]控制器与单片机等设备的总线接口;
cs片选信号,低电平有效;
wr写信号,低电平有效;
reset复位信号,低电平有效;
adr[1~0]内部寄存器地址信号,与单片机等设备地址线相连;
clk待分频的时钟,可由FPGA提供;
abcd[3~0]四相位输出。
控制器的内部原理框图如图2所示,由命令字寄存器(Cmd_reg)、分频系数备份寄存器(fdiv_back)、分频器、相位输出状态机组成。
其中命令字寄存器(Cmd_reg组成如下(对应的地址为“00”):
X未用位。
Ini对控制器初始化为1时有效。当该位为1时,备份寄存器的数据直接装入分频器的寄存器reg_data[15~0],装入后由硬件自动置0。
New当对正在运行的控制器写入新的分频系数时,对该位置1;当下一个分频器输出的clkout时钟来到时,将fdiv_back写入到reg_data[15~0]中,分频器便按新的分频系数进行分频。
Manner[1~0]电动机的驱动方式,用来控制相位输出状态机的输出,“00”表示单四拍方式,四相位输出为(A—B—C—D);“01”表示双四拍,四相位输出为(AB—BC—CD—DA),八拍(A—AB—B—BC—C—CD—D—DA)。
分频系数备份寄存器(fdiv_back)两字节寄存器,reg_data[15~0]为分频器的一个16位寄存器,接收fdiv_back的值,对系统的分频为2~65 536。对于12 MHz的输入频率,分频后频率为6 MHz~183 Hz,(本设计中,步进电机的启动转速、转距、加速度由使用者根据实际情况自己计算)分频后每个clkout走一个步距角。对于步距角为1.8°的电机,可以满足各种速度的要求。
3分频器的设计
分频器是该控制器实现的关键,在这里作为一个独立的模块,data[15~0]为分频系数。系统时钟Clk被分频系数寄存器中值分频后,输出Clkout作为相位输出状态机的时钟,每个Clkout到来时,产生一次相位转换,步进电机运行一个步距角。分频器的程序如下:
图3所示为3分频时单四拍的输出仿真图。
结语
本文的创新点为将该步进电机控制器的控制字和分频系数映射在主控制器(DSP或单片机等)的内存空间,控制时仅需对其进行写操作,使步进电机的控制变得简单方便;而且,可节省主控制器(DSP或单片机等)的外围资源,减少板上负载。系统中可以加入电机运行总步数控制寄存器及其电路、加速度寄存器及其控制电路等,打造一个更智能的步进电机控制器。