李建波,牛昱光
(太原理工大學(xué)信息工程學(xué)院,山西太原 030024)
?
基于μC/OS-Ⅲ的整車式動態(tài)稱重儀表
李建波,牛昱光
(太原理工大學(xué)信息工程學(xué)院,山西太原 030024)
針對高速路收費系統(tǒng)對車輛稱量精度及軸型識別率的要求,通過分析整車式動態(tài)稱重秤臺結(jié)構(gòu)及稱重過程的特點,提出了懸臂梁應(yīng)變橋式稱重傳感器接線方案及整車式動態(tài)稱重儀表的軟硬件設(shè)計方案;論述了分割車輛上秤過程,識別車軸,計算單軸質(zhì)量的專家算法及基于嵌入式實時操作系統(tǒng)μC/OS-Ⅲ的軟件實現(xiàn)。經(jīng)測試該儀表不僅提高了稱量精度而且不借助輔助設(shè)備能夠準(zhǔn)確識別車輛軸型。
動態(tài)稱重;稱重傳感器;專家算法;嵌入式實時操作系統(tǒng)μC/OS-Ⅲ
隨著稱重技術(shù)的發(fā)展,動態(tài)稱重[1]在高速公路計重收費系統(tǒng)中得到了廣泛應(yīng)用,動態(tài)稱重汽車衡也從單臺面結(jié)構(gòu)、雙臺面結(jié)構(gòu)發(fā)展到了大臺面整車式結(jié)構(gòu),稱重系統(tǒng)精度得到了進(jìn)一步提高。在單、雙臺面結(jié)構(gòu)的動態(tài)稱重汽車衡中,需要采用分軸計重求和的方式對車輛進(jìn)行稱量,但由于輪胎與臺面接觸時間短、輪胎驅(qū)動力、車輛自身振動、路面激勵等因素對稱重精度影響較嚴(yán)重,而大臺面整車式結(jié)構(gòu)的動態(tài)稱重汽車衡可以改善這些因素對稱重精度的影響。在動態(tài)稱重技術(shù)中,需要區(qū)分車輛軸數(shù)及單軸質(zhì)量,對于大臺面整車式結(jié)構(gòu)的動態(tài)稱重將面臨如何區(qū)分車輛軸數(shù)及單軸質(zhì)量的難題,多數(shù)解決方案是采用在駛?cè)敕较蛟黾訂闻_面方式,這將導(dǎo)致增加設(shè)備成本和降低可靠性。本文的解決方案是在不增加復(fù)雜的秤臺設(shè)備情況下,設(shè)計一套基于嵌入式系統(tǒng)的硬件環(huán)境和軟件程序,對實際稱重數(shù)據(jù)波形進(jìn)行在線分析,采用專家算法對整個車輛的上秤過程進(jìn)行分割,從而計算出軸數(shù)及軸重,實現(xiàn)整車式動態(tài)稱重。
整車式動態(tài)稱重儀表的硬件結(jié)構(gòu)如圖1所示。主控芯片采用ARM-Cortex M4架構(gòu)[2]的STM32F407VGT6處理器;觸摸屏數(shù)據(jù)傳輸采用靜態(tài)存儲控制器FSMC[3],觸摸控制采用SPI接口;稱重信號采集采用2片獨立的高精度A/D轉(zhuǎn)換芯片CS5532提供4路ADC采集通道;多路光電隔離數(shù)字I/O通道實現(xiàn)與輔助設(shè)備連接;擴(kuò)展64 Mbit容量的 Flash存儲器用于保存系統(tǒng)參數(shù)和過車數(shù)據(jù);具有USB接口(USB-A)、網(wǎng)口(PHY:DM9161AEP、LAN:HR911105A)、串口(Max232)通信方式。
圖1 硬件系統(tǒng)結(jié)構(gòu)圖
其中,主控芯片、觸摸屏和Flash存儲器及ADC芯片的電路設(shè)計可參考相應(yīng)器件的參考電路,多路數(shù)字I/O通道采用光電隔離措施。ADC數(shù)據(jù)采集通道接線盒電路如圖2所示(部分電路未給出)。大臺面采用多個同一型號懸臂梁應(yīng)變橋式壓力傳感器,靈敏度相同并通過R6進(jìn)行補(bǔ)償,接線盒另一功能為調(diào)整傳感器的失調(diào)電壓。利用AD8237芯片負(fù)反饋通道抑制傳感器失調(diào)電壓,由于單極性供電需R3、R4和A2提供參考電壓,R5和A3提供調(diào)整電壓。并通過R0、RF、R7和A4構(gòu)成的加法器輸出給ADC轉(zhuǎn)換芯片CS5532。跳線帽JP1控制傳感器是否接入電路,用于秤臺及傳感器的調(diào)整。
圖2 ADC數(shù)據(jù)采集通道接線盒電路
車輛勻速行駛上秤臺過程波形如圖3實線所示。整個過程呈明顯的階梯狀,同時伴隨著抖動。為滿足實時性要求,儀表ADC采樣數(shù)據(jù)通過DMA(外設(shè)到內(nèi)存自動增長循環(huán)模式[4])方式存儲到特定內(nèi)存單元,減少CPU占用。由于軸數(shù)是計重收費費率的一個最重要的因素,對單軸質(zhì)量有相關(guān)限重規(guī)定,因此需要準(zhǔn)確識別車輛軸數(shù)及軸重。根據(jù)上軸過程數(shù)學(xué)模型,本儀表采用了專家算法對整個過程進(jìn)行分割。
上軸過程模型如下:根據(jù)輪胎特點認(rèn)為輪胎與地面為面接觸,忽略輪胎和秤臺形變因素影響,根據(jù)壓強(qiáng)與壓力原理:F=pS,假定p恒定,車速v恒定,在運動中S與時間t成正比,受力函數(shù)的表達(dá)式如式(1)所示:
(1)
式中:a為上軸開始時刻;b為上軸結(jié)束時刻。
由于采用滑動濾波[5]則濾波后受力函數(shù):
(2)
式中T為濾波周期。
為計算方便,假設(shè)T=2(b-a)則:
(3)
波形如圖3所示。
圖3 理想ADC數(shù)據(jù)與滑動濾波波形
假設(shè)a=2,b=6,k(b-a)=1,其中k(b-a)為增加軸重的重力。當(dāng)T!= 2(b-a)時,f′(t)成梯形,f(t)和f1(t)相似,這里略去了公式及圖形。
根據(jù)單軸模型特征及軸間過程特征,建立專家算法分割過車過程以便計算軸數(shù)及軸重。專家算法主要根據(jù)以下幾個特征對整個過程進(jìn)行分割,包括數(shù)據(jù)變化率、上軸閾值、軸間間隔、數(shù)據(jù)平穩(wěn)性。并根據(jù)這些特征建立知識庫。
推理過程:首先根據(jù)數(shù)據(jù)變化率達(dá)到閾值且變化趨勢符合模型設(shè)置上軸標(biāo)志,變化率達(dá)到峰值過程中估算軸重,變化率低于閾值后,判斷是否達(dá)到上軸閾值,達(dá)到后判斷是否達(dá)到上軸間隔時間和上軸過渡時間,最后判斷數(shù)據(jù)是否穩(wěn)定并和估計值比較計算軸重。整車都上秤后根據(jù)總軸數(shù)、上軸時間間隔和軸重信息進(jìn)行車軸分組,與軸型庫對比后對軸型進(jìn)行修正,計算軸組質(zhì)量。若出現(xiàn)多軸或丟軸現(xiàn)象,可通過上位機(jī)通知儀表,儀表重新分析上軸過程,并調(diào)整系統(tǒng)參數(shù)。
為達(dá)到實時性和交互性要求,本儀表采用了μC/OS-Ⅲ實時嵌入式系統(tǒng)[6]和emWin圖形界面進(jìn)行軟件設(shè)計。硬件驅(qū)動部分代碼采用ST官方提供的固件庫函數(shù),支持控制器的所有外設(shè)性能特征,可明顯減少程序開發(fā)時間。
3.1 系統(tǒng)配置和任務(wù)創(chuàng)建
系統(tǒng)配置:配置系統(tǒng)時基中斷1 ms,修改中斷向量表,配置好DWT提供時間戳?xí)r鐘源,配置系統(tǒng)功能。
創(chuàng)建自己的任務(wù):
static OS_TCB AppTaskStartTCB; /*聲明任務(wù)控制塊*/
static CPU_STK AppTaskStartStk[START_STK_SIZE];/*聲明任務(wù)堆棧*/
static void AppTaskStart(void *p_arg); /*聲明任務(wù)*/
OSTaskCreate((OS_TCB *)&AppTaskStartTCB,
(CPU_CHAR *)“App Task Start”,
(OS_TASK_PTR ) AppTaskStart,
…
(OS_ERR * )&err); /*創(chuàng)建任務(wù)*/
在開始任務(wù)中創(chuàng)建emWin屏幕顯示及觸摸屏任務(wù),還需創(chuàng)建專家任務(wù)、數(shù)據(jù)存儲任務(wù)、通信任務(wù)[7],方法同上,并編寫相應(yīng)的任務(wù)函數(shù)。
3.2 界面移植
配置好FSMC時序及SPI時序,編寫LCD板級支持函數(shù):
Void LCD_DrawPoint(u16 x,u16 y,u16 color); //在屏幕上畫點
U16 LCD_ReadPoint(u16 x,u16 y); //讀屏幕上一點
Void LCD_MyInit(); //屏幕初始化
配置界面,創(chuàng)建自己的窗口:
static const GUI_WIDGET_CREATE_INFO aDialogCreate1[]= {{FRAMEWIN_CreateIndirect,*pName,Id,x0,y0,
xSize,ySize,RAMEWIN_CF_ACTIVE}, //窗體
{ TEXT_CreateIndirect,* pName,Id,x0,y0,xSize,ySize,TEXT_CF_RIGHT }, //控件
};
hWin1 = GUI_CreateDialogBox(aDialogCreate1,GUI_COUNTOF(aDialogCreate1),0,0,0,0);
//建立窗體編寫相應(yīng)的屏幕顯示任務(wù)函數(shù)。
3.3 專家算法分割過程的程序?qū)崿F(xiàn)
整個分割過程以上軸標(biāo)記點為基礎(chǔ)元素,提供給專家算法任務(wù)進(jìn)行處理,同時由存儲任務(wù)存儲該變量。由于車輛類型和車速不同,很難確定統(tǒng)一的上軸判斷標(biāo)準(zhǔn),因此在最低判斷標(biāo)準(zhǔn)下接受第一軸,并根據(jù)第一軸的上秤信息重新確定其他軸的上秤標(biāo)準(zhǔn),如:stdpre_tim(標(biāo)準(zhǔn)軸間間隔時間)和stdwth_tim(標(biāo)準(zhǔn)過渡時間)由[第一軸過渡時間×系數(shù)]獲得。系數(shù)通過知識庫查詢得到,該系數(shù)可根據(jù)上位機(jī)提供的多軸或丟軸信息,重新提取上軸標(biāo)記點計算調(diào)整。
分割過程流程如圖4所示。
圖4 過程分割流程圖
專家算法代碼結(jié)構(gòu):
if(ddiffer != 0) //ddiffer != 0,star_tim != 0 (上軸過渡過程)
{if(mark_point[AxTolNum].star_tim != 0)
{ if(ddiffer > mark_point[AxTolNum].val_peak)
… } //檢測數(shù)據(jù)變化率,預(yù)算結(jié)束時間
else //ddiffer != 0,star_tim == 0 (上軸開始)
{ if(ddtimer >= mark_point[AxTolNum-1].end_tim)?…)
… } //判斷是否接受上一軸,下一軸記錄初始化
else //ddiffer == 0,star_tim != 0 (上軸過渡結(jié)束)
{if(mark_point[AxTolNum].star_tim != 0)
{ if((mark_point[AxTolNum].pre_tim >= std_wth_tim)…)
…} //判斷是否達(dá)到上軸標(biāo)準(zhǔn),是否覆蓋上一軸
else // ddiffer == 0,star_tim == 0 (數(shù)據(jù)平穩(wěn))
{ if(mark_point[AxTolNum].val_max < ADdata)…)
… } //計算數(shù)據(jù)穩(wěn)定性,并保存數(shù)據(jù)
3.4 數(shù)據(jù)保存
數(shù)據(jù)存儲器由內(nèi)部Flash和外部Flash兩部分組成。為防止數(shù)據(jù)掉電丟失,儀表的出廠參數(shù)和用戶參數(shù)保存于內(nèi)部Flash中,車輛的上軸標(biāo)記點數(shù)據(jù)和最終處理獲得的車輛信息數(shù)據(jù)保存于外部Flash中。外部Flash按1 024Bytes/Page分頁,每輛車占10頁,每頁約存25個標(biāo)記點,通過變化率閾值控制標(biāo)記點存儲個數(shù)。由于秤臺與收費站間的車道距離不能停滯5輛以上車輛,因此設(shè)計緩存容量為10輛車數(shù)據(jù)(5輛未上傳車輛數(shù)據(jù)、5輛已上傳車輛數(shù)據(jù)),上位機(jī)調(diào)取一輛車輛信息后將該車標(biāo)記為已上傳車輛,若已上傳信息車輛滿5輛則刪除最先一輛數(shù)據(jù)。當(dāng)上位機(jī)返回車型正確信息后,儀表刪除該車數(shù)據(jù),返回錯誤信息時,則調(diào)取車輛數(shù)據(jù)重新計算調(diào)整系統(tǒng)參數(shù),調(diào)整完成后刪除車輛數(shù)據(jù)。其余內(nèi)存用于保存車輛信息歷史數(shù)據(jù)。
圖5為常見的不同車型貨車的調(diào)試輸出波形,實線曲線為ADC采樣值(經(jīng)過滑動濾波處理),短點劃線曲線為采樣值變化率絕對值(經(jīng)過放大處理),長點劃線曲線為系統(tǒng)判斷出的上軸過程(直條處為一軸)。159型車輛的2、3軸為連軸,軸間距離遠(yuǎn)小于1129型車輛。由圖5可以看出:車輛上秤前空秤時的ADC數(shù)據(jù)為零點內(nèi)碼;通常車輛第一軸較輕且與其他軸的過渡時間相近,因此引起數(shù)據(jù)變化率較小,以第一軸信息為依據(jù)判斷其他上軸過程;單軸軸重可選擇局部均值或中位值作為質(zhì)量,整車質(zhì)量需去除周期抖動后取均值;上秤閾值可有效去除抖動引起的虛假上軸信號;依據(jù)軸間時間間隔及軸重信息可對車軸進(jìn)行分組判斷軸型[8]。
圖5 綜合處理調(diào)試輸出波形
單雙臺面稱重方式屬于先求局部,再由局部累加求整體;大臺面屬于獲得整體同時分割局部。通過實際測試,整車式大臺面動態(tài)稱重較單、雙臺面單軸稱重累加求和方式可有效去除單軸稱重誤差的累積,確保了稱重可靠性和整車稱量精度。本儀表采用專家算法無需輔助設(shè)備,根據(jù)上軸過程特征,可靠地區(qū)分了上軸過程,計算出單軸質(zhì)量。采用上軸標(biāo)記點存儲過程數(shù)據(jù)減少數(shù)據(jù)保存量,通過處理可從整車質(zhì)量中準(zhǔn)確的計算出軸數(shù)及單軸質(zhì)量,去除了因輔助設(shè)備故障引起的不能識別軸數(shù)影響收費的因素。
[1] 肖振發(fā),符鋅砂.基于動態(tài)稱重的高速公路超載管理系統(tǒng)研究及設(shè)計.交通信息與安全,2012,30(2):92-95.
[2] 廖義奎.ARM Cortex-M4嵌入式實戰(zhàn)開發(fā)精解:基于STM32F4.北京:北京航空航天大學(xué)出版社,2013.
[3] 湯莉莉,黃偉.基于STM32的FSMC接口驅(qū)動TFT彩屏設(shè)計.現(xiàn)代電子技術(shù),2013(20):139-144.
[4] 劉火良,楊森.STM32庫開發(fā)實踐指南.北京:機(jī)械工業(yè)出版社,2013.
[5] 高玉凱,鄭雙雁.非均勻采樣信號的滑動濾波方法.電子技術(shù)應(yīng)用,2010,36(12):75-81.
[6] JEAN L J.嵌入式實時操作系統(tǒng)μC/OS-Ⅲ.宮輝,曾鳴,龔光華,等,譯.北京:北京航空航天大學(xué)出版社,2012.
[7] 孫啟富,孫運強(qiáng),姚愛琴.基于STM32的通用智能儀表設(shè)計與應(yīng)用.儀表技術(shù)與傳感器,2010(10):34-36.
[8] 李麗宏,石常興.?dāng)?shù)據(jù)融合技術(shù)在車輛軸型識別系統(tǒng)中的應(yīng)用.電子設(shè)計工程,2011,19(9):76-78.
Full-Vehicle Dynamic Weighing Instrument Based on μC/OS-Ⅲ
LI Jian-bo,NIU Yu-guang
(College of Information Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
Aiming at the requirements of vehicle weighing accuracy and shaft type recognition rate in the highway toll system,by analyzing the characteristics of the full-vehicle dynamic weighing platform structure and weighing process,this paper put forward the wiring scheme of cantilever beam strain bridge weighing sensor and the hardware and software design solutions of full-vehicle dynamic weighing instrument.The segmentation of axle increasing process to identify axles and calculate single shaft weight based on the expert algorithm and the software implementations based on the embedded real-time kernel μC/OS-Ⅲ were also discussed.The result shows that the instrument not only improves weighing accuracy and can accurately identify the vehicle axis without the aid of auxiliary equipment.
dynamic weighing;weighing sensor;expert algorithm;embedded real-time kernel μC/OS-Ⅲ
2014-10-16 收修改稿日期:2015-03-14
TP274
A
1002-1841(2015)07-0028-04
李建波(1988—),碩士研究生,研究領(lǐng)域為智能儀器。 E-mail:lijianbofly@126.com
牛昱光(1958—),副教授,研究領(lǐng)域為智能儀表、集散控制系統(tǒng)及應(yīng)用。E-mail:ygniu@sina.com