常曉明,位恒曦,劉衛(wèi)玲,段晉軍
(1.太原理工大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,太原030024;2.太原理工大學(xué)物理與光電工程學(xué)院)
PWM(Pulse Width Modulation,脈沖寬度調(diào)制)是一種調(diào)壓技術(shù)也是一種變頻技術(shù)[1],由于其具有經(jīng)濟(jì)、節(jié)約空間、抗噪性能強(qiáng)等優(yōu)點(diǎn)[2],已廣泛應(yīng)用于測量、通信、功率控制與變換等領(lǐng)域中。目前,嵌入式PWM控制應(yīng)用廣泛采用單片機(jī)[3],如簡單應(yīng)用可選用PIC、AVR等系列單片機(jī),比較復(fù)雜的應(yīng)用可選用DSP,要求更高的可以選用ARM等。但是,PWM控制應(yīng)用中選用Android智能手機(jī)還未見相關(guān)實(shí)例。
Android是一種全新的開源手機(jī)操作系統(tǒng),具有強(qiáng)大的應(yīng)用層API和傳感器功能[4],廣泛應(yīng)用于手機(jī)、平板電腦等移動設(shè)備中。Android智能手機(jī)具有優(yōu)越的用戶交互性、接口資源開放性、移動性以及便攜性等特點(diǎn),隨著其處理速度、存儲容量、穩(wěn)定性、網(wǎng)絡(luò)訪問能力等性能的逐漸提高,Android智能終端與工業(yè)應(yīng)用的結(jié)合將會得到很大發(fā)展。2011年Google推出Android開放配件協(xié)議(Android Open Accessory Protocol,AOA,Protocol)及配件開發(fā)工具包(Accessory Development Kit,ADK),提供了Android設(shè)備與Android配件通過USB或藍(lán)牙進(jìn)行通信的API,進(jìn)一步拓寬了Android終端的應(yīng)用范圍。基于以上條件,本文介紹了一種基于AOA協(xié)議,通過Android手機(jī)USB控制Android配件生成PWM信號的系統(tǒng)。
AOA協(xié)議用于Android配件通過USB或藍(lán)牙方式與Android終端進(jìn)行通信[5]。基于AOA協(xié)議實(shí)現(xiàn)Android終端USB通信方式稱為配件模式。此模式下,與Android終端通信的另一端設(shè)備稱為Android配件,兩者都必須支持AOA協(xié)議。在USB通信過程中,Android終端充當(dāng)USB從機(jī),Android配件充當(dāng)USB主機(jī)并為總線供電。Android配件需具有USB主控制器功能并移植有AOA協(xié)議。ADK開發(fā)板是常見的Android配件。采用ADK開發(fā)板的Android配件模式示意如圖1所示。

圖1 Android配件模式
AOA協(xié)議基于USB協(xié)議,它規(guī)定了配件如何檢測、枚舉Android設(shè)備,并與設(shè)備建立通信的方法[6]。AOA協(xié)議的工作流程如圖2所示。

圖2 AOA協(xié)議工作流程
系統(tǒng)以Android手機(jī)控制Android配件(ADK開發(fā)板)產(chǎn)生等脈寬PWM,并控制一舵機(jī)為例,采用的Android配件為英國飛特蒂亞公司(FTDI)公司生產(chǎn)的Android平臺USB主控模塊UMFT311EV。在該模塊的核心芯片內(nèi)集成了USB協(xié)議和AOA協(xié)議,并支持4路PWM。系統(tǒng)框圖如圖3所示。

圖3 系統(tǒng)框圖
本系統(tǒng)采用的UMFT311EV開發(fā)板由于集成了AOA協(xié)議,因此無需開發(fā)Android配件端的程序。此外,F(xiàn)TDI公司針對UMFT311EV為Android終端程序開發(fā)提供了底層API。基于UMFT311EV的Android手機(jī)端PWM控制程序結(jié)構(gòu)如圖4所示。

圖4 程序結(jié)構(gòu)
在圖4所示的結(jié)構(gòu)中,PWM驅(qū)動層為FTDI公司提供的與UMFT311EV開發(fā)板通信的方法集合,PWM驅(qū)動層通過如表1所列的兩個類與開發(fā)板進(jìn)行USB通信。

