直流电机PWM控制

直流电机PWM控制
直流电机PWM控制

河南科技大学

课程设计说明书

课程名称__现代电子系统课程设计__题目___直流电机控制设计___

学院________

班级_________

学生姓名___________

指导教师_____

日期________

课程设计任务书

(指导教师填写)

课程设计名称现代电子系统课程设计学生姓名专业班级

设计题目直流电机控制设计

一、课程设计目的

学习直流电机PWM的FPGA控制;

掌握PWM控制的工作原理;

掌握GW48_SOPC实验箱的使用方法;

了解基于FPGA的电子系统的设计方法。

二、设计内容、技术条件和要求

利用PWM控制技术实现直流电机的速度控制。

(1)基本要求:

a.速度调节:不少于4档,可实现加减档控制。

b.能控制电机的旋转方向。

c.通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。

(2)发挥部分

a.设计“去抖动”电路,实现直流电机转速的精确测量。

b.修改设计,实现直流电机的闭环控制,旋转速度可设置。

c.其它。

三、时间进度安排

布置课题和讲解:1天查阅资料、设计:4天

实验:3天撰写报告:2天

四、主要参考文献

何小艇《电子系统设计》浙江大学出版社2008.1

潘松黄继业《EDA技术实用教程》科学出版社2006.10

齐晶晶《现代电子系统设计》实验指导书电工电子实验教学中心2009.8 指导教师签字:2013年11月21日

摘要

近年来,随着科技的进步,直流电机得到了越来越广泛的应用,直流电机具有优良的调速特性,调速平滑、方便、调速范围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速起动、制动和反转,需要满足生产过程自动化系统各种不同的特殊要求,从而对直流电机提出了较高的要求,改变电枢回路电阻调速、改变电压调速等技术已远远不能满足现代科技的要求,这时通过PWM(脉冲宽度调制技术)方式控制直流电机调速的方法就应运而生。

在本文中,我们设计了一个直流电机控制的电路。本设计以Quartus2软件为工具,利用FPGA可编程芯片及VHDL语言编程实现直流电机PWM控制的设计。该设计可以实现直流电机的加速、减速以及电机的正传和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小,能够很方便的实现电机的自动控制。

总体方案:锯齿波发生器和设定值计数器经过数字比较器产生PWM波形;设定计数器设置PWM信号的占空比控制电机转速;设计2选1多路选择器控制电机的旋转方向。

直流电机PWM的PFGA控制的主要组成部分:

1、预置转速模块:通过一个ROM控制存储器和D触发器组成的微程序程制器设置

直流电机的四个档位。

2、PWM信号产生电路:产生PWM波,并且控制直流电机转速。

3、正反向控制模块:用2选1数据选择器控制直流电机PWM信号的输入,以控制

电机的旋转方向。

4、消抖电路:通过两个维持阻塞D触发器实现消抖,以便观察。

5、显示模块:通过LED灯和数码管显示直流电机的档位、预置速度和实际速度

关键词:FPGA,PWM,VHDL,直流电机,控制

目录

一.任务解析 ........................................................................................................................... - 3 -

1、任务与要求 ................................................................................................................. - 3 -

2、系统原理框图 ............................................................................................................. - 3 -二.系统方案论证 ................................................................................................................... - 4 -

2.1 总体方案与比较论证 ................................................................................................ - 4 -

2.2系统原理与结构 ......................................................................................................... - 4 -

2.2.1主要芯片选型 .................................................................................................. - 4 -

2.2.2系统结构 .......................................................................................................... - 5 -

2.2.3 FPGA直流电机驱动控制 ............................................................................ - 5 -

三. 预置转速模块设计 ............................................................................................................ - 6 -

3.1方案论证 .................................................................................................................... - 6 -

四.PWM模块设计 ...................................................................................................................... - 7 -

4.1设计方案论证 ............................................................................................................ - 7 -

4.3 仿真波形 ................................................................................................................... - 8 -

五.正反转模块设计 ................................................................................................................. - 8 -

5.1 该模块通过两个2选1多路选择器组成。............................................................ - 8 -

