張曉曉, 馬其華, 何晨曦, 王悅凡, 韓惠羽
(上海工程技術大學 汽車工程學院,上海 201620)
設計參加復雜賽場環境的全地形賽車的過程中,直接選配市售的車載儀表系統時,由于受車輛配置所限、功能要求的特殊,難以找到合適的、性價比高的產品。全地形車輛的儀表系統要求在極度惡劣環境下正常顯示賽車各重要部件工作狀況與工作數據,以保障賽車的正常工作[1]。另外由于比賽需要在儀表顯示系統中增加車外擴音、行車軌跡記錄以及賽車手心率采集等功能,因此,自主開發接布線簡單、成本較低且工作可靠的儀表顯示系統對于賽車的設計具有重要意義[2]。
儀表顯示系統以Arduino NANO開發板為核心,按照功能要求設計各模塊電路并配以處理程序,實現了顯示可靠、擴展性強、使用便捷的設計目的[3,4]。
根據實際賽車情況,系統顯示系統的主要功能及要求,如表1所示。

表1 儀表系統功能分類
所設計的儀表系統主要由傳感器模塊、控制器模塊、顯示模塊及供電模塊組成。傳感器模塊檢測所需賽車部分工作數據,并發送給控制器模塊??刂破髂K選用Arduino NANO開發板,處理傳感器發回的數據,并發送給顯示模塊;顯示模塊接收單片機傳回的數據,并將其顯示在屏幕上用于提示車手;電源模塊為以各模塊提供持續穩定電能[5]。
控制器模塊選用Arduino開發板作為系統平臺,負責、收集、顯示各模塊數據。如圖1所示,控制各模塊中的傳感器及數據處理,通過外接電池供電,由各個傳感器從車體不同位置采集到相應數據,交由Arduino中已編譯的程序進一步處理,并通過Arduino發送給顯示模塊,最終車體各參數將通過LCD顯示屏輸出顯示[6~10]。

