狄巨星,趙建光,司亞超,賈 濱, 范晶晶
(河北建筑工程學院計算機系,河北 張家口 075024)
隨著計算機技術、半導體技術以及電子技術的發展,嵌入式系統以其體積小、可靠性高、功耗低、軟硬件集成度高等特點廣泛應用于工業制造、過程控制、通信、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費類產品等眾多領域。嵌入式系統硬件設計與調試是嵌入式系統設計成功的基礎,而硬件電路中電源電路的設計與調試則是系統硬件調試成功的關鍵[1]。本文從實際應用出發,以無線安防監控系統中嵌入式系統電源的設計與調試為例,分析討論嵌入式系統電源的設計與調試方法。
本系統采用Samsung公司的S3C2410A微處理器作為主控芯片,安防檢測端結構如圖1所示,檢測端由S3C2410A實現控制。其核心部分主要包括GPRS控制、GPS控制、各種報警傳感器控制、以及外圍接口控制。CPU內嵌PPP及TCP/IP協議棧,同時分別通過串行口UART0去控制GPRS的工作,通過串行口UART1控制GPS的運行。

圖1 無線安防監控系統監控端結構
其中:(1)ARM對GPRS的控制主要是通過串口UART0發送AT命令實現。在該系統設計中,CPU可通過控制I/O口的高低電平,實現對GPRS的復位,主程序一旦運行,就不斷進行GPRS模塊的異常檢測,發現異常情況立刻通過控制I/O口的電平實現復位[2]。
(2)ARM對GPS的控制主要通過串口UART1發送控制命令實現(GPS采樣周期的設置、GPS輸出數據選擇、通訊波特率的設置等)。同時,通過串口UART1接收GPS數據信息[3]。
(3)ARM對其它外圍接口的控制主要通過GPIO接口實現開關的輸入/輸出。
(4)ARM對系統整體控制:首先,ARM完成對GPS、GPRS及外圍接口電路的初始化工作,并檢測各種安防傳感器的狀態(紅外對射傳感、防撬壓力傳感等);其次,ARM不斷監聽GPIO的輸入狀態,當有報警信號輸入時,啟動GPS模塊,開始接收定位信息,并將此信息存儲在flash內;向串口UART0發送AT命令啟動信息發送功能,并將GPS接收到的數據通過GPRS發送到報警主機和移動終端。
在整個安防系統中,涉及到監控中心服務器軟件、安防檢測端主機、底層軟件。在此,僅介紹安防檢測端主機軟件的設計。程序框圖如圖2所示。

當系統完成初始化之后,即進入GPIO模塊中,此模塊主要讀取來自I/O端口的電平信號,當有報警信號輸入時此I/O端口的電平將發生變化,CPU檢測到電平變化后進入GPS數據處理模塊,若沒有檢測到電平的變化將循環檢測,直到檢測到電平變化;CPU檢測到信號隨即進入GPS數據處理模塊,首先設置GPS的參數如波特率等,隨后接收衛星數據,接收到數據通過串口傳送到CPU,并存儲到flash中,完成存儲后,啟動GPRS模塊。在此模塊中首先讀取存儲的衛星數據,發送AT命令啟動信息發送功能,啟動成功后將衛星數據作為待發送的信息內容,進行發送,發送成功后返回,并檢測是否有接收的新信息,如有讀取指令,CPU接收到讀取的指令后進入指令處理模塊進行指令分析,根據指令表采取相應措施[4]。
監控中心或者移動終端接收到報警信息后,可發送相應的緊急處理指令,發送的指令將被GPRS模塊讀取并傳送到ARM,再根據指令表采取相應措施。
ARM有5種類型的電源引腳:VDDCORE引腳用于向內核供電,一般為1.8 V;VDDPLL、VDDOSC分別給PLL或者振蕩器供電,一般為1.8 V;VDDIOP、VDDIOM分別用于給外設I/O口線、USB收發器以及外部總線接口I/O口線供電,一般為3.3 V。此外,系統的鍵盤、顯示電路的供電電壓需要+5 V電源。因此,本控制系統需要使用3組電源。通過對整個控制系統的控制要求和性能進行分析,確定本系統的負載電流大約為3 A。因此,系統電源的穩壓芯片選用了ON公司的LM2576系列穩壓器,把外部直流電源穩壓成系統需要的+3.3 V和+5 V電源。由于系統內核電源供電要求1.8 V,因此系統應采用二級電源轉換電路。本文選用TI公司的微功耗、極低壓差PMOS穩壓器(LDO芯片)TPS72518作為內核電源轉換芯片,把+3.3 V穩壓成+1.8 V,為處理器內核提供工作電源。系統電源電路如圖3所示。C3、C6是穩壓芯片的電解旁路電容,在電路中接入它們能使電路穩定地工作;C2、C5、C8為輸出穩定電容,對于減小輸出紋波、輸出噪聲以及負載電流變化的影響有較好的效果,根據穩壓器自身的工作要求,電容分別選用10、100 μF 的電解電容。

