PWM信号发生器的设计报告Word格式文档下载.doc
《PWM信号发生器的设计报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《PWM信号发生器的设计报告Word格式文档下载.doc(23页珍藏版)》请在冰豆网上搜索。
(1)采用VHDL编写相关程序,PWM信号的工作频率为500Hz(1000Hz);
(2)时钟信号通过分频器后,由输入开关量控制占空比可调。
第二章系统组成及工作原理
本次设计采用的是Altera公司开发的QuartusII设计平台,设计采用特殊芯片EPM570T100C5进行仿真,在原理设计方面,本设计采用自顶向下、层次化、模块化的基本程序设计思想,这种设计思想的优点符合人们先抽象后具体,先整体后局部的思维习惯,其设计出的模块修改方便,不影响其他模块,且可重复使用,利用率高。
2.1系统组成
为了使本次设计产生的PWM信号能用于频率稳定度高的晶振,故在系统设计中添加了一个分频模块,因此PWM信号发生器由分频器和信号发生器两个部分组成。
其组成框图如图2.1所示
图2.1PWM信号产生框图
2.2系统设计流程图
PWM信号发生器的总体设计流程图如图2.2所示:
图2.2系统设计流程图
2.3系统工作原理
如上图的框图所示,输入是纳秒(ns)级的高频时钟信号,经过分频模块后产生毫秒(ms)级的低频时钟,然后由低频时钟控制信号发生器,产生一定周期的矩形波,再经过具体的设计形成占空比可调的PWM信号。
本次设计中,设计要求是产生1KHz的脉冲宽度可调的矩形信号,仿真中输入时钟clk的周期为10ns,经过1000分频器后变成周期为10us(频率为0.1MHz)的时钟,再通过信号发生器模块中的计数上限为100计数器,产生周期为1ms(频率为1KHz)的周期矩形信号,再有输入端口控制占空比,产生宽度可调的PWM信号,实现设计要求的功能。
第三章模块的具体实现
3.1分频模块的设计
3.1.1基本设计思想
分频实际就是一个计数的过程,通过计数个数来控制输出高低电平的时间,最重要的是高低电平的维持时间相等,即产生方波信号。
3.1.2设计流程图
使用时钟分频方法产生可用时钟频率的设计流程图如图3.1所示:
图3.1设计流程图
3.1.3主要程序代码
ifclkin='
1'
andclkin'
eventthen--时钟上升沿触发
ifcount=1000thencount:
=0;
--计数计到999则清零
elsifcount<
=500thenclkout<
='
;
--计数到500电平翻转
elseclkout<
0'
endif;
count:
=count+1;
--时钟上升沿计数
3.1.4模块工作原理
定义实体之后,在由输入时钟(ns)触发的进程中实现分频,首先定义一个中间计数变量,当计算输入时钟上升沿个数从0至500时输出高电平,从500至1000时输出低电平,从而产生周期为输入信号1000倍的方波信号,分频比可由下式得到:
A=To÷
Ti(3.1)
其中,To为输出时钟的周期,Ti为输入时钟的周期
3.2用锯齿波比较法生成PWM信号
3.2.1基本设计思想
锯齿波比较法生成占空比不同且一个波形中周期固定的PWM信号的思想来源于锯齿波自身具有的独特性质:
斜率单一、周期固定、用斜率为0的直线与之相切割所得波形周期一定,因此,将希望得到的波形的占空比值作为输入决定与锯齿波相割的直线,可得到周期相等的矩形波,改变输入占空比即改变直线的幅值就可以改变信号的脉冲宽度,其基本原理如图3.2所示:
图3.2锯齿波比较法产生脉宽可调波的原理
3.2.2设计流程图
(1)锯齿波发生器设计的流程图如图3.3所示:
图3.3锯齿波发生器的流程
(2)锯齿波比较法产生PWM信号的流程图如图3.4所示:
图3.4锯齿波比较法产生PWM信号流程图
3.2.3主要程序代码
ifrst='
then
saw_teeth<
="
0000000"
--异步复位
elsifclk'
eventandclk='
then
=saw_teeth+1;
--产生阶梯状的锯齿波
ifsaw_teeth>
1100011"
--锯齿波的最大幅值为100
pwm<
whenperc>
saw_teethelse--锯齿波与常数信号相比较,产生占空比由常
--数(perc)决定的pwm信号
'
whenperc<
=saw_teeth;
3.2.4模块工作原理
锯齿波比较法产生PWM信号的程序结构体中含有一个产生锯齿波的进程,该锯齿波的周期为100,对应到占空比的取值范围0-100,且锯齿波的幅值最大为100,因此当输入的占空比值大于等于100时,输出全高电平波形,同理,当输入占空比值小于等于0时,输出全低电平波形,所以,当输入的占空比值处于正常允许的范围时,对应于图3.2所示的占空比直线切割锯齿波,由于产生锯齿波的时钟与系统同步,从而使产生的PWM信号的脉宽严格对应于输入的占空比值,这样就可以使PWM信号的脉冲宽度精确可调,以达到实验目的。
以下两种方法的占空比可用下式求得:
V=T1÷
T(3.2)
其中,T1为PWM信号一个周期中高电平持续的时间,T为PWM信号的周期
3.3用有限状态机生成PWM信号
3.3.1基本设计思想
考虑到设计所要的PWM信号一个周期之内只有两个不同的持续状态,故可以使用有限状态机来实现电平的切换,切换条件就是输入的占空比,一个状态就是一个电平,因此通过状态转换就可以实现电平的翻转,产生矩形波,再通过改变输入的占空比就可以改变生成信号的脉冲宽度。
3.3.2设计流程图
用有限状态机设计PWM信号发生器的状态之间的转换及转换条件如图3.5所示:
图3.5有限状态机方法产生PWM信号状态转换
有限状态机的进程分为两个,如图3.6所示即为有限状态机方法产生PWM信号流程图中的状态译码和输出译码部分流程图:
图3.6状态译码和输出译码进程流程图
图3.7所示为有限状态机产生PWM信号的第二个进程—时序逻辑进程的流程图:
图3.7时序逻辑进程流程图
3.3.3主要程序代码
ifreset='
thencount<
current_state<
=st1;
--异步复位
elsif(clk'
eventandclk='
)thencurrent_state<
=next_state;
--状态转换
count<
ifcount>
1100100"
--计数器清零
process(current_state,count)--组合逻辑进程(状态译码和输出译码)
casecurrent_stateis--确定当前状态的状态值
whenst1=>
--初始状态译码输出
ifcount<
percthennext_state<
--状态译码
elsenext_state<
=st0;
whenst0=>
ifcount>
=percandcount<
"
thennext_state<
--转换到第二个状态
3.3.4模块工作原理
一般有限状态机的结构体组成有两部分:
时序进程和组合进程。
时序进程(也叫状态转换)是指负责状态机运转和在时钟驱动下负责状态转换的进程,上述设计中时序进程负责完成下一状态(next_state)向当前状态(current_state)的转换和计数器加1;
组合进程(也叫状态译码和输出译码)的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其他信号),和当前状态的状态值确定下一状态(next_state)的去向,即next_state的取值内容,以及确定对外输出或对内部其他组合或时序进程输出控制信号的内容,上述设计中组合进程完成了一定条件下next_state转向st0或st1状态的功能以及在对应current_state下的相应输出(0或1)。
如图3.7所示,时序进程中在时钟clk的上升沿触发下进行状态转换和计数器加1。
如图3.6所示,组合进程完成状态译码和输出译码。
如果current_state是st1,则输出为高电平‘1’,并且当计数器值大于输入占空比值时指定下一状态为st0,否则下一状态为st1;
如果current_state是st0,则输出为低电平‘0’,并且当计数器值小于等于输入占空比值时指定下一状态为st1,否则下一状态为st0,这样就可以完成高低电平之间的转换了,从而可以改变输入占空比值来改变输出信号的脉冲宽度。
第四章调试及结果分析
4.1程序调试仿真图及结果分析
4.1.1千分频模块
为使仿真报告中显示多个周期的输出,需要修改终止时间,具体操作为:
在.vwf界面单击Edit\EndTime,将Tim