圖1 儀表系統模塊框圖
車速采集模塊中用到的傳感器為霍爾傳感器[11],霍爾傳感器結構為一個半導體器件,有4個引腳,數據傳輸用D0引腳與控制器模塊相連,A0引腳連接至Arduino數字端口的任一空閑引腳,剩余的3個引腳分別連接至Arduino的5 V和GND端,D0引腳與Arduino D6引腳相連。其中,D0端口默認輸出高電平,當磁鐵的特定一面(磁鐵的另一面無效)靠近霍爾傳感器時,D0會輸出低電平。將磁鐵固定在半軸上,磁鐵特定一面與霍爾傳感器對應,其中,半軸轉動至磁鐵與霍爾傳感器之間距離最短時,應保證霍爾傳感器可以正常工作。Arduino測的單位時間內霍爾傳感器傳出低電平的次數,即為半軸轉速n,rad/s;計算車輛行駛速度V=n×r×π×3.6,km/h。
由于Arduino引腳個數限制,在系統設計時,選用2塊Arduino作為系統的控制模塊,Arduino 1和Arduino 2,由Arduino1控制發動機轉速模塊、檔位顯示模塊、車輛速度模塊、加速度模塊和CVT皮帶/輪胎溫度模塊;由Arduino1控制心率模塊、實時對講模塊、軌跡記錄模塊和賽時顯示模塊。
車速顯示模塊采用64×256點陣圖形顯示字符的液晶顯示器,反應速度僅10 μs左右,能夠縮短儀表系統的反應時間,提高儀表系統的精度。將顯示屏放置在方向盤上,根據賽車手眼睛到方向盤的距離和顯示屏尺寸設置車速顯示模塊字符的大小為34×58,先在Arduino1中寫入"Serial.print('Speed:')",即在顯示屏中顯示字符"Speed:",然后將車速顯示排布在字符后面,車速的刷新頻率為0.01 s。
將得到的車輛速度進行擋位劃分。車速為0~10 km/h為1擋,10~30 km/h為2擋,30~40 km/h為3擋,40~60 km/h為4擋,60~80 km/h為5擋,80 km/h以上為6擋。將相應程序寫入Arduino1,Arduino1采集到發動機轉速后,通過單位換算并分析轉速所在范圍,然后將相對應的擋位發送到顯示模塊,并顯示在顯示屏上,用以提示賽車手,為合理駕駛提供參考。
此模塊中使用到導線、燈條WS2812和4位數碼管3416BS,將導線纏繞到火花塞點火線上,通過采集發動機點火脈沖頻率,發動機點火脈沖頻率與曲軸轉速和發動機缸數相關,即n=30τf/I。其中,n為發動機轉速,r/min;τ為沖程數;f為點火脈沖頻率,Hz;I為發動機缸數(賽車使用單缸發動機,I為1)。
將此模型寫入單片機Arduino 1,當采集到的發動機點火脈沖頻率輸入Arduino 1后,Arduino 1根據寫入的公式進行計算,計算結束后,Arduino 1將計算得到的數據分別發送并顯示在顯示模塊和4位數碼管3416BS上,與此同時,Arduino 1將根據發動機轉速的變化控制燈條WS2812的亮度及個數的變化,賽車手在競賽過程中更為直觀地可以觀察到發動機轉速的變化。
當發動機的轉速發生異常時,如發動機轉速超過某設定值后,Arduino 1處理后將向顯示屏發送報警信號并顯示在顯示屏上,用以提醒賽車手。設定值為5 000 r/min。
采用九軸姿態MPU9150傳感器,其具有體積小、重量輕、靈敏度高等特點,該傳感器集成了PNI三軸磁傳感器、三軸加速度傳感器、三軸陀螺儀和傳感器融合算法,通過I2C接口輸出測量數據??紤]到系統的功能要求,只選用了九軸姿態傳感器中三軸加速度傳感器部分[12]。
作為三軸加速度傳感器的5個功能引腳,VCC和GND為供電引腳,INT引腳輸出低電平中斷請求信號,SCL引腳輸出I2C串行時鐘,SDA引腳輸出I2C串行數據,SCL引腳數據線與SDA端口數據線構成I2C總線的串行總線。信息傳輸中,將Arduino1設置為主控器,MPU9150設置為發送器。Arduino1向MPU9150發出一個信號后,等待MPU9150發出一個應答信號,Arduino1接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,則判斷MPU9150出現故障。將模塊放置在中控板上,即間接放置在車體上,隨著車體的運動并檢測出車體的位置變化,繼而測出車體的空間加速度,能夠相對全面地反映出車體的運動性質。
Arduino1將通過MPU9150采集到的加速度數據分析并發送至顯示模塊,先在Arduino1中寫入“Serial.print(‘X:’)”、“Serial.print(‘Y:’)”和“Serial.print(‘Z:’)”,即在顯示屏中分別顯示字符“X:”、“Y:”和“Z:”,在加速度數據輸出時,將各數值的顯示位置設置在上述字符后,加速度的刷新頻率為0.01 s。
為保證賽車運行時皮帶工作的可靠性,采用MLX90614紅外測溫傳感器對溫度進行實時監測。傳感器工作范圍為-40~+125 ℃,作為非接觸式傳感器其測量范圍為-70~+380 ℃。正常工作時,其精度可達0.5 ℃[13]。MLX90614紅外測溫傳感器共有4個引腳,其中VCC和GND兩個引腳是為其供電,SCL引腳輸出時鐘信號,SDA引腳通過PWM波的形式輸出物體溫度。將該傳感器固定在CVT殼體內部并保持在距離皮帶2 cm的位置,當傳感器工作時,其內部的微處理器通過相應的寫命令和讀數據指令,從MLX90614的RAM中地址為07H的存儲單元里讀出16位溫度數據,由高8位(DataH)和第8位(DataL)組成,讀出的數據(DataH:DataL)(:表示將高8位和低8位接合在一起組成16位數據),換算成溫度T(單位為℃),Arduino1即可得到皮帶溫度,T=(DataH:DataL)×0.02-273.15。 Arduino1將通過MLX90614采集到的加速度數據分析并發送至顯示模塊,先在Arduino1中寫入“Serial.print(‘Temp:’)”,即在顯示屏中顯示字符“Temp:”,在溫度數據輸出時,將顯示位置設置在上述字符后,賽車手即可在顯示屏上看到溫度數據。其中, 溫度數據的刷新頻率為0.01 s。
為方便車手操作,采用體積小、靈敏度高、采集數據方式多樣且不會限制被測人的活動的脈搏傳感器,該傳感器為一種用于脈搏心率測量的光電反射式模擬傳感器,僅需將其佩戴在待測對象耳垂、手指等皮膚表面。其工作原理是通過光電容積法測量心率,即利用人體組織在血管搏動時造成透光率不同來進行脈搏測量。通過導線連接,將采集到的模擬信號傳輸給Arduino 2單片機,用于轉換為數字信號,再通過Arduino 2數據處理分析等到心率數值。
PULSE SENSOR共有3個引腳,其中VCC和GND為PULSE SENSOR供電,S引腳為信號輸出端,將S引腳與Arduino 2 28號引腳相連,將其佩戴在手指或耳垂處,S引腳即可將采集到的數據傳輸給Arduino 2。
Arduino 2將通過PULSE SENSOR采集到的心率數據分析并發送至顯示模塊,先在Arduino2中寫入“Serial.print(‘HR:’)”,即在顯示屏中分別顯示字符“HR:”,在心率數據輸出時,將數據的顯示位置設置在上述字符后,心率刷新頻率為0.1 s。
采用CJMCU-9812擴音模塊實現實時對講功能。模塊具有封裝尺寸小、重量輕和功耗低等特點,可將其與夾子相連接,使用時放置在使用者衣領上,可以減少外界因素干擾又較為輕便。由于模塊已經封裝,使用相對方便,只有“VCC”,“GND”和信號輸出“OUT”三個引腳,其中,“VCC”和“GND”引腳與Arduino 2相對應的引腳相連,由Arduino 2為其持續供電即可正常工作。
為減少儀表系統體積,所需數據將從加速度模塊導入。將Arduino 1中采集的MPU9150數據通過串口通信的方法,發送至Arduino 2中,在串口通信過程中,Arduino 1中的TX引腳與Arduino 2中RX引腳相連,Arduino 1中的RX引腳與Arduino 2中TX引腳相連,將數據處理成字符形式后,發送至Arduino 2中, Arduino 2即可采集到軌跡記錄模塊需要的數據[14,15]。
將Arduino 2通過調用u8glib庫函數的方法在顯示屏上畫出所需軌跡范圍邊界,此處為64×64的方框,將采集的數據通過Arduino 2處理后發送至顯示屏,并將這些點存儲并保留在顯示屏上,即可匯聚出賽車運行的軌跡圖像,方便賽車手觀察。
采用DS3234時鐘驅動芯片作為比賽顯示模塊。模塊采取SPITM總線的實時時鐘(RTC)并且集成了電池備份的256字節SRAM。DS3234共有7個引腳,實際操作中只用到6個引腳,除VCC和GND兩個引腳為DS3234供電外,另外MOSI、MISO、SS及CLK四個引腳用來數據傳輸,其中,MOSI端口為主機輸入從機輸出,MISO端口為主機輸出從機輸入,此處,將Arduino 2設置為主機,DS3234設置為從機。
Arduino 2將通過DS3234采集到的心率數據分析并發送至顯示模塊,先在Arduino 2中寫入“Serial.print(‘TIME:’)”,即在顯示屏中分別顯示字符“TIME:”,在時間數據輸出時,將數據的顯示位置設置在上述字符后,時間數據的刷新頻率為0.1s。
供電模塊采用5 V電源持續為Arduino供電,再由Arduino為傳感器模塊和顯示模塊持續供電,該電源體積小,質量輕,拆卸方便。為減小系統體積并且增加電路穩定性,模塊之間選用PCB連接。運用軟件Altium Designer Release進行PCB板的設計[16],在設計PCB時,根據PCB線寬與允許最大電流關系,設計兩種不同線寬,主路通過的電流較大,線寬設計為0.30 mm、厚度50 m,允許通過最大電流1.10 A;支路通過的電流較小,線寬設計為0.15 mm、厚度50 m,允許通過最大電流0.50 A,原理圖如圖2所示。

