基于FPGA的直流电机PWM调速系统设计与实现

上传人:xmg****18 文档编号:145829816 上传时间:2020-09-24 格式:DOC 页数:14 大小:3.40MB
返回 下载 相关 举报
基于FPGA的直流电机PWM调速系统设计与实现_第1页
第1页 / 共14页
基于FPGA的直流电机PWM调速系统设计与实现_第2页
第2页 / 共14页
基于FPGA的直流电机PWM调速系统设计与实现_第3页
第3页 / 共14页
基于FPGA的直流电机PWM调速系统设计与实现_第4页
第4页 / 共14页
基于FPGA的直流电机PWM调速系统设计与实现_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《基于FPGA的直流电机PWM调速系统设计与实现》由会员分享,可在线阅读,更多相关《基于FPGA的直流电机PWM调速系统设计与实现(14页珍藏版)》请在金锄头文库上搜索。

1、FPGA课程设计 题目:基于FPGA的直流电机PWM调速系统设计与实现 班级:微电子学1202班 :杜英 学号:1206080201 日期:2016年3月24日基于FPGA的直流电机PWM调速系统设计与实现1设计任务与要求1.1设计任务完成基于FPGA的直流电机PWM调速系统设计与实现,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。 1.2设计要求1.2.1了解PWM控制方法及应用;掌握PWM直流电机调速控制原理;掌握直流电机调速及驱动控制原理;完成基于FPGA的直流电机PWM调速系统设计。采用PWM(脉冲宽度调制)技术,速度值采用LCD或数码管显示。1.2.2通过课程设计的实践,进

2、一步了解和掌握硬件描述语言(VHDL或Verilog)和TOP-DOWN的设计流程,提高对实际项目的分析和设计能力,体会FPGA项目开发的过程,熟悉实验报告的编写规。2设计原理分析21直流电机结构如下图1.1所示图2.1 直流电机的构造 将直流电源通过电刷接通线组线圈,使线组线圈导体(电枢导体)有电流通过,在电磁的作用下,线组线圈将会产生磁场,同时产生的磁场与主磁极的磁场产生电磁力,这个电磁力作用于转子,使转子以一定的速度开始旋转,电机就开始工作。 在电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当

3、磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间霍尔元件输出端低脉冲的个数推算出直流电机的转速。 本次设计中,调节PWM占空比进而控制直流电机转速,在本次设计中,为了保护霍尔元件,故设定程序每6秒刷新一次数据,所以在数码管显示的数据乘以10就是在该占空比时的直流电机每分钟转速。在这次的实验中数码管采用的8位共阴极数码管,通过锁存器输入数据使得数码管的8个段码数字显示,再通过选择输出数据对所需数码管进行选择。22电路原理图图2.2 电路原理图3

4、设计方案上述原理图中包含PWM模块、测速模块、计数模块、电机模块、滤波模块。电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间霍尔元件输出端低脉冲的个数推算出直流电机的转速。本次设计为六秒记一次数,乘十就是每分钟转速值。再通过驱动模块显示数码管数据。4设计步骤(1)首先确定整体设计方案,确定设计需要使用的

5、软件;(2)设计电路模块,编写各模块程序代码并进行仿真编译;(3)完成整体电路图设计后,使用Quartus软件对整体电路进行仿真调试;(4)连接硬件,使用示波器观察产生的波形,对不足之处进行改进调试。5调试结果说明连接好试验箱,把硬件与实验箱接通,将程序下载到实验箱中。进行实验,示波器观察PWM脉冲波形(占空比),看实验结果与预期效果是否相同,若相同,则实验无误。其波形如下:占空比为50%时占空比为90%时将程序下载到实验箱中后,其实际操作过程如下:K12为使能键,使K12=1;输入时钟信号为1MHZ;(1) K4=1时,示波器和LED的显示如下:示波器显示的是霍尔元件单位时间计数的个数为31

