步进电机细分驱动控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

13.1 步进电机细分驱动控制
步进电机作为一种电脉冲——角位移的转换元件,由于具有价格低廉、易于控制、无积累误差和计算机接口方面等优点,在机械、仪表、工业控制等领域中获得了广泛的应用。

步进电机细分驱动技术是70年代中期发展起来的一种可以显著改善步进电机综合使用性能的驱动控制技术。

1975年美国学者T.R.F redr ik sen 首次在美国增量运动控制系统及器件年会上提出了步进电机步距角细分的控制方法。

在其后的二十多年里,步进电机细分驱动技术得到了很大的发展,并在实践中得到广泛的应用。

实践证明,步进电机细分驱动技术可以减小步进电机的步距角,提高电机运行的平稳性,增加控制的灵活性等。

采用FPGA 控制步进电机,利用其中的EAB 可以构成存放电机各相电流所需的控制波形数据表和利用FPGA 设计的数字比较器可以同步产生多路PWM 电流波形,对多相步进电机进行灵活的控制。

当改变控制波形表的数据、增加计数器的位数,提高计数精度,从而可以对步进电机的步进转角进行任意细分,实现步进转角的精确控制。

用FPGA 实现多路PWM 控制,无须外接D/A 转换器,使外围控制电路大大简化,控制方式简洁,控制精度高、控制效果好。

用单片机和DSP 的控制都难以达到同样的控制效果。

 
1、步进电机细分驱动原理
步进电机的驱动是靠给步进电机的各相励磁绕组轮流通以电流,实现步进电机内部磁场合成方向的变化来使步进电机转动的。

设矢量T A ,T B ,T C ,T D 为步进电机A ,B ,C ,D 四相励磁绕组分别通电时产生的磁场矢量;T AB ,T BC ,T C D ,T DA 为步进电机中AB ,BC ,CD ,DA 两相同时通电产生的合成磁场矢量。

当给步进电机的A ,B ,C ,D 四相轮流通电时,步进电机的内部磁场从TA →TB →TC →TD ,即磁场产生了旋转。

一般,当步进电机的内部磁场变化一周(360°)时,电机的转子转过一个齿距,因此,步进电机的步距角B ?可表示为:r
M B N ??? 。

式中,Nr 为步进电机的转子齿数;M ?为步进电机运行时两相邻稳定磁场之间的夹角。

M ?与电机的相数(M)和电机的运行拍数有关。

当电机以单四拍方式运行时,M ?=90°;当电机以四相八拍方式运行时,M ?=45°。

和单四拍方式相比,M ?和B ?都减小了一倍,实现了步距角的二细分。

但是在通常的步进电机驱动线
路中,由于通过各相绕组的电流是个开关量,即绕组中的电流只有零和某一额定值两种状态,相应的各相绕组产生的磁场也是一个开关量,只能通过各相的通电组合来减小M ?和B ?。

因此,这样可达到的细分数
很有限。

以四相反应式步进电机为例,最多只能实现二细分,对于相数较多的步进电机可达到的细分数稍大一些,但也很有限。

因此要使可达到的细分数较大,就必须能控制步进电机各相励磁绕组中的电流,使其按阶梯上升或下降,即在零到最大相电流之间能有多个稳定的中间电流状态,相应的磁场矢量幅值也就存在多个中间状态,这样,相邻两相或多相的合成磁场的方向也将有多个稳定的中间状态。

四相步进电机八细分时的各相电流是以1/4 的步距上升或下降的,在两相T A ,T B 中间又插入了七个稳定的中间状态,原来一步所转过的角度M ?将由八步完成,实现了步距角的八细分。

由此可见,步进电机细分驱动的关键在于细分步进电机各相励磁绕组中的电流。

本节示例采用四相步进电机八细分方案。

2、步进电机细分驱动电路
为了对步进电机的相电流进行控制,从而达到细分步进电机步距角的目的,人们曾设计了多种步进电机的细分驱动电路。

最初对电机相电流的控制是由硬件来实现的,每一相绕组的相电流用n 个晶体管构成n 个并联回路来控制,靠晶体管导通数的组合来控制相电流。

这种细分驱动电路线路复杂,体积大,成本高,而且电路一旦制造出来就难以改变其细分数,缺乏柔性,因此在目前的实用中已很少采用这种方法。

