席雷鵬,姚凱學,何 勇,楊黎娜
(貴州大學 計算機科學與技術學院,貴州 貴陽 550025)
汽車是人類生活中重要的交通工具,國內的汽車保有量逐年增加,道路基礎設施的建設與汽車的增長量失調,這使得國內的道路交通擁擠和交通事故頻發的狀況日益凸顯。同時,目前國內的車險繳納以年為單位,忽視了汽車的使用情況,風險與費率的失衡積弊已久,對大量汽車的有效管理也變得越來越重要。
隨著物聯網技術的成熟,物聯網在各行各業得到了應用。智能網聯汽車是互聯網、汽車以及交通的融合,通過在車上搭載先進的傳感器,使用現代網絡技術、后臺系統,從而實現車與人,以及其他物理實體之間的信息交互。通過車內攝像頭來獲取車輛的行駛狀態信息,傳輸到后臺服務器中,結合圖像識別技術來分析駕駛員的駕駛情況,從而對車輛的使用情況有一個很好的把控。但是采集和處理視頻圖像需要很多的硬件資源,對通信速率有一定的要求,同時駕駛員的隱私也有泄露的風險。對此,文中提出了一款基于STM32的車輛行駛狀態信息采集系統,能夠實時采集車輛行駛中的三軸加速度、三軸角速度等車輛狀態信息和車輛定位信息,為后續研究駕駛員的駕駛行為,實現對車輛的有效管理打下基礎。
車輛行駛狀態信息采集系統通過外接三軸加速度陀螺儀傳感器實現汽車行駛中的三軸加速度和三軸角速度的采集,利用STM32的DMA自動傳輸機制實現定位信息的采集,通過4G移動通信網絡把采集到的數據傳輸到后臺數據處理中心。系統主要由七個模塊構成,分別是數據處理模塊、加速度和角速度采集模塊、定位信息采集模塊、通信模塊、數據存儲模塊、電源模塊和上位機。其中,數據處理模塊是整個系統的控制中心,電源模塊從車載點煙口取電,為系統的運行提供穩定可靠的電源,數據采集模塊負責各類信息的采集,數據存儲模塊在數據未能成功發送到上位機時對數據進行存儲,通信模塊用于下位機與上位機之間的交互,上位機模塊用于數據的存儲和可視化。系統的總體設計框圖如圖1所示。

圖1 系統總體框圖
系統在工作時,微控制單元(MCU)控制數據采集模塊采集三軸加速度、三軸角速度和定位數據,同時將采集到的數據按照通信協議的格式進行數據幀的封裝,通過無線通信將封裝好的數據發送給上位機。車輛在行駛中會出現無線通信信號弱的情況,設計數據存儲模塊,以便在無線通信信號弱的情況下進行數據的暫時存儲。由于通信模塊需要12V的供電電壓,從車載點煙口獲得12 V電壓進行穩壓處理后向系統供電,同時采用降壓模塊將12 V電壓轉換為5 V和3.3 V,為系統的其他部分供電。
車輛行駛狀態信息采集系統主要分為數據處理模塊、加速度和角速度采集模塊、定位信息采集模塊、通信模塊和數據存儲模塊,電源模塊為系統的各個模塊供電。
數據處理模塊使用STM32F103ZET6作為微控制單元,是整個系統的控制中心,實現數據采集、數據上傳和暫時存儲等控制功能。使用STM32F03ZET6的DMA(direct memory access)通過USART2循環采集定位數據,使用IIC1外設采集三軸加速度陀螺儀數據,將采集到的數據按照通信協議格式進行數據幀封裝,通過USART1發送給通信模塊。數據因無線通信信號弱而未能成功發送時,STM32F103ZET6通過SDIO將數據發送給數據存儲模塊進行暫時存儲。同時,STM32F103ZET6的PA0引腳設計了一個可以使系統停止工作的按鍵KEY1,PA0引腳外接了下拉電阻,按鍵的一端連接PA0引腳,另外一端連接3.3 V高電平,當按鍵被按下時,PA0引腳由低電平轉變為高電平,通過設置該引腳的硬件中斷檢測按鍵被按下。
系統使用MPU6050作為采集加速度、角速度的傳感器,它能夠檢測三軸加速度、三軸角速度運動數據以及該芯片內部溫度數據,可以使用IIC與其他芯片進行通信,IIC通信的時鐘頻率最高為400 kHz,測量加速度的最高分辨率為16 384 LSB/g,角速度最高分辨率為131 LSB/( o/s)。加速度和角速度采集模塊原理圖如圖2所示。

