基于MSP430F11X的低功耗低成本實(shí)時(shí)時(shí)鐘
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言
實(shí)時(shí)時(shí)鐘(RTC)可應(yīng)用于多種領(lǐng)域--從鐘表到時(shí)間標(biāo)記事件,甚至到產(chǎn)生事件。對(duì)于通信工程、電力自動(dòng)化、工業(yè)控制等自動(dòng)化程度高的領(lǐng)域大多數(shù)情況下很多設(shè)備都處于無人值守的情況,都希望能把故障發(fā)生的時(shí)間和相關(guān)信息記錄下來,以便具體分析。目前市面上有很多專用RTC器件,這些器件往往靈活性差,系統(tǒng)集成度低。而MSP430F11X系列單片機(jī)具有低成本、低電流損耗、使用靈活簡單及擴(kuò)展性好等優(yōu)點(diǎn),使之成為專用RTC器件在某些特殊場(chǎng)合的理想替代品。
本系統(tǒng)采用了TI公司超低功耗16位微處理器--MSP430F111,具有極低功耗特性、極強(qiáng)的抗干擾能力和極高的性價(jià)比。整個(gè)系統(tǒng)僅用兩個(gè)普通電池(工作電壓為3V)就可以長期工作,無需其他電源,大大拓寬了應(yīng)用范圍。
系統(tǒng)工作原理和實(shí)現(xiàn)
本系統(tǒng)的主要難點(diǎn)在于如何產(chǎn)生一個(gè)穩(wěn)定的系統(tǒng)時(shí)鐘。所有MSP430器件既包含一個(gè)數(shù)字控制的RC型振蕩器,又包含一個(gè)晶體振蕩器。一般RC型振蕩器用于 CPU時(shí)鐘,而晶體振蕩器則用于外圍器件。在實(shí)時(shí)時(shí)鐘的應(yīng)用中,晶體振蕩器可作為用作時(shí)基的定時(shí)器/計(jì)數(shù)器的時(shí)鐘源。因此,不存在對(duì)RC型振蕩器很普遍的不穩(wěn)定問題。
將MSP430制作成RTC的過程很簡單,包括一個(gè)定時(shí)器/計(jì)數(shù)器提供1s的中斷以及一個(gè)小型CPU子程序來計(jì)算中斷。在中斷之間,CPU可以處于休眠狀態(tài)或執(zhí)行其他功能。實(shí)際操作過程中還應(yīng)包括一個(gè)用于主機(jī)處理器從MSP430 RTC中抽取時(shí)間的接口子程序,以及其他系統(tǒng)功能,如電池監(jiān)控、系統(tǒng)監(jiān)控、通訊接口等。
MSP430F111是MSP430F11X系列中的一個(gè)很簡單、價(jià)格也很便宜的器件,具有14個(gè)通用I/O引腳、2個(gè)16位定時(shí)器、2KB 閃速存儲(chǔ)器、128B RAM和基本時(shí)鐘模塊。
時(shí)鐘的產(chǎn)生
RTC中采用在LF工作方式下具有32768Hz晶振的LFXT1振蕩器來產(chǎn)生時(shí)鐘。LFXT1振蕩器的輸出用于提供ACLK,然后ACLK則用作定時(shí)器/計(jì)數(shù)器的時(shí)鐘源,而定時(shí)器/計(jì)數(shù)器用作RTC的時(shí)基。
DCO產(chǎn)生CPU時(shí)鐘MCLK。實(shí)際上CPU和外圍器件定時(shí)器/計(jì)數(shù)器異步運(yùn)行。只要CPU能在下一個(gè)中斷到達(dá)之前計(jì)算每個(gè)來自定時(shí)器/計(jì)數(shù)器的中斷,RTC的精度就不受影響。
定時(shí)器/計(jì)數(shù)器的選擇
MSP430F111 包含2個(gè)定時(shí)器:看門狗定時(shí)器和定時(shí)器A。定時(shí)器A用作時(shí)基,設(shè)計(jì)成能連續(xù)計(jì)數(shù)并每隔1s時(shí)間提供一次中斷。由于定時(shí)器A用ACLK作為自己的時(shí)鐘源,而 ACLK的工作晶振頻率精確為32768Hz,所以定時(shí)器A可簡單的計(jì)數(shù)到32768,然后開始翻轉(zhuǎn)到0,每次數(shù)到32768時(shí)便給出一個(gè)中斷。而CPU 則可簡單的計(jì)算來自定時(shí)器A的中斷。
外部接口
因?yàn)楝F(xiàn)在可以方便的得到各種RTC的接口,其中絕大部分可以應(yīng)用于 MSP430,如I2C、并行接口、UART及串行接口等。TI有現(xiàn)成的程序代碼模塊以實(shí)現(xiàn)與 MSP430的接口,并易于集成。這樣,建立一個(gè)基于MSP430的完整RTC就成為一件簡單的事,即選擇一個(gè)接口。
電路描述
圖1為RTC的電路圖,此處唯一需要的外部元件是32768Hz的晶體。
圖1 RTC的電路圖
電流損耗
MSP430F111 在正常工作方式下(3V,1MHz)的典型電流消耗是330μA。而在低功耗方式(休眠方式)下的典型電流損耗為1.5μA(3V)。器件從低功耗方式下喚醒的時(shí)間小于6μs,并且時(shí)鐘程序大約可在130μs內(nèi)執(zhí)行。由于極低的電流消耗以及處于有效方式的時(shí)間極短,采用'F111作為一個(gè)RTC僅消耗極少的電流,因此其電池壽命最長。
晶體的精度和選擇
RTC的精度僅取決于為晶體振蕩器而選擇的晶體的精度。我們可以根據(jù)自己期望的精度而購買適當(dāng)?shù)木w。
晶體的精度主要受下面兩個(gè)因素影響:晶體的頻率容限和指定的負(fù)載電容。
晶體的容限是很顯而易見的。晶體頻率的容限越小,RTC的精度越高。
晶體的指定負(fù)載電容也影響RTC的精度,晶體的負(fù)載電容是晶體所需電容的總和,而不是晶體所提供電容的總和,晶體需要適當(dāng)?shù)呢?fù)載電容以便在指定的頻率起振。所有的MSP430器件所用的32768Hz振蕩器已經(jīng)集成了額定電容值為12pF的負(fù)載。這就為晶體提供了全部12pF的負(fù)載,它意味著為了獲取最佳的 RTC精度,必須指定所連接的32768Hz的晶體使用12pF的負(fù)載電容。
在RTC容限要求更高的應(yīng)用領(lǐng)域,可以使用一個(gè)更易調(diào)整的電容,在制造時(shí)進(jìn)行調(diào)節(jié)。
更高級(jí)別的陶瓷(即NP0型)電容和聚酯軟片電容較適用于定時(shí)應(yīng)用領(lǐng)域,因?yàn)樗鼈兒屯ㄓ锰沾呻娙菹啾染哂懈俚慕橘|(zhì)損耗和更佳的溫度系數(shù)。
可擴(kuò)展型
MSP430F111 是極低功耗、低價(jià)格的微控制器,可理想的適用于實(shí)時(shí)時(shí)鐘器件。將MSP430作為RTC的一個(gè)主要優(yōu)點(diǎn)是它與專用的RTC器件相比具有可擴(kuò)展性。所有的 MSP430x11x期間都包括一個(gè)16位RISC CPU、16位看門狗定時(shí)器、16位定時(shí)器A(帶3個(gè)捕捉/比較寄存器和模擬比較器)、最小128B的RAM、最小2Kb的ROM和最少14個(gè)腳通用 I/O口。很明顯MSP430能提供其它專用RTC所無法比擬的靈活性。
除此之外,定時(shí)器A模塊能提供斜率A/D轉(zhuǎn)換、PWM輸出和工作速率高達(dá)115200波特率的UART??撮T狗定時(shí)器也能作為一個(gè)簡單的定時(shí)器,并且通用I/O口和所有外圍設(shè)備具有可擴(kuò)展的中斷能力。
軟件設(shè)計(jì)
RTC的應(yīng)用程序代碼相當(dāng)簡單,包括一個(gè)初始化子程序、一個(gè)主循環(huán)、一個(gè)計(jì)算時(shí)、分、秒的時(shí)鐘計(jì)數(shù)子程序和一個(gè)處理來自定時(shí)器A的1s中斷的中斷服務(wù)子程序。
初始化子程序可初始化MSP430的的不同部分??撮T狗定時(shí)器被禁止,定時(shí)器A模塊被配置為可連續(xù)從0數(shù)到32768,每次到達(dá)32768時(shí)便給出一個(gè)中斷?;緯r(shí)鐘模塊也被設(shè)置。
主循環(huán)是一個(gè)無窮循環(huán),每當(dāng)定時(shí)器A發(fā)出一個(gè)中斷時(shí),它便調(diào)用時(shí)鐘計(jì)數(shù)子程序,否則將CPU置于休眠方式。當(dāng)CPU休眠時(shí),定時(shí)器A繼續(xù)計(jì)數(shù)。
定時(shí)器A中斷服務(wù)程序(ISR)處理狀態(tài)寄存器(SR)位,該位在進(jìn)入ISR之前被壓入堆棧。這可使CPU在剛從ISR返回時(shí)處于有效方式,而不是休眠方式。ISR也可清零定時(shí)器A中斷標(biāo)志。
時(shí)鐘計(jì)數(shù)子程序?qū)⒚恳粋€(gè)定時(shí)器A中斷計(jì)為1秒。
源程序
STARTMOV#Stack,SP
CALL#Setup;初始化設(shè)置
MainloopBIS#LPM3,SR;CPU進(jìn)入低功耗模式3
CALL#Clock;中斷處理后進(jìn)入時(shí)鐘計(jì)算
JMPMainloop;再次進(jìn)入省電模式
ClockSETC;設(shè)進(jìn)位位
DADC.bSECOND;秒加1
CMP.b#060d,SECOND;判斷是否滿1分鐘
JLOClockend;若不滿則跳出
CLR.bSECOND;清空秒計(jì)數(shù)器
DADC.bMINUTE;分加1
CMP.b#60d,MINUTE;判斷是否滿1小時(shí)
JLOClockend;若不滿則跳出
CLR.bMINUTE;清空分鐘計(jì)數(shù)器
DADC.bHOUR;小時(shí)加1
CMP.b#024d,HOUR;判斷是否滿24小時(shí)
JLOClockend;若不滿則跳出
CLR.bHOUR;清空小時(shí)計(jì)數(shù)器
ClockendRET
;設(shè)置模塊和控制寄存器
SetupMOV#WDTPW+WDTHOLD,&WDTCTL;禁止看門狗
MOV.b#08Ch,&BCSCTL1;設(shè)置振蕩器和時(shí)鐘控制寄存器
MOV.b#000h,&BCSCTL2;選擇DCOCLK為MCLK時(shí)鐘源
SetupTAMOV#0106h,&TACTL;設(shè)置定時(shí)器A控制寄存器
MOV#CCRE0,&CCTL0;中斷使能
MOV#8000h,&CCR0;設(shè)置時(shí)間間隔
BIS#10h,&TACTL;啟動(dòng)TA,開始增計(jì)數(shù)模式
ClearRAMMOV.b#00h,SECOND;清空秒、分、時(shí)計(jì)數(shù)器
MOV.b#00h,MINUTE
MOV.b#00h,HOUR
EINT ;中斷使能
RET
定時(shí)器A中斷服務(wù)程序(ISR)
TAintBIC#SCG0+CPUOFF,0 (SP);處理狀態(tài)寄存器(SR)位
BIC#TAIFG,&TACTL;清零定時(shí)器A中斷標(biāo)志
RETI
結(jié)語
整個(gè)系統(tǒng)結(jié)構(gòu)簡單,可擴(kuò)展性強(qiáng),成本低(一片'F111才10多元),另外系統(tǒng)在大多數(shù)時(shí)間都處于低功耗模式。因此,在無人值守的情況和惡劣環(huán)境下適合采用本系統(tǒng)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘,而無須考慮供電問題。
參考文獻(xiàn)
1 胡大可 MSP430系列FLASH型超低功耗16位單片機(jī) 北京航空航天大學(xué)出版社 2001年