实践表明,如果使用FPGA 进行数字控制,将为步进电机的细分驱动带来很大的便利。

目前,最常用的开
关型步进电机细分驱动电路有斩波式和脉宽调制(PWM)式两种。

脉宽调制式细分驱动电路的关键是脉宽调制,它的作用是将给定的电压信号调制成接近连续的信号,角速度的波动也随着细分数的增大而减小。

一般角速度波动与步距角成正比,与细分数成反比。

调制成具连续运行域,角速度的波动也随着细分数的增大而减小,一般角速度波动与步距角成正比,也即与细分数成反比。

3、步距细分的系统构成 
图13-1为四相步进电机的8细分电流波形,从图中可以看出,一般情况下总有二相绕组同时通电。

一相电流逐渐增大,另一相逐渐减小。

对应于一个步距角,电流可以变化N个台阶,也就是电机位置可以细分为N个小角度,这就是电机的一个步距角被N细分的工作原理。

或者说,步距角的细分就是电机绕组电流的细分,从而可驱动步进电机平滑运行。

图13-2为步进电机细分驱动系统结构图。

图13-1 四相步进电机8细分电流波形图13-2 步进电机细分驱动电路结构图
该系统是由PWM计数器、波形ROM地址计数器、PWM波形ROM存储器、比较器、功放电路等组成。

其中,PWM计数器在脉宽时钟作用下递增计数,产生阶梯形上升的周期性的锯齿波,同时加载到各数字比较器的一端;PWM波形ROM输出的数据A[3..0]、B[3..0]、C[3..0]、D[3..0]分别加载到各数字比较器的另一端。

当PWM计数器的计数值小于波形ROM输出数值时,比较器输出低电平;当PWM计数器的计数值大于波形ROM输出数值时,比较器输出高电平。

由此可输出周期性的PWM波形。

根据图13-1步进电机8细分电流波形的要求,将各个时刻细分电流波形所对应的数值存放于波形ROM中,波形ROM 的地址由地址计数器产生。

通过对地址计数器进行控制,可以改变步进电机的旋转方向、转动速度、工作/停止状态。

FPGA产生的PWM信号控制各功率管驱动电路的导通和关断,其中PWM信号随ROM数据而变化,改变输出信号的占空比,达到限流及细分控制,最终使电机绕组呈现阶梯形变化,从而实现步距细分的目的。

输出细分电流信号采用FPGA中LPM_ROM查表法,它是通过在不同地址单元内写入不同的PWM数据,用地址选择来实现不同通电方式下的可变步距细分。

示例电路原理图图13-3是根据图13-2设计的。

图13-3 步进电机PWM细分控制控制电路图
S选择是否输出细分控制信号,图13-4、图13-5都是图13-3中的模块图。

图13-4图13-3中的cmp3模块图13-5 PWM波形ROM存储器
4、细分电流信号的实现 
从LPM_ROM输出的数据加在比较器的A端,PWM计数器的计数值加在比较器的B端,当计数值小于ROM数据时,比较器输出低电平;当计数值大于ROM数据时,比较器则输出高电平。

如果改变ROM 中的数据,就可以改变一个计数周期中高低电平的比例。

图13-3中的PWM计数器(CNT8)将整个PWM周期4等份。

5、细分驱动性能的改善
试验测定显示,在线性电流的驱动下,步进电机转子的微步进是不均匀的,呈现出明显的周期性波动。

磁场的边界条件按齿槽情况呈周期性重复是导致微步距角周期性变化的根本原因。

同时,不可避免的摩擦负载(摩擦力矩是不恒定的,或者说在一定范围内也是不确定的)以及其它负载力矩的波动导致失调角出现不规则的小变动或小跳跃,也使微步距角曲线在周期性波动上出现不光滑的小锯齿形。

步进电机的电流矩角特性并非线性函数,而是近似于正弦函数。

若使电流按线性规律上升或下降,必然会造成每一细分步的步距角不均匀,从而影响步距精度。

为此在设计中,需要提高LPM_ROM数据精度,将数据提高到十六位,使输出的步进细分电流近似为正弦电流,这样不仅提高了步距精度,而且可以改善低频震荡。

