早期控制LED亮度的方法一般是采用模拟電路來調節LED的工作電流來實作,這種方式靈活性較差,很難達到智能控制的效果。本文将介紹如何通過一個普通MCS51單片機來産生PWM信号,達到調節LED的亮度的目的。
一、硬體的簡單介紹:
該實驗在“ME300B型51/AVR單片機學習開發系統”上完成(本刊2005年第11期和2006年第1期上分别有ME300B的功能與使用介紹),實驗中用到了開發系統上的8個發光二極管、獨立按鍵和蜂鳴器,現将這三部分的電路工作原理進行簡單的介紹:
- 發光二極管驅動電路
ME300B上的8個發光二極管接在單片機的P0端口上。由于51系列單片機的P0端口輸出高電平時的推電流能力弱,而輸出低電平時的灌電流能力強,是以ME300B開發闆上的8個發光二極管設計成輸出低電平時點亮,輸出高電平時熄滅,如圖1所示。

圖1 發光二極管驅動電路
- 獨立鍵盤電路
獨立鍵盤是直接用I/O口線構成的單個按鍵電路。每個獨立鍵盤單獨占有一根I/O口線。
開發闆設有4個獨立按鍵,分别對應接于P1.4-P1.7端口上,如圖2所示。
圖2 獨立鍵盤電路
在正常狀況下,與鍵盤所連接配接的單片機I/O端口先被置為高電平,即“1”狀态(輸入狀态)。當有鍵按下時,與之相連的單片機I/O端口将被拉成低電平,即“0”狀态。是以直接依據每個I/O口線的狀态來判斷按鍵是否按下。
- 蜂鳴器驅動電路
圖3 蜂鳴器驅動電路
由于ME300B開發系統使用的是交流蜂鳴器,不能使用直流電平控制方式,必須使用交變脈沖控制方式來驅動,這一點請大家注意。
二、PWM的工作原理
PWM 是脈沖寬度調制(Pulse Width Modulation)的簡稱,PWM是一種周期一定而高低電平的占空比可以調制的方波信号,當輸出脈沖周期一定時,輸出脈沖的占空比越大,相對應的輸出有效電壓越大。
圖4 PWM波形圖
在一個周期内的脈沖寬度(導通時間)為T1,周期為T,波形如圖4所示。
則輸出電壓的平均值為: U=Vcc×T1/ T=αVcc
其中,α=T1/T(正脈沖的持續時間與脈沖周期的比值)稱為占空比,α的變化範圍為0≤α≤1,Vcc為電源電壓。
當電源電壓Vcc不變的情況下,輸出電壓的平均值U取決于占空比α的大小,改變α的大小就可以改變輸出電壓的平均值,這就是PWM的工作原理。
發光二極管的亮度與加在發光二極管兩端的電壓成比例,而發光二極管兩端的電壓與PWM信号的占空比成正比。是以,占空比越大,發光二極管越亮,當占空比α=1時,發光二極管的亮度最高。
三、 示範軟體的程式設計方法
由于大多數51系列單片機沒有PWM信号輸出功能,是以我們在這裡采用單片機定時器配合軟體的方法來實作PWM信号的輸出。
- 确定改變占空比的值的方法
有幾種方法都可以改變占空比的值。
-
- 定寬調頻法
保持T1不變,隻改變T2,這樣使周期(或頻率)也随之改變。
-
- 調頻調寬法
保持T2不變,而改變T1,這樣使周期(或頻率)也随之改變。
1.3 定頻調寬法
周期T(或頻率)保持不變,而同時改變T1和T2。
我們選用定頻調寬的方法來改變占空比的值。
2、
确定PWM的占空比輸出方式圖5 P0口輸出波形
由于P0所接的8個發光二極管是用低電平驅動,是以要将PWM的實際輸出波形按圖5所示的P0口輸出波形進行程式設計,即PWM的占空比輸出方式為反向。
- 示範軟體的程式設計
用T0定時器設定PWM輸出的周期(或頻率),T0定時器設定成工作方式1,16位定時器。
T0中斷服務子程式主要任務是确定PWM輸出的周期(或頻率)和控制定時器1中斷。
T0定時器的定時常數是一個固定值,這樣就确定PWM輸出的周期(或頻率)。
用T1定時器設定PWM輸出的占空比,T1定時器設定成工作方式2, 8位定時器,自動載入設定值。
T1中斷服務子程式主要任務是調節PWM輸出的占空比(或脈寬)
T1定時器的定時常數是一個變化值,用K1鍵或K2鍵來設定。
T0、T1中斷服務子程式如下:
;====================================================
;T0中斷服務子程式 周期(或頻率)
;控制定時器1中斷
;====================================================
INTT0:
CLR TR1
MOV TH0,#0FCH ;1ms延時常數
MOV TL0,#066H ;周期調節
MOV TH1,PWM_NUM
SETB TR1
MOV PWM_OUT,#00H ;輸出低電平
RETI
;====================================================
;T1中斷服務子程式 脈寬(或占空比)
;控制PWM脈沖寬度
;====================================================
INTT1:
CLR TR1
MOV PWM_OUT,#0FFH ;輸出高電平
RETI
PWM_OUT 為外接LED的控制端口,PWM_NUM為按鍵設定的T1定時器定時值的存放單元。
4、
示範軟體的功能由兩個按鍵K1、K2來調節P0口輸出脈沖的占空比,該脈沖直接驅動P0口所接的8個發光二極管,随着占空比的不同發光二極管的亮度不同,當按下K1鍵(不要松手)發光二極管逐漸變暗,當有蜂鳴器響時,說明輸出脈沖的占空比已經達到最小值,發光二極管的亮度已處在最暗的狀态。
當按下K2鍵(不要松手)發光二極管逐漸變亮,當有蜂鳴器響時,說明輸出脈沖的占空比已經達到最大值,發光二極管的亮度已處在最亮的狀态。
作者: 山西太原 貴國慶