狄巨星,趙建光,司亞超,賈 濱, 范晶晶
(河北建筑工程學(xué)院計(jì)算機(jī)系,河北 張家口 075024)
隨著計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)以及電子技術(shù)的發(fā)展,嵌入式系統(tǒng)以其體積小、可靠性高、功耗低、軟硬件集成度高等特點(diǎn)廣泛應(yīng)用于工業(yè)制造、過程控制、通信、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費(fèi)類產(chǎn)品等眾多領(lǐng)域。嵌入式系統(tǒng)硬件設(shè)計(jì)與調(diào)試是嵌入式系統(tǒng)設(shè)計(jì)成功的基礎(chǔ),而硬件電路中電源電路的設(shè)計(jì)與調(diào)試則是系統(tǒng)硬件調(diào)試成功的關(guān)鍵[1]。本文從實(shí)際應(yīng)用出發(fā),以無線安防監(jiān)控系統(tǒng)中嵌入式系統(tǒng)電源的設(shè)計(jì)與調(diào)試為例,分析討論嵌入式系統(tǒng)電源的設(shè)計(jì)與調(diào)試方法。
本系統(tǒng)采用Samsung公司的S3C2410A微處理器作為主控芯片,安防檢測端結(jié)構(gòu)如圖1所示,檢測端由S3C2410A實(shí)現(xiàn)控制。其核心部分主要包括GPRS控制、GPS控制、各種報(bào)警傳感器控制、以及外圍接口控制。CPU內(nèi)嵌PPP及TCP/IP協(xié)議棧,同時(shí)分別通過串行口UART0去控制GPRS的工作,通過串行口UART1控制GPS的運(yùn)行。
圖1 無線安防監(jiān)控系統(tǒng)監(jiān)控端結(jié)構(gòu)
其中:(1)ARM對GPRS的控制主要是通過串口UART0發(fā)送AT命令實(shí)現(xiàn)。在該系統(tǒng)設(shè)計(jì)中,CPU可通過控制I/O口的高低電平,實(shí)現(xiàn)對GPRS的復(fù)位,主程序一旦運(yùn)行,就不斷進(jìn)行GPRS模塊的異常檢測,發(fā)現(xiàn)異常情況立刻通過控制I/O口的電平實(shí)現(xiàn)復(fù)位[2]。
(2)ARM對GPS的控制主要通過串口UART1發(fā)送控制命令實(shí)現(xiàn)(GPS采樣周期的設(shè)置、GPS輸出數(shù)據(jù)選擇、通訊波特率的設(shè)置等)。同時(shí),通過串口UART1接收GPS數(shù)據(jù)信息[3]。
(3)ARM對其它外圍接口的控制主要通過GPIO接口實(shí)現(xiàn)開關(guān)的輸入/輸出。
(4)ARM對系統(tǒng)整體控制:首先,ARM完成對GPS、GPRS及外圍接口電路的初始化工作,并檢測各種安防傳感器的狀態(tài)(紅外對射傳感、防撬壓力傳感等);其次,ARM不斷監(jiān)聽GPIO的輸入狀態(tài),當(dāng)有報(bào)警信號輸入時(shí),啟動GPS模塊,開始接收定位信息,并將此信息存儲在flash內(nèi);向串口UART0發(fā)送AT命令啟動信息發(fā)送功能,并將GPS接收到的數(shù)據(jù)通過GPRS發(fā)送到報(bào)警主機(jī)和移動終端。
在整個安防系統(tǒng)中,涉及到監(jiān)控中心服務(wù)器軟件、安防檢測端主機(jī)、底層軟件。在此,僅介紹安防檢測端主機(jī)軟件的設(shè)計(jì)。程序框圖如圖2所示。
當(dāng)系統(tǒng)完成初始化之后,即進(jìn)入GPIO模塊中,此模塊主要讀取來自I/O端口的電平信號,當(dāng)有報(bào)警信號輸入時(shí)此I/O端口的電平將發(fā)生變化,CPU檢測到電平變化后進(jìn)入GPS數(shù)據(jù)處理模塊,若沒有檢測到電平的變化將循環(huán)檢測,直到檢測到電平變化;CPU檢測到信號隨即進(jìn)入GPS數(shù)據(jù)處理模塊,首先設(shè)置GPS的參數(shù)如波特率等,隨后接收衛(wèi)星數(shù)據(jù),接收到數(shù)據(jù)通過串口傳送到CPU,并存儲到flash中,完成存儲后,啟動GPRS模塊。在此模塊中首先讀取存儲的衛(wèi)星數(shù)據(jù),發(fā)送AT命令啟動信息發(fā)送功能,啟動成功后將衛(wèi)星數(shù)據(jù)作為待發(fā)送的信息內(nèi)容,進(jìn)行發(fā)送,發(fā)送成功后返回,并檢測是否有接收的新信息,如有讀取指令,CPU接收到讀取的指令后進(jìn)入指令處理模塊進(jìn)行指令分析,根據(jù)指令表采取相應(yīng)措施[4]。
監(jiān)控中心或者移動終端接收到報(bào)警信息后,可發(fā)送相應(yīng)的緊急處理指令,發(fā)送的指令將被GPRS模塊讀取并傳送到ARM,再根據(jù)指令表采取相應(yīng)措施。
ARM有5種類型的電源引腳:VDDCORE引腳用于向內(nèi)核供電,一般為1.8 V;VDDPLL、VDDOSC分別給PLL或者振蕩器供電,一般為1.8 V;VDDIOP、VDDIOM分別用于給外設(shè)I/O口線、USB收發(fā)器以及外部總線接口I/O口線供電,一般為3.3 V。此外,系統(tǒng)的鍵盤、顯示電路的供電電壓需要+5 V電源。因此,本控制系統(tǒng)需要使用3組電源。通過對整個控制系統(tǒng)的控制要求和性能進(jìn)行分析,確定本系統(tǒng)的負(fù)載電流大約為3 A。因此,系統(tǒng)電源的穩(wěn)壓芯片選用了ON公司的LM2576系列穩(wěn)壓器,把外部直流電源穩(wěn)壓成系統(tǒng)需要的+3.3 V和+5 V電源。由于系統(tǒng)內(nèi)核電源供電要求1.8 V,因此系統(tǒng)應(yīng)采用二級電源轉(zhuǎn)換電路。本文選用TI公司的微功耗、極低壓差PMOS穩(wěn)壓器(LDO芯片)TPS72518作為內(nèi)核電源轉(zhuǎn)換芯片,把+3.3 V穩(wěn)壓成+1.8 V,為處理器內(nèi)核提供工作電源。系統(tǒng)電源電路如圖3所示。C3、C6是穩(wěn)壓芯片的電解旁路電容,在電路中接入它們能使電路穩(wěn)定地工作;C2、C5、C8為輸出穩(wěn)定電容,對于減小輸出紋波、輸出噪聲以及負(fù)載電流變化的影響有較好的效果,根據(jù)穩(wěn)壓器自身的工作要求,電容分別選用10、100 μF 的電解電容。
圖3 系統(tǒng)電源電路圖
依據(jù)電路圖焊接好元器件之后,仔細(xì)檢查元器件是否焊接有誤,電路板是否存在虛焊或焊渣短路等現(xiàn)象,檢查無誤后進(jìn)行上電調(diào)試。由直流穩(wěn)壓電源發(fā)生器輸出電源接入系統(tǒng)電源模塊的輸入端口(POW1),輸入電源Vin調(diào)為+6 V,用示波器檢查系統(tǒng)電源的1.8、3.3、5 V輸出端口,沒有電壓輸出。斷電重新檢查電路,發(fā)現(xiàn)電解電容C6已經(jīng)被燒成黑色,原因是C6的正負(fù)極性接反了。換了新電容焊接正確后上電調(diào)試,1.8、5 V電壓輸出端正常,而3.3 V電壓輸出端電壓不到3 V。查看穩(wěn)壓芯片LM2576的數(shù)據(jù)手冊之后,調(diào)節(jié)輸入電源Vin,同時(shí)檢測三組系統(tǒng)電源的電壓值,當(dāng)三組電源輸出正確時(shí),輸入電壓Vin的值為6.7 V左右。由于本控制系統(tǒng)的負(fù)載電流大約是3 A,因此在電路中加入負(fù)載電流為3 A的負(fù)載電阻,以此來測試系統(tǒng)電源的穩(wěn)定性。經(jīng)過調(diào)試,電容、電感等元件發(fā)熱正常,輸出電壓值正確。至此,系統(tǒng)電源模塊調(diào)試成功[5]。
Linux支持兩種電源管理標(biāo)準(zhǔn),即APM和ACPI。APM是傳統(tǒng)的高級電源管理方案,目前使用在許多基于Linux的便攜式設(shè)備中;而ACPI(Advanced Configtlrationand Power Interface)則提供了更為靈活的電腦和設(shè)備管理接口。這兩個標(biāo)準(zhǔn)不能同時(shí)運(yùn)行,默認(rèn)情況下Linux運(yùn)行ACPI。APM可以使機(jī)器處于Suspend(懸掛)或Standby(待機(jī))狀態(tài),并檢查電池容量;而ACPI還可以使外設(shè)(如顯示器、PCI)單獨(dú)斷電,在節(jié)省電能方面有更多的控制,其在PDA和新一代的手機(jī)中得到了廣泛的應(yīng)用。為了讓電源管理功能生效,需要在Linux內(nèi)核打開它,并且在Linux里加載必需的應(yīng)用軟件。電源管理活動需要對操作系統(tǒng)內(nèi)核和設(shè)備驅(qū)動程序進(jìn)行特殊的干預(yù),在嵌入式Linux中,雖然低層電源管理駐留在操作系統(tǒng)內(nèi)核中,但電源管理策略和機(jī)制來源于中介軟件和用戶應(yīng)用程序代碼。Linux內(nèi)核中電源管理機(jī)制負(fù)責(zé)維持整個系統(tǒng)的電源狀態(tài),它可以看成是為驅(qū)動程序、中介軟件和應(yīng)用程序提供服務(wù)的元素。通過在驅(qū)動程序中實(shí)現(xiàn)電源管理接口,可以讓驅(qū)動程序密切監(jiān)控系統(tǒng)狀態(tài),在外部事件的驅(qū)動下,通過設(shè)定不同的狀態(tài)反映設(shè)備的工作情況。為了實(shí)現(xiàn)設(shè)備電源管理接口,需要實(shí)現(xiàn)以下操作:
(1)使用pm_register對設(shè)備的每個實(shí)例(instance)進(jìn)行注冊;
(2)在對硬件進(jìn)行操作之前調(diào)用pm_access(這樣可保證設(shè)備已被喚醒,并處于ready狀態(tài));
(3)用戶自己的pnl_callback函數(shù)在系統(tǒng)進(jìn)入suspend狀態(tài),或者從suspend狀態(tài)恢復(fù)的時(shí)候會被調(diào)用;
(4)當(dāng)設(shè)備不使用時(shí)調(diào)用pm_dev_idle函數(shù)(這個操作是可選的,以增強(qiáng)設(shè)備對idle狀態(tài)的監(jiān)測能力);
(5)當(dāng)被unload的時(shí)候,使用pm_unreggister取消設(shè)備的注冊.中介程序允許用戶預(yù)先定義某些策略,然后跟蹤電源狀態(tài),執(zhí)行特定的操作.在應(yīng)用程序中,利用中介程序提供的API設(shè)立其基本的約束條件,強(qiáng)迫電源管理機(jī)制產(chǎn)生與其執(zhí)行需求相匹配的變化。
Linux電源管理的實(shí)現(xiàn)機(jī)制包括以下API:
(1)dpm_set_OS()(內(nèi)核)
(2)assert_constraint()
(3)remove_constraint()
(4)set_operatInK_state()(內(nèi)核和驅(qū)動程序)
(5)set_policy()
(6)set_task_state()(經(jīng)系統(tǒng)的用戶級調(diào)用)以及/proc接口。
目前,很多嵌入式CPU都具有能降低功耗的電源工作模式,最常用的是空閑模式,此時(shí)CPU內(nèi)核指令執(zhí)行部分關(guān)閉,而所有外設(shè)和中斷信號仍處于工作狀態(tài)。由于空閑模式比CPU執(zhí)行指令時(shí)的功耗要小得多,因而可以在任何時(shí)候,只要Linux檢查到所有線程都處于阻塞狀態(tài)(如等待中斷、事件或定時(shí)時(shí)間)時(shí),它都可以將CPU置于空閑模式。任何中斷(如觸摸屏事件、按下按鍵事件等)都能把CPU從空閑模式中喚醒,然后繼續(xù)執(zhí)行后面的代碼。如果事件不能直接連接到外部中斷,也可以用一個系統(tǒng)定時(shí)器定期喚醒CPU,例如在等待一個事件并且知道只要事件發(fā)生后在10 ms內(nèi)能檢測到,那么可以啟動10 ms定時(shí)器,并把CPU置于空閑模式,每次處理定時(shí)中斷時(shí)都要檢查事件狀態(tài),如果狀態(tài)沒有變化,就立刻回到空閑。
通常,CPU的定時(shí)中斷間隔為1 ms,Linux會頻繁使CPU置于空閑模式,并一直維持到被中斷喚醒.在這種情況下,最有可能喚醒CPU中斷的是定時(shí)器中斷本身,即使所有其他線程被阻塞,在其他中斷、內(nèi)部事件及長時(shí)間延遲之前,定時(shí)器中斷也會以每秒100 Hz的頻率把CPU從空閑模式中喚醒,以運(yùn)行調(diào)度程序,就算調(diào)度程序確定所有線路都被阻塞,并很快將CPU回復(fù)到空閑模式。這樣的頻繁操作會浪費(fèi)大量電源,因此,應(yīng)盡可能長時(shí)問地將CPU置于空閑模式,而減少事件是解決這個問題的有效途徑。
此外,通過分析代碼和系統(tǒng)要求,可決定是否能改變處理中斷的方式實(shí)現(xiàn),例如,可以在進(jìn)入空閑模式前關(guān)閉時(shí)隙中斷信號,只有再次出現(xiàn)中斷信號時(shí)才被喚醒,這種做法通常不太合適。盡管多數(shù)阻塞的線程可以直接或間接等待外部中斷,但有些還是會依賴于定時(shí)中斷,如一個驅(qū)動器會在等待外設(shè)時(shí)睡眠500 ms,此時(shí)的空閑模式下如果完全關(guān)閉系統(tǒng)定時(shí)器,可能意味著線程不能按時(shí)恢復(fù)工作,Linux最好能為調(diào)度程序進(jìn)行可變計(jì)劃超時(shí)設(shè)定。雖然Linux知道每個線程無法確定等待的是外部還是內(nèi)部事件,或者計(jì)劃在某特定時(shí)間再次運(yùn)行,但Linux可算出第一個線程預(yù)定何時(shí)運(yùn)行,并相應(yīng)地在CPU置于空閑模式之前設(shè)定定時(shí)器工作??勺冇?jì)劃超時(shí)設(shè)定不會對調(diào)度程序造成很大的負(fù)擔(dān),但卻能節(jié)省電源和處理時(shí)間。
可變計(jì)劃超時(shí)設(shè)定只是減少事件的一種方法,存儲器直接存取(DMA)也可讓CPU長時(shí)間處于空閑模式,即使數(shù)據(jù)正在發(fā)送至外設(shè)或從外設(shè)收取。因此,只要有可能,都應(yīng)在外圍驅(qū)動器中使用DMA,這樣做可以達(dá)到較好的省電效果。
電源特性對嵌入式產(chǎn)品的性能有很大的影響,通過對電源本身的設(shè)計(jì)構(gòu)造進(jìn)行改進(jìn)以及對微操作系統(tǒng)和軟件處理對電源進(jìn)行管理,可以在系統(tǒng)運(yùn)行過程中減小對電能的消耗,二者結(jié)合對嵌入式系統(tǒng)的應(yīng)用會起到很好的促進(jìn)作用。
[1]李丹.嵌入式系統(tǒng)電源特性[J].成都大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,27(1):56-59.
[2]熊志昂,李紅瑞.GPS技術(shù)與工程應(yīng)用[M].北京:國防工業(yè)出版社,2005.
[3]HOFFS.Analysis of the general packet radio service(GPRS)of GSM as access to the Internet[J].Universal Personal Communication,1998(1):415-419.
[4]鄭雙,王悅,朱名日.嵌入式系統(tǒng)電源的設(shè)計(jì)與調(diào)試[J].經(jīng)驗(yàn)交流,2007,10:67-68.
[5]馬忠梅.ARM嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2002:1-17.