当前位置:文档之家› PWM信号发生器的设计报告

PWM信号发生器的设计报告

前言脉冲宽度调制(Pulse Width Modulation.PWM)控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术和模拟信号数字传输通信领域最广泛应用的控制方式,因此研究基于PWM技术的脉冲宽度及周期可调的信号发生器具有十分重要的现实意义。

本文主要讨论了脉冲占空比可调信号的产生方法,采用三种不同的方案使用VHDL语言编程实现了信号的产生。

其中方案一的原理是分频,即用计数器计算时钟脉冲的上升沿个数,再通过输出电平反复翻转得到计数个数(脉冲宽度)可控的PWM 信号;方案二的原理是锯齿波比较法,首先编程产生阶梯状的锯齿波,再通过锯齿波与输入占空比值(数值可控的直线)比较产生脉冲宽度随输入占空比数值变化的PWM 信号;方案三是用有限状态机产生有用信号,首先定义两个状态,再通过计数器值与输入占空比值比较控制状态的切换,产生PWM信号。

本文详细介绍方案二和方案三两种方法。

通过使用QuartusII9.0软件采用VHDL语言编程并用功能仿真证实了上文提到的三种PWM信号产生方案都是可行的,都能产生切实可用的PWM信号,三种方案中均可以通过修改输入端口占空比来控制产生信号的脉宽,且可以通过在程序中修改计数器的计数上限和分频模块的分频比改变信号的周期及频率,实现了多参数可调,使整体设计具有灵活的现场可更改性和较好的可移植性。

且实现功能的程序简单易懂,设计过程中思路阐述清晰,流程介绍明了,且程序易于修改,可读性好。

第一章设计要求1.1 研究课题PWM信号发生器的研制1.2设计要求用CPLD可编程模块产生下列信号(特殊芯片:EPM570T100C5)(1)采用VHDL编写相关程序,PWM信号的工作频率为500Hz(1000Hz);(2)时钟信号通过分频器后,由输入开关量控制占空比可调。

第二章系统组成及工作原理本次设计采用的是Altera公司开发的QuartusII设计平台,设计采用特殊芯片EPM570T100C5进行仿真,在原理设计方面,本设计采用自顶向下、层次化、模块化的基本程序设计思想,这种设计思想的优点符合人们先抽象后具体,先整体后局部的思维习惯,其设计出的模块修改方便,不影响其他模块,且可重复使用,利用率高。

2.1 系统组成为了使本次设计产生的PWM信号能用于频率稳定度高的晶振,故在系统设计中添加了一个分频模块,因此PWM信号发生器由分频器和信号发生器两个部分组成。

其组成框图如图2.1所示图2.1 PWM信号产生框图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 主要程序代码if clkin='1' and clkin'event then --时钟上升沿触发if count=1000 then count:=0; --计数计到999则清零elsifcount<=500 then clkout<='1'; --计数到500电平翻转elseclkout<='0';end if;count:=count+1; --时钟上升沿计数end if;3.1.4模块工作原理定义实体之后,在由输入时钟(ns)触发的进程中实现分频,首先定义一个中间计数变量,当计算输入时钟上升沿个数从0至500时输出高电平,从500至1000时输出低电平,从而产生周期为输入信号1000倍的方波信号,分频比可由下式得到:A= T o ÷T i(3.1)其中,T o为输出时钟的周期,T i为输入时钟的周期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 = '0' thensaw_teeth<="0000000"; --异步复位elsifclk'event and clk = '1' thensaw_teeth<=saw_teeth+1; --产生阶梯状的锯齿波ifsaw_teeth>="1100011" thensaw_teeth<="0000000"; --锯齿波的最大幅值为100end if;end if;pwm<='1' when perc>saw_teeth else --锯齿波与常数信号相比较,产生占空比由常--数(perc)决定的pwm信号'0' when perc<= 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所示:计数器值>占空比值计数器值<占空比值计数器值<=输出为 1<=计数器值<100输出为 0图3.5 有限状态机方法产生PWM 信号状态转换有限状态机的进程分为两个,如图3.6所示即为有限状态机方法产生PWM 信号流程图中的状态译码和输出译码部分流程图:图3.6状态译码和输出译码进程流程图图3.7所示为有限状态机产生PWM 信号的第二个进程—时序逻辑进程的流程图:图3.7时序逻辑进程流程图3.3.3 主要程序代码if reset='0' then count<="0000000";current_state<=st1; --异步复位elsif (clk'event and clk='1') then current_state<=next_state; --状态转换count<=count+1;if count>="1100100" then count<="0000000"; --计数器清零end if;process(current_state,count) --组合逻辑进程(状态译码和输出译码)case current_state is --确定当前状态的状态值when st1=>pwm<='1'; --初始状态译码输出if count<perc then next_state<=st1; --状态译码elsenext_state<=st0;end if;when st0=>pwm<='0';if count>=perc and count<"1100100" then next_state<=st0; --转换到第二个状态elsenext_state<=st1;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_stat e是st1,则输出为高电平‘1’,并且当计数器值大于输入占空比值时指定下一状态为st0,否则下一状态为st1;如果current_state是st0,则输出为低电平‘0’,并且当计数器值小于等于输入占空比值时指定下一状态为st1,否则下一状态为st0,这样就可以完成高低电平之间的转换了,从而可以改变输入占空比值来改变输出信号的脉冲宽度。

相关主题