所謂動(dòng)態(tài)稱重是指通過分析和測量車胎運(yùn)動(dòng)中的力,來計(jì)算該運(yùn)動(dòng)車輛的總重量、軸重、輪重和部分重量數(shù)據(jù)的過程。動(dòng)態(tài)稱重系統(tǒng)按經(jīng)過車輛行駛的速度劃分,可分為低速動(dòng)態(tài)稱重系統(tǒng)與高速動(dòng)態(tài)稱重系統(tǒng)。因?yàn)槲覈咚俟返南匏僮罡呤?20,所以高速動(dòng)態(tài)稱重系統(tǒng)在理論上可對5到120之間時(shí)速通過稱量裝置的車輛進(jìn)行動(dòng)態(tài)稱重。而低速動(dòng)態(tài)稱重系統(tǒng)則一定要限制通過車輛的行駛速度,要想有較高的測量精度,理論要求車輛在5km/h以下時(shí)速勻速通過。在我國,車輛動(dòng)態(tài)稱重一般都使用低速動(dòng)態(tài)稱重來完成,在很多收費(fèi)站和車輛檢測站都有應(yīng)用,國家也出臺了相關(guān)的測量標(biāo)準(zhǔn)。
與傳統(tǒng)意義上的靜態(tài)稱重相比,動(dòng)態(tài)稱重可以在車輛緩慢運(yùn)動(dòng)情況下直接進(jìn)行稱重,這樣動(dòng)態(tài)稱重的高效率、測量時(shí)間短、能流暢交通等主要特點(diǎn)就凸顯出來了。動(dòng)態(tài)稱重的問世,不但使車輛的管理上有了很大的促進(jìn)作用,而且還對我國的公路管理和維護(hù)起到了至關(guān)重要的作用。
二 系統(tǒng)總體結(jié)構(gòu)及其功能設(shè)計(jì)總體結(jié)構(gòu)是以51單片機(jī)為處理器的系統(tǒng),如圖3.1所示。

本設(shè)計(jì)要求能判斷出車輛是否超載,如果車輛超載,本系統(tǒng)能夠提供該車輛的超載信息并發(fā)出警報(bào)。本設(shè)計(jì)采用STC89C52單片機(jī)作為系統(tǒng)的處理核心,利用橋式稱重傳感器采集到車輛重量并轉(zhuǎn)換成電壓信號,然后通過放大電路將電壓信號進(jìn)行放大處理后,傳送到A/D轉(zhuǎn)換器中轉(zhuǎn)換為數(shù)字信號,再經(jīng)過單片機(jī)處理、傳輸?shù)浇涌陔娐罚詈笏偷缴衔粰C(jī),該數(shù)據(jù)可以與上位機(jī)里用鍵盤事先輸入設(shè)定的總重量作比較并判斷出該車輛是否超載,如果超載,則可通過顯示器、蜂鳴器作顯示超載信息并報(bào)警,當(dāng)然,鍵盤的作用除了輸入設(shè)定值還可以解除和開啟警報(bào)。
三 動(dòng)態(tài)稱重系統(tǒng)的組成動(dòng)態(tài)稱重系統(tǒng)主要由車輛重量(含超載、偏載檢測)檢測子系統(tǒng)、貨車長、寬、高三維尺寸超限檢測子系統(tǒng)、自動(dòng)觸發(fā)攝像拍照子系統(tǒng)、車輛類型自動(dòng)判別子系統(tǒng)、系統(tǒng)配置及系統(tǒng)維護(hù)子系統(tǒng)、行駛車輛速度測量子系統(tǒng)、數(shù)據(jù)統(tǒng)計(jì)、報(bào)表處理子系統(tǒng)和單據(jù)輸出打印子系統(tǒng)這幾部分組成。該系統(tǒng)組成完善,部件考慮周全,能很好的完成稱重任務(wù)。
四 動(dòng)態(tài)稱重系統(tǒng)的主要功能(1) 動(dòng)態(tài)檢測出通過車輛的軸數(shù)、軸重、軸距、輪數(shù)、車速等;
(2) 能自動(dòng)檢測出車輛的高、寬、長等外圍尺寸是否超出最大標(biāo)準(zhǔn),并能給出超出部位的具體位置和具體數(shù)據(jù);
(3) 拍攝機(jī)器在車輛經(jīng)過時(shí)能自行對要被檢測的車輛進(jìn)行拍照,該機(jī)器能對車牌號碼、車輛種類進(jìn)行識別,最終作為圖像證據(jù);
(4) 可以將不合格車輛的處理記錄、超限情況進(jìn)行打印,根據(jù)車輛超限的程度來計(jì)算罰款數(shù)額并打印收據(jù)或罰款單;
(5) 檢測到的數(shù)據(jù)全部存入數(shù)據(jù)庫中,并對被監(jiān)測到的數(shù)據(jù)進(jìn)行分析、統(tǒng)計(jì)。便于匯總上報(bào)、日常管理和進(jìn)行查詢。
五 單片機(jī)的選用本設(shè)計(jì)采用的是INTEL公司研究開發(fā)生產(chǎn)的STC89C52單片機(jī),其內(nèi)部置有256字節(jié)的內(nèi)部數(shù)據(jù)存儲(chǔ)器、8位中央處理單元、8K片內(nèi)程序存儲(chǔ)器、3個(gè)16位定時(shí)/計(jì)數(shù)器、32個(gè)雙向I/O口和一個(gè)片內(nèi)時(shí)鐘振蕩電路,全雙工串行通信口, 5個(gè)兩級中斷結(jié)構(gòu)。89C52的引腳圖如圖4.1所示。

