基于USB通信的多直流電動(dòng)機(jī)控制系統(tǒng)
姜偉凱,李雛
(上海大學(xué),上海200072:)
摘要:將USB數(shù)據(jù)通信用于直流電動(dòng)機(jī)控制系統(tǒng),采用PICl8F4550單片機(jī)和LM629組建了閉環(huán)的高精度數(shù)字式直流電動(dòng)機(jī)驅(qū)動(dòng)模塊。通過(guò)一個(gè)實(shí)例,介紹運(yùn)動(dòng)參數(shù)傳遞的全過(guò)程。
關(guān)鍵詞:USB通信;直流電機(jī);運(yùn)動(dòng)控制
中圈分類號(hào):TM33 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004—7018(2008)06—0040—02  本文利用USB的可拓展性開(kāi)發(fā)可以按照需要擴(kuò)增和縮減的直流電動(dòng)機(jī)計(jì)算機(jī)分級(jí)控制系統(tǒng)。系統(tǒng)中將一臺(tái)個(gè)人計(jì)算機(jī)作為USB系統(tǒng)中的主機(jī)。通過(guò)USB數(shù)據(jù)傳遞控制一塊或多塊驅(qū)動(dòng)一執(zhí)行模塊,如圖1所示。每個(gè)模塊含有一片PICl8F4550單片機(jī)、兩片LM629直流電動(dòng)機(jī)專用控制芯片、一片L298驅(qū)動(dòng)芯片、兩臺(tái)帶有同軸光電碼盤的直流電動(dòng)機(jī)。其中PICl8F4550單片機(jī)是USB系統(tǒng)中的關(guān)鍵節(jié)點(diǎn)。圖1中的USB Hub部件為USB集線器(擴(kuò)展USB的聯(lián)接端口)。
1個(gè)人計(jì)算機(jī)與PICl8F4550單片機(jī)之間的USB通信
PICl8F4550是微芯(Mierochip)公司推出的具有全速USB 2.0連接功能的單片機(jī),內(nèi)置SIE(SerialInterface Engine)引擎,SIE能完成單片機(jī)RAM存儲(chǔ)區(qū)與USB主機(jī)內(nèi)存之間的數(shù)據(jù)傳輸。該單片機(jī)中有1 kB的RAM可用于USB緩沖器(USB RAM),最多可以配置16個(gè)USB通信端點(diǎn)(Endpoint)。當(dāng)USB主機(jī)向PICl8F4550發(fā)送數(shù)據(jù)時(shí),SIE把接收到的數(shù)據(jù)解碼后移送到相應(yīng)的通信端點(diǎn),當(dāng)單片機(jī)發(fā)送數(shù)據(jù)時(shí),SIE把端點(diǎn)數(shù)據(jù)編碼后發(fā)送給USB主機(jī)。
USB節(jié)點(diǎn)設(shè)備種類繁多。為了使主機(jī)能夠正確識(shí)別特定的節(jié)點(diǎn)設(shè)備,從而加載合適的USB驅(qū)動(dòng),規(guī)定每一種節(jié)點(diǎn)設(shè)備都有設(shè)備廠商號(hào)(Vendor ID)和產(chǎn)品號(hào)(Product ID)。在枚舉(enumeration)過(guò)程中,計(jì)算機(jī)通過(guò)發(fā)送查詢命令來(lái)獲得設(shè)備的這兩種節(jié)點(diǎn)特征以及其它信息。USB主機(jī)通過(guò)枚舉識(shí)別USB設(shè)備并給新連接的設(shè)備分配相應(yīng)地址。枚舉完成后,可以在客戶程序中用Mierochip提供的動(dòng)態(tài)鏈接庫(kù)(MPUSB.d11)中的函數(shù)(MPUSBOpen),打開(kāi)
連接主機(jī)內(nèi)存和USB RAM中的相應(yīng)通信端點(diǎn)的虛擬通道(pipeline),并返回一個(gè)指向該通道的旬柄(han dle),在以后的編程中,就用該句柄變量代表該通道。
下面列出一個(gè)從個(gè)人計(jì)算機(jī)到PICl8F4550單片機(jī)的參數(shù)傳遞實(shí)例:
(1)在客戶程序中,將被發(fā)送的參數(shù)賦值給一個(gè)數(shù)組(send—bur)中的各個(gè)元素
(2)用MPuSBOpen函數(shù)建立一個(gè)發(fā)送數(shù)據(jù)的通道OutPipe=USBOpen(0,vid—pid,0ut—pipel,MP—WRITE,0);
其中第一個(gè)參數(shù)O表示uSB設(shè)備序號(hào)。參數(shù)vjd_pid表示芯片廠商號(hào)和產(chǎn)品號(hào)。參數(shù)out_pipel表示發(fā)送管道1。參數(shù)MP WRITE表示該管道用于發(fā)送數(shù)據(jù)。函數(shù)返回的句柄值OutPipej將用作于MPuSBWrite函數(shù)中的參數(shù)。
(3)用MPuSBWrite函數(shù)把含有控制參數(shù)的數(shù)組send_buf從uSB主機(jī)發(fā)送給第一個(gè)uSB設(shè)備(設(shè)備序號(hào)O):
uSBWrite (OutPipe, send_buf, 8,&SenADataLength,1000);
(4)在MPLAB—IDtE集成開(kāi)發(fā)環(huán)境中編寫(xiě)用于PIcl8F4550單片機(jī)的固件程序。
用數(shù)據(jù)傳送函數(shù)將接收到的參數(shù)從uSB RAM(要事先分配地址和容量)復(fù)制到一個(gè)數(shù)組(data.
(5)將數(shù)組中元素值賦給指定變量。例如,將加速度、速度參數(shù)賦給指定變量
mA=dataPacket[2];
//把發(fā)送過(guò)來(lái)的加速度值保存在變量mA
mV=dataPacket[3];
//把發(fā)送過(guò)來(lái)的****速度值保存在變量mv
(6)用數(shù)據(jù)傳輸指令將變量的值通過(guò)單片機(jī)的端口D,發(fā)送給芯片LM629。下面是一個(gè)發(fā)送加速度數(shù)據(jù)的例子。
LM629_sTATUS_CHK();
//對(duì)LM629進(jìn)行忙(busy)檢測(cè),如LM629不處于忙狀態(tài),則進(jìn)行發(fā)送加速度數(shù)據(jù)的操作。
|