微控制器MCU通常被認(rèn)為是數(shù)字器件,。在缺省情況下,,其輸出電壓電平要么是高,要么就是低,不會(huì)是一個(gè)不高不低值,。為了實(shí)現(xiàn)LED亮度控制這一要求,首先浮現(xiàn)在腦海中的方法就是使用一個(gè)標(biāo)準(zhǔn)的數(shù)模轉(zhuǎn)換器或者設(shè)計(jì)一個(gè)受控的電阻網(wǎng)絡(luò)。值得慶幸的是,大多數(shù)現(xiàn)代MCU都具有內(nèi)置的脈沖寬度調(diào)制(PWM)單元,,這是解決該問(wèn)題的最容易和成本最低的方法。
根據(jù)我們的項(xiàng)目要求,,兩個(gè)LED的亮度必須在幾秒鐘的時(shí)間內(nèi)以相反的順序逐漸從最暗調(diào)整到最亮,,再?gòu)淖盍林饾u調(diào)整到最暗。在"勻變1"時(shí)間內(nèi),,針對(duì)LED 1的PWM信號(hào)的脈沖寬度逐漸增大,,而針對(duì)LED 2的PWM信號(hào)的脈沖寬度逐漸減小。例如,,假設(shè)勻變時(shí)間等于2秒并由128個(gè)向上/向下步長(zhǎng)組成,。因此,每個(gè)步長(zhǎng)持續(xù)大約16ms,。請(qǐng)注意,,脈沖寬度應(yīng)當(dāng)在一個(gè)PWM周期內(nèi)僅改變一次。因此,,PWM周期也應(yīng)該等于16ms,。
我們使用了低端8位摩托羅拉MC68HC908-QT2 Flash MCU,該器件內(nèi)嵌有振蕩器,。其振蕩頻率為12.8MHz,,并且預(yù)分頻器的分頻比在程序中設(shè)定為1:64,定時(shí)器時(shí)鐘周期為0.02 ms,。那么,,為了生成周期為16ms的PWM,要載入定時(shí)器/計(jì)數(shù)器方式寄存器(Tmod)的時(shí)鐘數(shù)應(yīng)等于16/0.02 = 800(等于十六進(jìn)制的$0320),。
最大脈沖寬度(PWmax)可以小于或等于PWM周期,。考慮PWmax大約等于15ms的情況,。對(duì)于128個(gè)步長(zhǎng)的情況,,要從零獲得此最大值,每個(gè)步長(zhǎng)值應(yīng)為15/128 = 0.117ms,,舍入之后為0.12ms,。由此我們可以得出PWmax = 15.36 ms,相當(dāng)于PWM周期的96%,。因此在每一步長(zhǎng)中,,PW應(yīng)以0.12ms(等于0.12/0.02 = 6個(gè)定時(shí)器時(shí)鐘)的增量向上/向下勻變。
任何一種帶有PWM的MCU和任何一種定時(shí)考慮方法可用來(lái)實(shí)現(xiàn)這一技術(shù),。應(yīng)根據(jù)使用的LED來(lái)選擇電阻R1 和 R2,。管腳pA2 =1時(shí)用來(lái)激活亮度控制,,管腳pA2 =0時(shí)用來(lái)關(guān)閉亮度控制,。