圖2 PCB板原理
系統工作環境惡劣,經常會遇到浸水的情況,因此,將儀表系統中控板和各個傳感器用盒子密封,各模塊之間通過防水接頭連接,使得不同模塊與Arduino之間的連接可隨意拆卸,達到可根據不同車型及功能需要隨意選擇不同模塊與Arduino進行組合的效果。
將各模塊測試數據與儀器測得實際數據進行比較,各模塊更新頻率滿足使用要求,可達到最少3次/s的更新頻率。經偏差校準,儀表系統各模塊工作偏差范圍為±1 %。經實車測試,車速模塊、發動機轉速模塊、加速度模塊和CVT皮帶溫度模塊基礎模塊均可正常工作;心率采集模塊、軌跡記錄模塊和賽時顯示模塊等擴展模塊均可正常工作。測試過程中,儀表系統反應靈敏,當發動機轉速模塊、溫度模塊及心率模塊所測數值高于設定值時,系統會在儀表顯示模塊界面顯示報警信號,達到報警的目的。如圖3所示。

圖3 測試效果
通過在不同路況下全地形賽車上的測試,系統顯示功能可靠,監測響應及時,滿足賽車各工況需要與測試要求。該儀表系統電路設計簡單、程序編制簡易,既可在類似場合與環境使用,又可為初學者學習相關控制原理提供實驗平臺。