PWM波输出
PWM(Pulse Width Modulation)控制——脉冲宽度调制技术。通过对一系列脉冲的宽度进行调制,来等效的获得所需的波形(包括形状和赋值),对模拟信号进行数字编码。
基本原理
占空比:输出波形中,高电平保持的时间与时钟周期之比。
例如,一个单片机频率1000Hz,时钟周期就是1ms,如果高电平出现时间是500毫秒,那么占空比就是50%
分辨率:最小能达到的占空比,如8位的PWM,理论的分辨率就是1:255(单斜率), 16位的的PWM理论就是1:65535(单斜率)。
单斜率/双斜率:
假设一个PWM从0计数到80,之后又从0计数到80……. 这个就是单斜率。
假设一个PWM从0计数到80,之后是从80计数到0……. 这个就是双斜率。
理论基础:
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量指窄脉冲的面积。效果基本相同,是指环节的输出响应波形基本相同。低频段非常接近,仅在高频段略有差异。
面积等效原理:
分别将如图1所示的电压窄脉冲加在一阶惯性环节(R-L电路)上,如图2a所示。其输出电流i(t)对不同窄脉冲时的响应波形如图2b所示。从波形可以看出,在i(t)的上升段,i(t)的形状也略有不同,但其下降段则几乎完全相同。脉冲越窄,各i(t)响应波形的差异也越小。如果周期性地施加上述脉冲,则响应i(t)也是周期性的。用傅里叶级数分解后将可看出,各i(t)在低频段的特性将非常接近,仅在高频段有所不同。
用一系列等幅不等宽的脉冲来代替一个正弦半波,正弦半波N等分,看成N个相连的脉冲序列,宽度相等,但幅值不等;用矩形脉冲代替,等幅,不等宽,中点重合,面积(冲量)相等,宽度按正弦规律变化。SPWM波形——脉冲宽度按正弦规律变化而和正弦波等效的PWM波形。
如何实现PWM波形输出
1.可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成模块,只需要简单几步操作即可,这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。如下图,一般的IC口都会标明这个是否是PWM口;
2.如果内部没有PWM功能模块,或者功能要求不是很高的话,可以通过I/O口配置一些参数实现PWM信号输出。
这里用第二种方式。
假设我们要频率为f的PWM波形,那么算出f对应的周期t,然后用定时器定时时间间隔为t/n,n是一个整数,如果需要占空比为 p%,那么就在中断子程序内设置,当计数到p*t/n以上次数时,输出高电平,反之低电平。
假设我们需要1000Hz的波形,那么周期就是1ms,我们可以用定时器设置时间间隔为0.01ms,中断100次就是1ms。在中断子程序内设置一个变量count用以计数,当count>=100时清零,当count>p时输出高电平。
代码如下
1 | #include<reg52.h> |