三项6路互补PWM波输出_第1页
三项6路互补PWM波输出_第2页
三项6路互补PWM波输出_第3页
三项6路互补PWM波输出_第4页
三项6路互补PWM波输出_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

安徽工业大学实验报告课程名称: 硬件描述语言与系统仿真课题名称:通用PWMIP核模块学院: 电气学院 专业: 电气工程(专硕) 姓名: 丁凯 学号: 20120278 指导教师:武卫华2013.1.10摘要利用QuartusII6.0软件,在其特定的VHDL语言运行的环境下,设计出了一个通用的三相6路互补输出的PWM波IP核模块。其中每项PWM波带死区,频率从5k变换到10k,占空比从0.1〜0.9可调,这些都可由用户设置。本文用软件方法实现死区可控,通过改变调制波的值来实现占空比调节,并采用DDS技术设计一个自加模块对三角波ROM寻址来实现频率可控。在设计的过程中运用了分频器模块,三角波和比较器模块,在实际的实验仿真中得出所需要的信号发生模块,是的进一步对VHDL语言的理解与应用在电力电子上,对软件QuartusII6.0软件更进一步了解。关键词:PWM波分频模块比较器DDS技术1、 引言随着FPGA(FieldProgrammableGateArray)和EDA(ElectronicDesignAutomation)技术的发展。一些研究者纷纷采用可编程逻辑器件构建多路PWM发生器来简化电力电子核心数字电路,提高系统的可靠性,但是所有这些设计均根据主电路特定的应用场合定制,因而缺乏通用性和灵活性。由于三项PWM波有紧密的相关性,本文设计了统一的时钟频率,对每一对PWM波的开关频率、死去时间、占空比实行同时同频控制。这大大减少了该小核的模块,并非常易于实现PWM信号的同步。这样的设计也简化了用户使用时的参数设置。通用PWMIP核是针对一般电力电子应用场合而设计,应具有较好的可设置性,如开关周期、死区时间、PWM模式以及功率保护等设置。2、 通用PWMIP核的构建2.1总体结构为了简化说明,下面以单项PWM波的产生为例来说明三项PWM波发生器。单项PWM波产生主要包括如下图(一)中的几个模块。硬件的时钟脉冲经分频器分频后作为系统的各个模块的同一时基。DDS(DirectDigitalSynthesizer)即直接数字合成器,是一种新型的频率合成技术。具有较高的频率分辨率,可以实现快速频率切换并且在改变时能够保持相位的连续。本文的9

位自加器就是根据DDS原理来实现对三角波ROM进行循环寻址,从而得到频率可调的三角波。将所得三角波与用户输入的一个数值在比较器中比较后得到一路占空比可控的PWM波。最后加一个死去产生模块就能输出两路互补的死去可控的PWM波,分别标记为XH、XL。三项6路互补PWM波的产生,原理上与单项PWM波产生一样,只不过在三角波ROM中分别错开了120度角。加数*率控制字—20分频器'兆加数*率控制字—20分频器'兆*自加器 >三角波ROM死区挫制字常数二占空比控制字比较器FWM波死区控

制模块XHXL2.2各个模块的设计1、分频器模块:由于而本设计系统用的是1M的时钟,并且三角波ROM中总共存了1000个值,根据公式f 1000m(M是频率控制字),就可以实现步长为1K的频率跳转。而FPGA硬件用的是20M的时钟脉冲,所以设计中加了一个20倍的分频器。其模块和代码如下:Pclkfen_pinclkclkoutinst18Pclkfen_pinclkclkoutinst18--20倍的分频器设计libraryieee;useieee.std_logic_1164.all;--20倍的分频器设计libraryieee;useieee.std_logic_1164.all;signalnt:std_logic_vector(4downto0);signalcnt:std_logic;beginuseieee.std_logic_arith.all;Process(nt,clk)useieee.std_logic_unsigned.all;entityfen_pinISport(clk:instd_logic;useieee.std_logic_unsigned.all;entityfen_pinISport(clk:instd_logic;clkout:outstd_logic);endfen_pin;architecturertloffen_pinisbeginifclk'eventandclk='1'thenifnt=9thennt<="00000";--强制回零clkout<=cnt;cnt<=notcnt;--翻转endprocess;endrtl;endprocess;endrtl;endif;endif;2、自加器模块:首先对DDS原理进行简单介绍,对于信号发生器而言,他的输出可以用下式来描述:S=Asin①t=Asin(2丸ft) (1)其中,sout是指该信号发生器的输出信号波形,fout指输出信号对应的频率。上式的表述对于时间是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk进行抽样,令正弦信号的相位。为0=2兀ft2兀f out在一个clk周期Tclk2兀f out(3)fclkA°=(3)fclk其中如指clk的频率,对于2兀可以理解成“满”相位,为了对A0进行数字量化,把2兀切个clk成N份,由此每个clk周期的相位增量^0用量化值气0来表述:B/^.N,且B履为整数。与公式(3)联立,可得BA0='out,B=N•'outNfA0fclk clk本文的自加器就是基于这样一个原理,由外部输入一个频率控制字M,在自加器中以M为步长从零开始自加至超过1000后强制回零,从而在三角波ROM中循环寻址输出不同频率的三角波。三角波输出频率为:f=念m。其模块和代码如下:ADDftA/nrrirQHl | 、|«F_ADDftA/nrrirQHl | 、|«F_T」 : A[9..O] 3[9..O:B[9..O]elkirisFHLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDISPORT(A:INSTD_LOGIC_VECTOR(9

DOWNTO0);B:INSTD_LOGIC_VECTOR(9DOWNTO0);clk:INSTD_LOGIC;S:INOUTSTD_LOGIC_VECTOR(9

DOWNTO0));--10位自加法器模块ARCHITECTUREbehavOFADDISBEGINPROCESS(clk)BEGINIFclk'eventandclk='1'thenIFS>="1111100111"THENS<="0000000000"; --强制回零ELSES<=A+B;ENDIF;ENDIF;ENDPROCESS;ENDADD; ENDbehav;3、三角波ROM:本设计中将三角波采了1000个计数点(便于频率计算),存放在一个10位ROM中,为了尽可能精确,输出采用8位二进制输出形式。将所采的1000个值分别错开120度排列存放在三个不同的ROM中实现了三角波的相位移动从而得到三项PWM波输出。三个ROM表里的值如下图所示:

