zhsjrobin

Verilog实现PMM信号输出

0
阅读(2309)

       PWM信号,全称为脉冲宽度调制(Pulse Width Modulation, PWM)信号,顾名思义,该信号是占空比可调的信号,常常应用于呼吸灯、电机调速等场合,关于PWM详细的介绍请自行查阅网络资料。本文将利用一个实例程序介绍利用Verilog设计生成PWM信号的方法。

       首先看一下系统的结构框图,非常简单,只有三个信号,其中clk为系统输入时钟信号,rst_n为系统复位信号,低电平有效,而pwm为系统输出的PWM信号。

QQ截图20170123222745.jpg

  在本设计中,PWM信号的工作频率为1KHz,即每个周期(低电平和高电平的时间和)为1ms。而PWM信号的工作模式有两种:占空比增和占空比减,这两种工作模式依次轮流进行,每个工作模式持续时间为1s,所以每个工作模式中(1s内)包含1000PWM信号周期。本设计中系统的输入时钟信号工作频率为50MHz,而为了生成PWM信号,则需要设置相应的计数器来分频产生相应的信号。具体介绍如下:

       占空比增模式:该模式持续时间为1s,在此时间内,设置计数器(记为counter1)从0开始计数,每1ms1这样在1s时间内共加到1000。另设置一个计数器(记为counter2)从0开始计数,每1us1,这样在1ms时间内共加到1000。在此过程中,所有的计数器等都是有系统时钟产生的,这是为了边沿对齐。在系统工作过程中,每1ms中,都将counter1counter2的大小进行比较。如果counter1> counter2,系统输出高电平;反之,输出低电平。这样随着counter1的不断增大,高电平所持续的时间越来越长,也就是占空比不断增加。

       占空比减模式:该模式持续时间同样为1s,在此时间内,计数器(counter1)从0开始计数,每1ms1,这样在1s时间内共加到1000。另一个计数器(counter2)从0开始计数,每1us1,这样在1ms时间内共加到1000。在系统工作过程中,每1ms中,同样是将counter1counter2的大小进行比较。如果counter1> counter2,系统输出低电平;反之,输出高电平。这样随着counter1的不断增大,低电平所持续的时间越来越长,也就是占空比不断减小。

       其实,在上述设计中,所提到的counter1就相当于一个阈值,但该阈值是不断增加变化的。该设计就相当与把一个固定周期长度的时钟信号分为两部分,对于比阈值小的部分设为一种电平,比阈值大的部分设计为另一种电平。这样通过改变阈值的大小,也就实现了输出信号占空比的变化。

       利用上述介绍的方法对该模块进行设计,所设计的代码及其TestBench在附件中,然后利用ModelSim软件对该模块进行仿真测试,如下图所示为仿真结果。

仿真结果.jpg


点击下载示例代码