本設(shè)計(jì)使用的是單片機(jī)的最小系統(tǒng),其中電路包括下載口電路、復(fù)位電路和晶振電路。復(fù)位電路中,電阻在下接地,電容在上接高電平,中間為RST。復(fù)位電路工作原理是:通電時(shí),由于電流很大,從而相當(dāng)于電容被短路,這樣RST引腳上處于高電平,這時(shí)的單片機(jī)為禁止工作狀態(tài)。如果要使單片機(jī)正常工作,就要使RST端電壓慢慢下降并到一定程度,也就是RST端為低電平,這就需要通過電源對電容進(jìn)行充電。
復(fù)位電路復(fù)位的方式有手動(dòng)復(fù)位、上電復(fù)位兩種。所謂上電復(fù)位,就是通電瞬間,由于電流很大,從而相當(dāng)于電容被短路,這樣RST引腳上處于高電平,自動(dòng)復(fù)位;相反,通過對改變電容電流,當(dāng)電流很小的時(shí)候,我們就可以把電容當(dāng)做開路狀態(tài),RST端就處于低電平,程序就能正常的運(yùn)行。而手動(dòng)復(fù)位要在上電復(fù)位的基礎(chǔ)上,按下復(fù)位按鍵,使VCC直接與RST相連,電容處于放電狀態(tài),以高電平形成復(fù)位;松開復(fù)位按鍵,RST仍舊是高電平,這時(shí)充電電流作用于電阻上,VCC給電容進(jìn)行充電,還是復(fù)位狀態(tài),充電結(jié)束后,RST為低電平,能夠正常工作。
A/D轉(zhuǎn)換器A/D轉(zhuǎn)換器根據(jù)輸出的信號格式有并行A/D和串行A/D兩種。ADC0832 是一種具有雙通道 A/D 轉(zhuǎn)換芯片和8 位分辨率。它的優(yōu)點(diǎn)有體積小,兼容性強(qiáng),性價(jià)比高,從而深受個(gè)人的歡迎和企業(yè)的認(rèn)可,目前在世界上也已經(jīng)有了較高的使用率。
ADC0832具有能夠進(jìn)行雙通道A/D 轉(zhuǎn)換,分辨率高達(dá)8位;當(dāng)供電電源為5V時(shí),輸入電壓能穩(wěn)定的保持在0~5V 之間;TTL/CMOS與輸出輸入電平兼容;功耗很低,只有15mW;轉(zhuǎn)換工作時(shí)間只有 32μS,也就是頻率僅有 250KHZ等特點(diǎn)。其引腳功能圖如圖4.6所示,芯片引腳接口說明如表4所示。

