资源描述
河南科技大学
课 程 设 计 说 明 书
课程名称 现代电子系统课程设计
题 目 直流电机控制设计
学 院 电子信息工程学院
班 级 电子信息科学与技术062班
学生姓名 ****
指导教师 齐晶晶,张雷鸣
日 期___2010年1月10号____
1
摘 要
使用直流电源的电机叫做直流电机。只要把直流电机的端子接到直流电源上就可以简单使其运转。直流电机是一种具有优良控制特性的电机。因此,在角位移控制和速度控制的伺服系统中有着广泛的应用。为了调整直流电机的转速和输出转矩,可以采用改变电枢直流电压的方法来实现,主要的控制方法有线性控制方式和PWM(脉宽调制)控制方式。一般小功率电机平滑转速控制常采用线性控制方式,而大功率电机高效控制时,则常使用PWM控制方式。本文介绍的是利用FPGA实现PWM脉宽调制信号的产生和相应的用数字电路的方法实现的换档、正反向控制等。直流电机的转动速度调节则归结于对驱动脉宽的占空比的调节上,通过调节占空比而改变单位时间内直流电机的通电时间长短,即改变了电机的转速。转动方向可用功率放大电路和H桥组成的正反向功率驱动电路来实现
直流电机控制电路主要由五部分组成:
l PWM脉宽调制信号产生电路:主要功能是产生pwm信号,并控制转速。
l FPGA中正/反转方向控制:用2选1数据选择器控制电机的pwm信号的输入端,从而实现正反转。
l 由功率放大电路和H桥组成的正反转功率驱动电路:
l 分频和去抖电路模块:通过两个维持阻塞D触发器实现消抖。
l 测量转速模块:通过红外线测量电机每转一周产生的脉冲实现转速测量。
关键词:速度调节、旋转方向控制、去抖动电路、数字显示转速、PWM、占空比、FPGA
- 16 -
第 - 16 - 页 共 18 页
一. 任务解析…………………………………………………………………2
二. 系统方案论证……………………………………………………………2
2.1总体方案与比较论证………………………………………………3
2.2系统原理与结构……………………………………………………3
三. 电机正反转模块设计…………………………………………..…………4
3.1设计方案论证………………………………………………………..4
3.2方案的实现…………………………………………………………..4
四.PWM脉宽信号产生模块设计…………………………………………5
4.1锯齿波的产生………………………………………………………..5
4.2参考电压选择电路…………………………………………………..6
4.3通过比较器产生PWM波形…………………………………………..7
4.4 PWM波形发生器的搭接及仿真……………………………………..8
五. 实际转速测量模块………………………………………………………9
5.1设计方案及实现…………………………………………………….9
六. 总结……………………………………………………..……………….16
七. 参考文献:………………………………………………….………….16
一.任务解析
利用PWM控制技术实现直流电机的速度控制。
(1)速度调节:4档,直流电机的速度是靠调节PWM信号的占空比来调节的,建一个PWM模块来调节电机的转速。
(2)电机的旋转方向控制:电机的旋转方向可以用二选一数据选择器来控制正反转。
(3)通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。
PWM模块
22MUX
频率计
去抖电路
电机速度控制模块
1HZ
GND
电机方向控制
电机转速脉冲信号
参考频率
PWM参考频率
电机转速显示
电机转速预置
1HZ
1HZ
档位
直流电机控制原理框图
二.系统方案论证
2.1 总体方案与比较论证
方案一:采用单片机产生pwm波形进而实现电路控制
如果采用CPU控制产生PWM信号,一般的PWM信号是通过模拟比较器产生的,比较器的一端接给定的参考电压,另一端接周期性线性增加的锯齿波电压。当锯齿波电压小于参考电压时输出低电平,当锯齿波电压大于参考电压时输出高电平。改变参考电压就可以改变PWM波形中高电平的宽度。若用单片机产生PWM波形,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。
方案二:采用FPGA和数字电路控制
FPGA中的PWM控制与一般的模拟PWM控制不同。用FPGA产生PWM波形,只要FPGA内部资源就可以实现。用数字比较器代替模拟比较器,数字比较器的一端接设定值计数器输出,另一端接线性递增计数器输出。与模拟控制相比,省去了外接的D/A转换器和模拟比较器,FPGA外部连线很少、电路更加简单、便于控制。脉宽调制式细分驱动电路的关键式脉宽调制,转速的波动随着PWM脉宽细分的增大而减小。
我们最终选择第二种,用FPGA实现PWM控制,无需外接D/A转换器,使外围控制电路大大简化,控制方式简洁。控制精度高,控制效果好。用单片机和DSP的控制都难以达到同样的控制效果
2.2系统原理与结构
2.2.1系统结构
FPGA直流电机驱动控制电路原理图
设定值计数器设置PWM信号的占空比。当U/D=1时,输入CLK2,使设定计数器的输出值增加,PWM的占空比增加,电机转速加快; 当U/D=0时,输入CLK2,是设定的计数器输出值减小,PWM的占空比减小,电机转速变慢。在CLK0的作用下,锯齿波计数器输出周期性线性增加的锯齿波。当计数值小于设定值时,数字比较器输出低电平;当计数值大于设定值时,数字比较器输出高电平,由此产生周期性的PWM波形。旋转方向控制电路控制直流电机转向和启/停,该电路由两个2选1多路选择器组成,Z/F键控制选择PWM波形从正端Z进入H桥,以控制电机的旋转方向。START键通过“与”门控制PWM的输出,实现对电机的工作/停止控制。H桥电路由大功率晶体管组成,PWM波形通过方向控制电路送到H桥,经功率放大以后驱动电机转动。
三. 电机正反转模块设计
3.1设计方案论证
正反转方向的选择究其根本就是选通问题:当把PWM信号选通到正转的H桥输入端时,电机正转(但同时要保证反转输入端接入低电平);反之亦然。在数字电路设计中,进行选通设计用到最多的是二选一数据选择器。把PWM信号接到两个二选一选择器的互逆的端口上,就可以保证一次只有一个H桥端口有PWM信号输入;另一对互逆的端口上接低电平,则又保证了不工作的H桥端口始终为低电平。
3.2方案实现及仿真
正反转选择电路的搭接如下图所示:
该电路的波形仿真如下图:
结果分析:由图所示,当Z_F=‘1’时选通F,Z_F=‘0’时选通Z。
四、 PWM脉宽调制信号产生模块设计
4.1锯齿波的产生
由于采用数字电路产生锯齿波,其实质相当于对一个已知的锯齿波进行细分并对每一个细分出来的电压值进行二进制数值编码。本设计采用对锯齿波进行16细分的方法,即要对每个细分值进行四位二进制数编码:从0000到1111,代表锯齿波从0V到峰值之间的电压值(显然,若进行更高分辨率的细分则能更精确的表示出锯齿波)。
以下是锯齿波发生器的实现模块及其相应的VHDL源代码:
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;
该锯齿波发生器的仿真波形如下
结果分析:由上面的波形图可以看出,四进制计数器随时钟依次自增一,当计数记满后又回到初始状态,实际完成的就是一个周期的锯齿波的采样编码后的输出。
4.2 参考电压选择电路
该电路的元件符号和相应的VHDL源代码如下:
VHDL源代码:
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 - -由计数器CQ的变化赋给输出相应的电压值作为参考电压
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; - -手动控制CLK,每次CLK出现上升沿则计数器自加一
END PROCESS;
DSPY<=CQ; - -把计数器的两位接到两盏LED灯上,实现档位显示
END ;
以下是该元件的仿真波形:
结果分析:通过仿真波形可以看出,CLK每有一个上升沿,输出的四位二进制数就变化依次,变化顺序如源代码中所写。同时计数器的数值显示到LED灯的端口上,用于显示此时所处的档位。
4.3通过比较器产生PWM波形
现在,锯齿波和参考电压都已经得到,下一步就是通过电压的大小比较产生一定占空比的PWM波形。由于锯齿波电压和参考电压都是一组四位的二进制编码,故使用一个两输入的四位数字比较器就可完成比较任务:当锯齿波电压小于参考电压时,比较器输出低电平;高于参考电压时,比较器输出高电平。
比较器的元件符号如下:
其中,dataa接参考电压端,datab接锯齿波电压端:当锯齿波电压小于参考电压时,agb输出‘1’,当锯齿波大于参考电压时,输出‘0’。这时形成的逻辑是:当dataa为较小数时,只有在锯齿波刚有电压值的一个短暂时间内,比较器输出高电平,其余时间都是低电平,占空比小,进而电机转动慢;当dataa为较大数时,在锯齿波很长一段时间内一直都比参考电压小,则一直输出高电平,占空比大,进而电机转动快。
4.4 PWM波形发生器的搭接
综上,用以上得到的元件搭接成可调档PWM波形发生器如下图:
PWM波形生成如下图:
结果分析:由波形图可明显看出,随D_STP不断产生上升沿,PWM波形高电平的占空比依次从小到大重复变化。由直流电机的原理可知,当这样的电压驱动电机转动时,占空比大的单位时间内驱动电机转动时间长,即电机转的快;反之亦然。
五.转速频率测量模块
轮机转动时,每转一周,位于轮机上方的红外线测速仪测得一个脉冲。靠统计每秒钟发出脉冲的个数,即可得到轮机的转速(转/秒)。由此可见,转速测量器显示的是每秒钟的圈数,实质上是一个频率计。
5.1 设计方案实现
频率计:由计数,锁存,分频三部分组成
分频器:
Library ieee;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_1164.all;
Entity fenpinqi is
Port ( clkk: in std_logic;
cnt_en: out std_logic;
load: out std_logic;
rst_cnt: out std_logic);
end fenpinqi;
architecture behav of fenpinqi is
signal div2clk :std_logic;
begin
process(clkk)
begin
if clkk'event and clkk='1' then
div2clk<=not div2clk;
end if;
end process;
process(clkk,div2clk)
begin
if clkk='0' and div2clk='0' then rst_cnt<='1';
else rst_cnt<='0';
end if;
end process;
load<=not div2clk;
cnt_en<=div2clk;
end behav;
相应的波形仿真如下图:
锁存部分:
Library ieee;
Use ieee.std_logic_1164.all;
Entity reg16 is
Port (load: in std_logic;
din: in std_logic_vector(15 downto 0);
dout: out std_logic_vector(15 downto 0));
end reg16;
architecture behav of reg16 is
begin
process(load,din)
begin
if load'event and load='1' then
dout<=din;
end if;
end process;
end behav;
其波形仿真图如下图所示:
由图可见,每个周期输入和输出相同
计数部分:
Library ieee;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_1164.all;
Entity cnt10 is
Port (clk,clr,ena: in std_logic;
cq: out std_logic_vector(3 downto 0);
cout: out std_logic);
end cnt10;
architecture behav of cnt10 is
begin
process(clk,clr,ena)
variable cqi: std_logic_vector(3 downto 0);
begin
if clr='1' then cqi:=(others=>'0');
elsif clk'event and clk='1' then
if ena='1' then
if cqi<9 then cqi:=cqi+1;
else cqi:=(others=>'0');
end if;
end if;
end if;
if cqi=9 then cout<='1';
else cout<='0';
end if;
cq<=cqi;
end process;
end behav;
下图是计数器的波形仿真:
下面是整个频率计的例化程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity frequency is
port( f_in : in std_logic;
clk : in std_logic;
dout : out std_logic_vector(15 downto 0);
carry_out : out std_logic );
end frequency;
architecture behav of frequency is
component cnt10
port(clk,clr,ena : in std_logic;
cq : out std_logic_vector(3 downto 0);
cout : out std_logic);
end component;
component fenpinqi
port( clkk : in std_logic;
cnt_en : out std_logic;
rst_cnt : out std_logic;
load : out std_logic);
end component;
component reg16
port( load : in std_logic;
din : in std_logic_vector(15 downto 0);
dout : out std_logic_vector(15 downto 0));
end component;
signal cq1,cq2,cq3,cq4 : std_logic_vector(3 downto 0);
signal cq5 : std_logic_vector(15 downto 0);
signal ena1 : std_logic;
signal clr1 : std_logic;
signal cout1,cout2,cout3 : std_logic;
signal load1 : std_logic;
begin
u1 : cnt10 port map(clk=>f_in,clr=>clr1,ena=>ena1, cq=>cq1,cout=>cout1);
u2 : cnt10 port map(clk=>cout1,clr=>clr1,ena=>ena1,cq=>cq2,cout=>cout2);
u3 : cnt10 port map(clk=>cout2,clr=>clr1,ena=>ena1,cq=>cq3,cout=>cout3);
u4 : cnt10 port map(clk=>cout3,clr=>clr1,ena=>ena1,cq=>cq4,cout=>carry_out);
u5 : fenpinqi port map(clkk=>clk,cnt_en=>ena1,rst_cnt=>clr1,load=>load1);
u6 : reg16 port map(load=>load1,dout=>dout,din=>cq5);
cq5(15 downto 12)<=cq4(3 downto 0);
cq5(11 downto 8)<=cq3(3 downto 0);
cq5(7 downto 4)<=cq2(3 downto 0);
cq5(3 downto 0)<=cq1(3 downto 0);
end;
频率计仿真波形图:
由图可见,在f_in端接入电机上的红外线脉冲信号,clk接为1Hz,即可测得转速
下图是全部连接后的电路图:
其中又包括了一个四分频电路和去抖电路。
六.心得体会
通过这次的课程设计使我对现代电子系统设计的内容和方法有了更直接、更深刻的了解,学到了受益终身的思维方法和科学严谨的行为方式。经过两周的准备和调试基本实现了设计要求。
在这次设计中也遇到一些问题,以前只是将eda课本中的原理介绍进行了大致的了解,但对具体模块的工作原理还不甚了解,比如,对pwm波形控制电机速度的原理还有欠缺,没有理解占空比和电机速度的关系。通过老师的提示和指导,明白了电机的转速与单位时间内电机的通电时间有关,继而与pwm波形的占空比有关。在解决了这一问题之后,在试验结果中发现驱动电机的频率不是越大越好,而是与电机转子的固有频率有关。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
七 参考文献
EDA技术实用教程 潘松,黄继业编著 北京:科学出版社 2006
现代电子系统设计 何小艇 杭州:浙江大学出版社 2008
展开阅读全文