伍衍亮 梁炯輝
珠海格力電器股份有限公司 廣東珠海 519070
一般來說,MCU只需用到一個主時鐘源,但遙控器等低功耗設備的MCU不同,需要用到主時鐘源和副時鐘源,兩個時鐘源是相互獨立的。傳統空調器等用的遙控器都采用外部32.768 kHz晶振作為副時鐘,隨著芯片技術的逐步發展,芯片內部低速振蕩器的質量可靠性已經變得很好,從產品的成本要求和質量隱患等方面進行考慮,用芯片內部低速振蕩器來取代外部32.768 kHz晶振已經成為趨勢。
遙控器一般采用干電池供電,最核心的技術就是低功耗,芯片處于休眠階段時,高速振蕩器和其它部件均不工作,只有副時鐘可以運行,所以可以把功耗降到很低。晶振的精度可達±20 ppm,而芯片內部低速振蕩器的精度只有±15%左右,若遙控器設定了定時功能,傳統遙控器采用外部32.768 kHz晶振,定時時間的精度則可達到±20 ppm。但采用芯片內部振蕩器時,遙控器定時精度會由±20 ppm變為±15%,這會直接影響用戶的使用舒適感。
本文將以瑞薩遙控器RL78芯片為例,探討一種采用芯片內部高速振蕩器來對芯片內部低速振蕩器進行定時校準的方法。
RL78芯片本身特性:內置高精度高速振蕩器(1~24 MHz),精度±0.5%;內置低功耗低速振蕩器15 kHz,精度±15%;STOP模式下RTC(實時時鐘)可以選擇15 kHz工作。其參數如表1所示,芯片內部高速振蕩器精度-溫度曲線如圖1所示。

圖1 芯片內部高速振蕩器精度-溫度曲線

表1 RL78芯片內部振蕩器參數
MCU時鐘源選擇如圖2所示:主時鐘源選擇內部高速振蕩器,在芯片工作時運行;副時鐘源由傳統的外部接晶振的方案改為使用內部低速振蕩器,在芯片休眠時工作。

圖2 MCU時鐘源選擇框圖
舉例:內部高速振蕩器選擇4 MHz,用外部32.768 kHz晶振時,32.768 kHz在經過振蕩器特定數目n的脈沖后得到一個0.5 s的時間脈沖,稱之為RTC時鐘,則采用芯片內部低速15 kHz振蕩器方案時,在軟硬件設置不更改的情況下,經過n個脈沖后,產生的RTC時鐘為:

遙控器設置定時時間后,要在休眠時進行計時,所用時基就是RTC時鐘,用內部15 kHz低速振蕩器產生的RTC時間為1.09227 s,誤差為±15%,誤差太大,所以要用精度為±0.5%的高速內部振蕩器對定時時間進行校準。
校準原理是:內部低速振蕩器精度很低,體現在產生的脈寬不能保持恒定和準確,所以每隔一定時間,就啟動一次高精度振蕩器,用高精度振蕩器作為時間的標準量尺,來測量并校正低速振蕩器的脈寬從而提高定時精度。
具體校準步驟介紹如下:
內部低速15 kHz低速振蕩器作為副時鐘源,產生RTC為1.09227 s;
設置定時后,芯片每1.09227 s從休眠模式喚醒,進行校準;
用芯片的一個定時器TIMER1來測量脈寬,時鐘源為4 MHz高速振蕩器,測量對象為15 kHz脈寬寬度,即可理解為頻率為15 kHz的方波,一個方波的時間為
連續測量31次15 kHz的方波,因一直在運行,所以第一個方波是不完整的,故拋棄第一個方波,理論用時為:

計算同樣2 ms內4 MHz的理論方波數為:

用定時器TIMER1在測量30個15 kHz的方波,得到實際上4 MHz的方波個數,從而得到實際誤差:

以4 MHz的誤差Δ代替1.09227 s的誤差,每次累計,得到sum(Δ);
以15 min為一個校準基數,用15 kHz計時15 min,理論上要跑的RTC次數位:

即:休眠時運行824個1.09227 s就是15 min;
每次測量的2 ms均累計誤差,如果sum(Δ)>8000,說明4 MHz多跑了一個2 ms,則RTC理論上要跑的次數C=C-1,sum(Δ)數值要減掉8000;
同理,如果sum(Δ)<8000,說明4 MHz少跑了一個2 ms,則C=824+1,sum(Δ)數值要加上8000。
當實際上RTC的運行個數等于C時,則說明15 min計時完成,其計時精度=芯片內部高速振蕩器精度±0.5%。
表2為定時時間誤差理論值,表3為常溫下的實測數據。從測試數據可以看出,芯片的計時誤差范圍在0.3%以內,小于內部高速振蕩器的±0.5%,說明本文所述校準算法是有效的。

表2 定時時間誤差理論值

表3 常溫下實測數據
帶顯示的遙控器,在休眠時,會每隔一段時間跳出休眠喚醒芯片,跑一次主循環,判斷是否要更新顯示。
原副時鐘采用外部32.768 kHz晶振的遙控器,RTC為0.5 s,即每隔0.5 s會喚醒一次芯片。
副時鐘采用內部15 kHz低速振蕩器后,RTC為1.09227 s,即每隔
1.09227 s會喚醒一次芯片,相比較外部32.768 kHz晶振的方案,喚醒的間隔變長了,芯片處于休眠的時間變多了,故無需定時校準時,芯片的待機電流會比外部32.768 kHz晶振的方案要低。從這也可以看出,若對顯示實時性要求不高的產品,可以適當延長喚醒的間隔,降低待機電流,延長電源壽命。
若開定時等需要計時的功能后,采用內部15 kHz低速振蕩器的方案就需要進行定時校準,需在每個喚醒周期內加2 ms的校準程序,且校準期間,芯片需多打開一個計時器TIMER1對2 ms進行計時,故喚醒期間的電流是變大的。
以15 min為一個基準,理論計算待機功耗,假設校準前待機6 uA,芯片喚醒時全速運行1200 uA,則:
休眠時待機功率:900×998×6=5389200 W;
芯片喚醒期間的運行功率:824×2×1200=1977600 W;
定時校準時的功耗:(1977600+5389200)/900000 = 8.18 uA,比無校準時多2.12 uA的待機電流。
考慮到采用內部15 kHz低速振蕩器后,芯片喚醒的時間間隔是采用外部32.768 kHz晶振方案時間間隔的一倍多,綜合評估其待機功率是相當的。
用高精度的萬用表實際測試開定時校準后的待機電流情況如表4。

表4 實測待機電流情況
從測試情況可以看出,開定時校準后,采用內部15 kHz低速振蕩器方案比采用外部32.768 kHz晶振方案待機電流只升高約0.3 uA,不會對干電池壽命產生影響。
本文介紹了用高精度的高速振蕩器來對低精度的低速振蕩器計時進行校準的算法,校準后使低速振蕩器的計時精度等于高速振蕩器的精度,解決了取消外部晶振方案的一大難題。取消外部晶振方案既降低了產品成本,又消除了產品上使用的晶振損壞隱患,降低產品的故障率。同時,此方案不會增大待機電流,可滿足用戶的使用需求,在遙控器等需要休眠的產品設計上有參考意義。