辛云旭,文豐,張凱華
(中北大學(xué)電子測(cè)試技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
共享單車(chē)是當(dāng)前十分普遍的出行交通工具,不僅給人們的生活帶來(lái)了便利并且對(duì)于環(huán)境保護(hù)也做出了一定貢獻(xiàn)[1],但是用戶(hù)在使用共享單車(chē)的過(guò)程中常常因?yàn)闊o(wú)法及時(shí)獲取附近車(chē)輛的位置信息而帶來(lái)不便[2]。在這種情況下,需要設(shè)計(jì)一種可以安裝在車(chē)身上的定位導(dǎo)航裝置使用戶(hù)可以快速找到附近車(chē)輛,增加用戶(hù)的滿(mǎn)意度,從而使更多人選擇這種低碳的出行方式[3]。
該定位導(dǎo)航裝置需要獲取車(chē)輛的實(shí)時(shí)位置,將位置信息通過(guò)4G 網(wǎng)絡(luò)上傳到服務(wù)器中并與用戶(hù)的實(shí)時(shí)位置信息進(jìn)行對(duì)比,判斷距離用戶(hù)最近的車(chē)輛[4]。當(dāng)用戶(hù)接近該車(chē)輛時(shí),定位導(dǎo)航裝置自動(dòng)播報(bào)提示語(yǔ)音,并通過(guò)屏幕顯示車(chē)輛各配件信息[5]。
定位導(dǎo)航裝置總體設(shè)計(jì)采用模塊化思想,在頂層設(shè)計(jì)中根據(jù)模塊功能不同把裝置劃分為五個(gè)模塊,分別是主控模塊、定位模塊、4G 模塊、語(yǔ)音播報(bào)模塊和顯示模塊。
主控模塊的主要功能是裝置加電正常工作后先通過(guò)串口接收定位模塊輸出的車(chē)輛位置信息和4G模塊輸出的用戶(hù)位置信息并進(jìn)行解析和對(duì)比,判斷這兩個(gè)位置信息的經(jīng)緯度是否接近,如果接近,則將對(duì)應(yīng)的控制信息輸出至語(yǔ)音播報(bào)模塊和顯示模塊,同時(shí)將車(chē)輛位置信息通過(guò)串口輸出至4G 模塊,然后通過(guò)服務(wù)器發(fā)送到用戶(hù)端;定位模塊負(fù)責(zé)獲取共享車(chē)輛的位置信息,并在接收到主控模塊輸出的獲取車(chē)輛位置指令時(shí)將共享車(chē)輛的位置信息輸出至主控模塊;4G 模塊負(fù)責(zé)接收主控模塊輸出的共享車(chē)輛位置信息,并通過(guò)MQTT 協(xié)議[6]上報(bào)到服務(wù)器中,使用基站輔助定位模塊進(jìn)行定位,同時(shí)負(fù)責(zé)把用戶(hù)上傳到服務(wù)器中的位置信息發(fā)送到主控模塊;語(yǔ)音播報(bào)模塊通過(guò)串口接收主控模塊的控制信息,根據(jù)控制信息從SD 卡中讀取預(yù)先保存的語(yǔ)音信息并通過(guò)喇叭播報(bào)[7];顯示模塊接收主控模塊的控制信息,通過(guò)I2C 協(xié)議控制屏幕顯示當(dāng)前車(chē)輛位置信息和各配件是否正常的信息[8]。裝置總體設(shè)計(jì)框圖如圖1 所示。
圖1 裝置總體設(shè)計(jì)框圖
主控模塊一共用到了三個(gè)串口,一個(gè)I2C 接口和五個(gè)GPIO 接口。STM32F103C8T6 芯片是基于Cortex-M3 內(nèi)核的32 位微控制器,硬件采用LQFP48封裝,接口資源包括三個(gè)串口、兩個(gè)I2C 接口,GPIO接口多于五個(gè),最高工作頻率為72 MHz,具有高性能、低功耗、價(jià)格便宜的特點(diǎn)[9],所以選用STM32F 103C8T6 芯片作為系統(tǒng)的主控制器。主控模塊的時(shí)鐘輸入采用25 MHz 晶振,并對(duì)3.3 V 電源輸入引腳并聯(lián)0.1 μF 電容進(jìn)行退耦處理。主控模塊的電路原理圖如圖2 所示。
圖2 主控模塊電路原理圖
由于衛(wèi)星導(dǎo)航模塊ATGM336H 支持北斗、GPS和GLONASS 系統(tǒng)的單系統(tǒng)或多系統(tǒng)聯(lián)合定位,定位精度為2.5 m,功耗低,雙模運(yùn)行時(shí)功耗小于83 mW,且內(nèi)置天線短路保護(hù)功能,滿(mǎn)足系統(tǒng)設(shè)計(jì)要求,所以選用ATGM336H 導(dǎo)航模塊進(jìn)行共享車(chē)輛定位[10]。在該裝置中,定位導(dǎo)航模塊的定位準(zhǔn)確性起關(guān)鍵作用。因此在進(jìn)行PCB 設(shè)計(jì)時(shí),要避免定位導(dǎo)航模塊受到其他器件的干擾,模塊下面覆銅并連接GND,且盡量遠(yuǎn)離高頻信號(hào)線。天線應(yīng)盡量靠近模塊的RF引腳,同時(shí)進(jìn)行50 Ω的阻抗匹配[11]。定位模塊的電路原理圖如圖3 所示。
圖3 定位模塊電路原理圖
由于MP3 解碼芯片N9100 具有MP3 解碼功能,可以從外部SD 卡中讀取語(yǔ)音信息,可以通過(guò)串口控制播放指定語(yǔ)音,采樣率最高可達(dá)48 kHz,動(dòng)態(tài)輸出范圍大,信噪比高,所以選用N9100 芯片作為解碼芯片[12]。解碼后的信息通過(guò)喇叭播放,需要使用功放芯片驅(qū)動(dòng)。功放芯片8002 可以提供3 W 的輸出功率,且待機(jī)電流小,為0.6 μA,最大失真度小,為0.5%,所需外部元件少,電路設(shè)計(jì)簡(jiǎn)單,所以選用8002 為語(yǔ)音播報(bào)模塊提供大功率輸出[13]。語(yǔ)音播報(bào)模塊電路原理圖如圖4 所示。
圖4 語(yǔ)音播報(bào)模塊電路原理圖
共享車(chē)輛提供24 V 的直流電源[14],而定位導(dǎo)航裝置所用芯片供電為5 V 和3.3 V,所以需要使用電源轉(zhuǎn)換芯片先將24 V 轉(zhuǎn)為5 V,再將5 V 轉(zhuǎn)為3.3 V 供各芯片及其穩(wěn)壓芯片使用。由于電源芯片LM2596支持9~36 V 輸入、5 V 和3.3 V 輸出,輸出電流可達(dá)3 A,滿(mǎn)足系統(tǒng)運(yùn)行的電壓和電流要求,且內(nèi)部集成了1.235 V 的參考電壓Vref、部分驅(qū)動(dòng)電路以簡(jiǎn)化外部電路,同時(shí)具有過(guò)熱保護(hù),所以使用LM2596進(jìn)行電壓轉(zhuǎn)換[15]。輸出電壓Vout根據(jù)式(1)進(jìn)行計(jì)算,R1設(shè)置為1 kΩ,R2設(shè)置為3.09 kΩ。供電電路的原理圖如圖5所示。
圖5 供電電路原理圖
ATGM336H 通過(guò)串口發(fā)送位置數(shù)據(jù)、衛(wèi)星信息等,系統(tǒng)只需要解析以GPRMC 協(xié)議發(fā)送的位置數(shù)據(jù)即可。
GPRMC 協(xié)議由信息ID、UTC 時(shí)間、數(shù)據(jù)有效位、精度、南北緯、東西經(jīng)、速度等信息組成,用逗號(hào)分隔,以換行符結(jié)尾。數(shù)據(jù)為字符串形式,通過(guò)串口以9 600 bps 輸出。協(xié)議中,緯度信息為度分單位,即ddmm.mmmm,需要根據(jù)公式dd+(mm.mmmm/60)計(jì)算得到度單位。經(jīng)度信息格式為dddmm.mmmm,根據(jù)公式ddd+(mm.mmmm/60)計(jì)算得到度單位。
單片機(jī)首先判斷是否接收到$GPRMC 字符串,如果接收到,則繼續(xù)接收后面的數(shù)據(jù)直至接收到換行符。此時(shí)一幀數(shù)據(jù)接收完成,進(jìn)行異或校驗(yàn)位判斷,如果校驗(yàn)位不一致,則數(shù)據(jù)無(wú)效,舍棄。如果校驗(yàn)位有效,則對(duì)數(shù)據(jù)進(jìn)行解析。
由于各信息由逗號(hào)分隔,所以可以使用strstr 函數(shù)獲取緯度信息在數(shù)據(jù)幀的位置,將前兩位即度數(shù)提取出來(lái),再對(duì)分?jǐn)?shù)進(jìn)行運(yùn)算。由于單片機(jī)沒(méi)有集成浮點(diǎn)運(yùn)算單元,不適合直接進(jìn)行浮點(diǎn)數(shù)運(yùn)算,所以先將分?jǐn)?shù)中的小數(shù)點(diǎn)去除,轉(zhuǎn)為長(zhǎng)整型,為保證運(yùn)算結(jié)果是六位小數(shù),在除法運(yùn)算前先乘10。
函數(shù)snprintf 可以將參數(shù)以指定格式格式化為字符串[16],使用snprintf 函數(shù)將運(yùn)算結(jié)果進(jìn)行整合,得到度格式的緯度信息。經(jīng)度信息的運(yùn)算與緯度信息的運(yùn)算一致,這里不再贅述。定位模塊的程序流程圖如圖6 所示。
圖6 定位模塊的程序流程圖
主控芯片通過(guò)串口控制N9100 進(jìn)行語(yǔ)音數(shù)據(jù)的解碼和播報(bào)。通信數(shù)據(jù)由命令碼、命令碼校驗(yàn)碼、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)以及校驗(yàn)位組成,數(shù)據(jù)可以有多個(gè)。04為播報(bào)命令碼。數(shù)據(jù)中,06 表示指定曲目,06 后的數(shù)據(jù)表示語(yǔ)音文件在當(dāng)前盤(pán)存放的位置。當(dāng)用戶(hù)接近車(chē)輛,首先對(duì)比用戶(hù)的位置和車(chē)輛的位置,判斷距離信息。根據(jù)距離信息找到對(duì)應(yīng)的語(yǔ)音文件的位置后,通過(guò)串口向N9100 發(fā)送播放控制命令,從SD 卡中讀取并播放對(duì)應(yīng)的語(yǔ)音文件。
將系統(tǒng)置于室外,上電后定位模塊開(kāi)始定位并輸出定位信息。由于只接收解析GPRMC 格式的數(shù)據(jù),通過(guò)IO 模擬串口打印數(shù)據(jù)到計(jì)算機(jī)的結(jié)果如圖7 所示。由打印結(jié)果可知,定位模塊正常工作。
圖7 定位模塊的定位結(jié)果
將設(shè)備移動(dòng)到離模擬用戶(hù)1 m 左右的位置,此時(shí)主控模塊接收到定位模塊輸出的位置信息并與站點(diǎn)經(jīng)緯度對(duì)比,向語(yǔ)音播報(bào)模塊輸出控制信息,此時(shí)語(yǔ)音播報(bào)模塊播報(bào)“距離目標(biāo)車(chē)輛1 m”的語(yǔ)音。更換模擬用戶(hù)的位置,語(yǔ)音播報(bào)模塊仍能播報(bào)對(duì)應(yīng)的語(yǔ)音信息,所以語(yǔ)音播報(bào)模塊工作正常。
該設(shè)計(jì)實(shí)現(xiàn)的定位導(dǎo)航裝置,采用了高性能的STM32F103C8T6 作為主控制器進(jìn)行控制和數(shù)據(jù)解析操作,使用定位速度快、精度高的ATGM336H 采集位置信息,利用ISD1700 語(yǔ)音芯片讀取SD 卡里的語(yǔ)音文件,實(shí)現(xiàn)語(yǔ)音播報(bào)功能,通過(guò)I2C 協(xié)議控制屏幕進(jìn)行顯示,使用4G 模塊通過(guò)MQTT 協(xié)議上報(bào)車(chē)輛位置信息和下傳用戶(hù)位置信息,滿(mǎn)足了用戶(hù)迅速尋找到共享車(chē)輛的需求。