圖2 加速度角速度采集模塊原理圖
MPU6050芯片采用了扁平的QFN-24封裝,需要使用3.3 V電壓供電。STM32使用PB6、PB7引腳與MPU6050進行IIC通信,所以MPU6050的SCL、SDA引腳外接4.7K的上拉電阻。MPU6050的AD0引腳用于設定IIC通信地址,當AD0引腳接地時,MPU6050的IIC通信地址為0x68,接VCC時,可設置MPU6050的IIC通信地址為0x69。當系統剛剛上電時,需要向MPU6050的0x6B地址的寄存器寫入0x00解除休眠狀態,由于目前汽車的最大加速度為6.9 m/s,設置MPU6050的加速度量程范圍為±2g
,則測量到的x
軸加速度計算公式為:
a
表示x
軸的加速度,acel是從MPU6050中讀出的原始ADC值,16 384是在加速度量程范圍設置為±2g
時的加速度計分辨率,g
表示重力加速度。設置MPU6050的角速度量程范圍為±250/s,則測量得到的x
軸角速度的計算公式為:
其中,gyro是從MPU6050中讀出的原始ADC值,131.072是在角速度的量程設為±250/s時的陀螺儀分辨率。
系統使用ATGM332D-5N模塊進行定位信息的采集,ATGM332D-5N支持北斗和GPS雙模定位,可使用3.3 V~5 V電壓供電,導航信息更新率可達10 Hz,定位精度為2.5 m,采用串口與STM32核心控制器通信。
在該設計中,使用STM32的串口2與ATGM332D-5N進行通信,由于ATGM332D-5N定位模塊的定位速度以及串口通信速度相對于STM32的運算速度會慢很多,如果STM32直接通過串口讀取定位數據,就不能夠完成系統的其他任務,故通過STM32的DMA1循環采集定位數據,在STM32的內存中開辟512字節大小的緩沖區存儲定位數據,設置DMA傳輸一半和全部傳輸完成中斷,在中斷發生時取走相應的一半數據并且清空中斷,這樣STM32就能處理系統的其他任務,同時為了避免DMA傳輸發生數據覆蓋問題,在上一次定位數據還沒有處理完成時,直接清空DMA傳輸完成中斷。ATGM332D-5N采集到的是NMEA-0183 4.0協議格式的數據,系統使用NEMA解碼庫來進行原始定位數據的解碼,得到經緯度、速度、GPS時間、定位精度等定位信息。
通信模塊采用4G無線通信的方式來保證下位機與上位機之間的通信,同時也預留TTL串口通信的方式。4G通信模塊采用了WH-LTE-7S4 V2,可以通過串口AT指令建立與上位機的TCP遠程連接,同時還可以通過AT指令進行網絡透傳、HTTPD、UDC三種工作模式的配置。WH-LTE-7S4 V2有電源、復位重啟、工作狀態指示、UART、SIM和射頻接口,該設計中使用到的模塊引腳功能介紹如表1所示。

表1 WH-LTE-7S4 V2引腳功能描述
在該系統中使用12 V電壓為WH-LTE-7S4 V2模塊供電,在供電引腳接口前端增加220 uF的電解電容,以增加模塊工作的穩定性。使用STM32的PC0連接該模塊的WORK,用于檢測模塊是否工作正常;STM32的PC1連接模塊的RESET引腳,用于模塊的復位重啟;STM32的PC2連接模塊的RELOAD,用于模塊恢復出廠設置;模塊的UTXD1和URXD1連接STM32的串口1,用于AT指令進行TCP遠程連接。同時在天線接口和SIM接口增加ESD保護,避免外部接口電壓過大而造成模塊損壞,4G通信模塊的硬件電路結構框圖如圖3所示。

圖3 4G通信模塊硬件電路結構框圖
在移動通信信號弱時會導致數據不能夠發送到上位機,為了避免數據丟失,設計數據存儲模塊用于數據的暫時存儲,當STM32空閑且無線通信信號良好時再進行數據的發送。系統采用SD卡來實現數據的暫時存儲,STM32與SD卡之間采用SDIO(secure digital input and output)的方式進行通信,其最高支持32 GB容量的SD存儲卡。SD卡有9個通信接口,其中有3個電源接口、1個時鐘線接口、4個數據線接口和1個命令線接口,SD卡中有8個寄存器表示SD卡中的信息,這些寄存器的功能表示如表2所示。

