PWM信号发生器的设计
- 格式:doc
- 大小:249.50 KB
- 文档页数:9
浅谈利用单片机设计PWM脉冲信号发生器摘要脉冲宽度调制(PWM)在电子技术领域中应用十分广泛,但是利用模拟电路实现脉宽调制功能十分复杂、不经济。
随着微处理器的发展,运用数字输出方式去控制实现PWM的功能就变得简单快捷,本文就如何利用89S52单片机软件编程设计出周期一定而占空比可调的脉冲波,也就是实现PWM功能进行设计,它可以代替模拟电路的PWM脉冲信号发生器。
关键词单片机 PWM 数字控制PWM是脉冲宽度调制(Pulse Width Modulation)的英文缩写,它是开关型稳压电源中按稳压的控制方式分类中的一种,而脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反馈调整其占空比,从而达到稳定输出电压的目的。
简单的说,PWM是一种对模拟信号电平进行数字编码的方法。
理论上讲就是电压或电流源以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的,通的时候就是电源被加到负载上,断的时候就是供电被断开的时候,所以PWM信号仍然是数字的。
要想达到这样一种脉宽调制效果,模拟电压和电流时可以直接控制。
例如音响的音量控制,在简单的模拟电路中,它的控制是由连接了一个可变电阻的旋钮来实现的,其过程是拧动旋钮,电阻值变小或变大,流过该电阻的电流也随之增加来减小,从而改变驱动扬声器的电流值,那么声音也就相应变大或变小。
从这个例子来看,模拟控制是直观而简单的,但是并不是所有的模拟电路都是可行并且经济的,其中很重要的一点就是模拟电路容易随时间漂移,它的调节过程就很困难,为了解决问题就要增加很多的电路,使得电路变得复杂并且昂贵。
除此之外,模拟电路中许多的元器件会发热,也就相对提高了电路的功耗,并且对噪声也敏感,任何干扰或噪声都会改变电流值的大小。
综上所述,通过数字方式来控制模拟电路可以大幅度降低系统的成本和功耗,而单片机I/O口的数字输出可以很简单地发出一个脉冲波,在配以外部元器件就可以调节脉冲波的占空比,完成PWM的功能。
文献综述毕业设计题目: PWM信号发生器设计PWM信号发生器文献综述(电子信息工程10(1)班E10610119)1前言PWM(Pulse Width Modulation)又称脉冲宽度调制,属于脉冲调制的一种,即脉冲幅度调制(PAM)、脉冲相位调制(PPM)、脉冲宽度调制(PWM)和脉冲编码调制(PCM)。
它们本来是应用于电子信息系统和通信领域的一种信号变换技术,但从六十年代中期以来后,随着电力电子技术被引入到电力变换领域,PWM技术广泛运用于各种工业电力传动领域乃至家电产品中[1]。
信号发生器又称波形发生器,是一种常用的信号源,被广泛地应用于无线电通信、自动测量和自动控制等系统中。
传统的信号发生器绝大部分是由模拟电路构成,借助电阻电容,电感电容、谐振腔、同轴线作为振荡回路产生正弦或其它函数波形。
频率的变动由机械驱动可变元件完成,当这种模拟信号发生器用于低频信号输出往往需要的RC值很大,这样不但参数准确度难以保证,而且体积和功耗都很大,而由数字电路构成的低频信号发生器,虽然其低频性能好但体积较大,价格较贵。
在今天,随着大规模集成电路和信号发生器技术的发展,许多新型信号发生器应运而生。
用信号发生器并配置适当接口芯片产生程控正弦信号,则可替代传统的正弦信号发生器,从而有利于测试系统的集成化、程控化和智能仪表的多功能化。
而信号发生器的最大特点是面向控制,由于它集成度高、运算速度快、体积小、运行可靠、价格低,因此在数据采集、智能化仪器等技术中得到广泛的应用,从而使得信号发生器的应用成为工程技术多学科知识汇集的一个专门研究领域,其应用产生了极高的经济效益和社会效益[2]。
2 PWM信号发生器的发展与现状2.1信号发生器的发展单片微型计算机简称信号发生器,是指集成在一块芯片上的计算机,信号发生器的产生与发展和微处理器的产生与发展大体同步,自1971年美国Intel公司首先推出4位微处理器以来,它的发展到目前为止大致可分为5个阶段:第1阶段(1971~1976):信号发生器发展的初级阶段。
基于单片机和FPGA的四通道PWM信号发生器接口设计概述:PWM(Pulse Width Modulation,脉宽调制)是一种常用的电子信号生成技术,广泛应用于数字电路控制、电机驱动等领域。
本文将介绍基于单片机和FPGA的四通道PWM信号发生器接口设计。
1.系统架构:该系统由单片机和FPGA两部分组成,单片机负责控制FPGA的工作模式和参数设置,FPGA负责生成四个PWM信号。
2.单片机模块设计:单片机采用32位ARM Cortex-M系列处理器,具有丰富的接口资源和高性能计算能力。
在单片机上实现以下模块:-用户界面模块:使用LCD显示屏和按键进行参数设置和显示。
-通信模块:通过串口与PC进行通信,可以接收上位机发送的参数设置指令或者发送当前PWM信号的状态信息。
-控制模块:根据用户的操作指令,控制FPGA生成PWM信号的工作模式和参数设置。
3.FPGA模块设计:FPGA是可编程逻辑器件,可以按照需求配置逻辑电路,可以实现复杂的信号处理和控制功能。
在FPGA上实现以下模块:-PWM生成模块:根据单片机发送的参数,生成四个PWM信号。
可以设置频率、占空比等参数。
-PWM输出模块:将生成的PWM信号输出到外部设备,如电机驱动模块、LED灯等。
4.系统通信协议:为了实现单片机与FPGA之间的通信,需要定义一种通信协议。
可以使用UART串口通信,通信协议可以基于Modbus、RS485等标准协议进行设计。
5.系统工作流程:系统的工作流程如下:-单片机上电初始化,进行参数设置和显示;-单片机通过串口发送参数设置指令到FPGA;-FPGA根据设置生成PWM信号;-FPGA将生成的PWM信号输出到外部设备;-单片机可以通过串口接收FPGA发送的PWM信号状态信息。
6.系统性能考虑:为了实现稳定可靠的PWM信号发生,需要考虑以下因素:-单片机的时钟稳定性和计算能力;-FPGA的资源利用率和可靠性;-PWM频率和占空比的设置范围和精度;-输出PWM信号的性能要求。
基于AT89C51的PWM信号发生器设计摘要单片机集成度高,功能强,可靠性高,体积小,功耗低,使用方便,价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎无处不在,无所不为。
单片机的应用领域已经从面向工业控制,通讯,交通,智能仪表等迅速发展到家用消费产品,办公自动化,汽车电子,PC机外围以及网络通讯等广大领域。
单片机有两种基本结构形式:一种是在通用微型计算机中广泛采用的,将程序存储器和数据存储器合用一个存储器空间的结构,成为普林斯机构。
另一种是将程序存储器和数据存储器截然分开,分别寻址的结构,一般需要较大的程序存储器,目前单片机以采用程序存储器截然分开的结构多。
本课题讨论的占空比与周期可调的信号发生器的核心是目前应用极为广泛的51系列单片机。
基于单片机的信号发生器的设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的基本功能,完成一个基本的实际系统的设计全过程。
关键是这个实际系统设计的过程,在整个过程中我可以充分发挥自动化的专业知识。
特别是这个信号发生器的设计中涉及到一个典型的控制过程。
通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的周期和占空比可调的波形。
这样一个信号发生器装置在控制领域有相当广泛的应用范围。
因为产生一系列的可调波形可以作为其他一些设备的数值输入,还可以应用与设备检测,仪器调试等场合。
高频稳定的波形信号也可以用于无线电波的调频,解调。
这些都是现代生活中必不可少的一些应用。
关键词:PWM 信号发生器目录1.简介............................................................... - 3 -1.1 proteus ...................................................... - 3 -1.2 Keil ......................................................... - 4 -1.3 PWM .......................................................... - 5 -1.4 AT89C51 ..................................................... - 6 -2.设计原理和方法..................................................... - 9 -2.1单片机的基本组成.............................................. - 9 -2.2方案的设计与选择.............................................. - 9 -2.3定时器、的工作原理........................................... - 10 -2.3.1工作方式寄存器TMOD..................................... - 11 -2.3.2定时/计数器控制寄存器TCON.............................. - 12 -2.4定时/计数器的工作方式........................................ - 12 -2.5设计方法..................................................... - 13 -3.系统硬件电路设计图................................................ - 14 -4.程序框图.......................................................... - 16 -4.1主程序框图:................................................. - 16 -4.2系统初始化:................................................. - 16 -4.3定时器中断程序框图:......................................... - 16 -4.4键盘扫描程序框图:........................................... - 17 -5.性能分析.......................................................... - 18 -5.1定时器中断分析............................................... - 18 -5.2系统性能分析................................................. - 18 -6.源程序............................................................ - 18 -7. 仿真效果图....................................................... - 22 - 总结.............................................................. - 24 - 致谢.............................................................. - 25 - 参考文献............................................................ - 25 -1.简介1.1 proteusProteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
Yi bin University EDA技术及应用课程设计报告题目基于VHDL的PWM信号发生器系别物理与电子工程学院专业电子信息科学与技术学生姓名学号班级2013 年 12月 21日摘要本次课程设计是基于VHDL的PWM信号发生器,PWM信号发生器应用所学的数字电路和模拟电路的知识进行设计。
在设计过程中,所有电路仿真均基于Quartus II 9.1仿真软件。
本课程设计介绍了PWM 信号发生器的设计方案及其基本原理,并着重介绍了PWM信号发生器各单元电路的设计思路,原理及仿真,整体电路的的工作原理,控制器件的工作情况。
设计共有三大组成部分:一是原理电路的设计,本部分详细讲解了电路的理论实现,是关键部分;二是性能测试,这部分用于测试设计是否符合任务要求。
三是是对本次课程设计的总结。
关键词: PWM信号发生器仿真设计目录第1章绪论1.1 EDA 和QuartusⅡ的简介及起源 (1)1.2 EDA的优势及发展趋势 (1)第2章系统设计思路 (3)第3章可自加载加法计数器的设计 (4)第4章信号发生器设计过程 (6)第5章软件仿真5.1 Quartus Ⅱ软件简介 (8)5.2 用Quartus Ⅱ的仿真步骤和图像 (9)5.3 逻辑综合结果 (12)第6章设计总结 (13)第7章参考文献 (15)附录设计程序 (16)第1章绪论1.1 EDA和QuartusⅡ的简介及起源EDA是英文“electronic design automation”(电子自动化设计)的缩写,EDA技术是20世纪90年代迅速发展起来的,是现代电子设计的最新技术潮流,是综合现代电子技术和计算机技术的最新研究成果,是电子线路设计与分析的一门技术。
EDA包括电子线路的设计、计算机模拟仿真和电路分析及印制电路板的自动化设计三个方面的内容。
随着可编程逻辑器件迅速发展,出现了功能强大的全新的EDA工具。
具有较强描述能力的硬件描述语言(VHDL、Verilog、HDL)及高性能综合工具的使用,使过去单功能电子产品开发转向系统级电子产品开发。
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所示为系统的设计结构框图。
EDA实验报告学院:电气学院班级:电科1班学号:12401720126姓名:刘明煌实验三PWM信号发生器的设计1.实验目的(1)进一步熟悉掌握Quartus H。
(2)进一步熟悉和掌握GW48-CK或其他EDA实验开发系统的应用。
(3)学习和掌握VHDL进程语句和元件例化语句的使用。
2.实验内容设计并调试好PWM信号发生器电路PWM.VHD,并用GW48-CK或其他EDA实验开发系统进行硬件验证。
3.实验条件(1)开发软件:Quartus H。
(2)实验设备:GW48-CK EDA实验开发系统。
(3)拟用芯片:EP2C8Q208C8N。
4.实验设计1) 系统原理框图为了简化设计并便于显示,本信号发生器电路PWM的设计分为两个层次,其底层电路可,再由包括两个完全相同的加载加法计数器LCNT8而成。
PWM电路图2) VHDL程序PWM信号发生器的底层和顶层电路均采用VHDL文本输入,有关VHDL程序如下。
加载加法计数器LCNT8的VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LCNT8 ISPORT(CLK ,L D:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;CAO:OUT STD_LOGIC);END ENTITY LCNT8;ARCHITECTURE ART OF LCNT8 ISSIGNAL COUNT:INTEGER RANGE 0 TO 255;BEGINIF CLKEVENT AND CLK=1THENIF LD=1THEN COUNT<=D;ELSE C0UNT<=C0UNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT) ISBEGINIF COUNT=255 THEN CAO<=1;ELSE CAO<=0END IF;END PROCESS;END ARCHITECTURE ART;PWM信号发生器的VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY PWM ISPORT(CLK:IN STD_LOGIC;A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);PWM:OUT STD_LOGIC);END ENTITY PWM;ARCHITECTURE ART OF PWM ISCOMPONENT LCNT8 ISPORT(CLK ,L D:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CAO:OUT STD_LOGIC);END COMPONENT LCNT8;SIGNAL CAO1,CAO2:STD_LOGIC;SIGNAL LD1,LD2:STD_LOGIC;SIGNAL SPWM:STD_LOGIC;BEGINU1:LCNT8 PORT MAP(CLK=>CLK,LD=>LD1,D=>A,CAO=>CAO1);U2:LCNT8 PORT MAP(CLK=>CLK,LD=>LD2,D=>B,CAO=>CAO2);PROCESS(CAO1,CAO2)ISBEGINIF CAO1='1'THEN SPWM<='0';ELSIF CAO2'EVENT AND CAO2='1'THEN SPWM<='1';END IF;END PROCESS;LD1<=NOT SPWM;LD2<=SPWM;PWM<=SPWM;END ARCHITECTURE ART;3)工程编译后:4)仿真波形设置本程序包括两个程序,因此先进行底层的加载加法计数器 LCNT8的仿真,在进行顶层 PWM 的仿真,下图为 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信号发生器的设计程序module pwmgen(clk,rst,ce,addr,write,wrdata,read,bytesel,rddata,pwm); input clk,rst,ce;input [1:0]addr;input write,read;input[31:0]wrdata;output[31:0]rddata;input[31:0]bytesel;output pwm;reg[31:0]clk_div_reg,duty_cycle_reg;reg control_reg;reg clk_div_reg_sel,duty_cycle_reg_sel,control_reg_sel;reg[31:0]pwm_cnt,rddata;reg pwm;wire pwm_ena;always@(addr)beginclk_div_reg_sel<=0;duty_cycle_reg_sel<=0;control_reg_sel<=0; case(addr)2'b00:clk_div_reg_sel<=1;2'b01:duty_cycle_reg_sel<=1;2'b10:control_reg_sel<=1;default:beginclk_div_reg_sel<=0;duty_cycle_reg_sel<=0;control_reg_sel<=0;endendcaseendalways@(posedge clk or negedge rst)beginif(rst==1'b0)clk_div_reg=0;elsebeginif(write & ce & clk_div_reg_sel)beginif(bytesel[0])clk_div_reg[7:0]=wrdata[7:0];if(bytesel[1])clk_div_reg[15:8]=wrdata[15:8];if(bytesel[2])clk_div_reg[23:16]=wrdata[23:16];if(bytesel[3])clk_div_reg[31:24]=wrdata[31:24];endendendalways@(posedge clk or negedge rst)beginif(rst==1'b0)duty_cycle_reg=0;elsebeginif(write&ce&duty_cycle_reg_sel)beginif(bytesel[0])duty_cycle_reg[7:0]=wrdata[7:0];if(bytesel[1])duty_cycle_reg[15:8]=wrdata[15:8];if(bytesel[2])duty_cycle_reg[23:16]=wrdata[23:16];if(bytesel[3])duty_cycle_reg[31:24]=wrdata[31:24];endendendalways@(posedge clk or negedge rst)beginif(rst==1'b0)control_reg=0;elsebeginif(write & ce & control_reg_sel)beginif(bytesel[0])control_reg=wrdata[0];endendendalways@(addr or read or clk_div_reg or duty_cycle_reg or control_reg or ce) beginif(read & ce)case(addr)2'b00:rddata<=clk_div_reg;2'b01:rddata<=duty_cycle_reg;2'b10:rddata<=control_reg; default:rddata=32'h8888;endcaseendassign pwm_en=control_reg; always@(posedge clk or negedge rst) beginif(rst==1'b0)pwm_cnt=0;elsebeginif(pwm_en)beginif(pwm_cnt>=clk_div_reg)pwm_cnt<=0;elsepwm_cnt<=pwm_cnt+1;endelsepwm_cnt<=0;endendalways@(posedge clk or negedge rst) beginif(rst==1'b0);elsebeginif(pwm_en)beginif(pwm_cnt<=duty_cycle_reg)pwm<=1'b1;elsepwm<=1'b0;endelsepwm<=1'b0;endendendmodule。
Yibin University
电子信息技术与科学专业
题目 PWM信号发生器的设计
专业电子信息科学与技术
学生姓名 *****
学号 ******** 年级物电2011级
班级 3班
指导教师 ******
2013年 12 月 8 日
PWM信号发生器的设计
一、设计内容
设计一个能够均匀输出给定占空比的脉冲宽调制信号,通过两个可加载8位计数器lcnt8.v实现本设计。
若初始时D触发器输出为高电平时, U1不能加载A,若已复位只能完成0到255的加计数,在计到255时产生输出cao1,经反相后异步清除d触发器,经反相后,ld1变高,使u1完成加载A,但只能保持加载状态,直到u2计数完成,产生cao2使d触发器输出高电平,ld1变低,u1开始从A的加计数,计到255后,产生输出cao1,经反相后异步清除d触发器,如此循环。
D触发器输出高电平使u2加载,但持续的高电平维持加载使u2计数状态维持在B,只有当d触发器清除后,u2开始从B的加计数,计到255后产生输出cao2,使D触发器输出为高电平,如此循环。
二、设计方案
基于现场可编程逻辑门阵列FPGA,通过EDA技术,采用VHDL硬件描述语言实现数控脉冲宽度调制信号发生器设计。
程序设计思想为:对输入信号A、B采用不同的八位二进制代码表示高低电平持续时间,由时钟上沿触发加计数器进行加计数功能,至于计数器u1、u2谁工作取决于其后接的D触发器输出的高低电平状态,低电平使u1工作,高电平使u2工作。
再通过组合逻辑电路输出结果状态。
其原理框图
图一脉宽数控调制信号发生器逻辑图
而基于FPGA则是把相应的逻辑“暂时”固化为硬件电路了,它对激励作出的响应速度就是电信号从FPGA的一个管脚传播另一个管脚的传播速度,当然这指的是异步逻辑,同时电信号也要在芯片内进行一些栅电容的充放电动作,但这些动作都是非常非常快的。
如果将初始值可预置的加法计数器的溢出信号作为本计数器的初始预置加载信号LD,则可构成计数初始值自加载方式的加法计数器,
从而构成数控分频器。
图一中D触发器的一个重要功能就是均匀输出信号的占空比,提高驱动能力,这对驱动,诸如扬声器或电动机十分重要。
三、单元模块设计
本设计由现场可编程门阵列(FPGA)作为控制芯片,通过VHDL硬件描述语
言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。
下面介
绍主要模块的功能及作用。
1.八位计数器输入电路
8位计数器的原理图如下图二所示:
图二8位计数器件原理图
此试验选用的是8位的计数器进行加计数功能,从0加到255。
计数器是数
字系统中用的较多的基本逻辑器件,它的基本功能是统计时钟脉冲的个数,即实
现计数操作,它也可用与分频、定时、产生节拍脉冲和脉冲序列等。
例如,计算
机中的时序发生器、分频器、指令计数器等都要使用计数器。
2. D触发器电路
D触发器的原理图如下图所示:
图三D触发器件原理图
D触发器的输入端由时钟信号端clk、数据信号端、反相复位端CLRN和反相
置位端PRN组成,CLRN、PRN控制信号分别从方框小圆圈处输入,表示低电平控
制信号有效。
D触发器输出端由两个互为反相的Q端和~Q端组成。
D触发器的D代表延迟或数据,它的输出是发生在早于一个时钟脉冲之前的D输入的函数。
在时钟脉冲期间,在D输入提供“1”会导致输出变为1,否则输出变为0。
四、系统仿真及调试
1.软件实现
通过至顶向下(TOP--DOWN)的设计方法,我们对电路的设计要求作了分析,从电路要实现的功能着手,逐层分析电路设计的步骤,再具体到各个模块的设计实现以及各模块实现方案的选择。
从本设计的电路要求,通过两个可加载8位计数器lcnt8.v实现,程序调试如下:
顶层程序调试实现
2.波形调试
五、总结
在本次设计中,我们完成本系统设计的要求及功能。
在设计开始前我们对各个模块进行了详细的分析和设计准备工作,设计过程中,我们相互协调,积极参与完成各个技术实现的难点。
通过本次设计,我们在对EDA这门技术上有了更深刻的认识,也从实践的例子中去感受到了EDA设计给我们设计带来的改变与进步。
我们不仅掌握MAX PLUSII软件的使用,与此同时,我们还对电子设计的思路有了更多的认识。
通过对EDA设计中的TOP-DOWN设计方式的运用,体会到了对于一个大型系统的设计方案选取应从顶向下的设计思路,这与传统的至底向上的设计方式有很大改进,且设计效率得到大大提高。
由于时间仓促和我们自身水平有限,本设计在功能上也只是完成了一些基本功能,对于电路的可靠性,稳定性等参数还未做过详细的测试。
实验采用FPGA 来实现数控脉冲调制信号发生器的设计,对于FPGA器件和计数器的相关功能参数没有准确的测试。
对于输入控制高低电平的持续时间由输入A、B与255的差值控制的改进,在A、B信号后接入555定时器来实现差值。
六、程序清单
LIBRARY IEEE;
--正负脉宽数控调制信号发生器顶层文件
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PULSE IS
PORT (CLK:IN STD_LOGIC; --计数时钟
A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --8位计数预置数PSOUT:OUT STD_LOGIC); --计数溢出并分频
输出
END ENTITY PULSE;
ARCHITECTURE ART OF PULSE IS
COMPONENT LCNT8 IS
PORT(CLK,LD:IN STD_LOGIC;
D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CAO:OUT STD_LOGIC);
END COMPONENT LCNT8;
SIGNAL CAO1,CAO2 :STD_LOGIC;
SIGNAL LD1,LD2 :STD_LOGIC;
SIGNAL PSINT:STD_LOGIC;
BEGIN
U1:LCNT8 PORT MAP(CLK=>CLK,LD=>LD1,D=>A,CAO=>CAO1); U2:LCNT8 PORT MAP(CLK=>CLK,LD=>LD2,D=>B,CAO=>CAO2); PROCESS(CAO1,CAO2) IS
BEGIN
IF CAO1= '1' THEN PSINT<= '0';
ELSIF CAO2 'EVENT AND CAO2= '1' THEN PSINT<='1';
END IF;
END PROCESS;
LD1<=NOT PSINT;LD2<=PSINT;PSOUT<=PSINT;
END ARCHITECTURE ART;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LCNT8 IS --8位可自加载加法计数器PORT(CLK,LD:IN STD_LOGIC; --工作时钟/预置值加载信号D:IN INTEGER RANGE 0 TO 255; --8位分频预置数
CAO:OUT STD_LOGIC); --计数溢出输出END ENTITY LCNT8;
ARCHITECTURE ART OF LCNT8 IS
SIGNAL COUNT:INTEGER RANGE 0 TO 255;
--8位计数器设置
BEGIN
PROCESS (CLK) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF LD='1' THEN COUNT<=D;
--LD为高电平时加载预置数ELSE COUNT<=COUNT+1; --否则继续计数
END IF;
END IF;
END PROCESS;
PROCESS (CLK, COUNT) IS
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF COUNT=255 THEN CAO<= '1';ELSE CAO<= '0';END IF;
END IF;
END PROCESS;
END ARCHITECTURE ART;。