5.3 仿真波形图 ............................................................................................................... - 9 -六.消抖模块设计 ................................................................................................................... - 9 -

6.1方案论证 .................................................................................................................... - 9 -

6.3 仿真波形图 ............................................................................................................. - 10 -

七. 显示模块设计 ................................................................................................................. - 10 -

7.1方案论证 .................................................................................................................. - 10 -

7.2方案实施 .................................................................................................................. - 11 -

7.3 仿真波形图 ............................................................................................................. - 11 -

八.总结 ................................................................................................................................... - 11 -

8.1测试性能概览 .......................................................................................................... - 11 -

8.2误差分析 .................................................................................................................. - 12 -

8.3心得体会 .................................................................................................................. - 12 -九.参考文献 ....................................................................................................................... - 13 -附录1 ROM内容及参考程序: ..................................................................................... - 14 -附录2 系统整体原理图: .............................................................................................. - 18 -

一.任务解析

1、任务与要求

利用PWM控制技术实现直流电机的速度控制。

(1)基本要求:

a.速度调节:不少于4档,可实现加减档控制。

b.能控制电机的旋转方向。

c.通过红外光电电路测得电机的转速,设计频率计用4位10进制显示电机的转速。

(2)发挥部分

a.设计“去抖动”电路,实现直流电机转速的精确测量。

b.修改设计,实现直流电机的闭环控制,旋转速度可设置。

c.其它。

2、系统原理框图

PWM

二.系统方案论证

2.1 总体方案与比较论证

方案一:采用线性控制方式进行直流电机的控制

此方案一般用于小功率电机平滑转速控制,而大功率电机高效控制时,则常使用PWM 控制方式。

方案二:采用单片机产生PWM信号波形进行直流电机的控制。

此方案PWM信号是通过模拟比较器产生的,需要通过D/A转换器产生锯齿波电压和设置参考电压,通过外接模拟比较器输出PWM波形,因此外围电路比较复杂。

方案三:采用FPGA中的数字PWM进行直流电机的控制。

此方案用数字比较器代替模拟比较器,省去了外接的D/A转换器和模拟比较器,FPGA 外部连线很少、电路更加简单、便于控制。

由于FPGA本身是将大量的逻辑功能集成到一个器件内,集成度要远远高于单片机,能利用的资源也相对充裕,而且可移植性更强,可以较好地完成要求。

综上,选择方案三。

2.2系统原理与结构

2.2.1主要芯片选型

Gw-48-PK2中FPGA可编程芯片:

通过VHDL语言与该可编程芯片实现了对直流电机的PWM控制。

数码管、LED灯:

实现对直流电机的档位、实际速度和预置速度的显示。

按键:

实现档位的调换、速度预置、正反转控制和预设使能控制。

累加器:

实现对红外传感信号的累加计数,进而实现测速功能

2.2.2系统结构

直流电机控制结构框图

2.2.3 FPGA 直流电机驱动控制

FPGA 直流电机驱动控制电路

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

在CLK0的作用下,锯齿波计数器输出周期线性增加的锯齿波。当计数值小于设定值时,数字比较器输出低电平;当数值大于设定值时,数值比较器输出高电平,由此产生周期性的PWM波形。

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

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

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

三. 预置转速模块设计

3.1方案论证

通过为程序控制器设计电机四个档位的转速。微程序控制器主要由控制存储器CS、微地址产生器和微控制器三大部分组成。

其实现过程就是把控制子系统中的8个预置转速(正/反)状态要输出的控制信号以及该状态的转移去向(U/D)安一定的格式编写成微指令,将他们保存在存储器。运行时,按预定的要求逐条取出这些预置转速微指令,从而实现控制电机转速过程。

3.2 方案的实现

四.PWM模块设计

4.1设计方案论证

该模块由三部分组成:设定值计数器、锯齿波发生器和数字比较器。

用FPGA产生PWM波形,只需FPGA内部资源就可以实现。用数字比较器代替模拟比较器,数字比较器的一端接设定计数器输出,另一端接线性递增计数器(锯齿波发生器)输出。当线性计数器的值小于设定值时输出低电平,当计数器大于设定值时输出高电平。脉宽调制式细分驱动电路的关键是脉冲调制,转速的波动随着PWM脉宽细分数的增大而减小。

