,,
(武漢海王機(jī)電工程技術(shù)有限公司,武漢 430000)
隨著我國(guó)科學(xué)技術(shù)的發(fā)展,自動(dòng)化設(shè)備應(yīng)用越來(lái)越廣泛,安裝于室外的設(shè)備越來(lái)越多,例如自動(dòng)化城市建設(shè),自動(dòng)化鐵軌建設(shè),自動(dòng)化管路建設(shè)應(yīng)用已經(jīng)非常普遍。對(duì)于復(fù)雜設(shè)備的調(diào)試,傳統(tǒng)方式是配置顯示屏,而安裝于室外的設(shè)備往往會(huì)無(wú)人看守,設(shè)備廠家并不希望無(wú)關(guān)人員看到設(shè)備調(diào)試信息,且安裝顯示屏對(duì)設(shè)備的成本、功耗和體積都會(huì)有所增加。基于這種現(xiàn)狀,安裝于室外的設(shè)備調(diào)試往往是由調(diào)試人員自備調(diào)試電腦現(xiàn)場(chǎng)連接進(jìn)行調(diào)試。而電腦等設(shè)備,調(diào)試時(shí)在現(xiàn)場(chǎng)需要放置平臺(tái)、依拖等,這在高空作業(yè),狹窄管道,預(yù)埋設(shè)備等環(huán)境調(diào)試時(shí),會(huì)帶來(lái)諸多不便。而且電腦電池待機(jī)能力有限,室外現(xiàn)場(chǎng)不一定具備充電條件,中途充電會(huì)極大的降低工作效率。筆者介紹的調(diào)試方式使用安卓設(shè)備(安卓手機(jī)、pad等),具有攜帶方便,待機(jī)能力強(qiáng),還可以使用充電寶充電等優(yōu)勢(shì)。此調(diào)試方法適用場(chǎng)景還包含使用分布式結(jié)構(gòu)的大系統(tǒng)。分布式結(jié)構(gòu)往往各設(shè)備間距離較遠(yuǎn),系統(tǒng)構(gòu)架決定了其所有信息都傳入集中控制室內(nèi),而單個(gè)設(shè)備調(diào)試不方便,使用本方法可以很好地解決這個(gè)問(wèn)題。
筆者以安裝在管道上的膨脹節(jié)檢測(cè)設(shè)備為例,介紹其安裝調(diào)試使用安卓設(shè)備的方法,膨脹節(jié)是在管道(煙、風(fēng)管道)中間設(shè)置的、能補(bǔ)償管道長(zhǎng)度方向上的熱脹冷縮量并保持管道密封性的裝置。補(bǔ)償管道長(zhǎng)度變化的附件,又稱伸縮節(jié)或補(bǔ)償器[1]。膨脹節(jié)在航天、化工、消防等管道系統(tǒng)中應(yīng)用越來(lái)越廣泛,使用壽命與管路壓力、溫度和使用次數(shù)有關(guān),膨脹節(jié)使用次數(shù)用盡,對(duì)于傳輸介質(zhì)為高溫、高壓、高危等工況是很大的隱患。膨脹節(jié)檢測(cè)設(shè)備安裝于管路上,用于采集存儲(chǔ)膨脹節(jié)的狀態(tài)信息。膨脹節(jié)安裝環(huán)境條件特殊,檢修不方便,安裝分布位置廣。本設(shè)計(jì)調(diào)試膨脹節(jié)檢測(cè)設(shè)備時(shí)采用數(shù)據(jù)線接入手機(jī),對(duì)于剩余空間狹窄等不方便靠近的設(shè)備,采用藍(lán)牙方式接入。
系統(tǒng)目標(biāo)是可以通過(guò)安卓設(shè)備設(shè)置膨脹節(jié)檢測(cè)設(shè)備基本參數(shù),獲取其工作狀態(tài)、傳感器測(cè)量值等信息。本文重點(diǎn)講通訊實(shí)現(xiàn)的技術(shù)要點(diǎn)。
針對(duì)這種需求,筆者設(shè)計(jì)基于ST公司的ARM Cortex-M3內(nèi)核的控制器作為膨脹節(jié)檢測(cè)設(shè)備MCU,膨脹節(jié)檢測(cè)設(shè)備通過(guò)數(shù)據(jù)線或藍(lán)牙連接安卓設(shè)備,同時(shí)針對(duì)性的開(kāi)發(fā)安卓端軟件用于設(shè)備調(diào)試?,F(xiàn)場(chǎng)人員可以根據(jù)實(shí)際情況安裝使用數(shù)據(jù)線或者藍(lán)牙。膨脹節(jié)檢測(cè)設(shè)備采集數(shù)據(jù),通過(guò)USB或者藍(lán)牙發(fā)送到安卓設(shè)備端,安卓設(shè)備記錄分析存儲(chǔ)數(shù)據(jù),同時(shí)把用戶對(duì)系統(tǒng)功能、參數(shù)等設(shè)置發(fā)出來(lái)給膨脹節(jié)檢測(cè)設(shè)備。采用ARM Cortex-M3內(nèi)核的控制器STM32在通訊方面有豐富的接口選擇:IIC接口(SMBus/PMBus)、USART接口、SPI接口、CAN接口(2.0B)、USB 2.0全速接口等[2]。根據(jù)項(xiàng)目資源要求本設(shè)計(jì)選取的芯片型號(hào)是STM32F103RBT6,內(nèi)置128 KB Flash、20 K的RAM,處理器最高工作頻率72 MHz。
膨脹節(jié)檢測(cè)設(shè)備通過(guò)數(shù)據(jù)線與安卓設(shè)備通訊的實(shí)現(xiàn)基于USB HID技術(shù),HID是Human Interface Device的縮寫(xiě),HID設(shè)備是直接與人交互的設(shè)備,例如鍵盤(pán)、鼠標(biāo)與游戲桿等,不過(guò)HID設(shè)備并不一定要有人機(jī)接口,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備[3]。STM32部分芯片內(nèi)部集成了USB外設(shè),可以大大提升設(shè)計(jì)速度、節(jié)約成本、提高了USB電路設(shè)計(jì)準(zhǔn)確性,只需設(shè)計(jì)USB接口電路,就可以實(shí)現(xiàn)基于STM32芯片的電路板的USB通信設(shè)計(jì)[2]。STM32F103RBT6支持USB HID模式,更是有全速和低速兩種通訊模式可配置,具有數(shù)據(jù)傳輸速率快、效率高、集成度高、配置靈活等特點(diǎn)。全速設(shè)備理論通訊速度可以達(dá)到12 Mbps。
安卓設(shè)備能外接調(diào)試設(shè)備基于USB OTG技術(shù)。USB On-The-Go通常縮寫(xiě)為USB OTG,是USB2.0規(guī)格的補(bǔ)充標(biāo)準(zhǔn)[4]。它可使USB設(shè)備,例如播放器或手機(jī),從USB周邊設(shè)備變?yōu)閁SB主機(jī),與其他USB設(shè)備連接通信。USB具有高速度、低成本、低功耗、即插即用等優(yōu)點(diǎn)[5]。在正常情況下,這些支持OTG的USB設(shè)備和USB主機(jī)(如臺(tái)式機(jī)或者手提電腦),仍然作為USB周邊設(shè)備使用[4]。Android系統(tǒng)可以通過(guò)USB配件模式連接像機(jī)器人控制器,擴(kuò)展塢,音樂(lè)設(shè)備,讀卡器等這些配件;USB主機(jī)模式支持各種各樣的USB外設(shè)和Android USB配件,像數(shù)碼相機(jī),鍵盤(pán)鼠標(biāo)和游戲手柄等附屬設(shè)備[4]。這兩種模式在Android3.1(API 12)及以上都是直接支持的[6]。本設(shè)計(jì)通過(guò)Android系統(tǒng)設(shè)置配置為USB主機(jī)模式,連接到Android上的USB設(shè)備會(huì)把Android類似的看作是一臺(tái)PC機(jī)。膨脹節(jié)檢測(cè)設(shè)備就相當(dāng)于USB的配置端,使用安卓設(shè)備系統(tǒng)結(jié)構(gòu)配置專用的OTG線用于連接外設(shè),膨脹節(jié)檢測(cè)設(shè)備便可以正常的和Android應(yīng)用交互。
圖1為數(shù)據(jù)線連接系統(tǒng)示意圖,電路設(shè)計(jì)中采用STM32自帶USB口,連接通用的安卓數(shù)據(jù)線,安卓數(shù)據(jù)線通過(guò)OTG接口連接安卓設(shè)備。電路板上的USB接口可以采用USB母座、mini USB母座或者micro USB母座,這樣設(shè)計(jì)方便接入電腦,若確定不接入電腦,電路板上可采用Type USB母座設(shè)計(jì),接線時(shí)就不需要OTG接口,方便直接使用手機(jī)數(shù)據(jù)線接入。STM32設(shè)計(jì)主要包括供電、時(shí)鐘、復(fù)位和其他傳感器的接入。
圖1 數(shù)據(jù)線連接系統(tǒng)示意圖
藍(lán)牙在空曠地藍(lán)牙傳輸有效距離為10米,具有一定的穿透性。藍(lán)牙4.0將3種規(guī)格集一體,包括傳統(tǒng)藍(lán)牙技術(shù)、高速技術(shù)和低耗能技術(shù),數(shù)據(jù)傳輸速率達(dá)到24 Mbit/s,并且具有低功耗、3毫秒低延遲、超長(zhǎng)有效連接距離、AES-128加密等特點(diǎn)[7]。本設(shè)計(jì)采用藍(lán)牙4.0技術(shù),極大的滿足了設(shè)計(jì)要求,保證了系統(tǒng)穩(wěn)定性。
藍(lán)牙系統(tǒng)采用靈活的無(wú)基站的組網(wǎng)方式,藍(lán)牙的組網(wǎng)方式有3種,BR/EDR、Bluetooth Low Energy和Bluetooth mesh[8]。其中BR/EDR,也就是常說(shuō)的經(jīng)典藍(lán)牙。藍(lán)牙耳機(jī)和遙控器的按鈕,這種方式是點(diǎn)對(duì)點(diǎn),PAN,personal area network[8]。本系統(tǒng)使用的是控制器與安卓設(shè)備間的對(duì)稱連接,采用BR/EDR連接方式正適合。
圖2為藍(lán)牙連接系統(tǒng)示意圖,電路設(shè)計(jì)中STM32通過(guò)串口方式與藍(lán)牙模塊連接,藍(lán)牙模塊發(fā)出并檢測(cè)藍(lán)牙信號(hào),安卓設(shè)備端開(kāi)啟藍(lán)牙之后,就可以與膨脹節(jié)檢測(cè)設(shè)備進(jìn)行通訊。
圖2 藍(lán)牙連接系統(tǒng)示意圖
通過(guò)上訴方案可見(jiàn),膨脹節(jié)檢測(cè)設(shè)備與安卓設(shè)備通過(guò)數(shù)據(jù)線或者無(wú)線藍(lán)牙連接通訊簡(jiǎn)便可行,下面分別從硬件設(shè)計(jì)和軟件設(shè)計(jì)兩方面介紹的實(shí)現(xiàn)方法。
USB有主從之分,膨脹節(jié)檢測(cè)設(shè)備在這是做為從機(jī),相對(duì)應(yīng)的安卓設(shè)備就是主機(jī)。膨脹節(jié)檢測(cè)設(shè)備端USB部分的硬件設(shè)計(jì)主要是STM32和USB端子接口連接,圖3是二者連接的硬件連接電路圖。系統(tǒng)供電電壓為3.3 V,系統(tǒng)設(shè)計(jì)直接采用STM32的USB口作為通訊接口。USB是一種差分總線,數(shù)據(jù)由正、負(fù)信號(hào)的差值所決定[9]。電路中USBDP為正,USBDM為負(fù),STM32的USB模塊遵循USB2.0全速設(shè)備標(biāo)準(zhǔn),從機(jī)作為全速設(shè)備只需在USBDP線加上拉1.5 K電阻。Q1是一個(gè)三極管,做開(kāi)關(guān)用,當(dāng)開(kāi)關(guān)開(kāi)啟時(shí),USB主機(jī)設(shè)備開(kāi)始枚舉該USB設(shè)備;當(dāng)不使用USB方式連接時(shí),開(kāi)關(guān)關(guān)閉,USB斷開(kāi)連接。本設(shè)計(jì)中的USB座采用mini USB母座,方便用戶使用數(shù)據(jù)線連接。膨脹節(jié)檢測(cè)設(shè)備設(shè)計(jì)電路中還應(yīng)包含電源電路、時(shí)鐘電路、復(fù)位電路和完成系統(tǒng)功能的測(cè)量控制電路。系統(tǒng)增加一塊FLASH芯片,在設(shè)備運(yùn)行期間用于記錄和保護(hù)重要參數(shù)和故障信息等, 即使掉電也能保存下來(lái),下次調(diào)試可以上傳查看分析故障原因?,F(xiàn)場(chǎng)使用環(huán)境惡劣,為了達(dá)到最好的使用效果,系統(tǒng)PCB布線需要?jiǎng)澐趾侠恚O(shè)備具有抗干擾的能力。
圖3 USB從機(jī)電路設(shè)計(jì)
藍(lán)牙通訊的硬件設(shè)計(jì)主要包括STM32和藍(lán)牙模塊,這里選用的藍(lán)牙模塊是CC2541低功率藍(lán)牙模塊板,CC2541藍(lán)牙模塊板支持藍(lán)牙4.0版本,是藍(lán)牙主從一體模塊,具透?jìng)?、遠(yuǎn)控、PIO采集3種功能,可以通過(guò)AT指令集進(jìn)行切換和設(shè)置。連接設(shè)備支持安卓、蘋(píng)果、PC、MAC。具有收發(fā)無(wú)字節(jié)限制,最高可達(dá)3K Bytes/s的特點(diǎn)[7]。圖4給出了二者連接的硬件連接圖。STM32與藍(lán)牙模塊通過(guò)串口連接,系統(tǒng)正常供電,藍(lán)牙模塊串口通訊引腳RX和TX,分別與STM32的串口引腳連接,使能端EN與STM32的IO口連接,作為開(kāi)關(guān)控制藍(lán)牙設(shè)備的開(kāi)啟與關(guān)閉。系統(tǒng)可以設(shè)置一個(gè)開(kāi)關(guān)控制藍(lán)牙設(shè)備的啟停,在不使用藍(lán)牙期間關(guān)閉藍(lán)牙,可以節(jié)省不必要的能耗,同時(shí)保護(hù)數(shù)據(jù)安全。
圖4 藍(lán)牙模塊電路設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)主要在于膨脹節(jié)檢測(cè)設(shè)備端軟件設(shè)計(jì)和安卓設(shè)備端軟件設(shè)計(jì)。
2.2.1 膨脹節(jié)檢測(cè)設(shè)備端軟件設(shè)計(jì)
STM32 USB支持雙向8個(gè)端點(diǎn),即8個(gè)IN端點(diǎn)和8個(gè)OUT端點(diǎn),硬件實(shí)現(xiàn)CRC自動(dòng)生成/校驗(yàn),NRZI編碼/解碼和bit-stuffing,支持控制傳輸,中斷傳輸,大容量傳輸和同步傳輸4種傳輸類型,支持USB掛起和喚醒[4]。
本系統(tǒng)軟件實(shí)現(xiàn)是需要將STM32的USB枚舉為HID設(shè)備。STM32官方提供的固件庫(kù)含 USB固件庫(kù),基于固件庫(kù)做移植,充分利用可靠資源,可以極大的提高設(shè)計(jì)和調(diào)試效率[10]。USB固件庫(kù)的移植:在移植程序中添加USB相關(guān)文件,修改設(shè)備配置描述符,調(diào)取USB的函數(shù)。本例程中,用到了3個(gè)USB端點(diǎn),實(shí)現(xiàn)上位機(jī)與下位機(jī)間雙向通信。EP0為控制端點(diǎn)(系統(tǒng)默認(rèn)端點(diǎn)0作為控制傳輸端點(diǎn)),EP1為INTERRUPT OUT端點(diǎn)(數(shù)據(jù)輸出端,即上位機(jī)向MCU發(fā)送數(shù)據(jù)段),EP2為INTERRUPT OUT端點(diǎn)(數(shù)據(jù)輸入端,即MCU向上位機(jī)發(fā)送數(shù)據(jù))。啟用STM32設(shè)備需要對(duì)USB口進(jìn)行初始化,需要配置USB中斷、設(shè)置USB時(shí)鐘,再開(kāi)啟USB端口。開(kāi)啟之后主設(shè)備會(huì)對(duì)接入的從設(shè)備開(kāi)始枚舉,枚舉成功之后加載驅(qū)動(dòng)就能在主機(jī)的硬件設(shè)備中看到接入的HID設(shè)備。HID設(shè)備用PID/VID唯一標(biāo)識(shí)。軟件設(shè)計(jì)時(shí)需開(kāi)辟USB收發(fā)緩沖區(qū),用于接收和發(fā)送數(shù)據(jù)。USB接收函數(shù)用于定時(shí)解析USB收緩沖區(qū)數(shù)據(jù),USB發(fā)送函數(shù)用于發(fā)出一段數(shù)據(jù)。
藍(lán)牙模塊上電使能之后可以發(fā)出藍(lán)牙信號(hào)。膨脹節(jié)檢測(cè)設(shè)備與安卓設(shè)備通訊需要設(shè)置成從機(jī)模式,藍(lán)牙模塊與STM32采用串口通訊方式。通過(guò)AT指令集控制藍(lán)牙模塊,完成配置模式,搜索配對(duì),收發(fā)數(shù)據(jù)的功能。使用藍(lán)牙模塊控制上的優(yōu)點(diǎn)在對(duì)于MCU來(lái)說(shuō)只需要操作簡(jiǎn)單的串口,就可以實(shí)現(xiàn)藍(lán)牙通訊。使用STM32串口需要配置串口中斷、設(shè)置通訊頻率之后開(kāi)啟。
為保證數(shù)據(jù)通訊穩(wěn)定性和數(shù)據(jù)準(zhǔn)確性,主從機(jī)通訊使用的軟件通訊協(xié)議的內(nèi)容應(yīng)該包含開(kāi)始字符串,命令字符串,數(shù)據(jù)字符串,校驗(yàn)位。并規(guī)定由主設(shè)備發(fā)送命令請(qǐng)求,從設(shè)備相應(yīng)命令請(qǐng)求。例如主設(shè)備發(fā)送獲取歷史記錄命令請(qǐng)求,從設(shè)備收到之后,把系統(tǒng)中保存在FLASH上的歷史數(shù)據(jù)依次發(fā)出,主設(shè)備接收后解析顯示。
2.2.2 安卓調(diào)試軟件設(shè)計(jì)
安卓軟件開(kāi)發(fā)平臺(tái)采用Android Studio,由谷歌發(fā)布的一款非常好用的Android集成開(kāi)發(fā)環(huán)境工具。安卓端軟件設(shè)計(jì)需要有設(shè)置界面,可以設(shè)置通訊模式為OTG通訊或藍(lán)牙通訊,并在調(diào)試界面顯示接入方式;消息界面用戶記錄警告信息;調(diào)試界面顯示調(diào)試數(shù)據(jù),可以繪制曲線。另外一些附加功能,待辦事件顯示需要調(diào)試的設(shè)備信息,包括設(shè)備地點(diǎn)、安裝位置、簡(jiǎn)介等;設(shè)備資料顯示當(dāng)前連接設(shè)備的詳細(xì)設(shè)備信息和歷史維修記錄等。為了保護(hù)數(shù)據(jù)的安全性,系統(tǒng)需要建立用戶數(shù)據(jù)庫(kù),配置用戶權(quán)限,采用賬戶登錄方式,方便管理整個(gè)系統(tǒng)。
OTG功能本為Android3.1及以上底層所支持,并提供了相應(yīng)的API[4]。對(duì)于安卓設(shè)備,OTG屬于系統(tǒng)功能,不需要另外開(kāi)發(fā)驅(qū)動(dòng)。使用安卓OTG功能需要設(shè)備打開(kāi)系統(tǒng)設(shè)置中的OTG功能,并設(shè)置成USB調(diào)試模式[6]。調(diào)試軟件設(shè)計(jì)流程圖如圖5所示,首先在安卓系統(tǒng)中使用USB設(shè)備,需要獲取到明確的用戶許可,之后在程序界面列舉出已經(jīng)接入的USB設(shè)備,用戶選擇設(shè)備之后獲取該USB接口,并為它分配端點(diǎn),打開(kāi)并連接USB設(shè)備,連接正常之后就可以進(jìn)行數(shù)據(jù)通訊。
圖5 OTG通訊軟件流程圖
在藍(lán)牙4.0之前為傳統(tǒng)藍(lán)牙,從藍(lán)牙4.0開(kāi)始我們稱之為低功耗藍(lán)牙也就是藍(lán)牙BLE。需要android 4.3及以上版本才支持BLE API[11],低版本只支持傳統(tǒng)藍(lán)牙。低功耗藍(lán)牙較傳統(tǒng)藍(lán)牙,傳輸速度更快,覆蓋范圍更廣,安全性更高,延遲更短,耗電極低等等優(yōu)點(diǎn)[7]。使用藍(lán)牙必須要打開(kāi)安卓設(shè)備藍(lán)牙功能。軟件流程圖如圖6所示,獲取權(quán)限和本地藍(lán)牙適配器之后就可以查找附近已配對(duì)或可用設(shè)備列表,再連接配對(duì)設(shè)備連接正常之后才能數(shù)據(jù)交互。
圖6 藍(lán)牙通訊軟件流程圖
將本設(shè)計(jì)的硬件和軟件實(shí)現(xiàn)之后進(jìn)行通訊調(diào)試,文中所訴的安卓設(shè)備在這里采用的安卓手機(jī)做測(cè)試對(duì)象,選用的手機(jī)支持OTG通訊,系統(tǒng)為android 4.4,圖7為安卓手機(jī)調(diào)試界面圖。在設(shè)置界面選擇采用OTG通訊和藍(lán)牙通訊分別測(cè)試與膨脹節(jié)檢測(cè)設(shè)備通訊情況,都能正常得進(jìn)行數(shù)據(jù)交互,膨脹節(jié)檢測(cè)設(shè)備在實(shí)際項(xiàng)目使用中表現(xiàn)良好,系統(tǒng)測(cè)試結(jié)果滿足系統(tǒng)設(shè)計(jì)要求。
圖7 安卓設(shè)備界面圖
本文實(shí)現(xiàn)了采用STM32控制的USB HID通訊和藍(lán)牙模塊與安卓設(shè)備通訊,達(dá)到方便、靈活調(diào)試和配置自動(dòng)化設(shè)備的目的。系統(tǒng)采用USB HID OTG在安卓和Win7系統(tǒng)相當(dāng)于免驅(qū),大大得減輕了開(kāi)發(fā)負(fù)擔(dān)。針對(duì)設(shè)備需求開(kāi)發(fā)安卓端軟件可以方便操作人員操作和調(diào)試,使用賬號(hào)登錄方式可以大大提高數(shù)據(jù)的安全性。在整個(gè)系統(tǒng)穩(wěn)定之后,膨脹節(jié)檢測(cè)設(shè)備端USB接口可以直接換成type USB母座,這樣只需要安卓設(shè)備充電線即可調(diào)試,系統(tǒng)簡(jiǎn)單便捷。采用藍(lán)牙通訊彌補(bǔ)了設(shè)備安裝位置不方便接線的缺陷。通過(guò)結(jié)果證明,本系統(tǒng)可以大大減輕設(shè)備安裝、調(diào)試、檢修時(shí)的困難,達(dá)到系統(tǒng)設(shè)計(jì)的目標(biāo)。使用安卓設(shè)備調(diào)試還可以方便的將調(diào)試數(shù)據(jù)發(fā)往云端,方便數(shù)據(jù)分析和存儲(chǔ),還可以方便工程師遠(yuǎn)程指導(dǎo)現(xiàn)場(chǎng)調(diào)試等。