基于FPGA的可调制脉宽调制发生器的设计.docx_第1页
基于FPGA的可调制脉宽调制发生器的设计.docx_第2页
基于FPGA的可调制脉宽调制发生器的设计.docx_第3页
基于FPGA的可调制脉宽调制发生器的设计.docx_第4页
基于FPGA的可调制脉宽调制发生器的设计.docx_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

科研创新训练研究报告 题 目:基于fpga的可调制脉宽调制发生器的设计学 院:测试与光电工程学院 专业名称:电子科学与技术班级学号: 11083229学生姓名: 郑煌盛 指导教师: 柴明钢 2014 年11月 14日基于fpga的可调制脉宽调制发生器的设计与实现摘要:随着电子技术的发展,特别是asic(专用集成电路)设计技术的日趋完善,数字化的eda(电子设计自动化)工具给电子设计带来了巨大变革,在电机控制等许多应用场合,需要产生多路频率和脉冲宽度可调的pwm(脉宽调制)波形,这可通过fpga(现场可编程门阵列)丰富的硬件资源和可以配置io引脚来实现。嵌入式系统中fpga的应用设计关键是系统软硬件功能的划分,现场可编程门阵列(fpga)和数字信号处理器(dsp)的飞速发展,使得数字控制技术逐渐取代模拟控制技术实现系统的控制功能。数字化控制具有速度快、控制精度高以及控制方案灵活的优点,并且可以利用较少的器件获得更理想的结果,因此具有很高的应用价值。本设计基于fpga设计了一个可调制的pwm发生器,使用vhdl(超高速硬件描述语言)进行了控制输出的脉冲宽度的功能设计。本文首先从数据获取,然后用vhdl语言对数据进行处理,使得获得的数据能够对脉冲宽度进行控制,并通过在quartusii软件中进行了仿真验证,最后进行了下载调试。结果表明,符合系统设计要求,从而完成了本次研究与设计。关键词:fpga 脉宽调制(pwm) 数据获取 vhdl目录基于fpga的可调制脉宽调制发生器的设计与实现- 2 -一 pwm脉宽调制发生器的设计- 5 -1.1 pwm概述说明- 5 -1.2 脉宽调制发生器设计方法猜想- 5 -1.2.1 方案一的设计:- 5 -1.2.2 方案二的设计- 6 -1.2.3 方案的选择:- 7 -二 脉宽调制fpga输入设计- 7 -2.1脉宽调制数值输入方法的设计- 7 -2.1.1方法一:- 7 -2.1.2方法二:- 7 -2.1.3方法一和二的选择比较:- 8 -2.2vhdl数值输入使然模块的设计- 8 -2.2.1vhdl使然程序设计:- 8 -2.2.1 vhdl使然软件模块设计- 9 -2.2.2vhdl使然模块波形仿真- 9 -2.3 vhdl输入数值处理模块的设计- 10 -2.3.1 输入数值处理程序设计- 10 -2.3.2 vhdl输入数值软件模块设计- 11 -2.3.3 vhdl数值输入模块软件仿真- 11 -2.4相频检波模块的设计- 12 -2.4.1 相频检波模块软件实现- 12 -2.4.2 相频检波模块仿真- 12 -2.5脉宽调制数值输入方案仿真结果总结- 13 -2.5.1 vhdl模块的设计综合- 13 -2.5.2 vhdl模块综合仿真- 14 -2.6数码显示管的数值显示设计- 14 -2.6.1数码管原理图说明- 14 -2.6.2 数码显示管vhdl程序设计- 15 -2.6.3数码管vhdl显示模块设计- 17 -2.6.4vhdl程序仿真- 17 -2.7fpga下载与配置- 18 -三 vhdl脉宽调制硬件实现- 20 -3.1fpga芯片选择- 20 -3.2 电路图的设计- 20 -3.3 实验数据验证- 21 -四、问题及展望- 22 -五 结束语- 23 -参考文献- 24 -一 pwm脉宽调制发生器的设计1.1 pwm概述说明pwm(脉宽调制)是现代控制技术常用的一种控制信息输出,可以有效地利用数字技术控制模拟信号的技术。由于pwm可以同时实现变频变压反抑制谐波的特点,在交流传动及至其它能量变换系统中得到广泛应用。目前实现方法为采用全数字化方案,完成优化的实时在线的pwm信号输出。本文通过对外部输入的数据进行比较的设计实现pwm输出波形的频率、电压幅值、占空比的连续调节,达到产生pwm信号目的。1.2 脉宽调制发生器设计方法猜想1.2.1 方案一的设计:本方案设计的一个简单的pwm 控制器,其基本原理就是使用一个寄存器存储将要加载到双向计数器的值,计数器用于产生脉宽调制信号。一个数据寄存器存储计数器的值,该值确定了脉冲宽度。当双向计数器的计数达到最大值,它将会从数据寄存器加载一个新的值,一个t型触发器将用于产生pwm 输出。当数据第一次被加载时,计数器开始从这个数据值减计数到0.在这个操作阶段,计数的终值和pwm信号均为0.当计数器计数到0时,产生新的技术终值信号,并且它会触发t型触发器,驱动pwm 信号为高电平1.数据值重新记载到计数器,并且计数器增计数到最大值。当计数器计数到最大值时,产生一个新的计数终值信号,并驱动pwm信号从高电平变为低电平。数据值重新加载到计数器,并且新的一个计数周期重复。计数器的计数方向有pwm信号控制:当pwm信号为低电平时,计数器为减计数器;当pwm信号为高电平时,则计数器为增计数器。计数终值控制从数据寄存器加载数据到计数器,当计数终值信号为高电平时,数据被加载。pwm信号的占空比由加载到双向计数器的数据控制,数据的值越大,则占空比越大。该pwm信号发生器的结构简图如图2.1所示。图2.1结构图1.2.2 方案二的设计:本方案设计了另一种简单的pwm(脉冲宽度调制)信号发生器,在fpga芯片中,使用vhdl语言编程,设置输入输出端口,使得此信号发生器由两个完全相同的可自加载的加法计数器lcnt8组成,它的输出信号的高、低电平脉宽可分别由两组8位预置数进行控制。输入任意两组8位二进制数a和b到数据比较器中。当a小于b时,数据比较器输出高电平1;当a 大于或等于b时,数据比较器输出低电平0。将数据比较器的输出值赋给加法计数器lcnt8的加载信号ld。当ld为1时,加法计数器的计时变量cnt开始计时。若计时变量cnt大于预置数a(b)时,加法计数器lcnt8输出高电平信号1;反之,加法计数器lcnt8输出低电平信号0。当加载信号ld为0时,加法计数器lcnt8同样也输出低电平信号0。最后,两个可自加载的加法计数器lcnt8的输出在经过一个相位检测器,输出一个脉冲信号pwm。通过fpga芯片的下载验证。该脉冲信号pwm的占空比与两个加法计数器lcnt8的输出信号上升沿的时间有关,即我们可以通过改变两个可自加载的加法计数器的预置数,来获得脉宽不同的信号,从而实现脉宽的可调性。该pwm信号发生器的结构简图2.2所示。图2.2结构图1.2.3 方案的选择: 方案一和方案二都能实现脉冲宽度的调制,并且脉冲信号的高低脉宽的可调范围都是0255。但从脉冲信号的应用方面考虑,由于方案二的输入端有两个,我们可以通过固定其中一个输入端的值,改变另一输入端的值来实现产生不同的脉冲信号,其应用范围更为广泛。例如,我们可以利用方案二来测定环境中的温度,一个输入端固定为某一温度值,另一端接一个温度传感器。当温度传感器感受到的温度大于固定温度时,输出占空比大的脉冲信号以驱动外围电路中的风扇转动从而达到降温的效果;当温度传感器感受到的温度小于或等于固定温度时,输出占空比为0或很小的脉冲,该脉冲不能驱动风扇转动,从而达到一种智能温控的效果。因此,本次所设计的脉冲信号(pwm)发生器采用的是方案二的设计方法。二 脉宽调制fpga输入设计2.1 脉宽调制数值输入方法的设计2.1.1 方法一:固定脉冲宽度:由四个0-1开关控制输入值为0001,0010,0100,1000,分别设定四个固定的脉宽对应于输入的四个数值,比如当开关为0001时,输出30%的脉宽;当开关为0010时,输出50%的脉宽;当开关为0100时,输出为70%的脉宽;当开关为1000时,输出为85%的脉宽。2.1.2 方法二:比较产生脉宽:设定两个输入值a和b,这两个值分别八位二进制数值,有0-1快关控制,在fpga用vhdl语言设定程序,使得a和b的值在芯片中进行比较的处理,并用a和b的差值作为脉宽的输出的高电平。通过不断改变a和b的差值的变化来改变脉冲宽度。2.1.3 方法一和二的选择比较: 方法一的优点为简单方便,只需要控制少量的开关就能达到控制脉宽变化的目的。但缺点也很明显,就是由于脉宽的固定,只能改变固定的脉宽,使用范围小,不能灵活变化。方法二的优点为能够准确的控制然后得到自己想要的脉冲宽度,现实运用广泛。缺点为开关较多,控制起来较为麻烦。按照我们的实验要求来说,选择方法二好一点,能够通过不断的变化,得到准确的脉宽,还可以得出相应的脉冲宽度对应的电压值。2.2 vhdl数值输入使然模块的设计2.2.1 vhdl使然程序设计:由于a和b的差值在实际中存在两种情况,为了不让结果产生多样性,所以决定在其中加入一个使然程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity b isport(clk:in std_logic; -内置时钟50mhz a,b:in std_logic_vector(7 downto 0); ld:out std_logic); -控制a,b比较使然end;architecture art of b isbeginprocess (clk,a,b) -标准计数器 begin if clkevent and clk=1 then -判断高电平 if ab then ld=1; -当ab -ab时,使然端为高电平 else ldb时,ld=0,输出为低电平;当ab时,ld=1,输出为高电平。2.2.2 vhdl使然模块波形仿真从仿真结果可以看出当ab时,ld为高电平,随着clk时钟信号的计数,输出电平表现出周期变化。和上面的要求一致,所以该模块可以实现要求的功能。2.3 vhdl输入数值处理模块的设计2.3.1 输入数值处理程序设计 由于实际的数值为十进制,而输入的数值为八位二进制,所以要使得输入的数值能够方便的进行比较,必须使得数值进行方波化,用0和1表示,所以设计了一个转化程序,在255的时钟信号里进行自加计数,从零开始一直进行自加,直到与输入的值相等为止,输出的都为低电平,其余都为高电平。library ieee;use ieee.std_logic_1164.all;entity l is port(clk,ld:in std_logic; d:in integer range 0 to 255; -时钟计数周期为255 cao:out std_logic); end entity l;architecture art of l is signal count:integer range 0 to 255; -设定时钟周期为255 signal cnt:integer range 0 to 255; begin count=d; process(clk) begin if clkevent and clk=1 then -检测高电平 if ld=1 then -检测使然端,使然端为1时,运行;为0时不运行 cnt count)then cao=1; else cao=0; end if; else caob,使然端为0,输出恒为低电平,而当b=210时,ab,使然端为1,开始相频检波,得到一个高电平宽度为110,占空比为43%。符合实验要求,达到实验目的。2.6 数码显示管的数值显示设计2.6.1 数码管原理图说明本次设计的数据显示采用的共阴极数码显示管,其显示管的显示与十进制数字的对应关系为:0111111-0,0000110-1,1011011-2,1001111-3,1100110-4,1101101-5,1111101-6,0000111-7,1111111-8,1101111-9。如下图所示2.6.2 数码显示管vhdl程序设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity look is port(d:in std_logic_vector(7 downto 0); led7s1,led7s2,led7s3:out std_logic_vector(6 downto 0);end entity;architecture one of look is signal ai,bi,ci:integer range 0 to 9; signal di:integer range 0 to 999; begin di=conv_integer(d); process(di) variable a,b,c:integer range 0 to 9; begin a:=di rem 10; b:=(di-a)/10) rem 10; c:=(di-a-10*b)/100) rem 10; ai=a; -选择数码管1,2,3的输出顺序 bi=b; ciled7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s1(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s2(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)led7s3(6 downto 0)a时,系统将驱动外界的风扇转动,从而达到智能降温的效果。因此,我们可以将此次所设计的pwm系统的b端口接上一个ds18b20温度传感器,从而完善成一个智能温控系统。总之,本次所设计的脉宽调试(pwm)系统虽然简单,但是这个简单的系统还是体现了pwm的核心思想。五 结束语通过此课程设计,学会了使用quartes ii,并能用vhdl对所需要的波形进行编程。也了解了脉宽调制在生活中的运用。运用对脉宽进行调制的方法与传统的器件控制有着很大的优势。(1)了解fpga 器件的特征和优点,了解利用fpga 进行电路设计时详细流程。了解pwm在fpga 器件上的仿真验证过程,得出了出了控制器整体仿真图。(2)通过本课题设计,了解了传统的产生脉宽调制的方法的缺点和不足,了解了软件仿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论