6、细工作时序分析 
图13-6(a、b)是四相步进电机仿真波形图,给出了步进电机从A→AB→B→BC→…工作过程的仿真波形。

图中展示了FPGA控制步进电机的情况。

LPM_ROM输出的16位数据p[15..0]为八进制数据,作为步进电机各相电流的参考值,每4位二进制数值控制一相,分别用于控制步进电机A、B、C、D四相的工作电流。

对于每一相来说,当输出数据为0时,该相电流为0;输出数据为1时,脉宽高电平占一个PWM周期的1/4;当输出数据为2时,脉宽高电平占一个PWM周期的2/4;当输出数据为4时,整个PWM周期均输出高电平。

图中,Y3、Y2、Y1、Y0分别表示A、B、C、D相电流,u_d为方向控制,clk产生线性递增的锯齿波,clk5为步进脉冲,P[15..0]为LPM_ROM输出数据。

从仿真波形可以看出,首先,步进电机A相导通,B、C、D相截止,p[15..0]输出数据为F000Q,A 相的数据为F,其他相的数据为0。

然后逐渐过度到AB相导通;P[15..0]输出数据为F600→F900→FC00→FF00,B相的数据逐渐增大,从1增大到4。

电机中的磁场经过4拍从A相转到了AB相,再经过4拍从AB相转到B相,P[15..0]输出数据为CF00→9F00→6F00→0F00,A相的数据逐渐减小,从F变为0。

从A到AB到B共经过了8拍,实现了步距角的8级细分。

LPM_ROM输出数据P[15..0]的变化近似于正弦信号的包络,使各相的输出电流Y3~Y1按照正弦规律均匀变化。

由于步进电机是电感性负载,对输出的PWM电流具有平滑滤波作用,对电机线圈起作用的是PWM的平均电流,同时输出信号中的细小毛刺也被滤除。

实测结果表明,要使步进电机细分后获得均匀的步进转角,其PWM驱动电流应近似于正弦电流,而非线性递增的电流。

因此ROM文件中的数据进行适当选择,使每一步的电流增加量接近正弦波,并根据实际转角作了适当调整。

由于PWM的输入时钟频率较高,因此可以获得均匀的平均电流,并且每一步的时间间隔相等,转角近似均匀。

图13-6(a) 步进电机PWM仿真波形图(注意,图中clk与clk5交换)
图13-6(b) 展开后的步进电机PWM仿真波形图(注意,图中clk与clk5交换)
6、硬件验证 
例13-1、例13-2和例13-3是图13-3/4中的元件CNT8、DEC2和CNT24的VHDL描述;例13-4是LPM_ROM元件ROM3中的初始化数据文件:pwm_1.mif。

LPM_ROM表总长为8×4=32个字节,地址计数器根据控制脉冲与方向输出LPM_ROM地址,用来选择片内预先写好的数据,将它传送给PWM电路,从而实现不同步距细分数及方向控制。

当细分数为8时,其细分电流波形共有8个台阶,其周期为8×4=32个控制脉冲。

地址计数器是一个可加/减计数器,u_d 为方向控制;clk0为速度控制。

