PWM信号发生器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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