YIBINUNIVERSITYEDA技术及应用期末设计报告题目:PWM信号发生器的设计专业:电子信息科学与技术姓名:学号:2013年12月20日摘要:PWM,即脉冲宽度调制。脉冲宽度,即一个脉冲信号所占时间的长度。所以脉冲宽度的调制就是调制脉冲信号的时间长度。一个完整的脉冲信号是有高电平部分和低电平部分共两部分组成的。所以,脉冲宽度调制可以简单的理解为就是调制脉冲信号的高电平或者低电平时间的长度。而控制时间的长度,可以用计数器对时钟脉冲信号的计数来实现:通过计数器的数值设定以及对溢出信号的使用,就可以实现对脉冲信号中的高电平或者低电平的时间进行限定。在本次设计中,一共有两个设计方案,分别用不同的器件进行设计,但其中最重要的,最关键的部分,都是有关计数器的设计,用信号赋值的方式决定输出的电平的高低,通过相关计数器的数值设定,调制脉冲输出的电平的时间长度。关键词:1)脉冲宽度调制2)时钟信号3)计数器4)D触发器目录摘要--------------------------------------------------------------------------------2关键词-----------------------------------------------------------------------------2引言--------------------------------------------------------------------------------4设计概述--------------------------------------------------------------------------4方案论证--------------------------------------------------------------------------5源程序设计-----------------------------------------------------------------------6方案选择-------------------------------------------------------------------------11程序分析-------------------------------------------------------------------------11设计程序仿真图----------------------------------------------------------------12仿真分析-------------------------------------------------------------------------13设计总结-------------------------------------------------------------------------14参考文献-------------------------------------------------------------------------14引言:PWM即脉冲宽度调制,就是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM从处理器到被控系统信号都是数字式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小,因此广泛应用在测量,通信和功率控制与交换的许多领域。脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。设计概述:本次设计中,采用方案二进行设计。用一个信号“CNT”来对时钟脉冲信号进行计数,并且将脉冲宽度调制信号设为PWMH和PWML两个信号。用信号:CNT,作为计数中间值。当计数数值信号CNT的计数数值小于其设定值的时候,每来一个时钟脉冲信号就将CNT加一,如果这个时候计数数值信号CNT的计数数值也小于或等于D信号输入值,就将PWMH信号置为高电平,PWML信号置为低电平。当计数数值信号CNT的技术数值等于D信号的输入值的时候,便将输出信号翻转,即PWMH为低电平,PWML为高电平。当计数数值信号CNT的计数数值等于CNT设定值的时候,便将CNT置零,程序便再次循环作用,不断输出脉冲宽度调制信号。由此达到脉冲宽度调制的目的。完成程序设计的目的。方案论证:本次设计一共设想了两个方案:1)方案一:用一个八位可自加载的加法计数器控制低电平的时间长度,用另一个八位可自加载的加法计数器控制高电平的时间长度,用一个D触发器来接收两个计数器的溢出信号和输出调制信号。其中一个计数器的溢出信号接到D触发器的CLK输入端,用来控制低电平的时间长短。另一个计数器的溢出信号接到D触发器的清零信号输入端,用来控制高电平的时间长短。通过将D触发器的输出信号取反后加到控制低电平时间长短的计数器的置位端,让计数器回到初始值,并重新开始计数。另一个控制高电平时间长短的计数器的置位端接入D触发器的输出信号,达到将计数器置入初始值,重新开始计数的目的。这样,整个电路形成完整的回路,达到往返输出PWM信号的目的。2)方案二:在本方案中,将脉冲宽度调制信号设为了PWMH和PWML两个信号。在输入端,通过D信号的输入值,CNT信号的设定值以及IF函数,达到计数的目的。当计数数值信号CNT的计数数值小于其设定值的时候,每来一个时钟脉冲信号就将CNT加一,如果这个时候计数数值信号CNT的计数数值也小于或等于D信号输入值,就将PWMH信号置为高电平,PWML信号置为低电平。当计数数值信号CNT的技术数值等于D信号的输入值的时候,便将输出信号翻转,即PWMH为低电平,PWML为高电平。当计数数值信号CNT的计数数值等于CNT设定值的时候,便将CNT置零,程序便再次循环作用,不断输出脉冲宽度调制信号。由此达到脉冲宽度调制的目的。源程序设计:方案一设计源程序:1)八位可自加载假发计数器的源程序LCNT8.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLCNISPORT(CLK,LD:INSTD_LOGIC;D:ININTEGERRANGE0TO255;CAO:OUTSTD_LOGIC);ENDENTITYLCNT8;ARCHITECTUREARTOFLCNT8ISSIGNALCOUNT:INTEGERRANGE0TO255;BEGINPROCESS(CLK)ISBEGINIFCLK’EVENTANDCLK=’1’THENIFLD=’1’THENCOUNT=COUNT+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(COUNT)ISBEGINIFCOUNT=255THENYC=’1’;ELSEYC=’0’;ENDEIF;ENDPROCESS;2)PWM信号发生器的源程序PWM。VHD:LIBRARYIEEE;USEIEEE.STD_LOIC_1164.ALL;ENTITYPWMISPORT(CLK:INSTD_LOGIC;A,B:INSTD_LOGIC_VECTOR(7DOWNTO0);PWM:OUTSTD_LOGIC);ENDENTITYPWM;ARCHITECTUREARTOFPWMISCOMPONENTLCNT8ISPORT(CLK,LD:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(7DOWNTO0);YC:OUTSTD_LOGIC);ENDCOMPONENTLCNT8;SIGNALYC1,YC2:STD_LOGIC;SIGNALLD1,LD2:STD_LOGIC;SIGNALSPWM:STD_LOGIC;BEGINU1:LCNT8PORTMAP(CLK=CLK,LD=LD1,D=A,YC=YC1);U2:LCNT8PORTMAP(CLK=CLK,LD=LD2,D=B,YC=YC2);PROCESS(YC1,YC2)ISBEGINIFYC1=’1’THENSPWM=’0’;ELSIFYC2’EVENTANDYC2=’1’THENSPWM=’1’;ENDIF;ENDPROCESS;LD1=SPWM;LD2=NOTSPWM;PWM=SPWM;ENDARCHITECTUREART;END;方案二源程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYPWMISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(11DOWNTO0);PWMH:OUTSTD_LOGIC;PWML:OUTSTD_LOGIC);ENDENTITYPWM;ARCHITECTUREARTOFPWMISSIGNALPH:STD_LOGIC;SIGNALPL:STD_LOGIC;SIGNALCNT:STD_LOGIC_VECTOR(11DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFCNT=000000001111THENCNT=000000000000;ELSECNT=CNT+'1';ENDIF;ENDIF;IFCNT=DTHENPH='1';PL='0';ELSEPH='0';PL='1';ENDIF;ENDPROCESS;PROCESS(CLK)ISBEGINIFCLK'EVENTANDCLK='1'THENPWMH=PH;PWML=PL;ENDIF;ENDPROCESS;END;方案选择:由设计源程序可知,在第二个方案中,用一个IF语句就达到了方案一中的两个计数器的计数,去控制输出的目的,并且省略了D触发器。在硬件上节约了很多资源,并且在程序上也显得简单得多。所以采用方案二作为本次设计的最终方案。程序分析:本次设计,选择的方案是第二个。由方案二的源程序可以看出:运用到了数值加法计数,所以打开USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL两个程序包。由于信号是以高低电平输入或输出,所以打开了USEIEEE.STD_LOGIC_1164.ALL程序包。在实体设计中,定义了时钟信号输入端口和D信号设定值输入端口,定义了两个脉冲宽度调试的输出信号。在结构体中定义了两个输出信号:PWMH和PWML,还定义了一个计数信号:CNT,作为中间值。由源程序可以知道,当计数数值信号CNT的计数数值小于其设定值的时候,每来一个时钟脉冲信号就将CNT加一,如果这个时候计数数值信号CNT的计数数值也小于或等于D信号输入值,就将PWMH信号置为高电平,PWML信号置为低电平。当计数数值信号CNT的技术数值等于D信号的输入值的时候,便将输出信号翻转,即PWMH为低电平,PWML为高电平。当计数数值信号CNT的计数数值等于CNT设定值的时候,便将CNT置零,程序便再次循环作用,不断输出脉冲宽度调制信号。由此达到脉冲宽度调制的目的。完成程序设计的目的。设计程序仿真图:方案二源程序仿真图仿真分析:由仿真图可以看出,D的输入值为10,在程序中得知CNT计数数值信号的设定值为15,所以,当前十个时钟信号来时,保持PWMH输出为高电平,PW