4.2 方案实施

4.3 仿真波形

五.正反转模块设计

5.1 该模块通过两个2选1多路选择器组成。

当把PWM信号选通到正转的H桥输入端时,电机正转(但同时要保证反转输入端接入低电平);反之亦然。在数字电路设计中,进行选通设计用到最多的是二选一数据选择器。把PWM信号接到两个二选一选择器的互逆的端口上,就可以保证一次只有一个H桥端口有PWM信号输入;另一对互逆的端口上接低电平,则又保证了不工作的H桥端口始终为低电平。

5.2 方案实施

5.3 仿真波形图

六.消抖模块设计

6.1方案论证

红外检测电路产生的脉冲信号在加到频率计输入端时,在开始的一段短暂的时间里,会产生抖动,所以要设计一个消抖电路去除抖动。

输入信号开始会有一段抖动,然后频率趋于稳定。很明显,抖动的那一段信号的周期相对于稳定后的信号来说很短。我们就可以通过两个D触发器滤除抖动的那一段信号。假设第一个D触发器的输出为D1,第二个D触发器的输出为D2。当CLK上升沿到来时,若这时的输入信号为高电平,那么输出的D1就为1,D1经过一个非门变成0,D1的非与D2相与,输出是0。第二个CLK上升沿到来时,若输入信号还为高电平,则这时D1为1,D2

为1,D1的非与D2相与,输出还是0。只有当CLK上升沿到来,输入信号变成低电平时,这时D1变成0,D2为1,D1的非与D2相与后,输出才为1。由此分析,当CLK频率选取合适时,在一个输入信号高电平到来时,至少需要两个CLK周期才能输出高电平,而抖动的那一段信号由于周期太短,满足不了这个要求,因此抖动信号就不会输出,这样就完成了消抖功能。

6.2方案实施

6.3 仿真波形图

七. 显示模块设计

7.1方案论证

本次设计的显示模块有三部分:电机转速级别显示、预置电机转速显示和实际电机转速显示。

电机转速级别显示是通过PWM模块的一个输出连接两个LED灯,观察LED灯亮灭情况分别显示1、2、3和4档位;预置电机转速显示是通过预置转速模块ROM控制存储器的输出连接四个数码管,显示四个档位的预置转速。实际电机转速显示模块由一个分频计和一个频率计构成,用分频计将4HZ的输入信号分成1HZ作为一端输入,另一端输入是消抖电

路的输出,可以通过数码管显示实际转速。其原理就是检测在一秒时间内红外电路产生的脉冲的个数,即检验在一秒时间内电机转动了多少圈

7.2方案实施

7.3 仿真波形图

八.总结

8.1测试性能概览

本次使用的直流电机最高转速为4500转/分。

速度测试:

8.2误差分析

此次设计中,电机的实际转速未能达到预置转速,原因主要包括两个方面:

①设计造成的误差:预置转速模块的设计存在缺陷,ROM控制存储器把预置速度定

死,不能够随意通过按键控制预置转速;再者是设计中未设计闭环控制模块,也

可导致转速的误差。

②硬件系统造成的误差:红外传感模块的问题将导致速度测试的不准确性;另外就

是电机自身存在摩擦无法避免造成实际转速减慢。

8.3心得体会

此次课程设计是基于FPGA产生PWM脉宽调制信号控制直流电机,基本的设计要求已经实现,发挥部分未能圆满完成。通过这次课程设计我收获了许多,不仅仅是知识方面,从思想上也认识了自己的不足,端正了某些方面的态度。

本次课程设计维持两周,第一周主要是负责资料的收集和整理,第二周是到实验室验证功能。由于之前自己一直忙于找工作,对课程设计的精力投入的不多,前期没有好好准备,导致没能在验收前,圆满实现各个模块的功能。