【例13-1】--元件CNT8
LIBRARY IEEE; -- 8进制计数器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT8 IS
PORT ( CLK : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CNT8;
ARCHITECTURE behav OF CNT8 IS
SIGNAL CQI : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN CQI <= CQI + 1; END IF;
END PROCESS;
CQ <= CQI(4 DOWNTO 1);
END behav;
【例13-2】--元件DEC2
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY Dec2 IS
PORT ( CLK : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR(1 DOWNTO 0) ;
D : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF Dec2 IS
SIGNAL CQ : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
PROCESS( CQ )
BEGIN
CASE CQ IS
WHEN "00" => D <= "1001" ;
WHEN "01" => D <= "1100" ;
WHEN "10" => D <= "0110" ;
WHEN "11" => D <= "0011" ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN CQ <= A; END IF;
END PROCESS;
END ;
【例13-3】 --元件CNT24
LIBRARY IEEE; -- 24进制计数器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT24 IS
PORT ( CLK,EN, U_D : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));
END CNT24;
ARCHITECTURE behav OF CNT24 IS
SIGNAL CQI : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(CLK, EN, U_D)
BEGIN
IF EN = '1' THEN CQI <= CQI;
ELSIF CLK'EVENT AND CLK = '1' THEN
IF U_D = '1' THEN CQI <= CQI + 1;
ELSE CQI<= CQI-1; END IF;
END IF;
END PROCESS;
CQ(4 DOWNTO 0) <= CQI;
END behav;
【例13-4】 --5位地址线ROM3中的数据: pwm_1.mif
WIDTH = 16;
DEPTH = 32;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
0:f000; 1:f600; 2:f900; 3:fc00; 4:ff00; 5:cf00; 6:9f00; 7:6f00; 8:0f00;
9:0f60; a:0f90; b:0fc0; c:0ff0; d:0cf0; e:0af0; f:06f0; 10:00f0; 11:00f6;
12:00f9;13:00fc; 14:00ff; 15:00cf; 16:009f; 17:006f; 18:000f; 19:600f;
1a:900f;1b:c00f; 1c:f00f; 1d:f00c; 1e:f009; 1f:f006;
END;
13.2 直流电机的PWM控制
如果采用微机控制产生PWM信号,一般的PWM信号是通过模拟比较器产生的,比较器的一端接给定的参考电压,另一端接周期性线性增加的锯齿波电压。

当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时输出高电平。

改变参考电压就可以改变PWM波形中高电平的宽度。

若用微机或单片机产生PWM信号波形,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。

FPGA中的数字PWM控制与一般的模拟PWM控制不同。

当用FPGA产生PWM波形,只需FPGA 内部资源就可以实现。

用数字比较器代替模拟比较器,数字比较器的一端接设定值计数器输出,另一端接
线性递增计数器输出。

当线性计数器的计数值小于设定值时输出低电平,当计数值大于设定值时输出高电平。

与模拟控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少、电路更加简单、便于控制。

脉宽调制式细分驱动电路的关键是脉宽调制,转速的波动随着PWM脉宽细分数的增大而减小。

直流电机控制电路主要由三部分组成:
1、 FPGA中PWM脉宽调制信号产生电路;
2、 FPGA中的工作/停止控制和正/反转方向控制电路;
3、由功率放大电路和H桥组成的正反转功率驱动电路(图13-7)。

设定值计数器设置PWM信号的占空比。

当U/D=1,输入CLK2,使设定值计数器的输出值增加,PWM 的占空比增加,电机转速加快;当U/D=0,输入CLK2,使设定值计数器的输出值减小,PWM的占空比减小,电机转速变慢。

在CLK0的作用下,锯齿波计数器输出周期性线性增加的锯齿波。

当计数值小于设定值时,数字比较器输出低电平;当计数值大于设定值时,数字比较器输出高电平,由此产生周期性的PWM 波形。

旋转方向控制电路控制直流电动机转向和启/停,该电路由两个2选1的多路选择器所组成,Z/F键控制选择PWM波形从正端Z进入H桥,还是从负端F进入H桥,以控制电机的旋转方向。

START键通过“与”门控制PWM的输出,实现对电机的工作/停止控制。

H桥电路可由大功率晶体管组成,PWM波形通过方向控制电路送到H桥,经功率放大以后驱动电机转动。

图13-7 FPGA直流电机驱动控制电路图13-8图13-9中的cmp3模块
图13-9是具体的FPGA中PWM控制电路(QuartusII原理图,Cyclone FPGA)。

其中的比较器cmp3模块(图13-8)与图13-3中的模块相同。

图13-9 FPGA直流电机控制模块
PWM控制电路由细分计数器和脉宽计数器所组成。

图中的cnt5(例13-6)是一个5位二进制计数器,作脉宽计数器;DECD是一个速度控制模块(例13-5);脉宽计数器在CLK5的激励下输出从0开始的逐
渐增大的锯齿波。

两路数值同时加在数字比较器上,当脉宽计数器输出值小于DECD输出的规定值时,比较器输出低电平;当脉宽计数器输出值大于DECD输出的规定值时,比较器输出高电平。

改变DECD的输出值,就等于改变PWM输出信号的占空比。

CLK5是计数时钟输入端。

电路中对直流电机转速进行了32级细分。

图13-9中的FREQTEST是一个频率计,用于测试电机的转速,设计可参考实验7-2。

【例13-5】
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DECD IS
PORT ( CLK : IN STD_LOGIC;
DSPY : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ;
D : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF DECD IS
SIGNAL CQ : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
PROCESS( CQ )
BEGIN
CASE CQ IS
WHEN "00" => D <= "0100" ;
WHEN "01" => D <= "0111" ;
WHEN "10" => D <= "1011" ;
WHEN "11" => D <= "1111" ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' then CQ <= CQ + 1; END IF;
END PROCESS;
DSPY<=CQ;
END ;
【例13-6】
LIBRARY IEEE; -- 4进制计数器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT5 IS
PORT ( CLK : IN STD_LOGIC;
AA : OUT STD_LOGIC_VECTOR(4 DOWNTO 1));
END CNT5;
ARCHITECTURE behav OF CNT5 IS
SIGNAL CQI : STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' then CQI <= CQI + 1; END IF;
END PROCESS;
AA <= CQI(4 DOWNTO 1);
END behav;
13-1. 步进电机细分驱动控制实验
(1) 实验目的:学习用FPGA实现步进电机的驱动和细分控制。

(2) 实验内容1:完成以图13-3所示的步进电机控制电路的验证性实验。

首先引脚锁定:
步进电机的4个相:Ap、Bp、Cp、Dp(对应程序中的Y0、Y1、Y2、Y3)分别与PIO65、PIO64、PIO63、PIO62(见GW48主系统左侧的标注)相接,分别对应EP1C3芯片第140、139、134、133脚;
CLK0接clock0,选择4Hz;CLK5接clock5,选择32768Hz;S接PIO6(键7),控制步进电机细分旋转(1/8细分,2.25度/步),或不细分旋转(18度/步);U_D接PIO7(键8),控制旋转方向。

用短路帽将系统左侧的“步进允许(JM0)”短路(注意,电机实验结束后,短路帽插回“禁止”端!
选择模式No.5, 用Quartus下载step_1c3中的step_a.sof到EP1C3中,观察电机工作情况。

给出电机的驱动仿真波形,与示波器中观察到的电机控制波形进行比较。

(3) 实验内容2:设计2个电路:1、要求能按给定细分要求,采用PWM方法,用FPGA对步进电机转角进行细分控制;
2、用FPGA实现对步进电机的匀加速和匀减速控制。

(4) 实验内容3:为使步进电机能平稳地运行,并尽快从起点到达终点,步进电机应按照以下控制方式运行:启动→匀加速→匀速→匀减速→停止。

当给定终点位置(转角)以后,试用FPGA实现此控制。

 
(5) 实验内容4:步进电机在步距角8细分的基础上,试通过修改控制电路对步距角进一步细分。

13-2. 直流电机PWM控制实验
(1) 实验目的:学习直流电机PWM的FPGA控制。

掌握PWM控制的工作原理,对直流电机进行速度控制、旋转方向控制、变速控制。

(2) 实验内容1:完成以图13-9所示的直流电机控制电路的验证性实验。

首先引脚锁定:
直流电机模块中的MA2、MA1(对应程序中的Z、F)分别与EP1C3的PIO60、61相接,用于控制直流电机;测直流电机转速的MA-CNT端接PIO66,即CNTT端(见主系统左侧的标注);
用短路帽分别将主系统左侧的“直流允许(JM1)”和“计数允许(JM2)”短路;CLK5接clock5,选择32768Hz;F1HZ接clock2,选择1Hz,作为转速测量的频率计的门控时钟;
键1(PIO0,接Z_F)控制旋转方向;键2(PIO1,D_STP)控制旋转速度。

连续按动此键时,由数码管7显示0、1、2、3指示4个速度级别;转速由数码管4、3、2、1显示。

选择模式No.5, 用Quartus下载step_1c3中的step_a.sof到EP1C3中,观察电机工作情况。

给出电机的驱动仿真波形,与示波器中观察到的电机控制波形进行比较。

(3) 实验内容2:实现直流电机的闭环控制,旋转速度可设置。

(4) 实验内容3:在FPGA中加上脉冲信号“去抖动”电路,对来自红外光电电路测得的转速脉冲信号进行“数字滤波”,实现对直流电机转速的精确测量,进而在此基础上实现闭环精确控制。

相关文档
最新文档