蘇蓓蓓,杜 亮,錢 穎
(無錫科技職業學院物聯網技術學院,江蘇 無錫 214028)
傾角檢測類傳感器是一種用于測量物體在水平面與初始狀態下所成傾斜角度的測量工具,因其結構簡單,可靠性高,被廣泛應用于橋梁檢測、農用機械、航空航天、機械工程等領域[1-2]。在系統工程中,傾角類傳感器多用于水平測量,從工作原理上可以分為“氣體擺”式、“固體擺”式以及“液體擺”式3種傾角傳感器[3]。STM32系列單片機由于其低功耗,性能可靠等特點具有廣泛的社會應用前景和推廣價值,文獻[4]為了能夠精確估算鋰電池儲電狀態,設計了一種基于STM32F103RCT6的電池管理系統(Battery Management System,BMS),測試結果表明設計的估算系統具有良好的估算能力。李彩琦等[5]為設計多圈轉角智能傳感器,利用STM32F 103C8T6微控制器對應的電路作為數據處理模塊,設計的該傳感器精度高。目前常用的卡爾曼濾波算法[6]、互補濾波[7]、小波變換法[8-9]等方法對慣性測量器件的輸出進行姿態角解算。文獻[10]針對單一傳感器在汽車電子駐車制動系統傾角測量中存在誤差和噪聲干擾等問題,采用卡爾曼濾波法對兩種信號進行融合并濾除干擾,設計了一種MEMS器件的汽車傾角傳感器。實驗結果表明,設計方案的測量誤差低于0.5°,該傾角傳感器具有精度高、體積小和抗干擾等優點。王中立等[11]針對目前足式機器人腿部傾角傳感器測量時易受到溫度、噪聲干擾等不足,利用卡爾曼濾波對傾角傳感器的輸出信號進行處理,然后采用徑向基函數(Radial Basis Function,RBF)神經網絡模型對濾波信號進行溫度補償,仿真結果表明提出的算法對傾角傳感器信號的噪聲能夠很好地濾除,測量誤差控制在0.8%以下。文獻[12]對傳感器測量信號建立雙積分模型,利用離散卡爾曼濾波方法對測量信號進行濾波,通過仿真結果表明該方法能夠有效濾除測量中的噪聲信號,可提高系統控制精度和抗干擾能力。
本文將數顯儀表和傾角傳感器相結合,設計了一種一體式傾角數顯儀。將輸出電壓變化值進行模擬/數字(A/D)轉換,得到傾斜角度值。基于卡爾曼濾波算法對輸出數據量進行濾波處理,極大提高了測量精度。與傳統的分立式傾角數顯儀相比,該一體式傾角數顯儀具有占用空間較小,操作簡單和工作效率高等優點。
設計的一體式傾角數顯儀的系統結構見圖1。

圖1 系統結構圖
開機后,鋰電池負責給整個系統供電,檢測部分的核心是加速度計,角度發生偏轉時,豎直方向的加速度分量隨之改變,單片機采集到變化的原始值后,進行運算得出角度值,在顯示電路顯示,同時數據通過通信電路,由串口發送出去,可接入電腦上位機,或者與其他串口設備如觸摸屏、聯網寶通信相連接。除此之外,該設計還可通過按鍵實現數據鎖存、相對零點/絕對零點切換等內容。
硬件電路部分采用模塊式設計,其整體結構見圖2,主要包括開關機電路、鋰電池及充放電管理電路、單片機主控電路、傳感器電路、通信電路和顯示電路。

圖2 硬件電路結構圖
核心部分是單片機主控電路,負責維持整個系統的運行,單片機選用STM32F103RCT6,該芯片是一款基于ARMCortex-M內核STM32系列的32位微控制器,內置256 KB的FLASH,功能強大。單片機外接8 MHz晶振,經倍頻后以72 MHz頻率高速運行。
鋰電池的充放電管理電路見圖3。

圖3 鋰電池的充放電管理電路圖
為了便于充電,采用安卓手機通用的USB Type-C接口,可直接用手機充電器充電,電池采用543450-3.7型鋰電池。MCP73831T為鋰電池充電管理芯片[4],VUSB為電源的輸入端,VBAT-IN為鋰電池的輸出端。當電源輸入端有電源接入,VUSB帶電5.0 V,VUSB經隔離電容接MCP73831T的4腳,此時1腳輸出低電平,D2點亮,D2用作充電指示燈,一般用紅色發光二極管(Light-Emitting Diode,LED)燈。電池充滿電時,VBAT-IN電壓為4.2V,芯片3引腳檢測到后,判定充電過程完成,控制1引腳輸出高電平,D2熄滅,D3點亮,表示充電結束,D3一般用綠色LED燈。電阻R7和R9對鋰電池實現分壓,對單片機的引腳起限壓保護作用。單片機通過采集PA0引腳電壓的變化可實現對鋰電池電量的動態監測。如監測到電池電壓值低于設定的閾值時,通過控制開關機電路中的PA5引腳進行斷電操作,確保不會因為鋰電池過放而導致損壞。
開關機電路見圖4。

