0 引言
隨著數字信息技術和網絡技術的高速發展,各種嵌人式系統已成為了市場的新焦點。鑒于嵌入式系統是對功能、可靠性、成本、體積和功耗等有嚴格要求的專用計算機系統,因此降低其系統功耗、提高內置電源持續工作的能力就成為一項重要的研究內容。
與筆記本電腦類似,嵌入式系統通常配備一個由多只電池串聯組成的整體式電池包 .當經過反復充電使用而其主要參數不再滿足整個系統要求時,必須更換整個電池包。一般說來,由于電池包內部各個電池之間的電氣參數略有差異,很難使得每個單體都得到平衡、充分的放電,進而導致在電池組充電的過程中,電壓過高的電池芯可能提早觸發電池組過充電保護,而在放電過程中電壓過低的電池芯又可能首先導致電池組的過放電保護,從而使電池組的整體容量明顯下降,使得整個電池組的實際容量常為電池組中性能最差的電池所限。
針對上述問題,目前常用兩種解決方法:
①研究或選用新型電池,盡量減小個體差異并從整體上提高電池的額定容量,例如由最初的鎳鎘、鎳氫電池發展到現在主流的鋰電池;②提高電池芯的利用率,即利用監測技術探察每個電池芯的工作狀況。若有部分電池芯過早地放電結束或者出現問題時,能夠自動檢測并予以提示,此時只需進行個別更換即可同樣保證系統正常工作。
對于普通用戶而言,難以直接涉足前者所屬的相關領域,而后者所述方式能夠較為方便、容易地得到實現。由此一來,可望較好地解決前述問題,同時避免了電池組整體更換時其中的正常電池也連帶報廢的現象,進而提高電池利用率。此外,尚可解決專用電池成本較高、購買不易的問題,以便有效降低系統的維護成本。
1 監測系統工作原理與電路設計
結合一個具體的手持/嵌入式超級終端系統,文中對其內置電源的監測模式進行了較為詳盡的研究。
因其使用通用的五號可充電電池,所以可按第二方法考慮解決電池的使用和更換問題,進而基于LinuX操作系統較好地實現了相應的"電池管理與更換提示"功能。
1.1 監測系統工作原理
本系統采用12節額定電壓為1.2V的鎳氫電池串聯供電,并通過專門設定的12個監測點逐一監測。
監測點上的模擬電壓值通過多路開關和輔助電路輸入ARM芯片S3C2410x自帶的AD轉換器,再經Linux(驅動程序和GPIO端讀取相應監測點的電壓值,傳遞給數據處理和圖形顯示等應用程序,從而實現了電源的監測。具體方法如圖1所示。

圖1 電源監測系統電路圖
1.2 AD轉換與輔助電路
監測系統利用S3C2410x自帶的AD轉換器將模擬電壓輸入轉換為應用程序所需要的數據。芯片自帶AD轉換器為8路模擬輸入、10bit數字輸出,最大轉換率為500ksps,轉換時鐘為2.5MHz,模擬輸入范圍為0-3.3V.本系統所需要監測的電壓范圍為0~14。
4V,針對這種情況,本系統設汁了分壓電路,在應用程序中只需要利用比例公式就能計算出各個監測點的實際電壓值。并且,考慮到監測精確度和電路功耗的因素,把分壓電路的總電阻定為4.5kQ.這樣一來,對應的模擬輸人電壓值范圍為0.26-3.2V,以便充分利用的AD轉換器的輸入帶寬。此時電路的耗損功率僅為0.04608W。
1.3 控制電路
利用S3C2410x的GPIO端口控制選通多路門開關電路,監測系統可以隨機地提取不同監測點的電壓值。選通邏輯通過譯碼實現,如表1所示。
表1 選通邏輯

2 電源監測系統驅動程序設計
鑒于文中所述的超級終端系在Linux環境下運行,各個檢測環節的驅動程序和相關的實施策略、編寫方法亦多有特點,現詳細描述如下。
2.1 Linux驅動程序工作原理
在Linux內核中,設備驅動程序是作為文件系統的一個模塊存在的,它對下負責與硬件設備的交互,對上通過一個通用的接口掛接到文件系統上,從而和系統的內核等聯系起來。它是軟件概念和硬件設備間的一個抽象層。系統調用是內核和應用程序之間的接口,而設備驅動程序則是內核和外設之間的接口。
設備驅動程序為應用程序屏蔽了外設硬件的細節,從應用程序角度來看,對于外設的操作方法與普通文件一樣。設備驅動程序與系統外設關系如圖2所示。

圖2 Linux驅動程序與系統外設關系圖
2.2 字符設備
字符設備是Linux系統中最簡單的設備,可以像文件一樣訪問。當字符設備初始化的時候,其驅動程序向Linux核心登記,在chrdevs向量表中增加一個device_STruct數據結構條目。這個設備的主設備標識符用作這個向量表的索引。一個設備的主設備標識符是固定的。chrdevs向量表中的device_struct數據結構包括一個登記設備驅動程序名稱的指針和一個指向一組文件操作的指針。這組文件操作本身位于這個設備的字符設備驅動程序中,并處理一些特定任務。本電池監測系統在Linux下的驅動程序就把外設視為字符設備,在驅動程序里實現了打開、讀、寫和關閉等操作。
2.3 電池監測驅動實現策略
系統內部,I/O設備的存取使通過一組固定的入口點來進行的。這組入口點由特定設備的設備驅動程序提供,在數據結構file_operatiONs()中定義。該程序定義了一個數據結構為file_operations()的變量adc_fops。

2.3.1 adc_open函數
此函數打開并初始化設備以待I/O操作。adc_open()子程序必須對其做好必要的準備,如果設備是獨占的,adc_open()子程序必須設置一些標志以表示設備處于忙狀態。
2.3.2 adc_read函數
對AD轉換器設備文件進行讀操作時調用adc_read()子程序。電池監測系統要求實時讀取外設監測點的電壓值。因此,在adc_read()函數中實時觸發AD轉換器開始工作,并且利用程序輪詢方式讀取轉換后的數據。adc_read()函數內容如下:

2.3.3 adc_iocd函數
控制外圍的輔助電路時調用adc_iocd()函數。對照監測點邏輯控制表,從S3C2410x的GPIO端口發出選擇指令,接著就可以進行讀操作以讀取相應的數值。在不需要監測時,控制監測系統進入省電模式。

2.3.4 adc_close()函數
adc_close()函數用來關閉外設。當監測結束時,應用程序會調用此函數關閉設備文件。同adc_open()函數一樣,也可以為NULL.
3 設計Qt/Embedded應用程序和植入Qtopia的方法
QT/Embedded為嵌入式Linux提供了一種友好交互接口,是完整的自包含C++GUI和基于LinuX的嵌人式平臺開發工具 ,專為高端嵌入式圖形領域應用而設并得以普及。鑒于文中所使用的系統需要按照手動點擊檢查和欠壓自動報警的方式工作,所以,必須遵循相應的規則和方法,進行高效、美觀的圖形界面設計。
3.1 編寫Qt/Embedded應用程序
在宿主機上編譯Qt for Xll時生成的Qt Designer軟件是一個非常流行的快速應用程序開發工具,用來設計界面和編制代碼。在Qt Designer中,可以通過拖拉或點擊的方式,在一張空白表單的適當位置上添加一些輸入框和按鈕等窗口組件。這時Designer工具會自動編寫和維護代碼。
使用Qt Designer進行C++程序編制的基本步驟是:首先建立窗體,并根據應用的需要在窗體中添加控件。Qt會將建立的窗體保存為。ui文件,使用Qt提供的uic工具將文件轉換為。h和。cpp文件,對于控制動作是需要手動添加不同的操作函數。之后使用progen工具為該應用程序建立。pro工程文件,并通過tmake工具為該工程建立Makefile文件。最后,只需要運行make即可生成可執行文件。
在編寫操作函數時,本系統通過計算相鄰監測點的觀測值確定每個電池芯的電壓值。通過查詢選用電池芯的放電結束電壓查找表,得出每個電池芯的剩余電量。當電池組電量降至一定閾值或某個電池芯的儲電量低于3%時,利用應用程序報警,通知用戶予以充電或按照指示的電池編號及時進行個別更換。這樣,既可保證電源的正常工作指標,又能夠提高所有電池的利用率。
3.2 將應用程序植入Qtopia
在Qtopia平臺上發布自己的應用程序,需要三個文件:一個執行文件、一個啟動器文件、一個圖標文件。
執行文件就是前面講到編寫并編譯生成的可執行文件,需要將該可執行文件保存在qtopia/bin目錄下。圖標文件就是為應用程序制作48*48大小的PNG格式的小圖像,它一般存放在qtopia/pics目錄下。同時還需要建立應用啟動器(。desktop)文件,把它保存在qtopia/apps/Applications目錄下。將上述文件分別復制好以后,重新運行Qtopia,就可以看到添加的應用圖標,點擊此圖標便可運行該應用程序了。
4 結束語
降低系統能耗需要嵌入式系統硬件環節提供可靠支持,同時也離不開嵌入式操作系統和應用程序對硬件資源的合理管理,F有的Linux提供了電源管理的部分功能,但由于具體進行嵌入式系統設計時的靈活性,一般需要根據特定需要而定制應用程序對電源電量進行精確的監測與提示。通過對手持式終端設備中電源監測技術的研究和實現,將有助于其它類型嵌入式系統的電源監測、管理工作的完成,亦有望對類似系統的建立具有一定的參考和借鑒價值。<
免責聲明:本文僅代表作者個人觀點,與電源在線網無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
來源:c114