表2 SD卡寄存器功能表示
在該系統設計中,使用3.3 V電壓為數據存儲模塊供電,在每個數據線和命令線接口添加10K的上拉電阻,增加模塊工作的穩定性。數據存儲模塊的DAT0、DAT1、DAT2、DAT3引腳分別與核心處理器的PC8、PC9、PC10、PC11相連接,用于進行數據的讀寫,在SD卡處于忙狀態時,會把D0引腳拉低表示正在被使用。數據存儲模塊的CLK引腳與核心處理器的PC12引腳相連接,由核心處理器產生時序信號,來保證通信的正常進行。數據存儲模塊的CMD引腳與核心處理器的PD2引腳相連接,核心處理器通過該引腳向數據存儲模塊發送命令,同時也可以接收來自數據存儲模塊的應答信號。
電源模塊為系統的工作提供穩定可靠的電能。系統在車載點煙口取得12 V電壓的電能,經過穩壓處理后向通信模塊供電,同時使用AMS1117-5.0作為降壓穩壓器,將12 V電能轉換為5 V,為數據處理模塊供電,使用AMS1117-3.3將5 V電壓降為3.3 V,為數據采集和數據存儲部分的模塊供電,在各級電壓處增加電容確保供電的穩定性。使用CR1220作為STM32F103ZET6的VBAT引腳的備用電源,當系統主電源有效時,RTC時鐘外設由主電源供電,在主電源掉電后,由VBAT引腳向RTC外設供電,確保時鐘數據不會丟失。
系統軟件使用C語言編寫,移植FatFS文件管理系統至下位機,從而實現對SD卡中數據的有組織管理。系統軟件設計的工作流程是在系統上電后進行硬件初始化,之后進行數據的采集、發送和存儲。
FatFS文件管理系統是基于小型嵌入式設備開發的,具有輕量化的特點,其具體實現與底層的I/O(input/output)介質的讀寫實現相分離,通過為其編寫I/O讀寫的驅動程序,實現外部存儲介質存儲空間的有效管理。在該系統中,使用SD卡進行數據因4G通信模塊問題而導致的發送失敗時的暫時存儲,依據SDIO通信的方式分別編寫獲取SD存儲器狀態、初始化存儲器、寫入和讀取扇區的芯片驅動函數。系統上電后,檢測SD卡是否有文件管理系統,若沒有則進行格式化操作和文件管理系統的創建,在格式化操作和文件管理系統創建成功后進行一次讀寫測試驗證SD存儲模塊正常。系統把車輛行駛狀態數據存儲在一個“1.txt”的文本文件中,初次使用沒有該文件則進行文件的創建。當需要向存儲模塊中寫入數據時,在文件末尾進行數據追加并進行換行操作,確保一行存儲一條數據,在數據取出時先取出前面部分的數據,在確保從SD卡中取出的數據被正常發送出去后,從SD卡中的該文件中刪除該條數據。
STM32核心處理器使用串口2與定位信息采集模塊進行通信,在進行STM32的串口2初始化時,其波特率的配置要與定位信息采集模塊的串口通信波特率保持一致以確保通信的正常進行。定位信息采集模塊在接收到一次衛星定位信息后,會主動將定位數據發送到STM32的串口2。為了避免STM32等待定位數據而產生時間浪費,系統使用了STM32的DMA自動傳輸機制來配合定位信息的采集,串口2在接收到數據后會觸發DMA1的通道6,從而在不需要核心處理器參與的情況下完成數據的接收,在數據接收完成后通過中斷的方式提醒STM32核心處理器,STM32在響應了定位數據采集中斷后設置標志位,在主程序中對定位數據進行打包處理。
系統在上電后,STM32首先初始化GPIO口、串口、DMA、硬件IIC1、SDIO、RTC實時時鐘中斷等。在STM32自身硬件外設初始化完成后,系統通過串口1對定位信息采集模塊進行初始化操作。通過STM32的IIC1外設對MPU6050傳感器進行初始化操作,對MPU6050的初始化操作包括解除休眠狀態、設置陀螺儀采樣率和設置加速度計采樣率。通過串口1對4G通信模塊進行初始化操作,采用AT指令設置上位機的IP地址,建立與上位機的遠程連接,將4G通信模塊設置為網絡透傳模式。系統在數據采集模塊初始化完成后再次檢測數據能否正常采集,在檢測失敗時進行系統報錯。系統成功初始化后,每隔100 ms會產生一次中斷,系統會采集數據并且通過4G通信模塊向上位機發送數據,當數據未能成功發送給上位機時,系統會把數據暫時存儲在存儲模塊之中。當KEY1按鍵被按下時,系統停止工作。系統數據采集流程如圖4所示。