圖4 開關機電路圖
鋰電池輸出端VBAT_IN接入開機電路部分,Q2為P型金屬-氧化物半導體場效應晶體管(Metal-Oxide-Semiconductor Field-Effect Transistor,MOSFET,簡稱MOS管),實現電子開關功能,VBAT_OUT為整個系統電源的輸入端。開機時,長按按鍵S1,使得MOS管Q2導通,VBAT_OUT將為系統提供電源,單片機帶電后,PA5引腳輸出高電平使Q4工作,Q2維持在導通狀態,系統持續穩定工作。關機時,長按按鍵S1,Q3導通,單片機檢測到PA4引腳為低電平狀態,控制PA5引腳輸出低電平,Q4處于截止狀態,在按下松手之前,由于Q3右側二極管導通,系統一直工作,松手時關閉Q2,實現斷電關機。
傳感器電路采用ADI的ADXL327B加速度計芯片作為傾角傳感器檢測芯片,該芯片測量范圍在±2g之間,三軸檢測,LFCSP封裝,功耗低至350μA。當芯片所處位置發生變化時,芯片三軸加速度計中檢測到的加速度分量發生變化,對應引腳的輸出電壓發生變化,單片機采集到電壓變化,經過換算得出偏轉角度值。
除此之外,硬件電路中還有調壓電路,負責將供電電壓VBAT-OUT調整到VCCD3.3 V,輸出3.3 V,給額定電壓為3.3 V的器件供電。通信電路的核心芯片是CH340G,2引腳TXD端接PA10,3引腳RXD端接PA9引腳,實現串口通信。顯示電路核心部件是GG1N4835型薄膜晶體管 (Thin Film Transistor,TFT)彩屏,通過單片機的12個輸入/輸出(I/O)引腳驅動。這些部分屬于常規電路設計,篇幅所限,不做詳述。
SL-N系列電子天平:上海民橋精密科學儀器有限公司;DGX-4243BC-1型電熱恒溫鼓風干燥箱:上海?,攲嶒炘O備有限公司;高速萬能粉碎機:天津市泰斯特儀器有限公司;SM-5L型新麥打蛋器:新麥機械(無錫)有限公司;SM-603S型新麥電烤爐:新麥機械(無錫)有限公司。
原理圖部分完成后,設計PCB圖,根據外殼形狀要求,印制電路板(Printed Circuit Board,PCB)的尺寸為710 mm×410 mm,元器件主要集中在正面,背面放置TFT屏。尺寸所限,PCB圖較密集,布線時TFT的總線線寬設為0.4 mm以減低總線干擾;鋰電池充電部分做整體敷銅散熱處理;電源線做加寬處理,保證供電電壓穩定、各器件穩定運行。
主控芯片采用STM32F103RCT6,程序開發環境采用KeiluVision5,采用模塊化程序設計,主程序流程見圖5。

