四相步进电机定位控制系统四相步进电机定位控制系统功能概述步进电机每接收到一组脉冲数字信号,便旋转一个角度,成为步进角。
不同规格的步进电机的步进角不同,这决定于其内部的线圈数量。
线圈中的供应电流可以决定线圈所产生的磁场方向。
假设有两组线圈A 和B ,如图一所示。
A 线圈如果提供A 点低电位而A ′点高电位,电流由A ′螺旋向上流到A ,形成向上的磁场方向;同理,提供B 点低电位而B ′点高电位,电流由B ′螺旋流到B ,形成向左的磁场方向。
A 和B 这两组线圈形成的总磁场方向即为左上方。
如果将电动机的转子置于线圈所产生的磁场中,便会受到磁场的作用而产生与磁场方向一致的力,转子便开始转动,直到转子的磁场方向与线圈的磁场方向一致为止。
如图二所示。
由A 和B 两组线圈电流方向的排列组合,最多可以产生8种磁场方向,分别是0°、45°、90°、135°、180°、225°、270°、315°。
这些方向的电流方向列于表一。
图一 图二由表一可知,假设电动机转子刻度原先在0°的位置,想让其转到180°,就必须让端口信号依次由0001、0011、0010、0110到0100变化。
但是是否有更快的办法,是否一定要经过4个信号过程呢?其实有更快更省电的方式让电动机从0°达到180°的位置。
这就是所谓的激磁方式的不同。
四相电动机可以分为3种激磁方式。
表一:四相步进电机的8个方向和电流以及电压信号的关系180°270°1-相激磁法:当目标角度是90的整数倍时,采用这种方法。
例如要从0转到270,只要让端口信号的顺序为0000,0001,0010,0100,1000即可。
2-相激磁法:当目标角度是45而非90的整数倍时,可采用这种方法。
例如要从0转到225,只要让端口信号的顺序为0000,0011,0110,1100即可。
1-2-相混合激磁法:按照表二中所列的信号顺序。
四相步进电机定位控制系统的VHDL源码及注释--四相步进电机示例程序library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity step_motor isport (reset:in STD_LOGIC; --系统复位信号dir: in STD_LOGIC; --步进电机正反转方向控制开关(0:逆时针;1:顺时针)clk: in STD_LOGIC; --系统时钟(FPGA内部提供的4MHz的时钟信号)ini: in STD_LOGIC; --使能开关manner: in STD_LOGIC_VECTOR (1 downto 0); --激磁方式的选择开关(00:自动选择激磁方式;--01:1-相激磁;10:2-相激磁;11:1-2-相激磁)angle: in STD_LOGIC_VECTOR (7 downto 0); --步进角的倍数设定输入键baBA: out STD_LOGIC_VECTOR (3 downto 0)); --步进电机的状态输出end step_motor;architecture stepmotor_arch of step_motor issignal count: INTEGER range 0 to 7; --内部电路的计数累加器,用于产生输出所需对应的状态signal cntInc: INTEGER range -2 to 2; --设定累加器所需的累加/减计数值signal cntIni: INTEGER range -1 to 0; --设定累加器所需的计数初值signal angleDnCount: INTEGER range 255 downto 0; --设定步进角所需的计数次数signal angleDnCntDec: INTEGER range 2 downto 1; --设定步进角所需的累减计数值begin--步进电机方向设定电路模块该模块的功能是设定步进电机的旋转方向(顺时针或逆时针),并设定电机在顺时针转动或逆时针转动时所需的初值与累加/减值。
process(dir,manner,angle)beginif dir='0' thencase manner iswhen "01" => --1-相激磁cntIni<=0;cntInc<=2;angleDnCntDec<=2;when "10" => --2-相激磁cntIni<=-1;cntInc<=2;angleDnCntDec<=2;when "11" => --1-2-相激磁cntIni<=0;cntInc<=1;angleDnCntDec<=1;when others => --自动选择激磁方式--angle为偶数即角度为90的倍数时,采用1-相激磁,否则2-相激磁if (angle(0)='1') then --2-相激磁cntIni<=-1;cntInc<=2;angleDnCntDec<=2;else --1-相激磁cntIni<=0;cntInc<=2;angleDnCntDec<=2;end if;end case;elsecase manner iswhen "01" => --1-相激磁cntIni<=0;cntInc<=-2;angleDnCntDec<=2;--"10";when "10" => --2-相激磁cntIni<=-1;cntInc<=-2;angleDnCntDec<=2;--"10";when "11" => -- 1-2-相激磁cntIni<=0;cntInc<=-1;angleDnCntDec<=1;--"01";when others => --自动选择激磁方式if (angle(0)='1') then --2-相激磁cntIni<=-1;cntInc<=-2;angleDnCntDec<=2;else --1-相激磁cntIni<=0;cntInc<=-2;angleDnCntDec<=2;end if;end case;end if;end process;--步进电机步进移动与定位控制电路模块该模块的主要功能是利用ini(使能开关),将数值传到该模块中,并配合输入的clk(系统时钟)作为同步控制信号,进行步进电机的步进移动与定位控制。
counting_reset: process(reset,ini, angle, clk)beginif reset='1' then --复位低电平有效count<=0;angleDnCount<=0;elsif clk'event and clk='1' thenif ini='0' then --使能高电平有效count<=0+cntIni;angleDnCount<=CONV_INTEGER(angle);elsecount <= count+cntInc;if angleDnCount > angleDnCntDec then --判断是否已到达设定位置angleDnCount <= angleDnCount-angleDnCntDec;elseangleDnCount <= 0;end if;end if;end if;end process;--编码输出电路模块该模块的功能是将count与angledncount产生的数值经过编码,并利用baBA输出连线信号,将结果输出显示。
baBA <="0000" when angleDnCount=0 else"0001" when count=0 else"0011" when count=1 else"0010" when count=2 else"0110" when count=3 else"0100" when count=4 else"1100" when count=5 else"1000" when count=6 else"1001";-- when count>=7;end stepmotor_arch;四相步进电机定位控制系统的模块图四相步进电机定位控制系统的仿真结果⑴自动模式,顺时针,旋转角为45*11的情况:⑵自动模式,顺时针,旋转角为45*16的情况:⑶1-相激磁,逆时针,旋转角为45*7的情况:⑷1-相激磁,顺时针,旋转角为45*7的情况:⑸2-相激磁,逆时针,旋转角为45*17的情况:⑹2-相激磁,逆时针,旋转角为45*17的情况:⑺1-2-相激磁,顺时针,旋转角为45*11的情况:⑻1-2-相激磁,顺时针,旋转角为45*8的情况:直流电机速度控制系统直流电机速度控制系统功能概述驱动电路称为桥式驱动或是H 型驱动电路(如右图所示),采用的控制方法称为脉冲宽度调制法(PWM ),即利用晶体管on-off (导通-不导通)进行控制的方法。
使用FPGA 纯数字式的控制时,假设电机速度从静止开始加速,首先Q1、Q2必须维持导通一段时间,此时电机所承受的电压约为供电电压U ,称之为强加速。
待速度接近目标速度时,加速可以减缓,此时Q1、Q2和Q3、Q4轮流导通,只是Q1、Q2在一个周期内所导通的时间ton 比Q3、Q4导通的时间toff 长一些,此时称为弱加速。
任何时候,电机所承受的平均电压U0可表示为U0=U*(ton -toff )(ton +toff )。
如果速度已经达到目标,便可以调整ton 和toff 的时间比例使之相等,此时平均电压为零,称为定速控制。
由此可知,平均电压若为正值,是加速控制;负值时是减速控制;为0时即达到匀速。