圖4 系統數據采集流程
在系統空閑且存儲模塊中有存儲的數據時,系統會從存儲模塊中取出一條數據通過4G通信模塊向上位機發送,在該條數據發送成功后從存儲模塊中刪除該條數據。存儲模塊中的數據上傳流程如圖5所示。

圖5 存儲模塊數據上傳流程
通信協議用于保證下位機向上位機傳輸數據的正確性,數據傳輸采用串行的方式進行傳輸,數據字節的發送采用大端法。
該系統采集的數據有汽車行駛中的三軸加速度數據、三軸角速度數據以及定位數據,同時,需要加入時間信息來記錄數據的采集時間。其中,定位數據包含經度、緯度、海拔高度以及表示定位精度的信息。為了對不同的設備以及不同的行車記錄和不同數據進行區分,避免因網絡中不同數據幀到達上位機的順序不同而造成數據的混亂,為每臺設備分配設備編號,對每次行車記錄和不同數據設置相應的編號標識。
從整體上看,系統的數據幀由起始標識、數據編號標識、數據長度標識、數據、CRC循環檢驗碼和結束標識六部分組成。起始標識和結束標識用于識別每一個數據幀,設備編號和數據ID組成了數據編號標識,數據長度對傳輸數據的長度進行了標識,在進行數據解析時配合起始和結束標識進行數據幀識別的驗證,循環冗余檢驗碼用于驗證數據的正確性,確保數據在傳輸的過程中沒有發生錯誤。通信協議中的數據幀格式如表3所示。

表3 通信協議數據幀表示
STA固定為EAH,表示一幀的開始;DEVICEID是設備編號,占用兩個字節,用于區分每個下位機;DATAID用于標識該條數據信息,占用四個字節,其中20~31位表示第幾次行車記錄,每次下位機上電啟動會生成一條新的行車記錄,在溢出后復位為1,0~19位是該條數據采集時的編號;LEN表示數據長度,大小為一字節;DATA為數據,其長度由LEN表示,單位為字節,其中01H表示后面的四字節數據為時間戳,02H表示后面的數據為三軸加速度和三軸角速度數據,占用24個字節,03H表示后面的數據為定位數據,占用48個字節;CRC是循環冗余檢驗碼,由DEVICEID設備編號到DATA數據域生成,大小為兩個字節;END用于表示一幀數據的結束,其值固定為E5。
該系統測試通過串口測試下位機是否能正常采集數據,系統完成硬件初始化后,將采集到的數據通過串口發送給上位機,使用串口調試助手接收數據,系統采集數據測試結果如圖6所示。系統設置采集頻率為每秒10次,經過測試,系統能夠穩定地采集數據。
設計實現了車輛行駛狀態信息采集系統,以STM32F103ZET6為核心處理器,采集車輛行駛中的三軸加速度、三軸角速度以及定位數據,通過自定義的通信協議將數據傳輸到上位機,同時設計數據存儲模塊來進行通信信號不好時的數據暫時存儲,在可以正常發送數據時再進行數據的上傳,確保不會發生通信信號弱而導致的數據丟失。系統通過STM32自帶的RTC外設來進行計時,為采集到的每條數據進行時間標識,從而實現對車輛行駛狀態信息的有效管理。電源模塊的設計保證了系統斷電后時鐘的正常工作,同時,系統每隔一周利用定位數據中的衛星時間對STM32的RTC系統定時器進行一次時間矯正以確保系統時間的正確性。系統能夠實現汽車行駛狀態信息的穩定采集,操作方便,成本低,具有很好的使用價值。

圖6 數據采集測試結果