在中國科大首屆機器人舞蹈比賽中(中央10臺節(jié)目轉(zhuǎn)播),我們用一個單片機控制多個步進電機指揮跳舞機器人的雙肩、雙肘和雙腳伴著音樂做出各種協(xié)調(diào)舒緩充滿感情的動作,榮獲一等獎。電路采用74373鎖存,74LS244和ULN2003作電壓和電流驅(qū)動,單片機(Atc52)作脈沖序列信號發(fā)生器。程序設(shè)計基于中斷服務(wù)和總線分時利用方式,實時更新各個電機的速度、方向。整個舞蹈由運動數(shù)據(jù)所決定的一截截動作無縫連接而成。
znSlSQpTv : p)R,('g 1 步進電機簡介 }+bo?~2E& 步進電機根據(jù)內(nèi)部線圈個數(shù)不同分為二相制、三相制、四相制等。本文以四相制為例介紹其內(nèi)部結(jié)構(gòu)。圖1為四相五線制步進電機內(nèi)部結(jié)構(gòu)示意圖。
Jm#p!G+ O!^ >YvOh 2 四相五線制步進電機的驅(qū)動電路 J3~%9MCJ 電路主要由單片機工作外圍電路、信號鎖存和放大電路組成。我們利用了單片機的I/O端口,通過74373鎖存,由74LS244驅(qū)動,ULN2003對信號進行放大。8個電機共用4bit I/O端口作為數(shù)據(jù)總線,向電機傳送步進脈沖。每個電機分配1bit的I/O端口用作74373鎖存信號,鎖存步進電機四相脈沖,經(jīng)ULN2003放大到12V驅(qū)動電機運轉(zhuǎn)。
{Z7ixc523 u|T]Ne 電路原理圖(部分)如圖2所示。
D~BL Txq (1)Intel 8051系列單片機是一種8位的嵌入式控制器,可尋址64K字節(jié),共有32個可編程雙向I/O口,分別稱為P0~P3。該系列單片機上集成8K的ROM,128字節(jié)RAM可供使用。
S,ea[$_ (2)74LS244為三態(tài)控制芯片,目的是使單片機足以驅(qū)動ULN2003。ULN2003是常用的達(dá)林頓管陣列,工作電壓是12V,可以提供足夠的電流以驅(qū)動步進電機。關(guān)于這些芯片的詳細(xì)介紹可參見它們各自的數(shù)據(jù)手冊。
G;iH.rCH (3)74373是電平控制鎖存器,它可使多個步進電機共用一組數(shù)據(jù)總線。我們用P1.0~P1.7作為8個電機的鎖存信號輸出端,見表1。
0[M2LF!m .@%L8_sMR _x1W\# 這是一種基于總線分時復(fù)用的方式,以動態(tài)掃描的方式來發(fā)送控制信號,這和高級操作系統(tǒng)里的多任務(wù)進程調(diào)度的思想一致。這種方法明顯的好處是節(jié)省I/O口,使系統(tǒng)可以控制更多的步進電機。本電路設(shè)計為控制8個。
Z^z{,
u;! l qwy5# 3 程序設(shè)計 :CK`v6 Qs 傳統(tǒng)的步進電機驅(qū)動程序利用簡單的條件循環(huán)來發(fā)送脈沖序列,但當(dāng)電機數(shù)目發(fā)生變化時,編程繁雜,冗余代碼較多,難以做到信號占空比一致,進而產(chǎn)生“抖動”現(xiàn)象。下面提出一種基于中斷服務(wù)方式,面向舞蹈動作,可實時改變各個電機速度和方向(每200ms可改變一次)的程序設(shè)計方法。
PH%'^YAl7 3.1 速度歸一化和線性關(guān)系
g1}:;VG= 我們將速度量化成一個-128~127內(nèi)可變的數(shù),正號代表正轉(zhuǎn),負(fù)號代表返轉(zhuǎn),稱之歸一化速度(-128~127為一個字節(jié))。給每個電機分配一個速度累加計數(shù)器speed_tickers(I=0,1,2…,7分別代表8個電機),初始值為0,每個中斷觸發(fā)周期內(nèi)給該累加計數(shù)器加上從舞步信息數(shù)組dancedata中讀取的速度值speeds,當(dāng)計數(shù)器值大于或等于預(yù)設(shè)的閾值MAX_SPEED_TICKER=600時,則發(fā)送脈沖序列中的下一個(正轉(zhuǎn))或上一個(反轉(zhuǎn))給步進電機,這取決于速度的符號(參考3.2節(jié))。同時,將該電機的累加計數(shù)器speed_tickers恢復(fù)為0。給出的速度值speed越大,則累加達(dá)到或超過閾值MAX_SPEED_TICKER的時間就越短,那么向步進電機發(fā)送脈沖的頻率就越高,速度也就越快。
WJu(,zM?G 歸一化速度值設(shè)為num(-128~127),電機實際旋轉(zhuǎn)速度設(shè)為V,那么V和num之間滿足關(guān)系式:
;6D3>Lm (1)當(dāng)num是閾值600的約數(shù)時,
9<&M~(dwT4
u$C\#y7
其中,[x]代表不超過x的最大整數(shù)。
~]QQaP (3)V0是一個速度常數(shù),即當(dāng)歸一化速度值num=120的時候?qū)?yīng)的電機實際速度。
X7AxI\h (4)num和速度V近似線性關(guān)系,V∝num。正是因為有了這種函數(shù)關(guān)系,我們在舞蹈動作控制中,可以輕松實現(xiàn)速度在

大范圍內(nèi)變化。