表1 USB配件類
PWM用戶層具體實(shí)現(xiàn)控制邏輯,由用戶編寫程序?qū)崿F(xiàn)。該層調(diào)用驅(qū)動層的方法,從而間接實(shí)現(xiàn)與開發(fā)板的通信。在本系統(tǒng)中,用到的驅(qū)動層的方法如表2所列。

表2 驅(qū)動層方法
在編寫程序前,需要為Android工程做以下設(shè)置工作:
①配置Android Mainfest文件,設(shè)置Android USB配件模式。設(shè)定<uses-feature>元素及android.hardware.usb.accessory屬性值,聲明使用USB配件API;設(shè)置最小SDK版本為12(Android從該版本后支持USB配件模式);增加<intent-filter>元素,并指定android.hardware.usb.action.USB_ACCESSORY_ATTACHED意圖,用于當(dāng)USB配件連接后向用戶發(fā)出提示。增加<meta-data>元素并使其指向一個外部的XML資源文件accessory_filter.xml,該文件用于聲明希望Android設(shè)備檢測的USB配件的描述信息。
②配置accessory_filter.xml文件。增加<usb-accessory>元素,并指定manufacturer、model、version三個屬性。在Android配件的固件程序中,同樣包含以上三個屬性值。根據(jù)AOA協(xié)議,當(dāng)Android配件連接到Android設(shè)備上時,配件會發(fā)送該屬性值到Android設(shè)備。Android程序?qū)⑽ㄒ豁憫?yīng)與其accessory_filter.xml中指定的屬性值匹配的Android配件。
本系統(tǒng)的accessory_filter.xml的配置如下:

Android手機(jī)端程序流程如圖5所示。

圖5 程序流程
本系統(tǒng)的測試場景如圖6所示。

圖6 測試場景
將ADK開發(fā)板通過USB數(shù)據(jù)線連接至Android手機(jī)上,此時,手機(jī)界面將彈出授權(quán)對話框,提示打開系統(tǒng)軟件。軟件界面如圖7所示。
點(diǎn)擊“輸出”按鈕,輸出PWM信號。在輸出信號的過程中,可以通過滑動條動態(tài)調(diào)整PWM信號的周期和占空比。經(jīng)過測試,本系統(tǒng)能夠?qū)崿F(xiàn)Android手機(jī)通過USB接口控制產(chǎn)生PWM信號。由于實(shí)驗(yàn)設(shè)備(Android手機(jī)和ADK開發(fā)板)的性能限制,本系統(tǒng)能夠?qū)崿F(xiàn)PWM信號的參數(shù)調(diào)節(jié)范圍如表3所列。

圖7 軟件界面

表3 PWM參數(shù)可調(diào)范圍
經(jīng)過在小米2手機(jī)上的反復(fù)測試,通過手機(jī)能夠產(chǎn)生的PWM信號周期范圍為1~250ms,占空比范圍為5%~95%,系統(tǒng)總體延遲小于5ms。系統(tǒng)實(shí)現(xiàn)了通過Android手機(jī)USB控制Android配件生成參數(shù)可控PWM信號的功能,并且可以通過操作Android手機(jī)界面實(shí)現(xiàn)動態(tài)調(diào)節(jié)PWM信號。項(xiàng)目組正開發(fā)多種PWM信號的控制系統(tǒng),并在深入研究和探討本系統(tǒng)與工業(yè)應(yīng)用的結(jié)合。
[1] 江世明.脈寬調(diào)制控制技術(shù)中PWM波形程序設(shè)計方法[J] .邵陽學(xué)院學(xué)報:自然科學(xué)版:2006,3(4):45-47.
[2] Michael Barr.Introduction to Pulse Width Modulation(PWM)[J] .Embedded Systems Programming,2001(9):103-104.
[3] 王效華,牛思先.基于單片機(jī)PWM控制技術(shù)的實(shí)現(xiàn)[J] .武漢理工大學(xué)學(xué)報,2010,32(1):94-98.
[4] 耿東久,索岳,陳渝,等.基于Android手機(jī)的遠(yuǎn)程訪問和控制系統(tǒng)[J] .計算機(jī)應(yīng)用,2011,31(2):559-561.
[5] Google.Accessory Development Kit[EB/OL] .[2013-06-07] .http://developer.android.com/tools/adk/index.html.
[6] Google.Android Open Accessory Protocol 1.0[EB/OL] .[2013-02-22] .http://source.android.com/tech/accessories/aoap/aoa.html.