隨著中國(guó)國(guó)家電網(wǎng)公司于2009年年底正式推出了醞釀已久的電表設(shè)計(jì)統(tǒng)一招標(biāo)方案之后,整個(gè)中國(guó)電表行業(yè)掀起了一輪全新的設(shè)計(jì)熱潮,以求在最短的時(shí)間內(nèi)設(shè)計(jì)出完全符合國(guó)網(wǎng)新規(guī)約的各種電表。由于此新規(guī)約較以往的設(shè)計(jì)相比增加了很多全新的技術(shù)要求,由此給不少?gòu)S家?guī)?lái)了設(shè)計(jì)方面的諸多挑戰(zhàn)。面對(duì)這樣的一個(gè)市場(chǎng)需求,飛思卡爾公司結(jié)合自己?jiǎn)纹瑱C(jī)產(chǎn)品的特點(diǎn)和電表設(shè)計(jì)的具體要求,及時(shí)推出了一款完全按國(guó)網(wǎng)單相多功能表要求設(shè)計(jì)的完整解決方案,以方便用戶進(jìn)行整體性能的綜合評(píng)估,并以此為參考來(lái)加快自有產(chǎn)品的設(shè)計(jì)和開發(fā)。我們?cè)谶@里就該方案做一些簡(jiǎn)要介紹。
系統(tǒng)實(shí)現(xiàn)基礎(chǔ)
該方案的核心是飛思卡爾專門針對(duì)中國(guó)電表市場(chǎng)而推出的系列芯片中最主要的一款8位單片機(jī)9S08MZ60,它基于飛思卡爾目前主打的S08內(nèi)核,片內(nèi)有60K的程序空間和2K的RAM空間,外加功能完善的內(nèi)部時(shí)鐘模塊;主要的片上外設(shè)包括:64引腳封裝所提供的55個(gè)IO端口;2路硬件異步串口;三個(gè)16位定時(shí)計(jì)數(shù)器,總計(jì)支持多達(dá)10路引腳通道時(shí)間控制,其中任意一路均可以通過(guò)軟件配置成輸入脈沖沿捕捉、定時(shí)比較電平輸出或PWM脈寬調(diào)制;帶總共16路輸入的8位ADC;另外硬件SPI和I2C模塊各一個(gè);還有一個(gè)8位的實(shí)時(shí)計(jì)數(shù)器可以在芯片休眠時(shí)維持定時(shí)計(jì)數(shù)并喚醒MCU;內(nèi)部總線最高運(yùn)行速度達(dá)20MHz。片上自帶在線調(diào)試模塊,開發(fā)調(diào)試高效方便。
本設(shè)計(jì)方案中充分利用了幾乎所有上述模塊的硬件固有功能,最大限度地簡(jiǎn)化外圍設(shè)計(jì),在保證整體設(shè)計(jì)功能滿足性能最優(yōu)的同時(shí),降低系統(tǒng)成本。其中:
- MCU工作于內(nèi)部時(shí)鐘,摒棄了傳統(tǒng)的片外晶體振蕩,簡(jiǎn)化電路,提高可靠性。內(nèi)部時(shí)鐘振蕩的精度和穩(wěn)定度通過(guò)運(yùn)行過(guò)程中的動(dòng)態(tài)標(biāo)定來(lái)保證。
- 2路硬件串口分別用于485抄表和電力線載波通訊。因這兩路的通訊波特率最高都是9600bps,用硬件串口實(shí)現(xiàn)比較容易;
- 16位定時(shí)器及其所附的引腳通道實(shí)現(xiàn)多種重要功能。首先是產(chǎn)生一個(gè)1ms間隔的系統(tǒng)時(shí)間節(jié)拍,用于所有軟件任務(wù)的普通定時(shí)控制;通道的作用一是實(shí)現(xiàn)脈沖輸入捕捉,例如檢測(cè)計(jì)量芯片輸出的電量脈沖;二是和軟件配合模擬實(shí)現(xiàn)相對(duì)低速的異步串行通訊,這其中包括紅外抄表通訊,ESAM和IC卡的ISO7816通訊;
- ADC模塊完成兩個(gè)重要任務(wù),一是對(duì)電池電壓的監(jiān)測(cè),二是交流掉電和交流恢復(fù)供電的狀態(tài)檢測(cè);
- 硬件SPI模塊則用于和前端計(jì)量芯片通訊,節(jié)約軟件開銷;
- 8位的實(shí)時(shí)計(jì)數(shù)器在交流掉電后芯片進(jìn)入低功耗休眠狀態(tài)時(shí)維持工作,用來(lái)周期性地喚醒MCU,定時(shí)檢測(cè)并記錄開蓋、按鍵、電池電壓和交流恢復(fù)等狀態(tài);
- 唯一沒(méi)有用到的是硬件I2C模塊,本設(shè)計(jì)中用芯片的普通IO引腳模擬I2C通訊。這主要是考慮硬件布線的方便,同時(shí)因?yàn)楫?dāng)工作于主模式時(shí),硬件I2C模塊驅(qū)動(dòng)和純軟件模擬的代碼開銷差不了多少。
當(dāng)然,針對(duì)本次特定的國(guó)網(wǎng)單相表新規(guī)約設(shè)計(jì),除了MCU外還需其它一些芯片配合實(shí)現(xiàn)一些關(guān)鍵功能,其中:
- 計(jì)量部分目前設(shè)計(jì)采用Cirrus Logic的CS5464實(shí)現(xiàn),理論上也支持其它同類的帶SPI接口的計(jì)量芯片;
- 實(shí)時(shí)時(shí)鐘則采用業(yè)界流行的RTC8025T;
- EEPROM為24LC512,具體容量可按實(shí)際需要選擇;
- 液晶驅(qū)動(dòng)芯片用的是BU9792。
綜合考慮設(shè)計(jì)實(shí)現(xiàn)的方便性和靈活性,我們將整個(gè)設(shè)計(jì)分解成四個(gè)獨(dú)立的硬件模塊,它們分別是:
- 主板。包含主電源和電池供電系統(tǒng);MCU、實(shí)時(shí)時(shí)鐘、數(shù)據(jù)存儲(chǔ)和ESAM等關(guān)鍵芯片;隔離的485抄表通訊電路;PLC模塊接口;開關(guān)和按鍵輸入等
- 計(jì)量板。包含計(jì)量電路和斷路控制繼電器。只要改動(dòng)此計(jì)量板,就可以評(píng)估不同的計(jì)量芯片;
- 顯示板。包含液晶屏及其驅(qū)動(dòng)電路;電表的狀態(tài)指示LED;紅外抄表接口;
- IC卡讀卡部分。包含IC卡座及其必要的讀卡電路。
主板和其他模塊板之間都通過(guò)插針接口互聯(lián)。
電源部分設(shè)計(jì)考慮
本設(shè)計(jì)采用變壓器降壓供電,次級(jí)兩個(gè)繞組輸出。一個(gè)繞組提供峰值電流1.5A / 12V電源。12V直接提供給PLC模塊;同時(shí)經(jīng)7805穩(wěn)壓后一路直接供無(wú)需電池備份工作的電路,例如計(jì)量芯片,紅外發(fā)射,ESAM等,另一路則通過(guò)二極管D2,合并來(lái)自二極管D1的電池供電回路,供給MCU,實(shí)時(shí)時(shí)鐘,EEPROM等需電池備份工作的電路。變壓器次級(jí)另一個(gè)繞組則提供獨(dú)立電源給隔離485通訊部分使用。
模擬計(jì)量部分和MCU電路是共地的且浮在電網(wǎng)上。這樣做的好處是可以省去計(jì)量芯片和MCU之間繁雜的隔離,簡(jiǎn)化硬件電路設(shè)計(jì),同時(shí)MCU可以用高速SPI和計(jì)量芯片進(jìn)行數(shù)據(jù)通訊,提高了軟件運(yùn)行效率。但同時(shí)也帶來(lái)一個(gè)安全性的問(wèn)題,就是在設(shè)計(jì)IC卡讀卡模塊時(shí),整個(gè)模塊要和MCU部分完全隔離以保證用戶人身安全。當(dāng)然如果所設(shè)計(jì)的電表為非IC卡插卡預(yù)付費(fèi)型,或使用非接觸射頻IC卡,則就無(wú)需考慮額外的電路隔離了。
12V電壓通過(guò)簡(jiǎn)單的電阻分壓電路R8/R9/C10,取樣得到交流掉電檢測(cè)信號(hào)直接送至MCU的一路AD輸入端。飛思卡爾單片機(jī)的ADC模塊都有一個(gè)特殊的工作模式,即后臺(tái)自動(dòng)連續(xù)進(jìn)行AD轉(zhuǎn)換并和事先設(shè)定的閾值做比較,只有超過(guò)閾值才產(chǎn)生AD中斷。在此設(shè)計(jì)中我們?cè)O(shè)定的AD比較閾值對(duì)應(yīng)的實(shí)際電壓是9V,一旦12V電壓降至9V以下,MCU就立即響應(yīng)AD中斷,保存關(guān)鍵運(yùn)行數(shù)據(jù)后進(jìn)入低功耗休眠模式,直到檢測(cè)到此電壓恢復(fù)至高于10V以上,系統(tǒng)自行硬件復(fù)位后重新運(yùn)行。引入電壓檢測(cè)回差可以確保交流掉電和供電狀態(tài)的可靠鑒別。
電池供電部分做了些特殊考慮。如果簡(jiǎn)單地通過(guò)二極管D1進(jìn)行直流5V和電池3.6V供電切換的話,電池供電時(shí)普通硅二極管D1上有約0.4-0.5V的壓降損失。對(duì)于標(biāo)稱3.6V的電池來(lái)說(shuō),0.5V的壓降是相當(dāng)可觀的。在整個(gè)電表的使用過(guò)程中可能考慮電池電壓降至3V左右系統(tǒng)還要維持工作,這時(shí)去掉0.5V壓降后供給MCU的電壓只有2.5V,已經(jīng)不能滿足MZ60最低2.7V供電的基本指標(biāo)。所以在此設(shè)計(jì)中額外增加了一個(gè)三極管QP1,當(dāng)直流5V消失后,系統(tǒng)在電池供電狀態(tài)下處于低功耗模式,平均功耗僅為幾個(gè)微安,QP1通過(guò)基極電阻R10得到少許偏置電流就足以使CE極間飽和導(dǎo)通,消除了D1的壓降。當(dāng)直流5V存在時(shí),D1和QP1都被反向偏置,故電池不消耗任何電流。
系統(tǒng)本身需要檢測(cè)電池電壓,通過(guò)簡(jiǎn)單的R1/R2/C5電阻分壓得到電池電壓取樣,也是直接送至單片機(jī)的一路AD輸入端。單片機(jī)以一定的時(shí)間間隔檢測(cè)此信號(hào),并換算出實(shí)際的電池電壓值。取樣電路的工作過(guò)程由單片機(jī)的一個(gè)引腳控制,檢測(cè)間隙期間取樣電阻不消耗任何電流。電池電壓的換算基于ADC模塊內(nèi)部的一個(gè)1.2V基準(zhǔn)電壓通道,無(wú)論單片機(jī)自身的供電電壓如何變化,是直流5V供電還是電池本身供電,都能精確測(cè)出電池電壓。
采用這樣的電路設(shè)計(jì)實(shí)現(xiàn)掉電和電池電壓檢測(cè)后,完全省去了傳統(tǒng)設(shè)計(jì)所采用的低功耗電壓比較芯片,既簡(jiǎn)化了電路,又降低了成本,同時(shí)還提升了系統(tǒng)性能和設(shè)計(jì)靈活性:因?yàn)榈綦娕袛嚅撝悼梢酝ㄟ^(guò)軟件自由設(shè)定,電池電壓檢測(cè)結(jié)果精細(xì)而直觀。
時(shí)鐘芯片選用業(yè)界最常用的RTC8025T,內(nèi)置晶體和溫度補(bǔ)償,使用方便。MCU通過(guò)I2C總線對(duì)其進(jìn)行數(shù)據(jù)讀些操作。
在交流供電模式下,軟件配置時(shí)鐘芯片輸出標(biāo)準(zhǔn)秒脈沖信號(hào),該信號(hào)有兩個(gè)作用:一是通過(guò)光耦隔離輸出用于外部校時(shí);二是直接送至單片機(jī)的一路定時(shí)器通道,通過(guò)單片機(jī)檢測(cè)所得的秒脈沖周期,反過(guò)來(lái)校準(zhǔn)單片機(jī)內(nèi)部的時(shí)鐘振蕩頻率,這就是所謂的時(shí)鐘頻率動(dòng)態(tài)標(biāo)定。當(dāng)處于電池供電狀態(tài)時(shí),則通過(guò)軟件配置關(guān)閉秒脈沖輸出,以節(jié)約功耗。光耦U11實(shí)際上對(duì)應(yīng)的是一個(gè)多功能輸出端子,其他的功能輸出由單片機(jī)一個(gè)IO引腳控制實(shí)現(xiàn),電路上和秒脈沖輸出分享,可通過(guò)單片機(jī)軟件切換。
數(shù)據(jù)存儲(chǔ)
按規(guī)約要求,國(guó)網(wǎng)單相表設(shè)計(jì)所需的數(shù)據(jù)存儲(chǔ)大約需32K字節(jié)。實(shí)際電路直接采用64K字節(jié)的EEPROM 24LC512,稍留余量。本方案中還預(yù)留了2M字節(jié)SPI接口的串行Flash存儲(chǔ)芯片,需要時(shí)可用于其它應(yīng)用評(píng)估。串行Flash芯片的讀寫和計(jì)量芯片共享同一組SPI總線,不占用單片機(jī)額外資源,只需一個(gè)獨(dú)立的片選信號(hào)控制。
液晶顯示電路
液晶顯示為一塊獨(dú)立的印板模塊,以插件的方式和主板相連。顯示驅(qū)動(dòng)芯片選用I2C接口的BU9792,和其它I2C接口芯片共享同一條I2C總線。該芯片支持36x4=144段顯示驅(qū)動(dòng),正好滿足國(guó)網(wǎng)單相表目前所需的約132段顯示信息。液晶驅(qū)動(dòng)電路基本按照BU9792的典型應(yīng)用。值得一提的是本設(shè)計(jì)中采用的智能對(duì)比度控制電路。
當(dāng)交流供電時(shí),MCU輸出一路PWM信號(hào),經(jīng)R44/C23濾波后得到一直流電壓,控制液晶驅(qū)動(dòng)芯片VLCD引腳電平實(shí)現(xiàn)對(duì)比度調(diào)整。由于MCU片內(nèi)ADC模塊含有一路1.2V基準(zhǔn)通道,所以任何時(shí)候都可以通過(guò)對(duì)基準(zhǔn)通道做一次AD轉(zhuǎn)換來(lái)反推出當(dāng)前實(shí)際的芯片供電電壓值,然后就可以調(diào)整PWM輸出占空比使得電源VDD和對(duì)比度控制VLCD兩點(diǎn)的壓差始終維持在3V左右,為3V液晶片提供最佳偏壓值。此時(shí)R43對(duì)應(yīng)的單片機(jī)引腳設(shè)置為高阻抗輸入狀態(tài),不參與分壓控制。
當(dāng)處于電池供電狀態(tài)時(shí),MCU基本處于低功耗的休眠狀態(tài),無(wú)法維持PWM輸出。在這種情況下,當(dāng)需要液晶顯示時(shí)MCU改此PWM引腳為固定低電平輸出,這相當(dāng)于用R44和液晶驅(qū)動(dòng)芯片內(nèi)置的偏壓分壓電阻進(jìn)行分壓。電池飽滿時(shí)能提供3.6V的電壓,此時(shí)R43一端依然設(shè)為高阻抗輸入狀態(tài)而不參與分壓控制,液晶驅(qū)動(dòng)芯片內(nèi)部三個(gè)1M歐電阻和600K歐的R44分壓后,繼續(xù)保持VDD和VLCD兩點(diǎn)間的3V壓差;前面已經(jīng)介紹了在電池供電時(shí)我們?nèi)匀豢梢詫?shí)測(cè)出電池電壓值,所以當(dāng)?shù)弥姵仉妷航档偷?.3V后,通過(guò)單片機(jī)引腳讓100K歐的R43一端也接到0V低電平,從而改變偏壓分壓電路的分壓比,繼續(xù)保持電源和VLCD兩點(diǎn)間接近3V左右的壓差。這樣就保證了在整個(gè)電池供電過(guò)程中從3.6V到2.8V這個(gè)變化區(qū)間內(nèi),液晶顯示對(duì)比度基本恒定一致。
采用這種實(shí)測(cè)供電電壓動(dòng)態(tài)調(diào)整對(duì)比度的方式,電路實(shí)現(xiàn)簡(jiǎn)單可靠,能自動(dòng)適應(yīng)寬電壓范圍,大大簡(jiǎn)化了生產(chǎn)過(guò)程中的調(diào)試流程。
電量計(jì)量
國(guó)網(wǎng)單相表要求能檢測(cè)線路電壓、相線電流和零線電流,故計(jì)量芯片必須具備三路模擬信號(hào)輸入。本設(shè)計(jì)選用了CS5464,因?yàn)閲?guó)內(nèi)電表行業(yè)對(duì)它的了解相對(duì)比較早,熟悉此芯片的人也比較多。理論上也可以選用任何其它型號(hào)的同類的計(jì)量芯片。線路電壓直接通過(guò)電阻分壓得到,相線電流通過(guò)分流片取樣,零線電流則用電流互感器取樣,經(jīng)低通濾波后分別送至CS5464的一路電壓和兩路電流輸入端。
計(jì)量芯片和MCU通過(guò)SPI口相連進(jìn)行雙向通訊。對(duì)于有功電量信號(hào),配置CS5464直接以脈沖方式輸出,MCU捕捉并累計(jì)脈沖;對(duì)于電壓、電流和功率等各項(xiàng)參數(shù),計(jì)量芯片每做完一次運(yùn)算周期后就發(fā)出中斷信號(hào),單片機(jī)響應(yīng)該中斷,然后通過(guò)SPI口直接讀出CS5464內(nèi)部對(duì)應(yīng)的寄存器值,軟件乘以事先標(biāo)定的系數(shù),轉(zhuǎn)換成實(shí)際對(duì)應(yīng)的參數(shù)值后即可用于顯示或控制。MCU通過(guò)軟件方式對(duì)計(jì)量部分所有相關(guān)參數(shù)進(jìn)行比例校準(zhǔn)和標(biāo)定,實(shí)現(xiàn)所需的校表工作。
ESAM和IC卡接口電路
ESAM芯片位于主板之上,和MCU直接連接并通訊。ISO-7816雙向數(shù)據(jù)通訊由MCU的一路定時(shí)器通道配合軟件高效模擬實(shí)現(xiàn),所需的1-5MHz時(shí)鐘也由MCU直接提供。MZ60的一個(gè)引腳可以直接輸出分頻后的內(nèi)部系統(tǒng)時(shí)鐘,軟件只需事先設(shè)定一個(gè)合理的分頻系數(shù),即可控制此時(shí)鐘的輸出或禁止。另外ESAM的供電被設(shè)計(jì)為程控模式,平時(shí)ESAM不工作時(shí)可以通過(guò)軟件切斷電源,降低系統(tǒng)整體功耗。
IC卡讀寫部分通過(guò)主板提供的外擴(kuò)連接端子來(lái)擴(kuò)展。為了最大限度地實(shí)現(xiàn)不同外擴(kuò)模塊的設(shè)計(jì),接口端子上提供了必要的5V電源,一路軟件模擬的全雙工串行通訊接口,一個(gè)1-5MHz的時(shí)鐘信號(hào),外加3個(gè)普通IO引腳功能。注意:如果是設(shè)計(jì)插卡式IC卡讀寫模塊,則該模塊必須要和所有的這些主板端子引腳實(shí)現(xiàn)電氣隔離。為了實(shí)現(xiàn)這一安全隔離要求,外接模塊可以利用端子提供的5V電源自己產(chǎn)生一組隔離電壓,除高速時(shí)鐘外其他的信號(hào)則可以用低速光耦隔離,因?yàn)楦咚俟怦畋容^昂貴,所以可以考慮模塊本地自己產(chǎn)生一個(gè)時(shí)鐘,用于CPU卡的通訊。非接觸式IC卡模塊或外接無(wú)線抄表模塊則無(wú)需考慮電氣隔離。
RS485抄表接口
按設(shè)計(jì)要求,RS485部分完全和其他任何電路實(shí)現(xiàn)電氣隔離。電源由變壓器的一個(gè)獨(dú)立繞組提供,數(shù)據(jù)收發(fā)和方向控制信號(hào)則由光耦實(shí)現(xiàn)隔離。本電路設(shè)計(jì)的通訊速率最高支持19200bps,雖然國(guó)網(wǎng)規(guī)約要求的最高速率為9600bps。為了能用低速光耦實(shí)現(xiàn)相對(duì)高速的數(shù)據(jù)通訊,數(shù)據(jù)接收和發(fā)送時(shí)通過(guò)三極管電路適當(dāng)增加了光耦的驅(qū)動(dòng)電流。收發(fā)方向控制信號(hào)則無(wú)特別的速度要求。通訊線路側(cè)的過(guò)壓安全保護(hù)采用經(jīng)典的TVS二極管加PTC熱敏電阻的方式實(shí)現(xiàn)
紅外抄表接口
紅外發(fā)射調(diào)制直接由單片機(jī)的一路定時(shí)通道產(chǎn)生38KHz載波,對(duì)發(fā)送碼流中的數(shù)據(jù)位0和1進(jìn)行發(fā)送調(diào)制;紅外接收則用一體化紅外接收頭AT138解調(diào)紅外信號(hào),輸出的是TTL標(biāo)準(zhǔn)串行碼流至MCU的一路定時(shí)通道,配合軟件完成串行接收。
本設(shè)計(jì)支持紅外通訊的數(shù)據(jù)波特率為1200或2400bps。目前電路設(shè)計(jì)暫時(shí)沒(méi)有考慮電池供電狀態(tài)下的紅外喚醒電表功能,但整個(gè)系統(tǒng)在布局上已經(jīng)保留了相關(guān)的控制信號(hào),必要時(shí)可以考慮增加實(shí)現(xiàn)。
載波通訊接口
按照國(guó)網(wǎng)新規(guī)約,對(duì)于電力線載波通訊只需在電表固定位置提供標(biāo)準(zhǔn)的插槽接口。載波模塊和MCU以固定的9600bps波特率進(jìn)行通訊,這通過(guò)MCU的一個(gè)硬件串口實(shí)現(xiàn)。同時(shí)MCU還負(fù)責(zé)提供和處理所有相關(guān)的通訊握手信號(hào),這些握手信號(hào)都連接至MCU的普通IO引腳。由于載波模塊為獨(dú)立的插件,故所有的這些信號(hào)連接都考慮了必要的ESD防護(hù),以免插拔時(shí)造成ESD損壞。
按鍵和開蓋檢測(cè)電路說(shuō)明:
本參考設(shè)計(jì)中提供了兩個(gè)按鍵輸入檢測(cè)和兩個(gè)開蓋信號(hào)檢測(cè)。在電路實(shí)現(xiàn)上是一致的,都是機(jī)械開關(guān)的開閉檢測(cè)。采用單片機(jī)的一個(gè)IO引腳控制檢測(cè)電路的啟閉,只在需要對(duì)開關(guān)進(jìn)行檢測(cè)時(shí)才輸出低電平驅(qū)動(dòng)信號(hào),平時(shí)該引腳則保持高電平。這樣在電池供電狀態(tài)下可以防止任意開關(guān)信號(hào)長(zhǎng)時(shí)間處于閉合狀態(tài)而損耗額外的電流。電路中除了上拉電阻外的其它阻容元件則起到ESD保護(hù)作用
軟件編程要點(diǎn)
軟件編寫采用模塊化結(jié)構(gòu),除了底層MCU硬件驅(qū)動(dòng)部分,其它模塊盡量做到和MCU固有資源無(wú)關(guān),方便系統(tǒng)移植。
單片機(jī)被配置為片內(nèi)時(shí)鐘工作模式,系統(tǒng)總線頻率為11MHz。用內(nèi)部時(shí)鐘振蕩的好處是無(wú)額外成本開銷且工作穩(wěn)定可靠,但相比外部晶體振蕩而言其頻率精度和一致性較差。在沒(méi)有做其它特殊校準(zhǔn)的前提下,MZ60內(nèi)部時(shí)鐘頻率在全溫度和全電壓范圍內(nèi)的誤差不超過(guò)2%,實(shí)際上這一指標(biāo)也已經(jīng)滿足電表設(shè)計(jì)所需。為了能更好地保證大批量產(chǎn)品長(zhǎng)時(shí)間工作的一致性和穩(wěn)定性,軟件上利用外部實(shí)時(shí)時(shí)鐘芯片所提供的現(xiàn)成秒脈沖信號(hào)對(duì)單片機(jī)的片內(nèi)時(shí)鐘頻率進(jìn)行動(dòng)態(tài)微調(diào),通過(guò)簡(jiǎn)單高效的算法可以保證總線頻率誤差不超過(guò)0.5%,進(jìn)一步提高了任務(wù)定時(shí)和串行通訊波特率的精度指標(biāo)。
MZ60單片機(jī)內(nèi)部有2K字節(jié)的RAM,對(duì)于現(xiàn)在功能復(fù)雜的國(guó)網(wǎng)單相表設(shè)計(jì),需要善加規(guī)劃合理利用這些有限的RAM資源。其中RAM開銷最大的是三個(gè)通道的自動(dòng)抄表和ESAM/IC卡讀寫,他們都需要足夠大的緩沖區(qū)來(lái)接收和處理一個(gè)完整的報(bào)文,如果為他們分配各自獨(dú)立的靜態(tài)緩沖區(qū),2K字節(jié)的RAM可能比較緊張??紤]到各通道抄表和ESAM/IC卡讀寫幾乎不可能在同一時(shí)間段同時(shí)發(fā)生,本設(shè)計(jì)另辟蹊徑,除了程序模塊必需的全局或靜態(tài)變量和系統(tǒng)堆棧分配,全部剩余的RAM空間被劃分為一個(gè)完整的數(shù)據(jù)堆(實(shí)際設(shè)計(jì)中約為1.3K字節(jié)左右),通過(guò)必要的底層驅(qū)動(dòng)軟件,對(duì)這一部分采用內(nèi)存動(dòng)態(tài)分配和管理,只在任務(wù)實(shí)際需要時(shí)才申請(qǐng)得到一定長(zhǎng)度的內(nèi)存塊,用完即釋放回?cái)?shù)據(jù)堆,以便其它任務(wù)繼續(xù)申請(qǐng)使用。當(dāng)然在任務(wù)軟件編制時(shí)必須考慮申請(qǐng)內(nèi)存塊失敗時(shí)的處理,雖然這幾乎不可能發(fā)生。
電表在運(yùn)行時(shí)需要同時(shí)考慮很多任務(wù)并發(fā)執(zhí)行。在軟件編制時(shí)采用事件驅(qū)動(dòng),基于分時(shí)輪循和狀態(tài)機(jī)控制的方式,讓多個(gè)任務(wù)同步協(xié)調(diào)運(yùn)行,確保各任務(wù)間無(wú)阻塞。特別編制了相關(guān)的底層驅(qū)動(dòng)軟件,針對(duì)那些偶發(fā)運(yùn)行的任務(wù),例如抄表,讀卡或電池檢測(cè)等,實(shí)現(xiàn)了任務(wù)隊(duì)列的動(dòng)態(tài)建立和刪除,避免過(guò)多不必要的輪循,集中MCU的處理能力來(lái)運(yùn)行關(guān)鍵任務(wù)。
交流掉電后MCU進(jìn)入電池備份供電下的低功耗休眠模式。通過(guò)內(nèi)部實(shí)時(shí)計(jì)數(shù)器定時(shí)喚醒,喚醒時(shí)間間隔軟件可編程,在本設(shè)計(jì)中為64ms。每次喚醒后進(jìn)行開關(guān)和交流恢復(fù)檢測(cè),累計(jì)間隔5分鐘左右做一次電池電壓檢測(cè)。此時(shí)整個(gè)系統(tǒng)的平均功耗約為7uA。一旦檢測(cè)到交流恢復(fù)供電,MCU自身強(qiáng)制發(fā)生一次硬件復(fù)位過(guò)程,整個(gè)系統(tǒng)在復(fù)位刷新后重新運(yùn)行。
在本參考設(shè)計(jì)中為了調(diào)試改動(dòng)方便,附帶了一個(gè)Boot-loader功能,通過(guò)485抄表口可以在線升級(jí)軟件。但正式產(chǎn)品中規(guī)定禁止使用Boot-loader。
整個(gè)軟件為C語(yǔ)言編寫。
系統(tǒng)升級(jí)和移植考慮
飛思卡爾針對(duì)單相電表設(shè)計(jì)的整個(gè)MZ系列產(chǎn)品,從最小的8K/20引腳的RS08MZ8到最大256K/80引腳的51MZ256,很好地覆蓋了從簡(jiǎn)單單相表到復(fù)雜單相多功能表甚至三相多功能表的設(shè)計(jì)所需。對(duì)于此次國(guó)網(wǎng)單相表的設(shè)計(jì),初步估計(jì)60K程序空間的S08MZ60應(yīng)該基本滿足設(shè)計(jì)要求。如果用戶的設(shè)計(jì)增加功能需要編寫更多代碼的話,該系統(tǒng)可以在不改變?nèi)魏斡布O(shè)計(jì)的前提下,直接換用性能和引腳完全兼容的S08MZ96(96K Flash)或S08MZ128(128K Flash)的芯片。另外,飛思卡爾還可以提供引腳完全兼容的32位內(nèi)核芯片51MZ256(256K Flash)。因此,整個(gè)系列的可擴(kuò)充性和可移植性得到了最大的體現(xiàn)。
結(jié)論
通過(guò)上述設(shè)計(jì)方案的簡(jiǎn)要介紹,充分證明了飛思卡爾的MZ系列單片機(jī)能完全滿足國(guó)網(wǎng)新規(guī)約要求下的單相電表設(shè)計(jì)。飛思卡爾可以提供上述相關(guān)的所有硬件和軟件設(shè)計(jì)參考資料,并輔以完善的現(xiàn)場(chǎng)技術(shù)支持,幫助用戶快速完成最終產(chǎn)品的設(shè)計(jì)實(shí)現(xiàn)。若需了解更多細(xì)節(jié),可以和本文作者進(jìn)一步聯(lián)系 ([email protected]) 。