接口 | 說明 |
CS | 片選使能,輸入低電平能使芯片工作 |
CH1 | 模擬的輸入通道 1,或作為 IN+/-使用 |
CH0 | 模擬的輸入通道 0,或作為 IN+/-使用 |
GND | 接地 |
DO | 轉(zhuǎn)換數(shù)據(jù)輸出,數(shù)據(jù)信號輸出 |
DI | 選擇通道控制,數(shù)據(jù)信號輸入 |
CLK | 芯片時(shí)鐘脈沖輸入 |
Vcc/REF | 5V參考電壓輸入和電源輸入 |
通常情況下的單片機(jī)和ADC0832的接口的數(shù)據(jù)線應(yīng)為4條,分別是 CS、CLK、DO、DI。由于ADC0832的數(shù)據(jù)信號輸入輸出口與單片機(jī)具有雙向接口通信,輸入輸出口也不同時(shí)使用,所以可以將數(shù)據(jù)信號輸入輸出口并聯(lián)后當(dāng)一條數(shù)據(jù)線進(jìn)行使用。它們的硬件接口電路與單片機(jī)連接的原理如圖4.7所示。
最后將以上的惠思登電橋、放大器、ADC0832轉(zhuǎn)換器和STC89C52單片機(jī)連接起來,就組成了系統(tǒng)的采集模塊。

本系統(tǒng)要實(shí)現(xiàn)一旦檢測到車輛超載超限,就會(huì)立刻鳴笛報(bào)警,通過操作人員的檢查處理后,解除報(bào)警。本設(shè)計(jì)選用蜂鳴器作為發(fā)聲裝置,蜂鳴器可利用三極管來進(jìn)行放大驅(qū)動(dòng)。該接口電路如圖4.15所示:

當(dāng)系統(tǒng)上電復(fù)位后,系統(tǒng)開始初始化,包括端口等;初始化完畢后,調(diào)用串口輸出提示語,開始準(zhǔn)備串口輸出電壓;準(zhǔn)備完畢后,調(diào)用串口輸出電壓值,開始從串口輸出電壓值;輸出完畢后,調(diào)用串口輸出換行值;最后開始延時(shí)200ms。根據(jù)系統(tǒng)方案,設(shè)計(jì)出本設(shè)計(jì)的主程序流程,可以用框圖表示。

首先要將芯片開始使能,即CS使能端置于低電平,然后通過DI和DO的同一數(shù)據(jù)輸入端口,可實(shí)現(xiàn)通道功能的選擇,再調(diào)用通道初始化程序,初始化完畢后,在8個(gè)時(shí)鐘邊沿獲得正序和反序8位數(shù)據(jù),最后返回?cái)?shù)據(jù)。根據(jù)此方案,設(shè)計(jì)出本設(shè)計(jì)中A/D轉(zhuǎn)換程序流程,如圖5.2所示。
當(dāng)兩位數(shù)據(jù)都為0時(shí),CH1作為負(fù)輸入端 IN-,而CH0就作為正輸入端IN+來進(jìn)行相關(guān)輸入。當(dāng)此兩位數(shù)據(jù)都為1時(shí),CH1進(jìn)行單通道轉(zhuǎn)換而CHO不轉(zhuǎn)換。當(dāng)兩位數(shù)據(jù)分別為0和1時(shí),CH1作為正輸入端IN+,CH0作為負(fù)輸入端IN-來進(jìn)行相關(guān)輸入。當(dāng)兩位數(shù)據(jù)為分別為1和0時(shí),CH0進(jìn)行單通道轉(zhuǎn)換而CH1不轉(zhuǎn)換。ADC0832的功能項(xiàng)如表7所示。

