三项6路互补PWM波输出.docx

上传人:b****5 文档编号:11669480 上传时间:2023-03-30 格式:DOCX 页数:12 大小:231.07KB
下载 相关 举报
三项6路互补PWM波输出.docx_第1页
第1页 / 共12页
三项6路互补PWM波输出.docx_第2页
第2页 / 共12页
三项6路互补PWM波输出.docx_第3页
第3页 / 共12页
三项6路互补PWM波输出.docx_第4页
第4页 / 共12页
三项6路互补PWM波输出.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

三项6路互补PWM波输出.docx

《三项6路互补PWM波输出.docx》由会员分享,可在线阅读,更多相关《三项6路互补PWM波输出.docx(12页珍藏版)》请在冰豆网上搜索。

三项6路互补PWM波输出.docx

三项6路互补PWM波输出

安徽工业大学

实验报告

 

课程名称:

硬件描述语言与系统仿真

课题名称:

通用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波的开关频率、死去时间、占空比实行同时同频控制。

这大大减少了该IP核的模块,并非常易于实现PWM信号的同步。

这样的设计也简化了用户使用时的参数设置。

通用PWMIP核是针对一般电力电子应用场合而设计,应具有较好的可设置性,如开关周期、死区时间、PWM模式以及功率保护等设置。

2、通用PWMIP核的构建

2.1总体结构

为了简化说明,下面以单项PWM波的产生为例来说明三项PWM波发生器。

单项PWM波产生主要包括如下图

(一)中的几个模块。

硬件的时钟脉冲经分频器分频后作为系统的各个模块的同一时基。

DDS(DirectDigitalSynthesizer)即直接数字合成器,是一种新型的频率合成技术。

具有较高的频率分辨率,可以实现快速频率切换并且在改变时能够保持相位的连续。

本文的9位自加器就是根据DDS原理来实现对三角波ROM进行循环寻址,从而得到频率可调的三角波。

将所得三角波与用户输入的一个数值在比较器中比较后得到一路占空比可控的PWM波。

最后加一个死去产生模块就能输出两路互补的死去可控的PWM波,分别标记为XH、XL。

三项6路互补PWM波的产生,原理上与单项PWM波产生一样,只不过在三角波ROM中分别错开了120度角。

2.2各个模块的设计

1、分频器模块:

由于而本设计系统用的是1M的时钟,并且三角波ROM中总共存了1000个值,根据公式

(M是频率控制字),就可以实现步长为1K的频率跳转。

而FPGA硬件用的是20M的时钟脉冲,所以设计中加了一个20倍的分频器。

其模块和代码如下:

--20倍的分频器设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityfen_pinIS

port(clk:

instd_logic;

clkout:

outstd_logic);

endfen_pin;

architecturertloffen_pinis

signalnt:

std_logic_vector(4downto0);

signalcnt:

std_logic;

begin

Process(nt,clk)

begin

ifclk'eventandclk='1'then

ifnt=9then

nt<="00000";--强制回零

clkout<=cnt;

cnt<=notcnt;--翻转

elsent<=nt+1;

endif;

endif;

endprocess;

endrtl;

2、自加器模块:

首先对DDS原理进行简单介绍,对于信号发生器而言,他的输出可以用下式来描述:

——

(1)

其中,Sout是指该信号发生器的输出信号波形,fout指输出信号对应的频率。

上式的表述对于时间是连续的,为了用数字逻辑实现该表达式,必须进行离散化处理,用基准时钟clk进行抽样,令正弦信号的相位θ为

——

(2)

在一个clk周期Tclk,相位θ的变化量为

——(3)

其中fclk指clk的频率,对于2

可以理解成“满”相位,为了对

进行数字量化,把2

切个成N份,由此每个clk周期的相位增量

用量化值

来表述:

,且

为整数。

与公式(3)联立,可得

