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