一、简介
脉冲宽度调制(PWM) 是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。
二、基本原理
把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,既可改变逆变电路输出电压的大小,也可改变输出频率
三、利用PWM控制灯光亮度实验
硬件说明: IAP15F2K61S2
实验目标: 在CT107D单片机综合训练平台上,利用PWM脉宽信号实现
独立按键S7对L1指示灯亮度变化的控制。
实验要求:
1.PWM脉宽信号的频率为100Hz。
2.系统上电后L1指示灯处在熄灭状态。
3. L1指示灯有4种亮度模式,分别是完全熄灭、10%的亮度、
50%的亮度和90%的亮度。
4.按下S7按键,循环切换L1指示灯的四种亮度模式。
程序代码:
#include "reg52.h"
sbit L1 = P0^0;
sbit S7 = P3^0;
void SelectHC573()/*74HC573锁存器*/
{
P2 = (P2 & 0x1f) | 0x80;
}
//============定时相关的函数================
unsigned char count = 0;
unsigned char pwm_duty = 0;
void InitTimer0()
{
TMOD = 0x01;
TH0 = (65535 - 100) / 256;
TL0 = (65535 - 100) % 256;
ET0 = 1;
EA = 1;
}
void ServiceTimer0() interrupt 1 /*定时器0的中端服务函数*/
{
TH0 = (65535 - 100) / 256;
TL0 = (65535 - 100) % 256; /*100微秒执行一次中断*/
count++;
if(count == pwm_duty)
{
L1 = 1;
}
else if(count == 100)/*PWM频率为100HZ,即一个周期10ms;100*100微秒 = 10毫秒*/
{
L1 = 0;
count = 0;
}
}
//==========================================
//============按键相关的函数================
void Delay(unsigned int t)
{
while(t--);
}
unsigned char stat = 0;
void ScanKeys()
{
if(S7 == 0)
{
Delay(100);
if(S7 == 0)
{
switch(stat)
{
case 0:
L1 = 0;
TR0 = 1;
pwm_duty = 10;
stat = 1;
break;
case 1:
pwm_duty = 50;
stat = 2;
break;
case 2:
pwm_duty = 90;
stat = 3;
break;
case 3:
L1 = 1;
TR0 = 0;
stat = 0;
break;
}
while(S7 == 0);
}
}
}
//============================================
//==================主函数====================
void main()
{
SelectHC573();
L1 = 1;
InitTimer0();
while(1)
{
ScanKeys();
}
}