【摘要】
脉冲宽度调制(Pulse Width Modulation,PWM)是现代控制技术常用的一种控制信息输出方式,广泛应用于检测、通信、逆变及电力电子等诸多技术领域。本文主要研究用单片机产生PWM信号,对单片机产生PWM信号的方法进行了分析和研究,实现了PWM信号的产生。
【关键词】
PWM;单片机;占空比
0 引言
随着电子技术的飞速发展,
PWM
控制技术渐趋成熟,主要应用于在电力电子技术行业。采用模拟控制方式生成的脉冲宽度调制(PWM
)信号,是根据相应载荷的变化来调制晶体管基极或
MOS管栅极的偏置,实现晶体管或MOS
管导通时间的改变,最终实现开关稳压电源输出的改变产生PWM
信号,这种方式较复杂,成本也高。而采用单片机产生PWM
信号,既简单又方便,成本低,因此,本文就单片机产生PWM
信号进行分析。
1 PWM
脉冲宽度调制作为控制技术常采用的控制方式,以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式。随着微机技术在控制领域的广泛应用,单片机控制的PWM
技术迅速发展,其突出特点是可以比较容易地选择最佳的脉冲调制频段。但在智能化产品开发中,
许多常用的单片机没有提供脉宽调制
(PWM )
电压信号输出功能,
而在某些特定的场合需要得到
PWM
信号。因此,基于单片机产生PWM
信号的分析就显得非常必要。
脉冲宽度调制(
PWM
)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。可见,PWM
信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有,要么完全无。电压或电流源是以一种通(ON)
或断
(OFF)
的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM
进行编码。
2 PWM信号的产生
脉冲宽度调制信号本质上是由占空比不同的矩形脉冲周期变化来构成的,其占空比与信号的瞬时采样值成一定的比例。根据这种方式可以采用单片机定时中断的方法,使单片机的I/O
口输出一定频率的高、低电平信号,通过调节高、低电平的持续时间,即占空比的改变,这样就可以实现一定周期一定占空比的PWM
信号,采用这种方式更加有效。比如采用AT89S52
单片机来产生的
PWM
信号控制直流电动机的转速,可以很方便的在电动自行车及相关诸多领域的调速系统中进行使用。
2.1 单片机定时器中断
中断是指当
CPU
执行主程序时,系统中若出现某些急需处理的异常情况和特殊请求时,CPU
会暂时中止程序的运行,去执行中断服务函数,处理完毕后,CPU
将自动返回到原来主程序的端点处继续执行。而单片机定时器中断是在定时器工作方式下,根据设定的定时时间进行单片机内部时钟脉冲进行计数,当计满溢出时产生中断请求,即定时器中断。定时中断是单片机技术中经常采用的中断方式,应用非常广泛。
2.2 AT89S52单片机产生PWM信号
采用单片机产生
PWM
信号是一种非常可靠、有效的控制方式,本文以AT89S52
单片机为例来产生
PWM
信号,通过定时中断程序来确定脉冲周期以及高低电平各自占用时间,从而形成不同的占空比,产生PWM
脉冲信号。
如图所示,取
AT89S52
的
I/O
口的
P3.0
和
P1.0
两个引脚,使用
P1.0接一按键开关,作为PWM
信号产生的开关使用,按键闭合表示开始产生PWM
信号,按键断开表示不产生
PWM
信号。使用
P3.0
用来输出PWM信号,通过
P3.0
输出一定的高电平信号作为脉宽,达到脉宽的设定值时,输出低电平,到达周期的设定值时又重复输出高电平,进行周期循环,从而实现PWM
信号的产生。通过单片机产生的
PWM
信号,可以灵活的改变周期和脉冲宽度参数,从而产生不同周期和占空比的PWM
信号。以产生周期为
10ms
、占空比为
60%
的
PWM
信号为例进行分析,采用Proteus
对电路进行仿真来产生
PWM
信号。
本例中时钟频率为
12MHz
,采用定时器
T0
,工作方式设置为方式2
,定时器
T0
的初值设定为
0.1ms
,即
100us
,因此,
TH0=-100
,TL0=-100。
PWM
的周期参数
PWM_T
(周期定义为
10ms
)参数设定为100
,脉冲宽度参数
PWM_mk
设定为
60
。源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define PWM_T 100
sbit K1=P1^0;
uchar PWM_mk;
uchar PWM_count;
uchar time_i;
sbit PWM=P3^0;
void delay(uint ms)
{ uchar i;
uint j;
for(j=0;j<ms;j++)
for(i=0;i<125;i++)
;
}
void main()
{ PWM_mk=0;
PWM=0;
TMOD=0x02;
TH0=-100;
TL0=-100;
EA=1;
ET0=0;
TR0=0;
while(1)
{ if(K1==0)
delay(10);
if(K1==0)
{ PWM_mk=60;
ET0=1;
TR0=1; }
}
}
void time0(void) interrupt 1 using 0
{ time_i++;
if(time_i>= PWM_T) time_i=0;
if(time_i< PWM_mk) PWM=1;
else PWM=0;
}
采用
keil
软件编译程序,程序编译成功,采用仿真软件
Proteus进行仿真产生需要的PWM
信号,如图
2
所示。
2.3 PWM信号的调节
通过单片机来产生
PWM
信号灵活方便,如果需要改变占空比,只需要改变程序中的脉冲宽度参数即可,程序中脉冲宽度参数为PWM_mk
,如将
PWM_mk
设为
30
,则
PWM
信号的占空比为30%;若要改变
PWM
的周期,应该改变程序中
PWM_T
的值即可,此时应注意定时器工作方式2
的最大计数,以免溢出无法计数,若超出计数最大值,可以选择工作方式1
进行程序编写。
3 结语
综合以上分析可以看出,采用单片机产生的
PWM
信号电路简单,成本低,无需通过对模拟电路个元器件参数进行计算及电路设计。另外,通过单片机的定时器实现PWM
信号频率和占空比的灵活调节,信号准确,更加可靠、有效。利用该方法产生的信号可作为各种需要PWM
控制的信号源发生器,根据需要还可进行显示及按键控制等处理。