用AT89S2051单片机实现PWM输出控制
电子报/2007年/5月/27日/第015版
单片机应用
用AT89S2051单片机实现PWM输出控制
廊坊宋占坡
PWM(Pulse Width Modulation)脉宽调制技术,通过对脉冲宽的调制,获得所需要的波形(含形状和幅值)。
PWM也是单片机常用的模拟量输出方法,通过外接转换电路,可以将不同占空比的脉冲变成与之对应的电压(占空比是指正脉冲与整个周期的比值)。本文介绍的程序,是通过调整占空比来调节输出模拟电压的方法之一。可以用其控制直流电机的转速。
一、用延时子程序实现PWM控制
流程图如图1所示,电路如图2所示。
P1.0口接PWM转换电压输入端,电压输出接电压表的+端,电压表的-端接地,通过改变PWM的占空比来观察电压表的读数,占空比越大,电压表的读数就越大。
程序清单如下:
;输出50%占空比(1:2)PWM
;输出10%占空比(1:10)PWM
;输出90%占空比(9:10) PWM
;改变程序中两个A的值可控制占空比PWM
ORG 20H
OUTPUT BIT P1.0;定义P1.0
LOOP:CLR OUTPUT
MOV A,#5 ;A中内容可控制延时时间和占空比
CALL DELAY
SETB OUTPUT
MOV A,#5;A中内容是1:2
CALL DELAY
LJMP LOOP
DELAY:MOV R0,#00H;延时1275μS
DLOOP:DJNZ R0, DLOOP
DJNZ ACC, DLOOP
BET
END
二、用中断实现PWM控制
通过对单片机定时器初始值的两次不同设置,来实现占空比PWM输出控制。方法和电路图同前,只是单片机编程方法不一样。用定时器T0完成PWM输出,脉宽也是1275μS(定时器控制最大脉宽为65536μS),所以此程序的占空比是1:2。定时器计数初值为FB04H。计算方法:计数初值为65535-1275=64260,转换为十六进制:64260D=FB04H。
程序清单如下:
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:SETB EA;中断允许
SETB ET0 ;T0中断允许
MOV TMOD,#01H
;置T0为方式1,16位定时器
MOV TH0,#0FBH;赋初值64260
MOV TL0,#04H
SETB P1.0 ;P1.0置为高电平
SETB TR0;开启T0
LOOP:JNB TF0,$;查询T0中断
CLR TF0
JNB P1.0,QQ
MOV TH0,#0FBH
;赋初值,改控制低电平时间
MOV TL0,#04H
LJMP XX
QQ:MOV TH0,#OFBH
;赋初值,控制高点平时间
MOV TL0,#04H
XX:CPL P1.0
SJMP LOOP
END
注:此程序的占空比是1:2