PWM信号发生器的设计报告
3.PWM信号发生器设计

第一期可编程逻辑设计培训研讨 2013年1月 湖北武汉
4
华中科技大学 国家电工电子实验教学示范中心
PWM信号发生器实验
• *编写TestBench并在ModelSim中仿真
`timescale 1ns/1ps module testbench; reg clk; reg [7:0] data; wire pwm; initial begin clk = 1'b1; data = 8'd0; pwm_t = 1'b0; #100000 data = 8'd32; #100000 data = 8'd64; #100000 data = 8'd128; #100000 data = 8'd160; #100000 data = 8'd192; #100000 data = 8'd224; #100000 data = 8'd255; #100000 $stop(); end always begin #20 clk = ~clk; end pwm pwm_inst(.clk(clk), .data(data), .pwm(pwm)); endmodule
• 编写并添加按键驱动和显示占空比的逻辑 • 下载至EDA-CPLD板上,并用示波器观察
第一期可编程逻辑设计培训研讨 2013年1月 湖北武汉 5 华中科技大学 国家电工电子实验教学示范中心
实验过程(自编)
• 直接在ModelSim ALTERA STARTER EDITION 6.5b 中进行编写、访真即可。 新建三个文件,
module pwm( input clk, input [7:0] data, output pwm ); reg [7:0] cnt; always@(posedge clk) begin cnt <= cnt + 1’b1; end always@(posedge clk) begin pwm <= (data > cnt); end endmodule
pwm波信号发生器

电子技术综合训练设计报告题目:PWM信号发生器的设计姓名:学号:班级:同组成员:指导教师:日期:摘要本次课程设是基于TTL系列芯片的简易PWM信号发生器,PWM信号发生器应用所学的数字电路和模拟电路的知识进行设计。
在设计过程中,所有电路仿真均基于Multisim10仿真软件。
本课程设计介绍了PWM信号发生器的设计方案及其基本原理,并着重介绍了PWM信号发生器各单元电路的设计思路,原理及仿真,整体电路的的工作原理,控制器件的工作情况。
设计共有三大组成部分:一是原理电路的设计,本部分详细讲解了电路的理论实现,是关键部分;二是性能测试,这部分用于测试设计是否符合任务要求。
三是是对本次课程设计的总结。
关键字:目录1 设计任务和要求…………………………………………………………?1.1设计任务……………………………………………………………?1.2设计要求…………………………………………………………….?2 系统设计…………………………………………………………………?2.1系统要求…………………………………………………………….?2.2方案设计……………………………………………………………?2.3系统工作原理……………………………………………………….?3 单元电路设计……………………………………………………………?3.1 单元电路A(单元电路的名称) ……………………………………?3.1.1电路结构及工作原理……………………………………………?3.1.2电路仿真…………………………………………………………?3.1.3元器件的选择及参数确定……………………………………………?3.2单元电路B(单元电路的名称) ……………………………………?3.2.1电路结构及工作原理…………………………………………?3.2.2电路仿真…………………………………………………………?3.2.3元器件的选择及参数确定…………………………………………….?……4 系统仿真……………………………………………………………………?.5 电路安装、调试与测试……………………………………………………?5.1电路安装………………………………………………………………?5.2电路调试………………………………………………………………?5.3系统功能及性能测试…………………………………………………?5.3.1测试方法设计………………………………………………………?5.3.2测试结果及分析……………………………………………………?6 结论…………………………………………………………………………?7 参考文献……………………………………………………………………?8 总结、体会和建议附录1、设计任务和要求1.1设计任务设计具有死区时间的PWM信号产生的电子线路,并且设计数码显示电路,实时显示PWM信号的频率。
南昌航空大学PWM波形发生器实验报告

PWM波信号发生器的研制课程设计说明书课程设计名称:单片机专业课设课程设计题目: PWM信号发生器的研制学院名称:信息工程学院专业:电子信息工程班级:学号:姓名:评分:教师:20 13 年 7 月 2 日摘要1PWM波信号发生器的研制随着电力电子全控开关器件的出现,脉宽调制技术(PWM)在电力电子变流技术中获得了,。
泛的应Hj,如直流开关电源(DC/DC变换)、交。
交变频(AC/AC变换)、交.直.交变频系统、UPS电源(DC/AC变换)、高功率因数整流(PWM整流或功率l灭l数校正PFC等)等电力电子各个应用领域,无不采用PWM控制技术。
PWM控制最基本的实现方法是通过载波和控制波的模拟电路调制米产生,如采用三角形载波(或锯齿波)和直流(或正弦波)控制信号比较器进行比较产生PWM波。
这种方法在模拟控制技术中广泛采用,并出现过许多产生PWM波控制芯片,如用于开关电源的TL494、SG3525、UC3842等。
随着数字控制技术的发展,又出现了许多数字式PWM集成芯片,如用于变频调速的三相PWM发生器HEF4752、SLE4520、MA818等。
但与迅速发展的微机控制技术相比,该方法显示出电路复杂、调制方式不够灵活等缺点,而采用软件计算的实时PWM控制策略越来越彼人们接受,并出现了许多不同的PWM波的计算方法,如采样SPWM法、谐波注入PWM法、均值PWM法、等面积PWM法等。
电力电子的微机PWM控制技术已成为一种必然趋势。
因此本文就PWM的单片机控制与实现进行分析研究,通过对外围电路芯片的设计实现PWM输出波形的频率、电压幅值、占空比的连续调节,达到产生PWM信号目的。
关键字:脉宽调制技术(PWM)、占空比、控制信号2PWM波信号发生器的研制单片机原理与接口技术课程设计任务书20 12 -20 13 学年第 2 学期第 17 周- 19 周注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。
占空比可调的信号发生器报告

占空比可调的PWM信号发生器一、任务分析信号同期为20ms,可用一个定时器完成定时触发。
对于占空比可用另一个定时器设计一个基本时间单元。
对于增量或减量只要用一个外部开关一选择高低电平然后用软件查询方式来查询来决定是加还是减。
对增量级别由基本时间单元的个数来决定。
1%时加或减一个时间基本单元,5%时则加或减5个时间单元就可以了。
用一个显示子程序可完成占空比的显示。
二、实现方案用两个中断来检测是否有增量级别的改变,一旦有就触发中断。
用一个双向开关决定是增量还是减量。
对于脉宽固定而周期可改变的PWM信号发生器,只要设两个变量和两个基本时间定时器即可,当周期改变时同时改变脉宽计数器的数值即可。
三、程序流程图四、硬件电路图五、程序清单COUNT EQU 30H AS EQU 30H M EQU 35H ORG 0000H LJMP START ORG 0003H LJMP INT00 ORG 0013H LJMP INT11START: SETB EX0SETB PX0 SETB IT0 SETB EX1 CLR PX1 SETB IT1 SETB EA CLR P1.5MOV TMOD,#21H MOV TH1,#38H MOV TH0,#0B1H MOV TL0,#0E0H SETB TR0 SETB TR1MOV DPTR,#TABLE MOV M,#50 MOV P0,#3FHMOV P2,#6DH MOV AS,#0TOP: SETB TR1SETB P1.0 CLR P1.1MOV TH0,#0B1H MOV TL0,#0E0H MOV AS,#0 MOV B,#10 MOV A,M MOV B,#100 DIV AB JZ TIME1 MOV B,#10CLERK: SETB P1.5LCALL DELAY CLR P1.5 LCALL DELAY SETB P1.5 LCALL DELAY CLR P1.5 MOV M,#50 LCALL SHOW LJMP TOPTIME1:JBC TF1,NEXTSJMP TIME1 NEXT: INC ASMOV A,MCJNE A,AS,TIME1CLR P1.0SETB P1.1CLR TR1TIME0:JBC TF0,TOPSJMP TIME0INT00: JNB P1.2,LOOP1INC MLCALL SHOWRETILOOP1: DEC MLCALL SHOWRETIINT11: JNB P1.2,LOOPMOV A,MADD A,#5MOV M,ALCALL SHOWRETILOOP: MOV A,MSUBB A,#5MOV M,ALCALL SHOWRETISHOW: MOV A,MMOV B,#10DIV ABMOVC A,@A+DPTRMOV P2,AMOV A,BMOVC A,@A+DPTRMOV P0,AMOV B,#10RETDELAY: MOV R6,#0FFHDEY1: MOV R7,#0FFHdey2: MOV R5,#3DJNZ R5,$DJNZ R7,dey2DJNZ R6,DEY1RETTABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END六、示波器输出。
《单片机课程设计-pwm波信号发生器的研制》

PWM信号发生器的研制前言脉冲宽度调制是现代控制技术常用的一种控制信息输出,可以有效地利用数字技术控制模拟信号的技术。
PWM(Pulse Width Modulation)又称脉冲宽度调制,属于脉冲调制的一种,即脉冲幅度调制(PAM)、脉冲相位调制(PPM)、脉冲宽度调制(PWM)和脉冲编码调制(PCM)。
它们本来是应用于电子信息系统和通信领域的一种信号变换技术,但从六十年代中期以来后,随着电力电子技术被引入到电力变换领域,PWM技术广泛运用于各种工业电力传动领域乃至家电产品中。
目前,随着微机技术日益广泛深入工业控制领域,单片机控制的PWM技术迅速发展,其突出特点是可以比较容易地选择最佳的脉冲调制频段,更重要的,由于与单片机的结合,整个系统可以集成为具有更完备的保护功能、故障诊断功能和显示功能的高可靠的微型化的系统。
因此,被竞相开发,前景广阔。
在智能化产品开发中, 许多常用的单片机没有提供脉宽调制(PWM ) 电压信号输出功能, 而在某些特定的场合需要得到PWM信号。
PWM控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。
PWM控制技术一直是变频技术的核心技术之一,由于PWM可以同时实现变频变压反抑制谐波的特点,在交流传动及至其它能量变换系统中得到广泛应用。
目前实现方法为采用全数字化方案,完成优化的实时在线的PWM信号输出。
本文主要介绍了PWM信号发生器的概念、作用及定义,分析了系统的工作原理和软硬件的设计。
主要是以AT89C51单片机为核心控制单元,通过对外围电路芯片的设计实现PWM输出波形的频率、电压幅值、占空比的连续调节,达到产生PWM信号目的。
第一章系统组成与工作原理1.1 系统设计内容与要求一、设计内容:PWM信号发生器的研制二、设计要求:(1)采用定时/计数器8253(2) PWM信号的工作频率为500Hz(1000Hz)(3)占空比可变且显示占空比1.2 系统组成如图1.1所示为系统的设计结构框图。
PWM信号发生器的设计——毕业设计论文

PWM信号发生器的设计实验/上机报告一、实验目的1、掌握序列发生器和检测器的工作原理;2、初步学会用状态机进行数字系统设计。
二、实验环境Quartus II 7.0 开发系统三、实验内容用状态机设计实现串序列检测器设计,可以用原理图输入法设计序列信号发生器,要求产生序列:0111010011011010;再进行检测设计,若检测到序列:11010则输出为“1”,否则输出为“0”。
并对其进行仿真和硬件测试。
四、实验过程本实验可以分为两部分来设计。
第一步设计序列信号发生器,在这里可以采用模16的计数器74LS161来产生模16的计数,并由它的4位输出可以产生16种状态,由此可以用来设计序列产生器,也可以采用状态机产生序列,本实验用状态机产生序列。
第二步设计序列检测器,这里用状态机设计,如果为真输出1,为假输出为0;第三步设计串行转并行输出,将序列并行输出在LED管上显示。
第四步是设计一个计数脉冲,记录出现所需要的序列的次数。
第五步是将所有模块连接起来,构成一个完整的序列发生和检测设计器。
实验代码:1、序列发生器library ieee;use ieee.std_logic_1164.all;entity xulie_produce is—序列产生电路port(clk,reset:in std_logic;comb_outputs:out std_logic);--序列输出end xulie_produce;architecture behav of xulie_produce istype fsm_st is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);--状态设计signal current_state,next_state:fsm_st;beginreg:process(reset,clk)—主控时序进程beginif reset ='1'then current_state<=s0;elsif clk='1'and clk'event thencurrent_state<=next_state;end if;end process;com:process(current_state)—主控组合进程begincase current_state iswhen s0 => comb_outputs<='0';next_state<=s1; when s1 => comb_outputs<='1';next_state<=s2; when s2 => comb_outputs<='1';next_state<=s3; when s3 => comb_outputs<='1';next_state<=s4; when s4 => comb_outputs<='0';next_state<=s5; when s5 => comb_outputs<='1';next_state<=s6; when s6 => comb_outputs<='0';next_state<=s7; when s7 => comb_outputs<='0';next_state<=s8; when s8 => comb_outputs<='1';next_state<=s9; when s9 => comb_outputs<='1';next_state<=s10; when s10 => comb_outputs<='0';next_state<=s11; when s11 => comb_outputs<='1';next_state<=s12; when s12 => comb_outputs<='1';next_state<=s13; when s13 => comb_outputs<='0';next_state<=s14; when s14 => comb_outputs<='1';next_state<=s15; when s15 => comb_outputs<='0';next_state<=s0; end case;end process;end behav;2、序列检测器library ieee;use ieee.std_logic_1164.all;entity s_machine is—序列检测电路port(clk,reset:in std_logic;state_inputs:in std_logic;--状态转移控制comb_outputs:out std_logic);检测结果输出end s_machine;architecture behav of s_machine istype fsm_st is (s0,s1,s2,s3,s4,s5);signal current_state,next_state:fsm_st;beginreg:process(reset,clk)主控时序进程beginif reset ='1'then current_state<=s0;elsif clk='1'and clk'event thencurrent_state<=next_state;end if;end process;com:process(current_state,state_inputs)—主控组合进程begincase current_state iswhen s0 => comb_outputs<='0';if state_inputs='1' then next_state<=s1;else next_state<=s0;end if;when s1 => comb_outputs<='0';if state_inputs='1' then next_state<=s2;else next_state<=s0;end if;when s2 => comb_outputs<='0';if state_inputs='0' then next_state<=s3;else next_state<=s2;end if;when s3 => comb_outputs<='0';if state_inputs='1' then next_state<=s4;else next_state<=s0;end if;when s4 => comb_outputs<='0';if state_inputs='0' then next_state<=s5;else next_state<=s2;end if;when s5 => comb_outputs<='1';--检测到11010输出1 if state_inputs='0' then next_state<=s0;else next_state<=s1;end if;end case;end process;end behav;3、串行输出变并行输出library ieee;use ieee.std_logic_1164.all;entity shift is –串行变并行电路port(clk,load,a:in std_logic;din :out std_logic_vector(7 downto 0));--并行输出end shift;architecture behav of shift isbeginprocess(clk,load,a)variable reg8 :std_logic_vector(7 downto 0);beginif clk'event and clk='1'thenif load='1'then reg8(7 downto 1):=reg8(6 downto 0);--load为1时开始装载reg8(0):=a;end if;end if;din<=reg8;end process;end behav;4、计数器设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNTM IS –计数电路PORT (CLK,RST,EN:IN STD_LOGIC;a,b,c:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNTM;ARCHITECTURE behav OF CNTM ISsignal a1,b1,c1:std_logic_vector(3 downto 0); BEGINPROCESS (CLK,RST,EN)VARIABLE N :INTEGER RANGE 0 TO 1000;BEGINIF RST ='1' THEN N:=0;ELSIF CLK 'EVENT AND CLK='1' THENIF EN = '1' THENIF N<100 THEN N:=N+1;--设计为100计数ELSE N:=0;END IF;END IF;END IF;a1<=conv_std_logic_vector((N/100),4);b1<=conv_std_logic_vector(((N/10)mod 10),4); c1<=conv_std_logic_vector((N mod 10),4);a<=a1;b<=b1;c<=c1;END PROCESS;实验步骤:1、建立工作库文件和编辑设计文件(1)在D盘新建一个文件夹用来保存工程文件(2)打开QuartusⅡ8.0软件,选择菜单File->New->VHDL File,点击OK后在打开的界面下输入已经设计好的程序。
PWM信号发生器的设计

PWM信号发生器的设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BXFSQ ISPORT ( CLK,CLK1,KK : IN STD_LOGIC;DATA : IN STD_LOGIC_VECTOR(11 DOWNTO 0);DD : OUT INTEGER RANGE 255 DOWNTO 0 );END;ARCHITECTURE DACC OF BXFSQ ISSIGNAL Q : INTEGER RANGE 63 DOWNTO 0 ;SIGNAL D : INTEGER RANGE 255 DOWNTO 0 ;SIGNAL FSS : STD_LOGIC ;SIGNAL COUNT12,DATA2,DATA1 : STD_LOGIC_VECTOR(11 DOWNTO 0) ; BEGINPROCESS(FSS)BEGINIF (FSS'EVENT AND FSS = '1') THEN Q <= Q + 1;END IF;END PROCESS;PROCESS(Q)BEGINCASE Q ISWHEN 00=> D<=255; WHEN 01=> D<=254; WHEN 02=> D<=252; WHEN 03=> D<=249; WHEN 04=> D<=245; WHEN 05=> D<=239; WHEN 06=> D<=233; WHEN 07=> D<=225; WHEN 08=> D<=217; WHEN 09=> D<=207; WHEN 10=> D<=197; WHEN 11=> D<=186; WHEN 12=> D<=174; WHEN 13=> D<=162; WHEN 14=> D<=150; WHEN 15=> D<=137; WHEN 16=> D<=124; WHEN 17=> D<=112; WHEN 18=> D<= 99; WHEN 19=> D<= 87; WHEN 20=> D<= 75; WHEN 21=> D<= 64; WHEN 22=> D<= 53; WHEN 23=> D<= 43; WHEN 24=> D<= 34; WHEN 25=> D<= 26; WHEN 26=> D<= 19; WHEN 27=> D<= 13; WHEN 28=> D<= 8; WHEN 29=> D<= 4; WHEN 30=> D<= 1; WHEN 31=> D<= 0; WHEN 32=> D<= 0; WHEN 33=> D<= 1; WHEN 34=> D<= 4; WHEN 35=> D<= 8; WHEN 36=> D<= 13; WHEN 37=> D<= 19; WHEN 38=> D<= 26; WHEN 39=> D<= 34; WHEN 40=> D<= 43; WHEN 41=> D<= 53; WHEN 42=> D<= 64; WHEN 43=> D<= 75; WHEN 44=> D<= 87; WHEN 45=> D<= 99; WHEN 46=> D<=112; WHEN 47=> D<=124; WHEN 48=> D<=137; WHEN 49=> D<=150; WHEN 50=> D<=162; WHEN 51=> D<=174; WHEN 52=> D<=186; WHEN 53=> D<=197; WHEN 54=> D<=207; WHEN 55=> D<=217; WHEN 56=> D<=225; WHEN 57=> D<=233; WHEN 58=> D<=239; WHEN 59=> D<=245; WHEN 60=> D<=249; WHEN 61=> D<=252; WHEN 62=> D<=254; WHEN 63=> D<=255; WHEN OTHERS => NULL ;END CASE;END PROCESS;DD <= D ;PROCESS(CLK, DATA)BEGINIF CLK'EVENT AND CLK = '1' THENIF COUNT12 = "111111100000" THEN COUNT12 <= DATA1; FSS <= '1';ELSE COUNT12 <= COUNT12 + 1; FSS <= '0';END IF;END IF;END PROCESS;DATA1 <= DATA WHEN KK = '1' ELSEDATA2 WHEN KK = '0' ELSE DA TA2 ;PROCESS(CLK1)BEGINIF (CLK1'EVENT AND CLK1 = '1') THEN DA TA2 <= DATA2 + 1;END IF;END PROCESS;END;。
实验2—占空比可调的PWM信号发生器

实验2—占空比可调的PWM信号发生器第一篇:实验2—占空比可调的PWM信号发生器实验2占空比可调的PWM信号发生器一、实验任务基本部分:(1)用51单片机设计一个周期固定且占空比可调的PWM信号发生器。
(2)参数要求:a、信号周期为20ms,占空比范围1%-100%可调;b、用两个按键分别调整增量或减量;增量级别分为±1%和±5%两档可调,且要求可用按键选择;c、要求用两位LED数码管实时显示当前的占空比;d、51单片机晶振频率为12MHz。
扩展部分:(1)在基本部分设计的电路中,为输出的PWM信号增加光耦隔离输出电路;(2)为占空比调整过程增加超界声光报警电路;(3)可否改为脉宽固定而周期可改变的PWM信号发生器(简略说明,不要求设计编程)。
二、实验要求1、在PROTEUS中画出硬件设计图(AT89C51、12MHz晶振震荡电路、复位电路、按键调整电路、LED数码管显示电路、扩展部分电路)。
2、按任务要求用汇编或C编写程序并编译通过。
3、在PROTEUS下仿真通过。
三、报告要求1、任务分析、实现方案和程序流程图;2、硬件电路图;3、全部程序清单;4、打印出实验报告。
第二篇:信号发生器设计(推荐)模拟课程设计题信号发生器设计设计一个能够输出正弦波、三角波和矩形波的信号源电路,电路形式自行选择。
输出信号的频率可通过开关进行设定,具体要求如下:(1)输出信号的频率范围为100~800Hz,步进为100Hz。
(60分)(2)要求输出信号无明显失真,特别是正弦波信号。
(30分)评分标准:(1)范围满足设计要求得满分,否则酌情扣分。
(2)输出信号无明显失真可满分,有明显失真酌情扣分。
发挥部分(附加10分):进一步扩大输出信号范围和减小步进频率。
第三篇:VHDL实验四函数信号发生器设计.VHDL实验四:函数信号发生器设计设计要求:设计一个函数信号发生器,能产生方波,三角波,正弦波,阶梯波。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言脉冲宽度调制(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,这样就可以完成高低电平之间的转换了,从而可以改变输入占空比值来改变输出信号的脉冲宽度。