PWM信号发生器的研制1前言脉冲宽度调制(PulseWidthModulation.PWM)控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术和模拟信号数字传输通信领域最广泛应用的控制方式,因此研究基于PWM技术的脉冲宽度及周期可调的信号发生器具有十分重要的现实意义。本文主要讨论了脉冲占空比可调信号的产生方法,采用三种不同的方案使用VHDL语言编程实现了信号的产生。其中方案一的原理是分频,即用计数器计算时钟脉冲的上升沿个数,再通过输出电平反复翻转得到计数个数(脉冲宽度)可控的PWM信号;方案二的原理是锯齿波比较法,首先编程产生阶梯状的锯齿波,再通过锯齿波与输入占空比值(数值可控的直线)比较产生脉冲宽度随输入占空比数值变化的PWM信号;方案三是用有限状态机产生有用信号,首先定义两个状态,再通过计数器值与输入占空比值比较控制状态的切换,产生PWM信号。本文详细介绍方案二和方案三两种方法。通过使用QuartusII9.0软件采用VHDL语言编程并用功能仿真证实了上文提到的三种PWM信号产生方案都是可行的,都能产生切实可用的PWM信号,三种方案中均可以通过修改输入端口占空比来控制产生信号的脉宽,且可以通过在程序中修改计数器的计数上限和分频模块的分频比改变信号的周期及频率,实现了多参数可调,使整体设计具有灵活的现场可更改性和较好的可移植性。且实现功能的程序简单易懂,设计过程中思路阐述清晰,流程介绍明了,且程序易于修改,可读性好。PWM信号发生器的研制2第一章设计要求1.1研究课题PWM信号发生器的研制1.2设计要求用CPLD可编程模块产生下列信号(特殊芯片:EPM570T100C5)(1)采用VHDL编写相关程序,PWM信号的工作频率为500Hz(1000Hz);(2)时钟信号通过分频器后,由输入开关量控制占空比可调。PWM信号发生器的研制3第二章系统组成及工作原理本次设计采用的是Altera公司开发的QuartusII设计平台,设计采用特殊芯片EPM570T100C5进行仿真,在原理设计方面,本设计采用自顶向下、层次化、模块化的基本程序设计思想,这种设计思想的优点符合人们先抽象后具体,先整体后局部的思维习惯,其设计出的模块修改方便,不影响其他模块,且可重复使用,利用率高。2.1系统组成为了使本次设计产生的PWM信号能用于频率稳定度高的晶振,故在系统设计中添加了一个分频模块,因此PWM信号发生器由分频器和信号发生器两个部分组成。其组成框图如图2.1所示分频器PWM信号发生器clk信号(ns)clk信号(ms)pwm信号图2.1PWM信号产生框图2.2系统设计流程图PWM信号发生器的总体设计流程图如图2.2所示:开始分频模块对输入时钟进行分频复位信号有效?PWM信号发生器结束输出为0YN输出PWM信号图2.2系统设计流程图PWM信号发生器的研制42.3系统工作原理如上图的框图所示,输入是纳秒(ns)级的高频时钟信号,经过分频模块后产生毫秒(ms)级的低频时钟,然后由低频时钟控制信号发生器,产生一定周期的矩形波,再经过具体的设计形成占空比可调的PWM信号。本次设计中,设计要求是产生1KHz的脉冲宽度可调的矩形信号,仿真中输入时钟clk的周期为10ns,经过1000分频器后变成周期为10us(频率为0.1MHz)的时钟,再通过信号发生器模块中的计数上限为100计数器,产生周期为1ms(频率为1KHz)的周期矩形信号,再有输入端口控制占空比,产生宽度可调的PWM信号,实现设计要求的功能。PWM信号发生器的研制5第三章模块的具体实现3.1分频模块的设计3.1.1基本设计思想分频实际就是一个计数的过程,通过计数个数来控制输出高低电平的时间,最重要的是高低电平的维持时间相等,即产生方波信号。3.1.2设计流程图使用时钟分频方法产生可用时钟频率的设计流程图如图3.1所示:开始每来一个时钟上升沿计数器加1计数器值500?计数器值=999?计数器清零输出为0输出为1YYNN结束图3.1设计流程图3.1.3主要程序代码ifclkin='1'andclkin'eventthen--时钟上升沿触发ifcount=1000thencount:=0;--计数计到999则清零PWM信号发生器的研制6elsifcount=500thenclkout='1';--计数到500电平翻转elseclkout='0';endif;count:=count+1;--时钟上升沿计数endif;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锯齿波比较法产生脉宽可调波的原理PWM信号发生器的研制73.2.2设计流程图(1)锯齿波发生器设计的流程图如图3.3所示:开始复位信号有效?每来一个时钟上升沿锯齿波幅值加1锯齿波的最大幅值100?锯齿波的幅值赋0结束NYNY图3.3锯齿波发生器的流程(2)锯齿波比较法产生PWM信号的流程图如图3.4所示:开始占空比值大于锯齿波的值?输出为1输出为0YN结束图3.4锯齿波比较法产生PWM信号流程图3.2.3主要程序代码ifrst='0'thenPWM信号发生器的研制8saw_teeth=0000000;--异步复位elsifclk'eventandclk='1'thensaw_teeth=saw_teeth+1;--产生阶梯状的锯齿波ifsaw_teeth=1100011thensaw_teeth=0000000;--锯齿波的最大幅值为100endif;endif;pwm='1'whenpercsaw_teethelse--锯齿波与常数信号相比较,产生占空比由常--数(perc)决定的pwm信号'0'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所示:PWM信号发生器的研制9st1st0计数器值占空比值计数器值占空比值计数器值=占空比值输出为1占空比值=计数器值100输出为0图3.5有限状态机方法产生PWM信号状态转换有限状态机的进程分为两个,如图3.6所示即为有限状态机方法产生PWM信号流程图中的状态译码和输出译码部分流程图:开始当前状态是st1?计数器值占空比值?下一状态为st0输出为0输出为1下一状态为st1计数器值占空比值?下一状态为st0下一状态为st1NYYNYN图3.6状态译码和输出译码进程流程图图3.7所示为有限状态机产生PWM信号的第二个进程—时序逻辑进程的流程图:PWM信号发生器的研制10复位信号有效?每来一个时钟上升沿下一状态转换成当前状态计数器加1计数器值100?结束开始计数器清0当前状态切换至st1计数器清0YNYN图3.7时序逻辑进程流程图3.3.3主要程序代码ifreset='0'thencount=0000000;current_state=st1;--异步复位elsif(clk'eventandclk='1')thencurrent_state=next_state;--状态转换count=count+1;ifcount=1100100thencount=0000000;--计数器清零endif;process(current_state,count)--组合逻辑进程(状态译码和输出译码)casecurrent_stateis--确定当前状态的状态值whenst1=pwm='1';--初始状态译码输出ifcountpercthennext_state=st1;--状态译码elsenext_state=st0;endif;whenst0=pwm='0';ifcount=percandcount1100100thennext_state=st0;--转换到第二个状态elsenext_state=st1;3.3.4模块工作原理一般有限状态机的结构体组成有两部分:时序进程和组合进程。时序进程(也叫状态转换)是指负责状态机运转和在时钟驱动下负责状态转换的进程,上述设计中时PWM信号发生器的研制11序进程负责完成下一状态(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,这样就可以完成高低电平之间的转换了,从而可以改变输入占空比值来改变输出信号的脉冲宽度。PWM信号发生器的研制12第四章调试及结果分析4.1程序调试仿真图及结果分析4.1.1千分频模块为使仿真报告中显示多个周期的输出,需要修改终止时间,具体操作为:在.vwf界面单击Edit\EndTime,将Time修改为1.0s.在.vwf中设置clkin的周期为0.1ms,如图4.1所示:图4.1输入时钟设置调试仿真图如图4.2和4.3所示:图4.2仿真运行结果(1)图4.3仿真运行结果(2)在.vhd界面单击File\Create/Update\CreateSymbolFilesForCurrentFile,则使得用VHDL语言编写的程序生成一个图元文件,成为一个可供原理图文件调用的元器件,使用时需将该图元文件所在工程中的各非文件夹文件复制到原理图所在工程的文件PWM信号