在我們的現(xiàn)在生活中,LED燈照明已經(jīng)在到處都能看到。LED燈具有節(jié)能、耐用、可調(diào)光等特點(diǎn),取代了過(guò)去落后的白熾燈。那么,為什么LED的燈光可調(diào)呢?
下面我就向大家介紹LED調(diào)光的基本原理-脈寬調(diào)制,也就PWM。
在我們的本節(jié)內(nèi)容中,我還是利用之前的電路來(lái)展示PWM的基本工作原理。
一、STC15W408AS控制LED燈電路
二、脈寬調(diào)制(PWM)基本原理
所謂脈寬調(diào)制,就是利用電路中的開(kāi)關(guān)器件的通斷來(lái)進(jìn)行控制,使輸出端得到一系列幅值相等但寬度不一致的脈沖,用這些脈沖來(lái)代替正弦波或者所需要的波形。
從下圖中,我們可以看出,這里有三種不同的波形。這些波形具有重復(fù)性,也就是我們通常所說(shuō)的周期。在專業(yè)術(shù)語(yǔ)中,一個(gè)周期所占用的時(shí)間,就叫做一個(gè)脈寬。其中,高電平所占整個(gè)脈寬的比例,就叫做占寬比。下圖中,就是占空比分別為75%、50%和20%的波形。
三、利用定時(shí)器來(lái)生成PWM波形的方法
我們?cè)诹私饬薖WM波形的基本概念后,就可以利用單片機(jī)的定時(shí)器來(lái)生成PWM波形。
如果要利用定時(shí)器來(lái)生成PWM,則首先要確定PWM波形的脈沖寬度(比如10MS),然后確定在這個(gè)脈沖中,高電平所占的時(shí)間寬度(比如2MS),則剩下的時(shí)間就是低電平時(shí)間(比如8MS),也就是占空比為20%,如上圖中的第三種波形。
現(xiàn)在假設(shè)我們使用的定時(shí)器是1MS中斷一次,那么要得到10MS的脈沖寬度,就需要計(jì)數(shù)10次,也就中斷10次。基中高電平計(jì)數(shù)4次,低電平計(jì)數(shù)6次。
也就是開(kāi)始計(jì)數(shù)時(shí)讓輸出為高電平,當(dāng)計(jì)數(shù)到4次后,再讓輸出變?yōu)榈碗娖剑钡接?jì)數(shù)到10次,再重復(fù)這個(gè)過(guò)程。
這樣,我們就得到了一系列寬度為10MS,占空比是是40%的脈沖。
四、利用定時(shí)器生成PWM波形相關(guān)代碼
int mPulseCnt=0;
// 1ms
void Timer0_ISR (void) interrupt 1
{
mPulseCnt=mPulseCnt+1;
if(mPulseCnt<=4)
{
PinLed_High();
}else{
PinLed_Low();
}
if(mPulseCnt==10)
{
mPulseCnt=0;
}
}
五、利用定時(shí)器來(lái)生成PWM波形的完整代碼
#define FOSC 11059200L
#define T1MS (65536-FOSC/1000) // 1 T模式
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
#define TRUE 1
#define FALSE 0
#define Pin_LED P32
#define Pin_LED_M1 P3M1
#define Pin_LED_M0 P3M0
#define Pin_LED_BIT BIT2
#define PinLed_High() Pin_LED=1
#define PinLed_Low() Pin_LED=0
#define BOOL unsigned char
#define UINT unsigned int
UINT mTimer500ms=0;
void PinLED_DirOut(void);
void Timer0_Init(void);
BOOL bLedon=FALSE;
int mPulseCnt=0;
void main(void)
{
PinLED_DirOut();
PinLed_High();
Timer0_Init();
while(TRUE)
{
}
}
void PinLED_DirOut(void)
{
Pin_LED_M1 &=~Pin_LED_BIT;
Pin_LED_M0 |=Pin_LED_BIT;
}
void Timer0_Init(void)
{
AUXR |= 0x80; //定時(shí)器0為1T模式
TMOD = 0x00; //設(shè)置定時(shí)器為模式0(16位自動(dòng)重裝載)
TL0 = T1MS; //初始化計(jì)時(shí)值
TH0 = T1MS > > 8;
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0 = 1; //使能定時(shí)器0中斷
EA = 1;
}
// 1ms
void Timer0_ISR (void) interrupt 1
{
mPulseCnt=mPulseCnt+1;
if(mPulseCnt<=4)
{
PinLed_High();
}else{
PinLed_Low();
}
if(mPulseCnt==10)
{
mPulseCnt=0;
}
}
-
單片機(jī)
+關(guān)注
關(guān)注
6039文章
44587瀏覽量
636762 -
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
108179 -
PWM
+關(guān)注
關(guān)注
114文章
5194瀏覽量
214335 -
脈寬調(diào)制
+關(guān)注
關(guān)注
3文章
219瀏覽量
38354 -
LED調(diào)光
+關(guān)注
關(guān)注
0文章
61瀏覽量
16327
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論