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