魯 平
摘要:在該汽車控制系統(tǒng)中,不僅大量的數(shù)據(jù)(車內(nèi)溫度濕度等環(huán)境參數(shù)、汽車方向盤轉(zhuǎn)角和車輛行駛速度等運(yùn)動(dòng)參數(shù))需要檢測(cè)而且還需要進(jìn)行很多復(fù)雜的控制。同時(shí)可能還需要保存測(cè)得的數(shù)據(jù)以做離線分析和顯示。要想準(zhǔn)確實(shí)時(shí)的獲得這些數(shù)據(jù),結(jié)合助力轉(zhuǎn)向的目的,有必要設(shè)計(jì)這樣一個(gè)數(shù)據(jù)采集系統(tǒng)。本文介紹了一個(gè)基于雙口存儲(chǔ)器和倍頻電路以及EPP接口的汽車轉(zhuǎn)角數(shù)據(jù)采集系統(tǒng)。通過(guò)PC機(jī)和RAM的直接硬件相連,使系統(tǒng)獲得理想的速度。設(shè)計(jì)了軟件競(jìng)爭(zhēng)仲裁法,保證了數(shù)據(jù)的完整性。給出了具體的電路和程序流程。
關(guān)鍵詞:EPP 接口 數(shù)據(jù) 采集 倍頻
0 引言
用單片機(jī)采集數(shù)據(jù),通過(guò)通訊接口傳輸?shù)接?jì)算機(jī)中進(jìn)行處理計(jì)算和保存顯示,以期獲得精確的控制效果。目前常用的通信方式是串行通信,但傳輸速率太低,以9600bps計(jì)算,傳輸1MB至少需要10分鐘以上。并行通信克服了串行通信傳輸速率低的缺點(diǎn)。標(biāo)準(zhǔn)并行口SPP(Standard Parallel Port)方式實(shí)現(xiàn)了由PC機(jī)向外設(shè)的單向傳輸,但實(shí)現(xiàn)PC機(jī)接收外設(shè)發(fā)送的數(shù)據(jù)則非常麻煩;而增強(qiáng)型并行口EPP(Enhanced Parallel Port)協(xié)議卻很好地解決了這一問(wèn)題,能夠?qū)崿F(xiàn)穩(wěn)定的高速數(shù)據(jù)通信。
1 增強(qiáng)型并行端口協(xié)議
增強(qiáng)型并行端口協(xié)議(EPP協(xié)議)是一種高性能的并口連接協(xié)議,并與SPP協(xié)議兼容。EPP端口為并行外設(shè)的連接帶來(lái)許多便利。由于EPP端口完全由硬件產(chǎn)生聯(lián)絡(luò)信號(hào)完成數(shù)據(jù)的傳輸,使得軟件設(shè)計(jì)非常方便,并極大地改善了并口數(shù)據(jù)傳輸速率,系統(tǒng)可以獲得500Kb/s-2Mb/s的數(shù)據(jù)傳輸速率。EPP協(xié)議是一個(gè)與并行端口協(xié)議兼容并能完成雙向數(shù)據(jù)傳輸?shù)膮f(xié)議,它所定義的并行口像一個(gè)開放的總線,為用戶提供強(qiáng)大的功能和靈活的設(shè)計(jì)手段。由于這種接口可以實(shí)現(xiàn)快速的方向轉(zhuǎn)換,因此特別適用于進(jìn)行較小數(shù)據(jù)塊的傳輸且需要經(jīng)常交換數(shù)據(jù)傳輸方向的設(shè)備。EPP協(xié)議中定義了4種數(shù)據(jù)傳輸模式:數(shù)據(jù)寫周期、數(shù)據(jù)讀周期、地址寫周期和地址讀周期。其中數(shù)據(jù)讀/寫周期用來(lái)與外設(shè)之間進(jìn)行數(shù)據(jù)的傳輸,而地址的讀寫周期則用來(lái)交換外設(shè)地址控制信息。其讀時(shí)序和寫時(shí)序類同,地址操作周期和數(shù)據(jù)操作周期只要將nDataStorbe改為nAddStrobe就完全一致。其具體操作為:在t1時(shí)刻應(yīng)用程序向EPP數(shù)據(jù)口寫數(shù)據(jù),啟動(dòng)I/0周期,在t2時(shí)刻主機(jī)將nWRITE置低,,且將數(shù)據(jù)置于數(shù)據(jù)總線上,這時(shí)如果主機(jī)檢測(cè)到nWAIT信號(hào)為低,在t3時(shí)刻將置nDataStrobe為低則數(shù)據(jù)傳輸開始,外設(shè)在接到信號(hào)后,t4時(shí)刻將置nWAIT為高電平,作為響應(yīng),主機(jī)在t5時(shí)刻置nDataStrobe為高電平。最終在t6時(shí)刻主機(jī)結(jié)束I/0周期,外設(shè)在開始另外一個(gè)周期前必須將nWAIT置低。
2 系統(tǒng)構(gòu)成分析
在本系統(tǒng)中,多路A/D轉(zhuǎn)換器檢測(cè)車內(nèi)的環(huán)境參數(shù),光電編碼器獲得方向盤轉(zhuǎn)角。A/D轉(zhuǎn)換獲得的結(jié)果和編碼器輸出經(jīng)倍頻后的輸出由單片機(jī)存儲(chǔ)到雙口RAM中。主機(jī)從RAM中取得原始數(shù)據(jù),經(jīng)過(guò)融合處理后將結(jié)果發(fā)回RAM。單片機(jī)從RAM中讀取這些數(shù)據(jù)通過(guò)光電隔離系統(tǒng)來(lái)控制各個(gè)執(zhí)行單元的動(dòng)作??驁D如下:
3 數(shù)據(jù)存儲(chǔ)系統(tǒng)及接口電路
系統(tǒng)中,主機(jī)和從機(jī)之間的數(shù)據(jù)交換是很頻繁的,主機(jī)向從機(jī)提供參數(shù)和控制信號(hào),從機(jī)則向主機(jī)提供多路信號(hào)采集數(shù)據(jù)。而且主機(jī)和從機(jī)對(duì)雙口RAM的訪問(wèn)都不定時(shí),因而同時(shí)訪問(wèn)的情況完全可能發(fā)生。此外,兩者訪問(wèn)時(shí)間的長(zhǎng)短也不一致,主機(jī)訪問(wèn)雙口RAM的時(shí)間是ms級(jí)的,而從機(jī)訪問(wèn)時(shí)間是us級(jí)的。若兩者直接通信,單片機(jī)的實(shí)時(shí)性將大大削落,系統(tǒng)性能達(dá)不到要求。鑒于此,選擇雙口RAM IDT7130來(lái)構(gòu)成系統(tǒng)的存儲(chǔ)器。該雙口RAM提供兩套完全獨(dú)立的端口,每端口都有完整的數(shù)據(jù)、地址和控制線??梢詽M足本系統(tǒng)的需求。配以一定的時(shí)序邏輯電路,就可以實(shí)現(xiàn)EPP和IDT7130的數(shù)據(jù)直接傳遞,無(wú)須CPU干涉。不僅簡(jiǎn)化了軟件編寫,而且大大提高了系統(tǒng)速度。①PC寫數(shù)據(jù)時(shí),nWrite和nDstrb都為低,RAM的RD和WR均無(wú)效。寫數(shù)據(jù)完成,nDstrb為高,nWrite為低,RAM的WR有效,74LS245數(shù)據(jù)選通輸出至RAM。②PC讀數(shù)據(jù)時(shí),nWrite為高,nDstrb為低,RAM的RD有效,74LS245數(shù)據(jù)選通輸出至EPP。
盡管IDT7130提供兩個(gè)帶有各自的控制、地址和I/0引腳的獨(dú)立的端口,它允許獨(dú)立地、不同步地讀或?qū)懘鎯?chǔ)器中的任何單元。但當(dāng)同時(shí)從兩個(gè)端口訪問(wèn)同一個(gè)存儲(chǔ)器單元時(shí)仍會(huì)引起競(jìng)爭(zhēng)。而且由于兩主機(jī)速度不一樣,很有可能單片機(jī)讀入的是主機(jī)正在更新卻未完成更新的數(shù)據(jù)。而IDT7130本身沒(méi)帶仲裁電路,因此必須由外部提供仲裁。有兩種方法可解決此問(wèn)題:一是在硬件上外加仲裁電路,以便當(dāng)雙方同時(shí)訪問(wèn)IDT7130的同一單元時(shí),由高優(yōu)先級(jí)首先訪問(wèn)。這種方法的電路比較復(fù)雜,使用不便。二是對(duì)存儲(chǔ)器進(jìn)行分配,在軟件上實(shí)現(xiàn)仲裁。根據(jù)實(shí)際系統(tǒng)中主-從機(jī)數(shù)據(jù)傳輸?shù)奶攸c(diǎn),可將IDT7130存儲(chǔ)器劃分為兩塊,一塊為主機(jī)傳給單片機(jī)的數(shù)據(jù),這一塊只允許PC機(jī)寫、單片機(jī)讀;另一塊為單片機(jī)傳遞給PC機(jī)的數(shù)據(jù),這一塊只允許單片機(jī)寫、PC機(jī)讀。并將存儲(chǔ)器兩區(qū)的最后一個(gè)字節(jié)分別設(shè)為標(biāo)志單元,當(dāng)主機(jī)或從機(jī)訪問(wèn)IDT7130時(shí),首先讀取該單元標(biāo)志,只有當(dāng)標(biāo)志滿足要求時(shí),才會(huì)對(duì)數(shù)據(jù)進(jìn)行操作。操作時(shí)標(biāo)志置位,操作完成后清除該標(biāo)志。該操作雖然會(huì)花費(fèi)一定的查詢時(shí)間,但可以有效保護(hù)數(shù)據(jù)完整性,極大提高系統(tǒng)穩(wěn)定性。而且RAM的操作速度是ns級(jí)的,該時(shí)間可以忽略。
下面簡(jiǎn)單以PC機(jī)讀RAM函數(shù)來(lái)說(shuō)明該操作。
unsigned char PC_READ_RAM(unsigned char *buffer, unsigned char length, unsigned int address)
{//buffer:讀人緩沖區(qū)指針、length:需要連續(xù)讀入的長(zhǎng)度、address:讀入字節(jié)的首地址
if(地址在上區(qū));{return(ERROR);}
if(下區(qū)標(biāo)志位為零);{標(biāo)志位置位;執(zhí)行讀數(shù)據(jù)操作;}
else//下區(qū)標(biāo)志位為高,單片機(jī)正在寫入數(shù)據(jù)
{循環(huán)查詢等待標(biāo)志位為零; //等待數(shù)據(jù)寫入完成執(zhí)行操作;}
標(biāo)志位置零;
return(GOOD);}
IDT7130來(lái)實(shí)現(xiàn)主機(jī)和從機(jī)的信息共享和數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)具有速度快、電路簡(jiǎn)單、可靠性高等優(yōu)點(diǎn),是一種較好的方法。
通過(guò)PC機(jī)和RAM的直接硬件相連,使系統(tǒng)獲得理想的速度;設(shè)計(jì)了軟件競(jìng)爭(zhēng)仲裁法,保證了數(shù)據(jù)的完整和安全性;通過(guò)四倍頻電路,提高了控制精度。由于采用了CPLD設(shè)計(jì)其邏輯控制電路,簡(jiǎn)化布線的同時(shí)使得系統(tǒng)具有很高的抗干擾性和保密性。實(shí)踐表明該系統(tǒng)具有電路簡(jiǎn)單、成本低、工作穩(wěn)定、精度高的優(yōu)點(diǎn),完全能滿足汽車助力轉(zhuǎn)向和車內(nèi)環(huán)境控制的要求。同時(shí)系統(tǒng)的CPLD和RAM有豐富的剩余資源,使系統(tǒng)進(jìn)一步升級(jí)成為一個(gè)小型的汽車測(cè)試儀變得非常簡(jiǎn)單。