基于FPGA的直流电机PWM调速系统设计实现分析.pdf

上传人:w**** 文档编号:80707395 上传时间:2023-03-23 格式:PDF 页数:14 大小:528.55KB
返回 下载 相关 举报
基于FPGA的直流电机PWM调速系统设计实现分析.pdf_第1页
第1页 / 共14页
基于FPGA的直流电机PWM调速系统设计实现分析.pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《基于FPGA的直流电机PWM调速系统设计实现分析.pdf》由会员分享,可在线阅读,更多相关《基于FPGA的直流电机PWM调速系统设计实现分析.pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

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

4、段码数字显示,再通过选择输出数据对所需数码管进展选择。22 电路原理图 图 2.2 电路原理图 3 设计方案 上述原理图中包含 PWM 模块、测速模块、计数模块、电机模块、滤波模块。电机的外部电路参加开关型的霍尔元件,同时在电子转子.1 的转盘上参加一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间霍尔元件输出端低脉冲的个数推算出直流电机的转速。本次设计为六秒记一次

5、数,乘十就是每分钟转速值。再通过驱动模块显示数码管数据。4 设计步骤 1首先确定整体设计方案,确定设计需要使用的软件;2设计电路模块,编写各模块程序代码并进展仿真编译;3完成整体电路图设计后,使用 Quartus软件对整体电路进展仿真调试;4连接硬件,使用示波器观察产生的波形,对缺乏之处进展改进调试。5 调试结果说明 连接好试验箱,把硬件与实验箱接通,将程序下载到实验箱中。进展实验,示波器观察 PWM 脉冲波形占空比,看实验结果与预期效果是否一样,假设一样,则实验无误。其波形如下:占空比为 50%时 占空比为 90%时 将程序下载到实验箱中后,其实际操作过程如下:.1 K12 为使能键,使 K

6、12=1;输入时钟信号为 1MHZ;1 K4=1 时,示波器和 LED 的显示如下:示波器显示的是霍尔元件单位时间计数的个数为 31.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 时,示波器和

7、LED 的显示如下:结论:90.0339*6=540.2034 于 541 近似,所以结论符合要求。通过以上的比较,发现示波器中的结果与数码管上数据大概一致,即实验结果根本到达要求。6 心得体会 本次课程设计,用 FPGA 控制直流电机,完成直流电机 PWM 调速系统设计,实现对直流电机的闭环调速,速度值采用 LCD 或数码管显示。是一次很好的学习和实践的时机。通过课程设计,我明白了电机工作的原理,以及用 FPGA 控制电机的原理。最重要的是,对如何设计一个系统有了更进一步的了解,积累了很多经历。从下载测试的结果来看,设计的要求根本上都实现了。但是仍存在不少问题。每个模块生成根本电路后,把各个

8、模块的进展连接,仿真结果是正确的。但是当连接到试验箱后,电机正常转动,LED 却.1 无法显示。检查电路和程序还有电路图,并发现什么问题。无意中发现 LED 偶尔会出现数字,但也只是闪一下。最后才发现是因为电机转动太快了,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 is port(.1 clock:in std_logic;duty_cy

10、cle:in std_logic_vector(3 downto 0);pwm_en:in std_logic;pwm_out:out std_logic);end entity;architecture art 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

11、if;end process;process(clock)begin if rising_edge(clock)then if pwm_en=1 and countduty_cycle then.1 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 is port(clk:in std

12、_logic;-时钟输入 1Mhz ena:out std_logic;-允许计数 clr:out std_logic;-计数器清零信号产生 load:out 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;-清零信号.1 signal ena1 :std_logic;-允许计数信号 signal load1:std_log

13、ic;-允许计数信号 -signal cq1,cq2,cq3,cq4:INTEGER RANGE 0 TO 15;-计数数据 begin process(clk)variable c:std_logic;variablet:integer range 0 to 500000;begin if clkevent and clk=1 then t:=t+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 coun

14、t=count+1;if count6 then ena1=1;load1=0;clr1=0;.1 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 std_logic;-计数时钟信号 clr:in std_l

15、ogic;-清零信号 ena:in std_logic;-计数使能信号 cq:out integer range 0 to 15;-4 位计数结果输出 carry_out:out std_logic);-计数进位 end t10;architecture behav oft10 is .1 signal cq1:integer range 0 to 15;begin process(clk,ena)begin if clr=1 then cq1=0;-计数器异步清零 elsif clkevent and clk=1 then if ena=1 then if cq1=10 then cq1=1

16、;else cq1=cq1+1;end if;-等于 9,则计数器清零 end if;end if;end process;process(cq1)begin if cq1=10 then carry_out=1;-进位输出 else carry_out=0;end if;end process;cq=cq1;end behav;驱动模块程序.1 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudong_8 is port(clk:in std_logic;-动态显示刷新速度时钟

17、 QQ1,QQ2,QQ3:in std_logic_vector(3 downto 0);-32 位 BCD 码输入,最 03 低位,2831 最高位 qudong1:out std_logic_vector(7 downto 0);-驱动信号输出,07 分别为 abcdefgp contrl:buffer std_logic_vector(2 downto 0);-数码管位选输出,000 最低位数码管有效,111 最高位数码管有效 end qudong_8;architecture behavior of qudong_8 is signal disp:std_logic_vector(3

18、downto 0);signal temp:std_logic_vector(2 downto 0);begin process(clk)begin if clkevent and clk=1 then temp=temp+1;end if;contrldispdispdispdispdispdispdispdispdispqudong1qudong1qudong1qudong1qudong1qudong1qudong1qudong1qudong1qudong1qudong1=00000110;end case;end process;end behavior;消抖模块程序 library i

19、eee;use ieee.std_logic_1164.all;entity*iaodou is port(clk,input:in std_logic;output:out std_logic);end*iaodou;architecture behav of*iaodou is signal cp:std_logic;signal count:integer range 0 to 3;begin process(clk).1 begin if(clkevent and clk=1)then-检测上升沿 if(input=1)then -如果有输入信号 if(count=3)then count=count;-当计数到达 3 时,保持计数值不变 else count=count+1;-当其小于 3 时,进展加 1 处理 end if;if(count=2)then cp=1;-如果计数到达 2,cp 置 1 else cp=0;-其余情况全部为 0 end if;else count=0;-如果计数出现非法状况,进展清零复位 end if;end if;output=cp;-信号输出 end process;end behav;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