1.引言:
在糖提煉過程中,糖廠澄清工段的 PH值控制對糖的純度和生產(chǎn)成本起著決定性的作用,?;?ATMEL公司的 AT91M55800的嵌入式控制器就是自動檢測控制澄清工段的 pH值,克服了以往手工操作 pH值波動較大的缺點,。
本文介紹的是 pH值控制器和上位機在現(xiàn)場的 pH值數(shù)據(jù)傳輸?shù)膶崿F(xiàn),,采用 USB通訊方式,主要因為 USB具有以下優(yōu)點:
用戶使用方便,。設(shè)備自動識別,,自動安裝驅(qū)動程序和配置。
應(yīng)用范圍廣,。傳輸速率快,,總線支持同步和異步傳輸方式。
靈活,。支持不同速率的設(shè)備,。
穩(wěn)定。協(xié)議中包含錯誤檢測,,支持熱插拔,。
易于與 PC接口,。支持即插即用。
成本低廉,。
選用的 USB芯片是 PHILIPS公司成熟且價格低廉的 PDIUSBD12,。整套方案要解決的工作主要有三個部分,一是 AT91M55800上 USB固件程序的設(shè)計,;二是上位機 USB驅(qū)動程序的編寫,;三是上位機數(shù)據(jù)傳輸應(yīng)用軟件的實現(xiàn)。圖 2為 PDIUSBD12的硬件連接原理圖,。
2.USB固件程序編寫固件程序的一個最主要的目的就是讓 Windows可以檢測和識別設(shè)備,,此外,它還完成數(shù)據(jù)的傳輸和根據(jù)不同的需求而進行一些控制和處理的任務(wù),。固件程序主要包括三部分:a)初始化 AT91M55800和所有的外圍電路(包括 PDIUSBD12),;b)主循環(huán)部分;c)中斷服務(wù)程序,。 PDIUSBD12的固件由中斷驅(qū)動,,當(dāng) CPU處理前臺任務(wù)時,USB的傳輸可在后臺進行,。這確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時簡化了編程和調(diào)試,。后臺 ISR(中斷服務(wù)程序)和前臺的主程序循環(huán)之間的數(shù)據(jù)交換可以通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn),。在多路地址 /數(shù)據(jù)總線方式中,單片機與 PDIUSBD12的通信就像單片機外擴了一片 RAM器件一樣,??梢园凑障旅娴某绦蛳?PDIUSBD12發(fā)送數(shù)據(jù)或命令: void outportb(unsigned int Addr,unsigned char Data) { ((unsigned char xdata )Addr)=Data; } 其中,Addr是 PDIUSBD12的地址,,Data是輸出的數(shù)據(jù)和命令,。當(dāng) Addr為奇數(shù)時表示輸出的是命令,Addr為偶數(shù)時表示輸出的是數(shù)據(jù),。中斷服務(wù)程序處理由 PDIUSBD12產(chǎn)生的中斷,,將數(shù)據(jù)從 PDIUSBD12內(nèi)部讀取到 CPU的存儲器,并建立正確的事件標(biāo)志,,以通知主循環(huán)程序進行處理,。程序首先讀取 PDIUSBD12的中斷寄存器來決定中斷源,然后轉(zhuǎn)入相應(yīng)的子程序進行處理,??刂贫它c的輸入/輸出能夠完成設(shè)備的枚舉操作。端點 1和端點 2定義為普通端點,,可以實現(xiàn)中斷傳輸或批量傳輸?shù)取?/p>
3.上位機 USB驅(qū)動
采用 DriverStudio來開發(fā) USB的 WDM驅(qū)動,。WDM(Windows Driver Model)是微軟公司全新的驅(qū)動程序模式,,支持即插即用、電源管理和 WMI技術(shù),。
DriverStudio中的 DriverWorks提供了 USB驅(qū)動程序設(shè)計向?qū)?,只要按照向?qū)瓿上鄳?yīng)的操作和設(shè)置就可以設(shè)計出一個簡單的 USB驅(qū)動程序。
在進行 USB數(shù)據(jù)采集系統(tǒng)驅(qū)動程序開發(fā)之前首先要明確 USB設(shè)備的配置和驅(qū)動程序?qū)崿F(xiàn)的功能,,在我們的數(shù)據(jù)采集系統(tǒng)中,,共用到三個 USB端口,分別為: 控制端口 0 IN端口 1 OUT端口 2 設(shè)計的驅(qū)動程序主要功能是:簡單的實現(xiàn)對兩個端口的讀寫操作,。知道這些后就可以著手進行 USB驅(qū)動程序開發(fā)工作了,。
DriverStudio是嵌入在 VC6.0中的,所以開發(fā) WDM驅(qū)動和用 VC開發(fā)一個可視化工程的情況類似,。DriverWizard會一步步的根據(jù)我們的設(shè)定給出一個 WDM驅(qū)動的大體框架,,我們要做的就是在其中加入我們所要實現(xiàn)的 USB端口 1和端口 2的讀寫功能代碼。
在向?qū)н^程中有一步很重要,,這一步提示用戶選擇總線類型,,該驅(qū)動程序為 USB總線功能驅(qū)動程序,所以選擇 USB總線,。USB設(shè)備的 Vendor ID和 Product ID應(yīng)該對應(yīng)芯片,,否則驅(qū)動程序不會被正確識別。這里 PDIUSBD12對應(yīng)的 Vendor ID為 0471,,Product ID為 0888,。
向?qū)瓿桑砑油甓丝谧x寫功能代碼后,,接下來的工作是編譯驅(qū)動程序工程文件,,生成需要的 USB功能驅(qū)動程序。
4.上位機應(yīng)用軟件
要實現(xiàn)的是通過自己編寫的應(yīng)用程序和 pH值控制器進行數(shù)據(jù)的批量傳輸,。當(dāng)點擊[數(shù)據(jù)發(fā)送]按鈕時,,將數(shù)據(jù)發(fā)送框中的命令數(shù)據(jù)發(fā)送到 pH值控制器。而點擊 [數(shù)據(jù)接收]按鈕,,將從 pH值控制器接收到的 pH值數(shù)據(jù)在數(shù)據(jù)接收框中顯示出來,。按[退出]按鈕則退出應(yīng)用程序。如圖 3
USB數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計的步驟如下: 在應(yīng)用軟件設(shè)計中,,多線程技術(shù)的應(yīng)用會大大地提高應(yīng)用程序的效率,,輔助線程完成后臺數(shù)據(jù)采集的工作。應(yīng)用程序的界面操作不受后臺數(shù)據(jù)處理的影響,。
其中讀線程函數(shù)為:
UNIT ReadTread(void pParam) { Cstting strTemp; unsigned char iobuf[65]; unsigned long nBytes=0; CUSB_softDlg pDlg=(CUSB_softDlg)pParam; //使[接收]按鈕變灰 pDlg->GetDlgItem(IDC_RECEIVE_BUTTON)->EnableWindow(FALSE); for(int i=0;i<65;i++) { iobuf[i]=0; } //進行讀操作,,如果讀不到數(shù)據(jù)則無限期等待 if(!ReadFile(pDlg->m_hRead,iobuf,64,&nBytes,NULL)) { AfxMessageBox(“讀取數(shù)據(jù)失敗,!”,MB_ICONWARNING|MB_OK); } iobuf[nBytes]=’\0’; strTemp=iobuf; //使[接收]按鈕變亮 pDlg->GetDlgItem(IDC_RECEIVE_BUTTON)->EnableWindow(TRUE); //將接收到的數(shù)據(jù)進行顯示 pDlg->SetDlgItemText(IDC_RECEIVE_EDIT,strTemp); return 0; } 將所有代碼添加完成后,,編譯,、連接該工程文件。然后運行目標(biāo)程序,,同 USB設(shè)備進行批量數(shù)據(jù)傳輸,。
5.結(jié)束語
本文在基于 AT91M55800的 pH值控制器上加入 USB芯片 PDIUSBD12,在利用 ARM強大的處理能力的基礎(chǔ)上,,實現(xiàn)了 pH值數(shù)據(jù)的采集傳輸,。利用了 USB通訊使用方便、數(shù)據(jù)傳輸快速穩(wěn)定的優(yōu)點,,結(jié)合上位機應(yīng)用軟件,,方便直觀的觀測 pH值控制器的 pH值數(shù)據(jù)。