进实验后,遇到了很多难题,而且自己并不能一一解决,后来请教了同学,在同学的帮助下一步步改进,顺利的实现了PWM模块、正反转模块和频率计模块。消抖模块自己查阅了书籍,最终利用两个D触发器实现其功能。最后考虑预置转速模块,由于自己所学的理论基础不扎实,对知识点的理解不透彻,想了很久也没能想出来,后来经过同学的提醒,自己联系了之前所做的实验,决定用设计微程序控制器的方法来实现预置转速功能。因为自己此前浪费了一些时间,剩下调预置转速模块的时间不足,所以未能圆满的调试出来,还有闭环控制模块也没能够实现。通过这次课程设计,我能更熟练的使用软件和调试硬件,对FPGA有了更进一步的认识和了解。

课程设计考察的知识是多方面的。首先自己要重视课程设计,对自己所要做的设计题目好好准备资料和程序,这样在进实验室后才不会忙乱;其次,注重知识的积累。其实课程设计中考察的知识点很多都是我们以前学过的,例如这次课程设计中频率计和二选一数据选择器等,都是之前学过而且做过实验的,如果平时不收集、整理和回顾所学知识,等

用上的时候就要重新学习,无形中降低了效率。还有对于自己不能够思考出来的问题,要多向他人请教,然后消化吸收。最后,在平时进实验室多多练习,把理论的东西转化成实践能力。

虽然这次课程设计没能够完成所有设计指标,但是能从过程中认识自身的不足,这将对往后的学习有很大的促进作用。

九.参考文献

【1】何晓艇《电子系统设计》第四版,浙江大学出版社

【2】潘松、黄继业《EDA技术使用教程》第三版,科学出版社

【3】侯伯亨、刘凯、顾新《VHDL硬件描述语言与数字逻辑电路设计》第三版,西安电子科技大学出版社

【4】曹晰燕、周凤臣《EDA技术试验与课程设计》,清华大学出版社

附录1 ROM内容及参考程序:

一 decd程序

library ieee ;

use ieee.std_logic_1164.all ;

use ieee.std_logic_unsigned.all;

entity decd is

port ( clk2,ud,en: in std_logic ;

dw : out std_logic_vector( 1 downto 0 ) ;

sp : out std_logic_vector (3 downto 0 )) ;

end ;

architecture one of decd is

signal xh : std_logic_vector ( 1 downto 0 ) ;

begin

process( xh )

begin

case xh is

when "00" => sp <= "0100" ;

when "01" => sp <= "0111" ;

when "10" => sp <= "1011" ;

when "11" => sp <= "1111" ;

when others => null ;

end case ;

end process ;

process (clk2 )

begin

if en='1' then

if clk2'event and clk2 = '1' then

if ud='1' then

if xh ="11" then xh <= "00" ;

else

xh <= xh +'1' ;

end if ;

else

if xh ="00" then xh <= "11" ;

else

xh <= xh -'1' ;

end if ;

end if;

end if;

end if;

end process ;

dw <= xh ;

end ;

二 CNT5程序

LIBRARY IEEE;

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(3 DOWNTO 0)

);

END CNT5;

ARCHITECTURE FRE OF CNT5 IS

SIGNAL CNT:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK ='1' THEN CNT<=CNT+1;

END IF;

END PROCESS;

AA<=CNT(3 DOWNTO 0);

END;

三 CMP程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CMP IS

PORT(

A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

AGB:OUT STD_LOGIC

);

END CMP;

ARCHITECTURE C OF CMP IS

BEGIN

PROCESS(A,B)

BEGIN

IF B<=A THEN

AGB<='1';

ELSIF B>A THEN

AGB<='0';

END IF;

END PROCESS;

END;

四 mux程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mux IS

PORT (A,B,S,START:IN STD_LOGIC;

Y:OUT STD_LOGIC);

END ENTITY mux;

ARCHITECTURE one OF mux IS

BEGIN

PROCESS(START,A,B,S)

BEGIN

IF START<='0' THEN Y<='0';

ELSIF S<='0' THEN Y<=A;

ELSE Y<=B;

END IF;

END PROCESS;

END;

五 fenpinqi程序

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;

附录2 系统整体原理图:

相关主题
相关文档
最新文档