PWM(脉冲宽度调制)控制器
PWM相信对于大家来说已经不是什么陌生的东西了,初学FPGA的时候,大家都做过呼吸灯,里面用到的思想就是脉冲宽度调制。关于这方面的介绍,大家可以自行百度。
以LED为例,改变它的亮度,我们的思想就是改变时钟的占空比。
正常亮度的LED灯的占空比是50%,时钟信号如下:
图1 50%占空比
改变时钟占空比为25%,时钟信号如下:
图2 25%占空比
一个cycle里,高电平的比例变小了,在频率等其他条件不变的情况下,可以认为电压值变小,电流值也变小,假设LED信号低有效,那么小灯的亮度会比之前的亮度增加一半。
从上面我们知道,我们的目的就是改变时钟信号的占空比。以一百分为例。设置两个计数器,cnt_small(较小频率计数),cnt_big(较大频率计数),两个计数器分别从0-99循环计数,注意,较小频率的计数器cnt_small以cnt_big计数一个循环为加一条件:
If(cnt_big==’d99)
cnt_small <= cnt_small + 1’b1;
这样你就会得到如下的时序图
图3 计数器关系时序图
接下来通过一个比较器,就可以得到占空比循环改变的PWM了。这一部分留给大家去思考怎么去做。将其中一个计数器改为固定值,就可以得到固定比例的PWM了。
sdoizq 2018-3-20 09:37