6、.011显示器是每六秒电机转的圈数为186转结论:31.011*6=186.066于186近似,所以结论符合要求。(2) K4=1,k3=1时,示波器和LED的显示如下:结论:68.6338*6=411.8028于412近似,所以结论符合要求。(3) K4=1,k3=1,K2=1时,示波器和LED的显示如下:结论:85.516*6=513.096于513近似,所以结论符合要求。(4) K4=1,k3=1,K2=1,K1=1时,示波器和LED的显示如下:结论:90.0339*6=540.2034于541近似,所以结论符合要求。 通过以上的比较,发现示波器中的结果与数码管上数据大概一致,即实验结果

7、基本达到要求。6心得体会 本次课程设计,用FPGA控制直流电机,完成直流电机PWM调速系统设计,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。是一次很好的学习和实践的机会。通过课程设计,我明白了电机工作的原理,以及用FPGA控制电机的原理。最重要的是,对如何设计一个系统有了更进一步的了解,积累了很多经验。从下载测试的结果来看,设计的要求基本上都实现了。但是仍存在不少问题。每个模块生成基本电路后,把各个模块的进行连接,仿真结果是正确的。但是当连接到试验箱后,电机正常转动,LED却无法显示。检查电路和程序还有电路图,并发现什么问题。无意中发现LED偶尔会出现数字,但也只是闪一下。最后才发

8、现是因为电机转动太快了,LED无法及时显示或者是一直在闪,人眼无法识别。在程序中加入了滤波模块,才解决了问题。在设计的过程中,开始照着EDA课本上的原理设计,后来才发现所设计的电路有很多地方都满足不了设计要求,使设计一度遭遇了很大困难。通过与同学讨论请教,逐步改进了设计,终于使设计的电路和设计要求相吻合。在这中间,通过不断提出问题,解决问题,我对这次设计的原理有了更深的了解,也给我分析问题,解决问题提供了很多好的方法,好的思路。同时,我也发现了自己存在的很多不足。发现自己在设计一个系统的时候不能够统筹兼顾,不能够从总体上把握设计的思路,也不能看清问题的核心与关键所在。这些都需要在下面不断学习实

9、践,理论毕竟只是理论,要多参加实践,这样才能提高自己的能力,积累经验。附录一PWM模块程序Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity PWM isport( clock:in std_logic; duty_cycle:in std_logic_vector(3 downto 0); pwm_en:in std_logic; pwm_out:out std_logic);end entity;architecture ar

10、t of PWM is signal pwm_out_io:std_logic; signal count:std_logic_vector(3 downto 0);begin pwm_out=pwm_out_io; process(clock) begin if rising_edge(clock) then if pwm_en=1 then count=count+1; end if; end if; end process; process(clock) begin if rising_edge(clock) then if pwm_en=1 and countduty_cycle th

11、en pwm_out_io=1; else pwm_out_io=0; end if; end if; end process;end;测速模块程序library ieee ;use ieee.std_logic_1164.all ;use ieee.std_logic_arith.all ;use ieee.std_logic_unsigned.all ;entity cesu isport( clk : in std_logic; -时钟输入1Mhz ena : out std_logic; -允许计数 clr : out std_logic; -计数器清零信号产生 load : out

12、std_logic); -锁存、显示输出允许高有效end cesu;architecture behav of cesu is signal clkk :std_logic; -1HZ时钟信号 signal count :integer range 0 to 7;-6秒计数 signal clr1 :std_logic; -清零信号 signal ena1 :std_logic; -允许计数信号 signal load1 :std_logic; -允许计数信号 -signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;-计数数据begin process(

13、clk) variable c:std_logic; variablet:integer range 0 to 500000; begin if clkevent and clk=1 then t:=cnt+1; ift=500000 then t:=0; c:=not c;end if; end if; clkk=c; end process; process(clkk) -6秒计数 begin if clkkevent and clkk=1 then count=count+1; if count6 then ena1=1;load1=0;clr1=0; elsif count=6 then ena1=0;load1=1;clr1=0; elsif count=7 then ena1=0;load1=1;clr1=1; end if; end if; ena=ena1; load=load1; clr=clr1; end process;end behav;计数模块程序library ieee;use ieee.std_logic_1164.all; entityt10 is port (clk:in

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号