MUX Address | Channe# | ||
SGL/DIF | ODD/SIGN | 0 | 1 |
1 | 0 | + |
|
1 | 1 |
| + |
0 | 0 | + | _ |
0 | 1 | _ | + |
ADC0832沒有工作時(shí),DO/DI和CLK的電平可高可低,但CS的輸入端口應(yīng)必須顯示高電平,此時(shí)芯片處于禁用狀態(tài)。當(dāng)A/D轉(zhuǎn)換進(jìn)行時(shí),CS端口必須處于低電平并且一直將低電平保持到轉(zhuǎn)換全部結(jié)束。當(dāng)芯片轉(zhuǎn)換工作開始,芯片的CLK端口會(huì)接收到處理器傳送來的一時(shí)鐘脈沖,DO/DI并聯(lián)端口將使用數(shù)據(jù)輸入信號的DI端口。
第一個(gè)時(shí)鐘脈沖的下沉出現(xiàn)之前,DI端口一定要是高電平,表示啟始信號的發(fā)出,在第二、三個(gè)脈沖的下沉出現(xiàn)之前,DI端口要輸入兩位數(shù)據(jù)來選擇通道。第三個(gè)脈沖出現(xiàn)下沉之后,DI端口就不再起任何作用,此后 DO/DI并聯(lián)端口則是被DO端口占領(lǐng)進(jìn)行讀取轉(zhuǎn)換數(shù)據(jù)。第四個(gè)下沉脈沖出現(xiàn)開始,DO端口輸出最高位的轉(zhuǎn)換數(shù)據(jù)DATA7,接下來每個(gè)脈沖下沉之后DO端口都會(huì)輸出下一位的轉(zhuǎn)換數(shù)據(jù)。直到發(fā)出最低位數(shù)據(jù)DATA0,也就是由第十一個(gè)脈沖發(fā)出的數(shù)據(jù)之后,這樣一個(gè)字節(jié)的數(shù)據(jù)輸出就完成了。再從第十一個(gè)脈沖下沉開始從DATD0開始輸出下一個(gè)相反數(shù)據(jù)字節(jié)。然后一直到第十九個(gè)脈沖完成數(shù)據(jù)的輸出,這樣一次A/D 轉(zhuǎn)換才結(jié)束。最后,要想將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行相關(guān)處理就必須將芯片禁用,也就是將CS端口輸入高電平。
5.4 LCD顯示程序設(shè)計(jì)首先設(shè)置顯示模式,設(shè)置第(x,y)個(gè)字符的DDRAM的地址,為15×2顯示,因?yàn)橐壕э@示為15列,所以x位置的范圍是0到15,同理,因?yàn)轱@示2行,所以y位置的范圍是0到1。顯示程序如下:
void Lcd_Pos(uchar yPos,uchar xPos)
{
uchar tmp;
xPos &= 0x0f; //x位置范圍是0~15,因?yàn)轱@示15列
yPos &= 0x01; //y位置范圍是0~1,因?yàn)轱@示2行
if(yPos==0) //顯示第一行
{
tmp = xPos;
}
else
{
tmp = xPos + 0x40; //顯示第二行
}
tmp |= 0x80;
Write_com(tmp);
}
5.5 主函數(shù)軟件主要分成四個(gè)部分:串口配置,ADC0832的初始化,等待接受數(shù)據(jù)和輸出數(shù)據(jù)。程序如下:
void main(void)
{
InitUART(); //串口初始化
Lcd_init();
Write_String("Weight: ", 0, 0);
Write_String("H=", 1, 0);
Write_String("L=", 1, 6);
Beep = 1;
while(1)
{
Process10ms();
DispVal(Wh, 1, 2);
DispVal(Wl, 1, 8);
CheckProcess();
if (flagget10s == 1)
{
flagget10s = 0;
Get_temp(sum*100);
ET0 = 1;
TR0 = 1;
Disp_Voltage(); //采集電壓并發(fā)送
}
}
}

基于51單片機(jī)的稱重系統(tǒng)設(shè)計(jì).doc
(222.28 KB, 下載次數(shù): 96)

| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |