《武汉工程大学学报》  2018年06期 701-706   出版日期:2018-12-28   ISSN:1674-2869   CN:42-1779/TQ
基于FPGA的步进电机细分控制系统的设计


步进电机是将电脉冲信号转变为角位移或线位移的数字式传动装置,在电子、机械等领域有很多的应用[1]。电机的转动是由输入的脉冲信号控制,在控制的过程中能具体的知道电机旋转的角度[2]。但是由于步进电机的步距角固定,在低频运转时容易产生振荡,不能保证平稳的运行,无法满足精确控制的要求,一般需要外接阻尼器或者加减速器才可以缓解振荡问题[3]。本文使用步进电机细分驱动的方式来减少电机振荡,细分驱动的脉冲信号在控制器中产生,不用外接设备,简化了控制过程。传统的步进电机控制方式是以单片机等微处理器为控制核心,对于简单的步进电机控制场景是没有问题的,但是在控制多个步进电机进行频繁细分操作时,会占用微处理器大量的运算时间和大量的IO口,这会对系统中其它模块的资源分配产生影响,从而影响其他功能的执行与实现。可编程门阵列(field programmable gate array,FPGA)因为内部程序是并行运行,对处理复杂功能有很强的能力且FPGA拥有大量的IO口,对于步进电机这样需要多个IO口同时控制的器件是非常适合的。可以很好的解决微处理器在上述方面的不足,而且与程序控制相比,硬件电路控制具备更好的稳定性和快速性。所以系统采用FPGA为控制核心实现步进电机细分控制。1 步进电机细分驱动原理当步进电机驱动器接收到一个脉冲信号,步进电机就会按固定的角度(称为“步距角”)转一步,电机的旋转是以固定的角度一步一步运转下去[4]。其中,步距角的定义为:[θ步距=360/(zr×m)] (1)式(1)中:[zr]为齿数,m为步进电机的工作节拍系数[5]。由于受自身特性影响,在一些精密控制的领域,步进电机的性能达不到实际要求,因此可以通过步进电机细分驱动提高电机驱动的分辨率来改善步进电机的运行状况。细分驱动可以控制步进电机中各相的电流以阶梯状逐渐增加或者减小,如图1所示,因为电磁力矩与电流相关,通过减小绕组电流突变,就能减小电磁力矩突变[6],使步进电机可以沿着这些中间状态以微步距转动。在每相电流的最大值与最小值之间插入多个电流值后,电机内部会产生连续变化的合成磁场矢量,而合成磁场矢量之间的夹角决定了步进电机细分后的微步距角的大小[7]。其中微步距角的公式为:[θ微步距 ]= [θ步距/e] (2)式(2)中:[θ微步距 ]为细分后的步距角,e为细分数。为了使细分后的微步距角保持一致,必须要保证电流合成矢量的幅值和旋转角度能保持不变,其关键在于合理的控制电机相电流的变化。使用电流矢量恒幅均匀旋转法,即给电机的n相绕组分别通入幅值相等且相位差为2π/n的正弦电流,可以使步进电机内部形成一个圆形磁场,各相绕组的电流合成矢量在细分的过程中做幅值相等的旋转运动[8],达到微步距角一致的目的。如图2所示,其中[Ia],[Ib],[Ic]分别为步进电机A相,B相励磁电流矢量和合成电流矢量。以四相步进电机为例,各相绕组的相位差为π/2,则步进电机均匀细分驱动时相电流的函数变换为:[Ia=cosθ×Is] (3)[Ib=sinθ×Is] (4)式(3)和(4)中:[Is]为绕组中额定电流,[θ]为转动电度角。通过以上分析可知,给四相步进电机的4个绕组接入电流值按正弦变化,幅值相等且相位差为π/2的电流,则能实现步进电机的细分驱动。所以本系统使用正弦脉冲宽度调制(sinusoidal pulse width modulation,SPWM)技术,SPWM是在脉冲宽度调制(pulse width modulation,PWM)的基础上改变调制脉冲方式,使脉冲宽度占空比按正弦规律排列 [9]。调制方式是把所期望得到的波形作为调制信号,把接收调制的信号作为载波[10]。通常采用等腰三角波作为载波,使用正弦波作为调制信号调制载波,所得到的就是SPWM脉冲信号。利用SPWM波幅值相等且脉冲宽度按正弦规律变化的特点[11],来控制电机绕组中电流值的按正弦规律变化,实现步进电机细分驱动。2 系统功能设计系统由FPGA、步进电机驱动模块和步进电机本体3个部分组成。在FPGA内部由锁相环、三角波计数器、只读存储器(read only memory,ROM)地址计数器、存储着正弦波形电流值的ROM存储器、比较器和信号分配器等模块构成步进电机细分控制的控制模块。系统整体框图如图3所示。2.1 锁相环设计根据采样定理,载波比即正弦调制波与调制输出的脉冲总数之比越大,输出脉冲信号的精度也越高[12]。FPGA开发板的基础时钟为50 MHz,使用锁相环的分频与倍频功能,可以改变ROM地址计数器和三角波计数器的工作时钟,使它们频率的比值产生变化,得到不同载波比的SPWM脉冲信号。例如FPGA的时钟经过2.5分频得到20 MHz的时钟作为ROM地址计数器的工作时钟,经过4倍频得到200 MHz的时钟作为三角波计数器的工作时钟。这样使三角波的时钟频率达到正弦波的10倍,这样在两组信号经过比较器后会得到载波比较高的SPWM脉冲信号。在实验过程中,利用锁相环改变这两个模块的工作时钟,使一个周期SPWM脉冲信号的脉冲个数改变,实现细分驱动的细分数改变。 2.2 ROM地址计数器和三角波计数器设计ROM地址计数器和三角波计数器都是在时钟脉冲的作用下实现计数。ROM地址计数器得到的是存储在ROM中正弦波电流值的地址,根据ROM地址计数器的值就可以读出相应地址下的电流值数据,ROM中存放的是代表一个正弦周期的512个电流值,每个数据的数据宽度为9。这些数据使用C语言编程得到,并把这些数据保存在MIF文件中。通常正弦波和三角波的最大幅值比在1~1.5之间,可以得到良好的SPWM脉冲信号,所以在实验中,控制三角波与正弦波的幅值比为1~1.5内的,即三角波计数器的周期在512~767内,且每个数据的数据宽度为10,这些数据使用Verilog编程得到。其中三角波和正弦波数据的起点和终点必须对齐,保证得到的SPWM波在每个周期内的脉冲信号是一致的,使输入到步进电机的脉冲信号能稳定。本文中使用的是单极性四相步进电机,即电机每相绕组只能单向通电,所以在数据比较中只取正弦波0~π的数据与三角波进行比较。2.3 比较器设计比较器用于实时计算比较值。两个端口分别接收正弦波和三角波的值,当正弦波的值大于三角波的值时,输出高电平,否则输出低电平[13]。输出端脉冲信号的占空比由输入端的数据决定。在ROM中,如果电流数据很大,则输出信号的占空比很大。相反,如果电流数据很小,则输出信号的占空比很小。4个比较器得到4组SPWM脉冲信号,用来控制电机各相绕组中电流值的按正弦变化。2.4 信号分配器设计信号分配器接收来自比较器的脉冲信号,通过时序设计,控制信号输出的通断,循环输出4组相位差为π/2的脉冲信号给步进电机驱动模块。其中信号分配器还可以控制输出脉冲信号的频率、数量、顺序,通过控制脉冲信号可以控制步进电机的各种状态[14]。2.5 步进电机驱动模块步进电机驱动模块使用的驱动芯片是L298N,该芯片输出电流大且工作电压高,内含两个H桥的大电流高电压全桥式驱动器,可以驱动四相步进电机[15]。2.6 系统工作流程整个系统开始运转时,ROM地址计数器得到的地址信号给ROM存储器,ROM存储器按照地址信号读出存在ROM中电流值的数据,输出给比较器的输入端,三角波计数器生成的三角波数据输入给比较器的另一个输入端,两组数据经过比较器比较,得到SPWM脉冲信号。总共4个比较器得到4组SPWM脉冲,将这4组脉冲信号送到信号分配器的输入端,经过信号分配器进行步进电机4个绕组的电流分配,经过分配的信号通过FPGA的通用输入输出端口(GPIO)输出给步进电机驱动模块进行功率的放大,最后把脉冲信号送到步进电机4个绕组,控制电机平稳转动,完成对电机的细分控制。使用Verilog硬件描述语言完成上述每一个功能模块,形成完整的系统。生成的RTL电路如图4所示,从图4中可以看出和设计的系统框图基本一致,满足电机细分驱动要求。3 实验仿真图5(a)、(b)、(c)中的三角波和正弦波分别是三角波计数器和ROM中存储数据的仿真波形,宽度按正弦规律变换的SPWM脉冲是比较器的输出波形,从仿真波形上可以看出当正弦波的值大于三角波的值时比较器输出高电平,否则输出低电平,与比较器功能一致。其中图5(a)中正弦波和三角波的最大幅值比为1∶1,图5(b)中的幅值比1∶1.5,由2个图看出一个周期的SPWM波的脉冲个数是相同的,但是图5(a)脉冲信号的占空比比图5(b)大,使得图5(a)在输出电压上高于图5(b),但是细分数是一致的。图5(b)和图5(c)的正弦波和三角波的最大幅值比都是1∶1.5,图5(c)改变了正弦波的工作频率,变为图5(b)的一半,使得载波比为图5(b)的2倍,即细分数图5(c)是图5(b)的2倍,从图5中可以直观的看到图5(c)的SPWM波的精度更高。通过以上分析可以知道正弦波和三角波的最大幅值比可以改变输出脉冲的电压,但是只有改变ROM地址计数器和三角波计数器的工作时钟,才可以实现对细分数的改变。图5(d)是使用图5(b)的脉冲信号经过信号分配器分配后,实现的步进电机10细分驱动的脉冲信号仿真波形,图5(e)是使用图5(c)的脉冲信号经过信号分配器分配后,实现的步进电机20细分驱动脉冲信号的仿真波形。由图5(d)和图5(e)可以看出,每一相的脉冲信号都是按正弦规律变化,每相邻两相的脉冲信号的相位差相差π/2,与电流矢量恒幅均匀旋转法的设计要求一致。由于步进电机绕组具有电感性,在电机接收到SPWM脉冲信号后,绕组上的电流值会按正弦规律变化,实现四相步进电机等步距角细分。通过对步进电机在0负载的情况下的各个转速区间进行振荡测试,得到图6(a)的步进电机振动特性图,其中实线代表使用传统八拍步进方式的振动特性,虚线代表10细分驱动的振动特性。从图6(a)中可以看出在200 r/min以上的较高频旋转时,两种驱动方式都能使步进电机较平稳的旋转,但是电机旋转频率在180 r/min以下后,以八拍方式驱动的电机振荡明显加大,在转速为40~100 r/min的低频区间,振荡幅度最大,达到0.6 mm,这个区间称为步进电机的共振区。而使用10细分驱动的电机在40~100 r/min这个低频旋转区间,依旧能保持振荡幅值在0.2 mm以下。说明了细分驱动能有效缓解步进电机在低频旋转时的振荡问题。图6(b)为整个步进电机细分控制系统的实物连接图,由FPGA开发板,步进电机驱动模块和四相步进电机组成。4 结 语系统采用Cyclone Ⅳ系列芯片EP4CE10F17C8,设计了步进电机正弦脉宽调制细分驱动电路,并使用L298N电机驱动模块对细分信号进行隔离和功率放大,以便稳定驱动步进电机。将FPGA开发板、步进电机驱动模块和四相步进电机连接组成一个完整的电机驱动系统,采用ModelSim软件对驱动电机的脉冲信号进行仿真,可以直观的看到步进电机每一相脉冲信号的实时变化,且实验结果表明该系统有效缓解电机低频运行时的振动,使电机运行更加平稳,具有一定的实用价值。