本文的自加器就是基于这样一个原理,由外部输入一个频率控制字M,在自加器中以M为步长从零开始自加至超过1000后强制回零,从而在三角波ROM中循环寻址输出不同频率的三角波。

三角波输出频率为:

其模块和代码如下:

--10位自加法器模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYADDIS

PORT(A:

INSTD_LOGIC_VECTOR(9DOWNTO0);

B:

INSTD_LOGIC_VECTOR(9DOWNTO0);

clk:

INSTD_LOGIC;

S:

INOUTSTD_LOGIC_VECTOR(9DOWNTO0));

ENDADD;

ARCHITECTUREbehavOFADDIS

BEGIN

PROCESS(clk)

BEGIN

IFclk'eventandclk='1'then

IFS>="1111100111"THEN

S<="0000000000";--强制回零

ELSES<=A+B;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehav;

3、三角波ROM:

本设计中将三角波采了1000个计数点(便于频率计算),存放在一个10位ROM中,为了尽可能精确,输出采用8位二进制输出形式。

将所采的1000个值分别错开120度排列存放在三个不同的ROM中实现了三角波的相位移动从而得到三项PWM波输出。

三个ROM表里的值如下图所示:

(一)初相为零三角波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表如下:

模块

占空比控制字的ROM表

5、比较器模块:

产生三项三角波后,将每项三角波与占空比控制字在比较器中作比较。

令8位占空比控制字为A,三角波为B,具体见比较器模块。

在比较器中,当A>=B时,Y输出为高电平;当A

这就得到了频率和占空比都可控的PWM波。

比较器模块和代码如下所示:

比较器模块及其连接图

--8位比较器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcomp8_1IS

PORT(A:

INSTD_LOGIC_VECTOR(7DOWNTO0);

B:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Y:

OUTSTD_LOGIC);

ENDcomp8_1;

ARCHITECTUREbehaveOFcomp8_1IS

BEGIN

PROCESS(A,B)

BEGIN

IF(A>=B)THEN

Y<='0';

ELSE

Y<='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;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

Entitydead_1is

Port(AH,AL:

outstd_logic;

clk,Ax:

instd_logic;

Dead_time:

instd_logic_vector(7downto0));

Enddead_1;

Architecturedeadofdead_1is

signalpA:

std_logic_vector(7downto0);

Begin

Process(clk)

Begin

If(clk'EVENTandclk='1')then

If((Ax='1')and(pA/=dead_time))then

pA<=pA+1;

Elsif((Ax='0')and(pA/="00000000"))then

pA<=pA-1;

Endif;

If((Ax='1')and(pA=dead_time))then

AL<='1';

Else

AL<='0';

Endif;

If((Ax='0')and(pA="00000000"))then

AH<='1';

Else

AH<='0';

Endif;

Endif;

Endprocess;

Enddead;

3、仿真结果

在QuartusII6.0软件里把每段功能的代码模块化后在bdf文件下连接成如下图所示的原理框图。

然后对该bdf文件进行编译。

之后再新建一个vwf的波形文件,调入输入输出端子后幅了入下图几个对比参数值,然后仿真,其结果见下图:

三项6路互补PWM波产生原理框图

仿真结果

仿真结果分析:

仿真结果中,clk是时钟,dead-time是死区时间,fword是频率控制,zhan_kong指占空比,图中仿真起始和数值过度段仿真结果不理想,这是没有设置缓冲带的原因。

其他波段,则很好地反映了三项PWM波输出,而且并且不同的参数下,显示了不同的占空比,频率和死区。

仿真结果里用的时钟是经分频后的1M时钟脉冲。

参考文献

[1]潘松、黄继业等.EDA技术实用教程(第三版)[M].北京:

科学出版社,2006

[2]潘松、王国栋等.VHDL实用教程(修订版)[M].成都:

成都电子科技大学出版

社,2001

[3]黄正谨、徐坚等.CPLD系统设计技术入门与应用[M].北京:

电子工业出版社,2002

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1