采用北斗BDM100模塊的兩種家庭監(jiān)護終端設(shè)計
隨著社會的發(fā)展,我國人口老齡化越來越嚴重,對于老人的監(jiān)護成為了一個社會問題。本文根據(jù)老人監(jiān)護的需求特點,利用我國自主研發(fā)的北斗衛(wèi)星定位系統(tǒng),結(jié)合北斗定位模塊BDM100設(shè)計了兩種針對不同需求的家庭監(jiān)護終端方案,用于對老人進行實時定位,并將實時位置信息傳輸?shù)奖O(jiān)管人手中。第一種方案采用支持3G網(wǎng)絡(luò)的EVDO模塊MC8630,結(jié)合以ARM9為內(nèi)核的AT91SAM9260芯片進行位置信息回傳,該方案具有傳輸迅速,可擴展性強的特點,可以為以后傳遞身體信息,環(huán)境信息提供擴展空間。第二種方案采用支持2G網(wǎng)絡(luò)的GSM模塊GTM900,結(jié)合以Cortex-M3為內(nèi)核的LPC1766芯片進行定位信息傳送,該方案結(jié)合良好的軟件設(shè)計,具有成本低,性能穩(wěn)定的特性。經(jīng)過實驗檢測,這兩種方案都能很好的解決家庭監(jiān)護中老人的實時定位問題。
1 BDM100模塊設(shè)計
BDM100模塊是一款雙系統(tǒng)高性能的GNSS模塊,能夠同時支持BD2 B1,GPS L1兩個頻點,很好適應(yīng)低成本,低功耗領(lǐng)域,可以進行大規(guī)模的北斗系統(tǒng)集成應(yīng)用。模塊的結(jié)構(gòu)框圖如下圖所示:
圖1 BDM100模塊結(jié)構(gòu)框圖
從芯片結(jié)構(gòu)框圖中可以看到,BDM100支持UART,SPI,1PPS,I2C等多種接口。其可以通過相關(guān)器,F(xiàn)FT和匹配濾波器混合應(yīng)用以及算法優(yōu)化,在各種復(fù)雜環(huán)境下保持出色的捕捉跟蹤能力和快速TTFF功能。采用多路徑抑制技術(shù)和高質(zhì)量的原始觀測數(shù)據(jù),可以保證很好的授時,導(dǎo)航精度。BDM100芯片可以采用多系統(tǒng)混合定位的方式,這樣可以提高定位精準度,因為本文采用北斗定位系統(tǒng),所以只選取其北斗定位功能。另外,BDM100芯片有3個串口,用戶可以自行設(shè)置其波特率,默認波特率是9600,并且可以通過串口3進行固件升級。該模塊的定位精度可達到3米,測速精度可以達到0.1米/秒。本系統(tǒng)采用的外圍應(yīng)用電路圖如下:
圖2 BDM100模塊外圍電路圖
本系統(tǒng)的兩個方案均使用串口1與MCU通訊,串口3預(yù)留出接口以便日后升級。特別注意:模塊正常啟動時,在復(fù)位信號有效期內(nèi),保持串口3輸入引腳電平恒定為高,否則模塊將進入升級固件模式,無法正常啟動。模塊復(fù)位信號低電平有效,且持續(xù)時間不得小于2毫秒;該模塊配備的天線必須為+2.85V有源天線,天線連接至模塊的GNSS_ANT引腳,有源天線內(nèi)部集成LNA(低噪聲放大器),可以直接連接到模塊GNSS_ANT引腳,若采用非+2.85V的有源天線,則需要為天線供電。
本文所使用的BDM100模塊在其采用的軟件接口協(xié)議中,主要通過消息的傳遞來完成信息的傳送,其中“消息”是全ASCLL碼組成的字符串。消息的基本格式為:
表1 BDM100模塊消息格式
其中所有的消息都以$(0x24)開始,后面緊跟消息名,之后跟有不定數(shù)目的參數(shù)或數(shù)據(jù)。消息名與數(shù)據(jù)之間均以逗號(0x2C)進行分隔。表示輸入的消息可以以‘\r’(0x0D)或‘\n’(0x0A)或兩者的任意組合結(jié)束,而表示輸出的消息則全部以‘\r\n’組合結(jié)束。消息名和參數(shù)中的字母均不區(qū)分大小寫。
BDM100模塊在使用之前需要進行初始化,初始化過程就是模塊和主控芯片之間進行消息交互的過程。BDM100模塊具有授時和定位功能,本系統(tǒng)只用到其定位功能,所以對于授時功能的初始化不做描述。
本系統(tǒng)需要用到的初始化指令如下表所示:
表2 BDM100模塊初始化指令
其中在3G方案中由于采用USB接口通信,需要將波特率設(shè)置為115200(默認波特率9600),具體命令為:$CFGPRT,3,h0,115200,3,3。由于本系統(tǒng)用到的是北斗定位系統(tǒng),而BDM100模塊可以支持GPS和北斗混合定位,所以需要在初始化時將模塊設(shè)置為北斗定位模式,可以采用兩個命令實現(xiàn)-CFGSYS/CFGNAV,具體命令為:$CFGSYS,h10或者$CFGNAV,1000,1000,3,2。對于輸出的消息有多種,具體的編碼見下表:
表3 BDM100模塊消息類型列表
本系統(tǒng)中用到的輸出需要地理位置信息和對應(yīng)的時間信息,由上面的消息類型可以看出采用GLL消息或者RMC消息皆可以滿足要求,因為GLL消息比RMC消息短,信息效率比較高,所以系統(tǒng)在設(shè)計中采用GLL消息進行傳送。因方案中連接的控制芯片處理能力限制,GLL消息需要設(shè)置其輸出頻率為1次/秒,而且其對應(yīng)的類別和ID號分別為0和1,通過查找對應(yīng)芯片軟件手冊得知GLL消息的最高輸出頻度為1Hz,所以利用CFGMSG設(shè)置其頻率用的具體指令為:$CFGMSG,0,0,1。
當把以上內(nèi)容處理完成,需要將設(shè)置進行保存,用到的指令為:$CFGSAVE。
初始化完成以后,BDM100芯片就會以1次/秒的速度通過接口向外輸出數(shù)據(jù),具體接收以及處理過程由與其相鏈接的主控芯片處理。
2 3G方案設(shè)計與實現(xiàn)
以3G方案設(shè)計的監(jiān)護終端采用ARM926EJ-S為內(nèi)核的AT91SAM9260芯片作為主控芯片,該芯片具有性能穩(wěn)定,外圍接口豐富,內(nèi)嵌以太網(wǎng),具備快速RAM和ROM,支持LINUX操作系統(tǒng)的特性。消息回傳的3G芯片采用EVDO模塊MC8630,3G服務(wù)要求網(wǎng)絡(luò)具有較高的數(shù)據(jù)吞吐量,EVDO模塊支持中國電信CDMA2000提供的所以數(shù)據(jù)分組業(yè)務(wù),對于無線數(shù)據(jù)接入業(yè)務(wù),EVDO的接入速度已經(jīng)接近有限ADSL上網(wǎng)的水平,而且采用此種方式,數(shù)據(jù)傳輸穩(wěn)定,為以后的性能擴展留下空間,滿足方案設(shè)計要求。
2.1硬件設(shè)計
3G方案硬件連接框圖如下:
圖3 3G方案框圖
其中BDM100模塊和主控芯片AT91SAM9260通過UART接口連接,而3G芯片MC8630通過USB口與主控芯片連接,這樣在保證接收與發(fā)送穩(wěn)定性的同時,還可以為以后的性能擴展提供空間。對BDM100模塊和主控芯片的連接具體電路見圖2,而對3G模塊和主控芯片的連接見下圖:
圖4 3G模塊和主控芯片連接圖[!--empirenews.page--]
2.2 軟件設(shè)計
在主控芯片AT91SAM9260上使用linux作為操作系統(tǒng),該操作系統(tǒng)已經(jīng)在眾多嵌入式設(shè)備上面使用,其穩(wěn)定性已經(jīng)得到了驗證。
2.2.1 BDM100模塊的連接
BDM100模塊采用UART串口和主控芯片通信,在linux中配置完內(nèi)核之后,利用串口通信接口進行初始化和定位信息的傳送。本方案中,具體的串口通信函數(shù)如下:
在進行串口通信時,要先對串口進行初始化,對應(yīng)執(zhí)行Serial_init函數(shù)。
具體格式:
int serial_init(char *dev, int speed, int is_block)
其中dev是設(shè)備文件地址,speed是串口波特率,is_block是設(shè)置在初始化不成功時,是否阻塞等待,直到初始化成功。
初始化函數(shù)通過調(diào)用static int open_dev(char *dev, int is_block)函數(shù)來打開設(shè)備文件,其中dev和is_block參數(shù)和初始化函數(shù)中的意義一致。打開成功,返回設(shè)備文件描述符,否則返回-1.通過調(diào)用static void set_speed(int fd, int speed)來設(shè)置波特率,其中fd表示設(shè)備描述符,speed表示速率,在調(diào)用此函數(shù)時,要停止串口工作。
初始化完成后,就可以進行數(shù)據(jù)的讀寫,讀函數(shù)為:
int serial_read_timeout(int fd,char *str, unsigned int len, unsigned int timeout/*ms*/)
此讀函數(shù)是帶有超時機制的串口讀,接收的數(shù)據(jù)放在str的字符串中,fd表示設(shè)備文件地址,len表示讀取的長度,timeout 表示超時時間,ms級別,函數(shù)返回讀取的長度。
所謂的超時機制,是指程序利用此函數(shù)讀取數(shù)據(jù)時,會啟動一個線程,有數(shù)據(jù)時運行,無數(shù)據(jù)時阻塞,當線程有數(shù)據(jù)時,讀完數(shù)據(jù),程序再繼續(xù),如果超時還沒有讀完,則放棄讀取,程序繼續(xù),一般在設(shè)置的時間內(nèi),程序都能讀完數(shù)據(jù),這樣做是為了防止線程死鎖,無法結(jié)束線程。
串口發(fā)送函數(shù)具體格式為:
int serial_send(int fd,char *str,unsigned int len)
其中fd表示設(shè)備文件地址,發(fā)送數(shù)據(jù)放置在str中,長度為len.發(fā)送成功返回發(fā)送長度,否則返回小于0的值。
通過這樣的三個函數(shù),就可以實現(xiàn)BDM100模塊與主控芯片AT91SAM9260的通信,可以完成相關(guān)的模塊初始化操作和信息的傳輸。
2.2.2 MC8630模塊的連接
本方案所用到EVDO射頻模塊,起初是無法被識別的,因為Linux默認配置中并沒有打開這個選項,屬于自定義電路,故需要手動配置。根據(jù)MC8630模塊的電路圖可以看出,CPU與MC8630通過USB口通訊,因此需要將處理器的USB口配置為3G功能。Linux對3G模塊的驅(qū)動支持主要是將USB轉(zhuǎn)換為串口,應(yīng)用程序就可以像操作串口一樣操作USB。
所以除了打開“USB driver for GSM and CDMA modems”內(nèi)核選項之外,還需打開內(nèi)核選項中USB功能和USB轉(zhuǎn)串口轉(zhuǎn)換支持,3G模塊還會用到第三方的撥號軟件,所以還需打開PPP撥號功能,配置完之后,編譯內(nèi)核。燒錄系統(tǒng)后,重啟進入/dev目錄,若出現(xiàn)USBtty0~USBtty3這四個設(shè)備文件,表明3G模塊的驅(qū)動已被正確加載。具體如下:
圖5 3G模塊驅(qū)動加載
在程序初始化時,利用編寫好的撥號腳本綁定PPP0網(wǎng)卡,這樣程序就可以像操作本地網(wǎng)卡一樣操作3G模塊,使用socket機制進行消息的傳送。具體的撥號腳本如下:
If ['ifconfig|grep ppp0|awk ‘(print($1))'']
Then
echo “the ppp0 has existed!”
else
pppd call evdo &
until['ifconfig|grep ppp0|awk ’(print($1))‘']
do
sleep 1
done
route del default
route add default dev ppp0
fi
在執(zhí)行ifconfig命令后,系統(tǒng)會列出了所有的網(wǎng)卡,一般情況下只有eth0和lo兩個網(wǎng)卡:eth0是常用的RJ45接口的網(wǎng)口,插上普通網(wǎng)線即可上網(wǎng);lo是本地網(wǎng)卡;當使用pppd撥號成功之后就會出現(xiàn)ppp0無線網(wǎng)卡,此時3G模塊已經(jīng)連接上互聯(lián)網(wǎng)。然而在操作系統(tǒng)啟動的時候,一般默認網(wǎng)卡為eth0,故在撥號成功之后,必須修改默認的路由路徑,這樣如果在應(yīng)用程序使用socket編程之時沒有綁定指定網(wǎng)卡,所有網(wǎng)絡(luò)數(shù)據(jù)都會從ppp0網(wǎng)卡傳輸。綁定完ppp0網(wǎng)卡就可以使用linux socket機制進行與后臺服務(wù)器的通信,本方案中采用的UDP方式和后臺服務(wù)器進行通信,UDP協(xié)議的通信不需要像TCP一樣事先建立鏈接,只需要綁定ip地址和端口號即可,但是本方案中為了以后的可擴展性,設(shè)計了socket_connect和socket_send函數(shù),不論是TCP還是UDP,只要調(diào)用這兩個函數(shù)即可,采用同樣的接口,這樣便于使用和擴展功能。具體如下:
int socket_connect(const int sock_fd, const char *ip_str, const unsigned int port_ui)
其中sock_fd是套接字,它是通過函數(shù)int socket_create(const int af, const int type, const int protocol, const int stime, const int rtime, const char *ifname)創(chuàng)建得到。ip_str是ip地址,port_ui是端口號。
int socket_send(const int sock_fd,const char * data, const int len, const int flags)
其中data是要發(fā)送的數(shù)據(jù),len表示長度,flags一般取0即可。
接收函數(shù):
int socket_recv_timeout(int sock_fd, char *buff,unsigned int len, unsigned int timeout/*ms*/)
具體功能用來接收網(wǎng)絡(luò)數(shù)據(jù),直到長度等于len,或者超時(timeout)后返回。
2.2.3服務(wù)器與3G模塊通信協(xié)議
主控芯片AT91SAM9260收到BDM100模塊發(fā)來的消息后,會將消息進行重組,通過3G模塊傳送到后臺進行解析。因為系統(tǒng)的定位終端具有實時性,對于年月日信息的需求不是很強調(diào),所以在初始化北斗時接收了GLL信息,它只含有時分秒的信息,本方案中采用的消息通信協(xié)議規(guī)定如下:
表4 自定義通信協(xié)議
其中起始位和校驗位均用unsigned short表示,校驗采用每兩個字節(jié)異或操作,編譯時,強迫兩個字節(jié)對齊編譯。
3G模塊采用這種格式將消息傳輸?shù)胶笈_服務(wù)器進行處理,這樣有利于保持信息的穩(wěn)定和簡潔性。
3 2G方案設(shè)計與實現(xiàn)
2G方案設(shè)計的監(jiān)護終端采用基于cortex-M3為內(nèi)核的LPC1766作為主控芯片,2G模塊采用支持GSM網(wǎng)絡(luò)的GTM900芯片[4]。該方案采用的2G網(wǎng)絡(luò)技術(shù)成熟穩(wěn)定,速度也能滿足信息傳輸要求,配合健壯的軟件設(shè)計,使得其在具體的應(yīng)用中取得良好的效果。
3.1 硬件設(shè)計
該方案具體的硬件連接如下:
圖6 2G方案框圖
從圖中可以看出BDM100芯片和GTM900芯片分別通過串口1和串口0與主控芯片LPC1766進行連接,其中GTM900與LPC1766的連接只需要將TXD引腳連接到RXD0,RXD連接到TXD0,然后將兩個芯片的GND各自接地即可。而對應(yīng)BDM100和LPC1766的連接則直接根據(jù)圖2所示即可。[!--empirenews.page--]
3.2 軟件設(shè)計
在2G方案的軟件設(shè)計中,由于不采用操作系統(tǒng),直接根據(jù)LPC1766和其他兩個芯片的說明手冊進行裸版程序的設(shè)計。首先是要對BDM100芯片和GTM900芯片進行初始化操作,此處GTM900芯片的初始化操作要在BDM100芯片之前,因為BDM100初始化之后就直接輸出位置信息GLL,而在本方案的程序設(shè)計中,只設(shè)置了一個接收串口數(shù)據(jù)的全局數(shù)組變量RecUartBuf[100],如果先初始化BDM100芯片,則GLL信息會和GTM900初始化信息沖突。另外,在UART接收程序中,因為每次接收的數(shù)據(jù)長度不固定,所以不能設(shè)置為多字節(jié)中斷,在本方案中將程序設(shè)置為一字節(jié)中斷,并設(shè)置定時器中斷,用來判定數(shù)據(jù)是否傳送完畢,在之前的BDM100芯片介紹中,將位置信息GLL的頻率設(shè)置為1次/秒,則在本方案中將定時器中斷設(shè)置為0.5s,這樣就可以有足夠的時間接收并傳遞信息,在定時器中斷函數(shù)中將信息標志變量RecUartFlag設(shè)置為1,表示有數(shù)據(jù)進入,此時利用Uart0Sent函數(shù)將傳遞過來的GLL信息通過2G模塊發(fā)送到后臺服務(wù)器。
在本方案中,因為保證程序健壯性的需要,GLL位置定位消息傳送到后臺服務(wù)器的格式是不經(jīng)過重組的原始信息,對于信息的重組和解析任務(wù)則交予后臺服務(wù)器程序處理。
4 系統(tǒng)測試
監(jiān)護終端的數(shù)據(jù)通過3G或者2G網(wǎng)絡(luò)傳送到服務(wù)器之后,服務(wù)器根據(jù)通訊協(xié)議對其解析。得到數(shù)據(jù)后,服務(wù)器進行如下操作:
1) 校驗數(shù)據(jù)是否有錯,有錯則丟棄,并要求終端重新獲取一次信息并立即傳輸。
2) 根據(jù)數(shù)據(jù)中的值重組還原,得到經(jīng)緯度及當前的時間(格式為:XX時XX分XX秒)。
3) 根據(jù)經(jīng)緯度信息,調(diào)用地圖服務(wù),獲取具體位置。
4.1 3G方案測試
通過串口軟件獲得的北斗定位信息如下:
圖7 北斗信息串口軟件顯示
其中顯示北緯32度02438675分,東經(jīng)118度48951303分,后面的090528等表示UTC時間。為了統(tǒng)一格式,將MM度XX分格式轉(zhuǎn)化為MM.NN分(1度等于60分),故118度48951303分相當于118.81585505度,32度02438675分相當于32.04064458度。而其中UTC時間相當于0時區(qū)的時間,對應(yīng)北京時間為東八區(qū)的時間,所以要加上8小時才是標準的北京時間,查找BDM100軟件接口協(xié)議可得GLL消息顯示的UTC時間格式為XX時XX分XX秒,例如090528,對應(yīng)的UTC時間為9時5分28秒,對應(yīng)的北京時間為17時5分28秒。后臺服務(wù)器程序顯示消息:
圖8 北斗信息3G服務(wù)器端顯示
從圖中可以看到與串口通信軟件顯示消息一致,驗證了系統(tǒng)的可用性和穩(wěn)定性。
4.2 2G方案測試
同樣再次利用串口通訊軟件獲取GLL消息:
圖9北斗信息串口軟件顯示
后臺服務(wù)器程序顯示消息:
圖10 北斗信息2G服務(wù)器端顯示
從圖中可以看出與串口通信軟件顯示消息一致,驗證了2G方案的可行性。
為了驗證定位的準確性,打開地球在線(http://www.earthol.com/),輸入當前的經(jīng)緯度信息,查看定位情況。
圖11 北斗信息定位測試
如圖所示,北斗定位的位置為A12號樓,而筆者所在的位置為圖中藍色標記所在的A10號樓,誤差在30米左右,由于免費版本的goole地圖其官方宣稱誤差在50米以內(nèi),所以本次試驗的誤差在合理范圍內(nèi),表明基于北斗BDM100模塊的定位終端運行成功。
結(jié) 語
北斗衛(wèi)星定位系統(tǒng)作為我國自主研制的全球衛(wèi)星定位系統(tǒng)在滿足軍事用途的同時,也在不斷的加緊民用化進程,本文設(shè)計了兩種方案解決家庭監(jiān)護中位置定位的問題,其中3G方案不僅可以傳輸位置信息,也為以后傳輸各種身體信息,環(huán)境信息提供了接口和可擴展的空間。2G方案的優(yōu)點在于其性能穩(wěn)定,成本較低,對應(yīng)具有單一需求的用戶會是一個很好的選擇。這兩種方案設(shè)計合理,性能穩(wěn)定,對其它工程設(shè)計具有一定參考價值。