圖3 系統電源電路圖
依據電路圖焊接好元器件之后,仔細檢查元器件是否焊接有誤,電路板是否存在虛焊或焊渣短路等現象,檢查無誤后進行上電調試。由直流穩壓電源發生器輸出電源接入系統電源模塊的輸入端口(POW1),輸入電源Vin調為+6 V,用示波器檢查系統電源的1.8、3.3、5 V輸出端口,沒有電壓輸出。斷電重新檢查電路,發現電解電容C6已經被燒成黑色,原因是C6的正負極性接反了。換了新電容焊接正確后上電調試,1.8、5 V電壓輸出端正常,而3.3 V電壓輸出端電壓不到3 V。查看穩壓芯片LM2576的數據手冊之后,調節輸入電源Vin,同時檢測三組系統電源的電壓值,當三組電源輸出正確時,輸入電壓Vin的值為6.7 V左右。由于本控制系統的負載電流大約是3 A,因此在電路中加入負載電流為3 A的負載電阻,以此來測試系統電源的穩定性。經過調試,電容、電感等元件發熱正常,輸出電壓值正確。至此,系統電源模塊調試成功[5]。
Linux支持兩種電源管理標準,即APM和ACPI。APM是傳統的高級電源管理方案,目前使用在許多基于Linux的便攜式設備中;而ACPI(Advanced Configtlrationand Power Interface)則提供了更為靈活的電腦和設備管理接口。這兩個標準不能同時運行,默認情況下Linux運行ACPI。APM可以使機器處于Suspend(懸掛)或Standby(待機)狀態,并檢查電池容量;而ACPI還可以使外設(如顯示器、PCI)單獨斷電,在節省電能方面有更多的控制,其在PDA和新一代的手機中得到了廣泛的應用。為了讓電源管理功能生效,需要在Linux內核打開它,并且在Linux里加載必需的應用軟件。電源管理活動需要對操作系統內核和設備驅動程序進行特殊的干預,在嵌入式Linux中,雖然低層電源管理駐留在操作系統內核中,但電源管理策略和機制來源于中介軟件和用戶應用程序代碼。Linux內核中電源管理機制負責維持整個系統的電源狀態,它可以看成是為驅動程序、中介軟件和應用程序提供服務的元素。通過在驅動程序中實現電源管理接口,可以讓驅動程序密切監控系統狀態,在外部事件的驅動下,通過設定不同的狀態反映設備的工作情況。為了實現設備電源管理接口,需要實現以下操作:
(1)使用pm_register對設備的每個實例(instance)進行注冊;
(2)在對硬件進行操作之前調用pm_access(這樣可保證設備已被喚醒,并處于ready狀態);
(3)用戶自己的pnl_callback函數在系統進入suspend狀態,或者從suspend狀態恢復的時候會被調用;
(4)當設備不使用時調用pm_dev_idle函數(這個操作是可選的,以增強設備對idle狀態的監測能力);
(5)當被unload的時候,使用pm_unreggister取消設備的注冊.中介程序允許用戶預先定義某些策略,然后跟蹤電源狀態,執行特定的操作.在應用程序中,利用中介程序提供的API設立其基本的約束條件,強迫電源管理機制產生與其執行需求相匹配的變化。
Linux電源管理的實現機制包括以下API:
(1)dpm_set_OS()(內核)
(2)assert_constraint()
(3)remove_constraint()
(4)set_operatInK_state()(內核和驅動程序)
(5)set_policy()
(6)set_task_state()(經系統的用戶級調用)以及/proc接口。
目前,很多嵌入式CPU都具有能降低功耗的電源工作模式,最常用的是空閑模式,此時CPU內核指令執行部分關閉,而所有外設和中斷信號仍處于工作狀態。由于空閑模式比CPU執行指令時的功耗要小得多,因而可以在任何時候,只要Linux檢查到所有線程都處于阻塞狀態(如等待中斷、事件或定時時間)時,它都可以將CPU置于空閑模式。任何中斷(如觸摸屏事件、按下按鍵事件等)都能把CPU從空閑模式中喚醒,然后繼續執行后面的代碼。如果事件不能直接連接到外部中斷,也可以用一個系統定時器定期喚醒CPU,例如在等待一個事件并且知道只要事件發生后在10 ms內能檢測到,那么可以啟動10 ms定時器,并把CPU置于空閑模式,每次處理定時中斷時都要檢查事件狀態,如果狀態沒有變化,就立刻回到空閑。
通常,CPU的定時中斷間隔為1 ms,Linux會頻繁使CPU置于空閑模式,并一直維持到被中斷喚醒.在這種情況下,最有可能喚醒CPU中斷的是定時器中斷本身,即使所有其他線程被阻塞,在其他中斷、內部事件及長時間延遲之前,定時器中斷也會以每秒100 Hz的頻率把CPU從空閑模式中喚醒,以運行調度程序,就算調度程序確定所有線路都被阻塞,并很快將CPU回復到空閑模式。這樣的頻繁操作會浪費大量電源,因此,應盡可能長時問地將CPU置于空閑模式,而減少事件是解決這個問題的有效途徑。
此外,通過分析代碼和系統要求,可決定是否能改變處理中斷的方式實現,例如,可以在進入空閑模式前關閉時隙中斷信號,只有再次出現中斷信號時才被喚醒,這種做法通常不太合適。盡管多數阻塞的線程可以直接或間接等待外部中斷,但有些還是會依賴于定時中斷,如一個驅動器會在等待外設時睡眠500 ms,此時的空閑模式下如果完全關閉系統定時器,可能意味著線程不能按時恢復工作,Linux最好能為調度程序進行可變計劃超時設定。雖然Linux知道每個線程無法確定等待的是外部還是內部事件,或者計劃在某特定時間再次運行,但Linux可算出第一個線程預定何時運行,并相應地在CPU置于空閑模式之前設定定時器工作。可變計劃超時設定不會對調度程序造成很大的負擔,但卻能節省電源和處理時間。
可變計劃超時設定只是減少事件的一種方法,存儲器直接存取(DMA)也可讓CPU長時間處于空閑模式,即使數據正在發送至外設或從外設收取。因此,只要有可能,都應在外圍驅動器中使用DMA,這樣做可以達到較好的省電效果。
電源特性對嵌入式產品的性能有很大的影響,通過對電源本身的設計構造進行改進以及對微操作系統和軟件處理對電源進行管理,可以在系統運行過程中減小對電能的消耗,二者結合對嵌入式系統的應用會起到很好的促進作用。
[1]李丹.嵌入式系統電源特性[J].成都大學學報(自然科學版),2008,27(1):56-59.
[2]熊志昂,李紅瑞.GPS技術與工程應用[M].北京:國防工業出版社,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]鄭雙,王悅,朱名日.嵌入式系統電源的設計與調試[J].經驗交流,2007,10:67-68.
[5]馬忠梅.ARM嵌入式處理器結構與應用基礎[M].北京:北京航空航天大學出版社,2002:1-17.