MC9S08LL 系列是飛思卡爾最新推出的內(nèi)置LCD 驅(qū)動(dòng),極低功耗的單片機(jī)。 非常適合于在水表氣表中的設(shè)計(jì)應(yīng)用。 本文介紹MC9S08LL16 在智能氣表的設(shè)計(jì)應(yīng)用。由于水表與氣表的工作原理非常相似,本文也可適用于水表的設(shè)計(jì)。 MC908LL16的主要功能 MC908LL16 是Freescale 基于HCS08 核的8 位單片機(jī)。具有極低功耗,內(nèi)置LCD 驅(qū)動(dòng)及豐富的外圍接口。LL16 的主要特性如下: · 低工作電壓1.8V-3.6V · 最大總線頻率10Mhz · 內(nèi)置瑣頻環(huán)電路FLL · 16K FLASH程序空間 · 2K字節(jié)RAM · 2個(gè)16位定時(shí)器 · 實(shí)時(shí)時(shí)鐘計(jì)數(shù)器 TOD · 8路12位A/D · 模擬比較器 · 內(nèi)置LCD驅(qū)動(dòng),可配置為8*24 或4*28模式 · 1個(gè)外部中斷和8個(gè)外部鍵盤中斷KBI · 內(nèi)部RC振蕩器的看門狗 · 低電壓檢測電路LVI · 1個(gè)SPI,I2C,SCI MC9S08LL16的低功耗特性 在水表氣表中的應(yīng)用中, 都是電池供電, 所以低功耗是設(shè)計(jì)中首要考慮的因素。系統(tǒng)功耗由兩部分組成: 單片機(jī)本身的功耗和外部電路的功耗。 由于外部電路的功耗基本上是固定的,因此選用低功耗的單片機(jī)至關(guān)重要。LL16是目前業(yè)界功耗最低的單片機(jī)之一。 單片機(jī)本身的功耗包括正常運(yùn)行時(shí)的功耗和睡眠時(shí)的功耗。 在水表氣表中的應(yīng)用中,單片機(jī)大部分時(shí)間工作于睡眠狀態(tài), 因此睡眠時(shí)的電流至關(guān)重要, 睡眠時(shí)的功耗主要決定系統(tǒng)的平均功耗。下圖為LL16各種模式下的電流參數(shù)表: 從表中看出, 睡眠3(STOP3 )模式的電流為 400nA, 睡眠2(STOP2 )模式的電流為 350nA。由于STOP2 與STOP3功耗相差不大,但是STOP2下可以保持工作的外設(shè)很少,并且從STOP2喚醒的條件嚴(yán)格得多,從STOP2喚醒后,程序也會(huì)從復(fù)位處重新執(zhí)行,且所有寄存器設(shè)置會(huì)回到默認(rèn)狀態(tài),在實(shí)際應(yīng)用中沒有STOP3模式方便, 因此建議采用STOP3模式。 在水表氣表中的應(yīng)用中, 進(jìn)入睡眠時(shí), LCD屏需要常亮, 外部32.768 kHz的晶振不能停振,因?yàn)門OD模塊采用外部32.768 kHz的晶振作為時(shí)鐘源實(shí)現(xiàn)軟時(shí)鐘。 把這些模塊的功耗考慮進(jìn)去, 那么進(jìn)入睡眠狀態(tài)時(shí), LCD常亮, TOD模塊工作(定時(shí)喚醒MCU),外部32.768 kHz的晶振工作, MCU本身的功耗僅為2uA左右。 另外有一個(gè)參數(shù)對(duì)系統(tǒng)功耗的影響也非常重要, 即從睡眠模式喚醒的時(shí)間。 喚醒時(shí)間越短越好, 因?yàn)閱拘训倪^程中, 功耗會(huì)比較大。 LL16從睡眠3(STOP3 )模式喚醒的時(shí)間非常短, 只有6uS, 大大低于業(yè)界的大部分同類產(chǎn)品。 下面將以LL16在預(yù)付費(fèi)IC卡氣表中的應(yīng)用為例, 介紹各模塊的使用。 IC卡氣表的原理框圖 下圖為預(yù)付費(fèi)IC 卡氣表的原理框圖: 電源電路 氣表和水表采用電池供電,氣表一般采用堿性電池或鋰電池。 如果采用堿性電池,一般使用四節(jié)。 因此電池電壓需經(jīng)LDO降壓到3V供給MCU。 由于IC卡工作電壓有5V或3V的,如果采用工作電壓為5V的IC卡, 電池電壓需經(jīng)另一LDO降壓到5V供給IC卡。 在水表普遍采用鋰電池供電, 鋰電池電壓可以不需需經(jīng)LDO降壓直接供給MCU,因?yàn)長L16工作電壓范圍為1.8V-3.6V. 晶振電路 LL16內(nèi)部有瑣頻環(huán)電路(FLL)可以把MCU運(yùn)行的總線頻率倍頻上去, 最高可以倍頻到20Mhz。 同時(shí)LL16內(nèi)部有RC振蕩器, 校準(zhǔn)后的精度可以達(dá)到±2%(±2%為全溫度范圍的最大誤差。常溫下該精度為±0.2%)。 由于在大部分設(shè)計(jì)中使用軟時(shí)鐘而省去外部的專用RTC芯片以節(jié)省時(shí)間成本, 所以選擇外接32.768k的晶振,以保證時(shí)鐘的精度。時(shí)鐘模塊的初始化程序如下: void ICS_init(void) { ICSC1 = 0x00; ICSC2 = 0x47; ICSSC_DRST_DRS=0; while((ICSSC & 0xC0) != 0x00) { } } EEPROM接口電路 由于在氣表水表應(yīng)用中,需要不斷地保存信息,例如:時(shí)間,當(dāng)前用氣/水量,剩余用氣/水量等。因此需要EEPROM來保存這些數(shù)據(jù)。LL16的FLASH可以自我擦寫,可以用來模擬EEPROM. 需要注意的是LL16 FLASH的擦寫次數(shù)有限,常溫下為10萬次. 如果需要更多的擦寫次數(shù), 需要外接EEPROM。下面以外接24LC64為例介紹它的接口應(yīng)用, 硬件接口電路如下: 為了降低功耗, 24LC64的電源通過I/O口 PTB6控制。當(dāng)需要讀寫24LC64時(shí),PTB6輸出高電平, 給24LC64供電,否則輸出低電平, 關(guān)閉24LC64的電源。 IC卡接口電路 在氣表應(yīng)用中,根據(jù)存儲(chǔ)介質(zhì)的不同有CPU卡,IC卡,RF卡等。由于IC卡具有保密性強(qiáng), 數(shù)據(jù)容量大,使用方便, 成本低等特點(diǎn), 因此在預(yù)付費(fèi)卡表普遍應(yīng)用。 目前普遍采用的是SLE442。 這里以SLE4442為例,介紹IC卡如何與LL16進(jìn)行接口及操作。SLE4442內(nèi)置256字, 具有寫保護(hù)和安全代碼可編程等特點(diǎn)。 由于LL16工作在3V, 如果采用5V工作的SLE4442,需要電平轉(zhuǎn)換。下圖為LL16 與5V工作的SLE4442的接口電路圖, 如果采用3V工作的SLE442卡, 則可省去電平轉(zhuǎn)換電路。 PTA1,A2與數(shù)據(jù)線DATA相連, PTA0與時(shí)鐘線CLK相連, PTC7與復(fù)位腳RST相連。 PTA3控制SLE4442的電源。 對(duì)SLE4442的操作主要包括讀寫SLE4442的主存儲(chǔ)器, 保護(hù)區(qū)存儲(chǔ)器和安全區(qū)存儲(chǔ)器。 對(duì)SLE4442寫操作之前,必須先進(jìn)行安全認(rèn)證。 如果連續(xù)三次認(rèn)證失敗, 則IC卡被作廢, 再也無法使用。PTA5,A4用于插卡檢測, 檢測IC卡是否插入卡座。 可以采用定時(shí)查詢的方式或中斷方式。 下面以讀主存儲(chǔ)器起始地址為0x20的3個(gè)字節(jié)為例說明它的編程: /************* main function ************/ void main (void) { unsigned char buffer; //read main memory at address 0x20. 21, 22, and stored at buffer Read_4442_main_memory(0x20, 3, buffer); } // read main memory function void Read_4442_main_memory(unsigned char Address, unsigned char number, unsigned char *data) { unsigned char command; command[0] = 0x30; command = Address; send_SLE4442_Command(command); send_SLE4442_Data(number, data); } 電池電壓檢測 由于氣表采用電池供電, 因此需對(duì)電池電壓進(jìn)行監(jiān)測, 在電池耗盡之前, 報(bào)警提醒用戶更換電池。 雖然LL16內(nèi)部有掉電檢測電路LVI, 但使能該模塊將消耗較大的電流, 所以不宜采用。 可以利用LL16內(nèi)部模擬比較器或A/D模塊監(jiān)測電池電壓,A/D模塊或內(nèi)部模擬比較器會(huì)消耗一定的功耗, 為了降低功耗, 可以采用定時(shí)檢測的方法, 因?yàn)殡姵仉妷菏蔷徛陆档摹?br /> 在水表中, 如果采用鋰電池直接供電, 這里介紹一種簡便的方法用于電池電壓檢測:在LL16的內(nèi)部集成一個(gè)1.17V的帶隙基準(zhǔn)電壓,此帶隙基準(zhǔn)電壓內(nèi)部連接到ADC的輸入通道AD27; 因此可以不需要任何外部電路,AD模塊只需定時(shí)采樣此基準(zhǔn)電壓,由此可換算出電池電壓。 這種方法的好處是,不需要外部任何器件, 既節(jié)省成本又節(jié)省空間,而且可以獲知當(dāng)前準(zhǔn)確的電池電壓。它的原理如下: AD的參考電壓設(shè)為VDD, VDD即為電池電壓, 如果AD設(shè)為12bit模式 那么:帶隙基準(zhǔn)電壓的AD值(AD27)=(1.17V / VDD) *4096 = (1.17V/ 電池電壓) * 4096;所以: 電池電壓= (4096 / 帶隙基準(zhǔn)電壓的AD值(AD27)) * 1.17 (V) 電機(jī)驅(qū)動(dòng)電路 在氣表應(yīng)用中,采用直流電機(jī)來開關(guān)閥門。 其驅(qū)動(dòng)電路普遍采用H橋電路, 如下圖。此電路成本低,可靠性高。 當(dāng)PTC3,PTC4同時(shí)輸出高電平或低電平時(shí), 電機(jī)不工作。 當(dāng)PTC3輸出高,PTC4輸出低時(shí), 電機(jī)向一個(gè)方向轉(zhuǎn)動(dòng)。 當(dāng)PTC3輸出高, PTC4輸出低時(shí), 電機(jī)向反方向轉(zhuǎn)動(dòng)。 PTC2用作電機(jī)到位檢測。 軟時(shí)鐘的實(shí)現(xiàn) 由于在氣表水表應(yīng)用中, 對(duì)時(shí)鐘的要求并不是特別精確, 因此可以利用LL16的TOD模塊方便地實(shí)現(xiàn)軟時(shí)鐘, 從而省去外部的實(shí)時(shí)時(shí)鐘芯片, 降低系統(tǒng)成本。 TOD模塊使用非常簡單,下圖為它的內(nèi)部結(jié)構(gòu)圖: TOD的時(shí)鐘源有三個(gè), 即內(nèi)倍的1 kHz RC振蕩器, ICSIRCK時(shí)鐘及外部晶振時(shí)鐘?紤]到精度因素, 所以選用外部32.768k晶振作為時(shí)鐘源。 TOD模塊對(duì)時(shí)鐘源進(jìn)行計(jì)數(shù),可產(chǎn)生1S或1/4S中斷。 因此可利用這1秒鐘一次的中斷實(shí)現(xiàn)軟時(shí)鐘。 同時(shí)此中斷把CPU從睡眠模式喚醒, 用來查詢IC 卡座, 流量脈沖計(jì)數(shù),以及電池電壓檢 測等。TOD的初始化如下: void TOD_init(void) { TODC = 0x11; TODC_TODEN =1; TODSC=0X08; } TOD的中斷服務(wù)程序: void interrupt VectorNumber_Vtod RTC_ISR(void) { TODSC_SECF = 1; // clear 1s interrupt flag Clock_processing(); } TOD 的中斷服務(wù)程序: void interrupt VectorNumber_Vtod RTC_ISR(void) { TODSC_SECF = 1; // clear 1s interrupt flag Clock_processing(); } LCD 驅(qū)動(dòng) LL16內(nèi)部有LCD驅(qū)動(dòng)模塊, 可配置為24*8,或28*4。 LCD與I/O復(fù)用, 多余的段可設(shè)為普通I/O。注意,所有和LCD驅(qū)動(dòng)復(fù)用的GPIO,在作為I/O功能使用時(shí),其輸出模式為開漏,需要外接上拉電阻。 LCD驅(qū)動(dòng)是LL16的一大特色, 具有許多優(yōu)越的性能。 · 低功耗, LCD模塊僅消耗900nA的電流 · 可配置為24*8即8COM端驅(qū)動(dòng)模式, 從而節(jié)省更多的I/O口 · COM 和SEGMENT可隨意配置, 方便布線, 從而提高EMC性能。 · 具有頻率可調(diào)的閃爍功能, MCU在睡眠模式仍然工作, 從而達(dá)到更省電的目的。 · 內(nèi)置電荷泵, 產(chǎn)生LCD驅(qū)動(dòng)所需的偏置電壓 · 內(nèi)置可調(diào)的穩(wěn)壓電壓源, 此穩(wěn)壓電壓源可作為LCD的輸入電壓, 通過內(nèi)置電荷泵, 產(chǎn)生LCD驅(qū)動(dòng)所需的偏置電壓。 當(dāng)電池電壓降低時(shí), 可保證LCD的對(duì)比度不受影響, 這一點(diǎn)對(duì)水表設(shè)計(jì)非常有用。 · LCD的輸入電壓有多個(gè)選擇, 可支持3V或5V的LCD屏 LCD驅(qū)動(dòng)模塊的內(nèi)部結(jié)構(gòu)圖如下: LCD 的外部電路非常簡單,只需幾個(gè)電容, 見下圖。 如果采用四節(jié)干電池供電, 由于6V的電源電壓經(jīng)過LDO產(chǎn)生穩(wěn)定的3V作為MCU的電源, 所以LCD的輸入電源可選為VLL3=VDD。 LCD驅(qū)動(dòng)模塊的初始化如下: void LCD_init(void) { LCDRVC = 0x00; LCDSUPPLY = 0x85; LCDC1=0X00; LCDC0 = 0xA3; } 如果采用鋰電池直接供給MCU, LCD的輸入電源可選為來自于MCU內(nèi)部的穩(wěn)壓電源,這樣的好處是, 對(duì)比度不會(huì)因?yàn)殡姵仉妷旱慕档投苡绊憽?br /> LCD驅(qū)動(dòng)模塊的初始化如下: void LCD_init(void) { LCDRVC = 0x80; LCDSUPPLY = 0x87; LCDC1=0X00; LCDC0 = 0xA3; } 流量脈沖檢測: 目前普遍采用雙干簧管進(jìn)行流量檢測,其缺點(diǎn)是沒有霍爾傳感器穩(wěn)定。 但霍爾傳感器功耗相對(duì)要大,成本要高。 隨著成本的逐漸減低,將來霍爾傳感器有取代雙干簧管的趨勢。 雙干簧管把流量信號(hào)轉(zhuǎn)換成脈沖信號(hào), 因此利用I/O口可以很方便地檢測流量脈沖信號(hào)。 為了降低功耗, 檢測電路的電源通過IO口進(jìn)行控制。 由于氣/水表的流量脈沖信號(hào)之間的間隔比較長, 因此可以采用定時(shí)查詢來計(jì)數(shù)脈沖個(gè)數(shù), 也可以接到鍵盤中斷口利用中斷方式檢測。 下圖為接口電路圖。其中:PTB7 用做斷線檢測。 PTC0,PTC1用做流量脈沖的檢測。 蜂鳴器電路 蜂鳴器電路如下: 結(jié)束語 由于LL16具有超低功耗, 內(nèi)置LCD驅(qū)動(dòng)及豐富的外圍接口, 性價(jià)比高等特點(diǎn), 因此非常適合于在水表氣表中的設(shè)計(jì)應(yīng)用。在本參考設(shè)計(jì)中, 系統(tǒng)功耗在LCD常亮的狀態(tài)下, 大約為4.5uA。 在水表氣表設(shè)計(jì)中, 如何降低功耗,是設(shè)計(jì)中的要點(diǎn)。 |