1、下面介绍一下单片机PWM控制C语言实例,单片机PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。PWM—脉冲宽度调制,是一种周期一定而高低电平可调的方波信号。广泛使用电机调速的项目中,用了S52单片机的T2定时器产生PWM波信号,用于控制直流电机的转速,虽然电机的平均速度与占空比不是严格的线性关系,但是在调节占空比可以明显的看出电机转速发生了改变,也算是满足了课题的要求。下面复习一下PWM的知识吧:
PWM—脉冲宽度调制,当输出脉冲的频率一定时,输出脉冲的占空比越大,相对应的输出有效电压越大。PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。T1为脉冲宽度(就是
2、导通时间),周期为T,则输出电压的平均值为U=VCC*T1/T=a*VCC,a是占空比,变化范围为0≤a≤1。VCC为电源电压。所以当电源电压不变的情况下,输出电压的平均值U取决于占空比a的大小,改变a的大小就可以改变输出电压的平均值,这就是PWM的工作原理。采用T2定时器产生PWM脉冲极其精确,误差只在几个us。
// 单片机PWM控制C语言实例文件名: T2PWM.c
// 单片机PWM控制C语言实例功能: 用T2定时器产生PWM波,频率实调1khz
// 单片机PWM控制C语言实例说明: 单片机AT89S52,晶振12MHZ;
#include "reg52.h"
#defin
3、e uint unsigned int
#define uchar unsigned char
sbit PWM = P1^1;
uchar pluse; //占空比寄存器
void Timer2() interrupt 5
{
static uchar time;
TF2=0;
if(++time==pluse) PWM=0; //达到脉宽设定值时,输出PWM低电平
else if(time==40) //PWM的频率为1khz左右
{
time=0;
PWM=1;
}
}
void InitTimer2(void)
4、//初始化函数
{
RCAP2H = 0xff ;//定时25us初值
RCAP2L = 0x0e7;//
ET2=1;
EA=1;
TR2=1;
}
void main(void)
{
InitTimer2();
while(1)
{
pluse=20;
}
}
把PWM波的周期定为1ms,占空比分40级可调(即每级差2.5%),这样定时器T2每25us产生一个定时中断,每40次中断后进入下一个PWM波的周期。在程序中,pluse=20,即占空比为50%,输出的平均电压为12*50%=6V。PWM产生的过程是这样的,开始时PWM为1,当计时到达pluse时(即到达了设定的脉宽宽度时间)PWM=0,随后到达PWM周期时间后PWM=1,此时下一个PWM周期重新开始。