基于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)模塊。通過一個(gè)實(shí)例,介紹運(yùn)動(dòng)參數(shù)傳遞的全過程。
關(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的可拓展性開發(fā)可以按照需要擴(kuò)增和縮減的直流電動(dòng)機(jī)計(jì)算機(jī)分級(jí)控制系統(tǒng)。系統(tǒng)中將一臺(tái)個(gè)人計(jì)算機(jī)作為USB系統(tǒng)中的主機(jī)。通過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)過程中,計(jì)算機(jī)通過發(fā)送查詢命令來獲得設(shè)備的這兩種節(jié)點(diǎn)特征以及其它信息。USB主機(jī)通過枚舉識(shí)別USB設(shè)備并給新連接的設(shè)備分配相應(yīng)地址。枚舉完成后,可以在客戶程序中用Mierochip提供的動(dòng)態(tài)鏈接庫(kù)(MPUSB.d11)中的函數(shù)(MPUSBOpen),打開
連接主機(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集成開發(fā)環(huán)境中編寫用于PIcl8F4550單片機(jī)的固件程序。
用數(shù)據(jù)傳送函數(shù)將接收到的參數(shù)從uSB RAM(要事先分配地址和容量)復(fù)制到一個(gè)數(shù)組(data.
(5)將數(shù)組中元素值賦給指定變量。例如,將加速度、速度參數(shù)賦給指定變量
mA=dataPacket[2];
//把發(fā)送過來的加速度值保存在變量mA
mV=dataPacket[3];
//把發(fā)送過來的****速度值保存在變量mv
(6)用數(shù)據(jù)傳輸指令將變量的值通過單片機(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ù)的操作。
PORTD=mA:
//把加速度參數(shù)賦給端口D。
WR_DATA();
//執(zhí)行向LM629寫數(shù)據(jù)的操作(將LM629的引腳cs、PS置低,WR拉高)
2以LM629為核心的高性能數(shù)字式運(yùn)動(dòng)控制
LM629是美國(guó)國(guó)家半導(dǎo)體(National Semieon—ductor)公司生產(chǎn)的可編程全數(shù)字運(yùn)動(dòng)控制芯片,內(nèi)置PID算法,通過閉環(huán)反饋控制,直流電動(dòng)機(jī)的運(yùn)轉(zhuǎn)速度和轉(zhuǎn)角位置保持在期望數(shù)值。支持實(shí)時(shí)讀取和設(shè)定速度、加速度以及位置等運(yùn)動(dòng)參數(shù),PID調(diào)節(jié)器需要的比例系數(shù)、積分系數(shù)和微分系數(shù)從芯片外部輸入。
LM629與PIc18F4550的連接分為數(shù)據(jù)線和控制線兩部分。LM629的數(shù)據(jù)口與PIc18tr4550的端口D相連,傳送命令或數(shù)據(jù)。LM629的cs、RD、Ps、WR、RsT、腳引腳分別與PIcl8F4550的端口c的引腳相連,通過特定的時(shí)序信號(hào),完成數(shù)據(jù)讀寫操作。
以下是在PIcl8F550單片機(jī)中,向LM629傳送加載P1D參數(shù)命令的操作步驟:
(1)將數(shù)據(jù)“1E”傳送到端口D(在LM629中,接收到的“1E”代表PID加載命令)。
(2)按照LM629寫操作的時(shí)序要求,設(shè)置端口c的相關(guān)引腳電平。實(shí)質(zhì)上是控制LM629芯片中引腳cs、Ps、WR、RD的電平。
(3)進(jìn)行忙(busy)檢測(cè),確認(rèn)L,M629可以作下一步操作。
(4)將PID控制字、PID參數(shù)(Kp、Ki、Kd、i1)依次送到端口D。
(5)執(zhí)行向LM629寫數(shù)據(jù)的操作(將LM629的引腳cs、Ps置低,WR拉高)。
步驟(3)、(4)、(5)依次循環(huán),直至P1D參數(shù)全部加載完畢。
在本設(shè)計(jì)實(shí)例中,LM629、L298、增量式光電碼盤和直流電動(dòng)機(jī)組成一個(gè)閉環(huán)控制系統(tǒng)。主控計(jì)算機(jī)通過運(yùn)動(dòng)規(guī)劃方面的計(jì)算,得出當(dāng)前時(shí)間段內(nèi)各直流驅(qū)動(dòng)電機(jī)旋轉(zhuǎn)的加速度、****速度和最終位置。用上述操作步驟,將運(yùn)動(dòng)參數(shù)傳送到LM629芯片,LM629中自帶的處理程序根據(jù)接收到的運(yùn)動(dòng)參數(shù)進(jìn)行運(yùn)算后輸出脈寬調(diào)制信號(hào),經(jīng)L298放大后驅(qū)動(dòng)電動(dòng)機(jī)。
3結(jié)語(yǔ)
本文提出一個(gè)靈活可變的直流電動(dòng)機(jī)驅(qū)動(dòng)方案。采用uSB通信和專用運(yùn)動(dòng)控制芯片(LM629),該芯片可代替上位計(jì)算機(jī)完成運(yùn)動(dòng)控制所需的大量實(shí)時(shí)計(jì)算任務(wù),并且成本低(一個(gè)控制模塊驅(qū)動(dòng)兩臺(tái)直流電動(dòng)機(jī)),控制精度高(進(jìn)行PID調(diào)節(jié))。與其它總線結(jié)構(gòu)相比,該系統(tǒng)不需要人為設(shè)置通訊地址,系統(tǒng)中各部分之間可以熱插拔,實(shí)現(xiàn)即插即用。適應(yīng)控制對(duì)象的頻繁變化,滿足教學(xué)實(shí)驗(yàn)和創(chuàng)意機(jī)器人開發(fā)等的實(shí)際需要。 
|