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