圖5 主程序流程圖
啟動上電后,先將各模塊初始化,數顯儀進入開機動畫,動畫內容為制造廠商的logo圖標,主控芯片讀取傳感器數據,將數據進行數字/模擬(D/A)轉換,再將數字量數據進行卡爾曼濾波處理,處理后的數據送TFT屏進行顯示。考慮到用戶需求,如果需要將數據發送至電腦上位機(或者其他設備),通過串口進行數據發送。為了對串口數據發送和接收進行按序排列,確保數據的完整性,程序中引入了“先入先出隊列”(First Input First Output,FIFO)功能,這樣每一組角度數據都能完整傳輸。角度數據檢測和顯示過程中,如果按下“鎖存”“相對/絕對零點切換”按鍵,單片機執行相應的操作。
流程圖完成后,根據流程圖寫程序,為便于移植和提高效率,采用庫函數方式編程,除系統提供的子函數外,還包括“main.c”“gui.c”“lcd.c”“fifo.c”“funcitonality.c”“key.c”“usart.c”等函數模塊。
4.2.1 主函數“main.c”
“main.c”中主要包括看門狗初始化程序,各引腳初始化程序,合理設置時鐘和中斷優先級等,“void CmdResponse(enum Command Cmd)”子函數接收其他設備上(電腦上位機或功能按鍵)通過串口向傳感器發送的指令,傳感器做出對應的反饋,例如其他設備向傳感器發送查詢指令,傳感器返回角度值,發送鎖存指令,傳感器進行數據鎖存操作等。在“main()”函數中,設置每10 ms對傳感器芯片進行一次檢測。
4.2.2 TFT彩屏的驅動子函數“gui.c”和“lcd.c”
4.2.3 串口通信保障子函數“fifo.c”
“fifo.c”是非常重要的一個程序模塊,在工業產品開發中涉及串口通信方面時,必須引入FIFO功能,即“先入先出隊列”。本設計的串口通信中,有角度問詢指令、角度回復指令,相對(或絕對)零點設置指令、相對(或絕對)零點設置回復指令等,多種指令可同時進行。如果沒有FIFO功能,數據有可能會被打斷導致發送錯誤。引入FIFO功能后,串口需傳輸多種數據時,單片機命令串口,根據時間順序,完整地完成一幀數據傳輸后,再進行下一幀數據傳輸,這樣既可以保證不會漏掉,又不會出錯。
4.2.4 數據處理及轉換功能子函數“funcitonality.c”
主函數中將ADXL327B加速度計采集到的模擬量值轉化為數字量,然后在“funcitonality.c”進行卡爾曼濾波處理,再將數據轉換為BCD碼供屏幕顯示和串口輸出。
4.2.5 按鍵子函數“key.c”
“key.c”是針對兩個功能按鍵的程序,主要實現3個按鍵的檢測和控制功能。數顯儀一共有3個按鍵,“ON/OFF”是開關機按鍵,長按3 s開機或關機?!癏OLD”按鍵是鎖存按鍵,按下后屏幕保持顯示數據,再次按下后,恢復到測量狀態?!癦ERO”按鍵可以實現“相對零點”和“絕對零點”的切換。程序中主要包括“void KEY_Init(void)”,對按鍵涉及到的引腳進行了初始化,“u8 KEY_Scan(u8 mode)”,不同按鍵按下,返回不同值,單片機根據返回值做出對應的反應。4.2.6 串口通信子函數“usart.c”
串口通信硬件上用到PA9和PA10引腳,在主函數中通過void GPIO_Configuration()子函數對PA9和PA10引腳進行正確配置?!皍sart.c”中,通過void USARTInit子函數進行波特率、數據位、校驗位、停止位的配置,再通過void USARTSend-String子函數進行傳輸內容的處理。
為了讓角度數據更準確、更穩定,采用了卡爾曼濾波算法[6-7],該算法是有效去除信號噪聲,還原準確數據的一種數據處理算法。在加速度計測量過程中,由于電源穩定性、外部自然環境變化等因素,原始測量數據中有噪聲信號,直接影響測量的準確性。卡爾曼濾波在測量方差已知的情況下能夠從一系列的測量數據中,準確判斷出噪聲信號并刪除,從而得到相對準確率大幅提高的有效數據。
運用MATLAB軟件進行仿真測試,通過MATLAB中的Figure創建一個圖形窗口,定義加速計值為CON=0.5(以0.5g為例),采樣次數N=140,見圖6。
圖6中縱坐標為某一時刻加速計的原始值,橫坐標為采樣時間,通過圖中的曲線可以看到經過卡爾曼濾波處理后,對比圖6-a中的“測量誤差”和“卡爾曼濾波后誤差”,可以看出誤差值明顯減小。同時從圖6-b中可以看出,濾波后的數據曲線更加平滑,數據準確性更高。

6-a 測量誤差與卡爾曼濾波后誤差的對比

6-b 卡爾曼濾波仿真圖6 M A T L A B中的仿真測試
經過PCB圖制版、焊接、程序下載后,設計初步完成,測試傳感器各項功能,包括充電測試、開關機測試、鎖存按鍵測試、相對/絕對零點切換按鍵測試,與電腦進行串口通信測試。在測試過程中需要根據出現的問題,進行硬件電路的優化和程序的調整,直到完全正常工作。
調試完成后,進行精度標定。運用芳嘉天蝶TE-170P分度頭轉臺(該轉臺精度為0.5‰)測量16次(X軸、Y軸各測8次),相關數據見表1。

表1 精度標定數據表
轉臺值表示標準值,測量值表示數顯儀測量值,誤差值是轉臺值與測量值的差值,均方根誤差值是將16次的誤差值取均方根運算,代表數顯儀精度值[10-11]。最終結果表明,在±90°測量范圍內,數顯儀精度為0.081°,在0.1°范圍以內,處于0.1°精度標準,達到設計要求。
影響傳感器精度的因素是多方面的,包括元器件的選型、PCB設計、算法、校準等。在實際生產過程中,校準的影響最大,要求選用標準校準臺進行操作,工作人員需按標準流程嚴謹操作。
以上為精度0.1°的一體式傾角數顯儀的開發過程,包括方案設計、原理圖設計、PCB圖設計、程序編寫、調試標定后制作完成,經測試,各項指標達到了設計要求。該產品具有便攜、精度高、功能全面等優點,使用者反饋良好。同時該產品還進行了開放式設計,預留了多個I/O口和備用串口,可進行開關量輸出、無線通信等相關開發,可為客戶進行功能定制。