AddrF+1+7T+4+5祁日0170169169168168167167166316616516516416416316316216162161161160160159159158241581571561561551551641643215315315215216115115015040149'149148148147147M614648145145144144143143142142561411411401401391391381386413713713613613513513413472133132132131131130130129301291281281271271261261268812512412412312312212212196121120120119'11911811811710411711611611511511411411311211311211211111111011010912010810810710710610G105105128104104103103102102101101136100100999998989797144969695969494939316292929191909089891608888878786868584168848383828281818017680797978781111761847675757474737372Addr+0+1+2Addr+0+1+2+3+5+6H017017017117117217217317381741741751751761761771771617817817917918018018118124182182183183184184185186321861871871881881891891904019019119119219219319319448194195195196196197197198561981991992002002012012026420220320320420420520520672206207207208209209210210802112112122122132132142148821521521621621721721821896219219220220221221222222104223223224224226226226226112227227228228229229230230120231232232233233234234235128235236236237237238238239136239240240241241242242243144243244244245245246246247152247248248249249260260251160251252252263263264255255168254253253252252251251250176250249249248248247247246184246245245244244243243242(一)初相为零三角波ROM部分值(二)初相为120°三角波ROM部分值(三)初相为240°三角波ROM部分值

4、占空比控制字模块:由于三角波以8位二进制输出,最大值为255。要实现占空比可控,就要不断调节与三角波的比较常值大小。当比较值为230时,由230/255=0.9可知此时占空比为90%,比较值为204时,有204/255可知此时占空比为80%,以此类推。但是这样输入值使得用户还要计算,很不方便。为了解决这个问题,我们把比较值装入一个ROM,由外部寻址来调节占空比。当外部输入值为9时,寻址找到ROM的230,即输出波形占空比为90%;输入8时,寻址找到204,即输出波形占空比为80%,输入7时,寻址找到178,即输出波形为占空比70%,以此类推。占空比控制字模块及ROM表如下:I7hwn_knng_hi-address[4..O]->clockii模块Addr+0吨+3+4+5+7002551761021271531788204230占空比控制字的ROM表5、比较器模块:产生三项三角波后,将每项三角波与占空比控制字在比较器中作比较。令8位占空比控制字为A,三角波为令8位占空比控制字为A,三角波为B,为高电平;当A<B为高电平;当A<B时,Y输出低电平。这就得到了频率和占空比都可控的PWM波。比较器模块和代码如下所示:比较器模块及其连接图比较器模块及其连接图--8位比较器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcomp8_1ISPORT(A:INSTD_LOGIC_VECTOR(7DOWNTO0);B:INSTD_LOGIC_VECTOR(7DOWNTO0);Y:OUTSTD_LOGIC);ENDcomp8_1;ARCHITECTUREbehaveOFcomp8_1ISBEGINPROCESS(A,B)BEGINIF(A>=B)THEN<='0';ELSE<='1';ENDIF;ENDPROCESS;ENDbehave;6、死区产生模块:本实验的把产生死去放在最后一个模块是出于以下几个原因:1) 改变死区时不会影响前面模块的参数;2) 编程算法相对容易实现;3) 所产生的死区更不容易上失真;下面以A相为例说明死去产生的原理,算法中使加计数和减计数交替执行,计数周期由外部用户输入决定。死区计数采用饱和计数,饱和计数的特性类似于电容的充放电过程,饱和溢出则回零,规则:(1) 当输入为0时,如果计数值等于0,则计数值保持不变,否则作减1计数;(2) 当输入为1时,如果计数值等于max,则计数值保持不变,否则作加1计数;(3) 当输入为1且死区计数数值为max时,AL=0,AH=1;(4) 当输入为0且死区计数数值为0时,AL=1,AH=0;(5) 当死区计数数值在0~max之间时,AL=0,AH=0,从而形成死区。其中,max就是用户控制输入的死区控制字,具体时序参见下图。设置一个8位用户控制死区时间,使得用户有一个较宽的死区控制时间,但是所设定的死去时间不应超过输出PWM波宽度的一半。以下是死区产生模块及其代码:死区产生的时序原理图模块图死区产生的时序原理图模块图--死区产生模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;Entitydead_1isPort(AH,AL:outstd_logic;clk,Ax:instd_logic;Dead_time:instd_logic_vector(7downto0));Enddead_1;Architecturedeadofdead_1is

signalpA:std_logic_vector(7downto0);BeginProcess(clk)BeginIf(clk'EVENTandclk='1')thenIf((Ax=T)and(pA/=dead_time))thenpA<=pA+1;Elsif((Ax='0')and(pA/="00000000"))then

pA<=pA-1;Endif;If((Ax=T)and(pA=dead_time))thenAL<='1';ElseAL<='0';Endif;If((Ax='0')and(pA="00000000"))thenAH<='1';ElseAH<='0';Endif;Endif;Endpro

温馨提示

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

评论

0/150

提交评论