吳 清,劉紅周,鄭建榮
(華東理工大學,上海 200237)
?
分時復用PWM模塊的多舵機控制信號的實現(xiàn)
吳 清,劉紅周,鄭建榮
(華東理工大學,上海 200237)
提出了一種基于分時復用單片機/DSP內部PWM模塊產(chǎn)生多路電動舵機控制信號的方法。利用內部的PWM模塊硬件中斷功能,輔以必要的硬件電路,可以從1路分時復用PWM模塊中分離出8路舵機信號。單片機/DSP內部的PWM模塊越多,可擴展的舵機控制信號就越多。通過ATmega128的軟硬件仿真,驗證了其可行,并實現(xiàn)了48路PWM信號。該控制信號產(chǎn)生的優(yōu)勢是利用內部的PWM模塊功能和硬件中斷工作方式,通過少量的I/O口輸出多路舵機控制信號,占用系統(tǒng)資源少、精度高、軟件簡單、實時性好。
分時復用; PWM模塊; 電動舵機; 單片機; DSP
電動舵機可以看成是一個集成了直流電機、角度位置傳感器、電機控制器和減速器等的電機系統(tǒng),它封裝在一個便于使用安裝的外殼里,可以比較精確地轉動設定的角度。正是由于其集成后便于安裝和可用程序連續(xù)控制其轉角的特點,被廣泛應用在智能機器人、電動假肢中,以實現(xiàn)轉向及各類關節(jié)運動。
電動舵機的控制信號是一個脈寬調制(PWM)信號。一般由于機器人或假肢有許多關節(jié),所以往往需要控制器能夠產(chǎn)生多路PWM信號。目前PWM信號的產(chǎn)生常見方法是采用CPLD/FPGA[1-2]和單片機/DSP[3-8],前者依靠CPLD/FPGA具有的內部并行工作能力和大量的可編程輸入輸出接口特點,可以實現(xiàn)幾十甚至上百個舵機同時工作,但由于開發(fā)設備昂貴,成本高,使用門檻高,限制了它的應用范圍。后者通用性強,內部集成有硬件PWM模塊,使用簡單方便,在通道數(shù)不多時可以直接使用,但如果需要多路PWM信號時,現(xiàn)有方法并不用內部PWM模塊功能,而是采用定時器結合軟硬件計數(shù)功能,通過軟件算法控制各引腳的高低電平實現(xiàn)多路PWM信號輸出[3-8],可以達到24路[8]和32路PWM輸出[5,7]。后者雖然實現(xiàn)了多路PWM信號,但由于采用定時器作為最小時間單元,使用計數(shù)器或軟件循環(huán)查詢各路PWM高電平時間,通過判斷時間是否匹配控制對應引腳的高低電平,因此軟件算法復雜,效率低,也沒有充分地利用已有的內部PWM模塊功能,路數(shù)越多越復雜,實現(xiàn)越困難。同時定時器的周期也不可能無限小,精度和內部PWM模塊無法相比。本文則采用了和上面相反的方法,仍然使用單片機/DSP內部的PWM模塊,在分時復用基礎上利用內部PWM模塊中斷功能,軟件上只要在中斷程序中循環(huán)改變PWM模塊的設定值,外圍擴展簡單的分離電路,便可實現(xiàn)多路PWM信號的產(chǎn)生,既充分利用內部PWM模塊高精度和使用方便的優(yōu)點,軟件算法也簡單,硬件引腳占用也少,實時性高。這樣整個系統(tǒng)在多路PWM的控制中占用資源少,系統(tǒng)可以有更多的軟硬件資源用在其他控制功能上。
電動舵機的控制信號是一個脈寬調制信號,其周期為20 ms、脈沖寬度為0.5~2.5 ms。脈沖寬度數(shù)值范圍對應的舵盤位置范圍為0°~180°。因此PWM模塊產(chǎn)生一路PWM信號(S1)在整個20 ms周期中,高電平信號最多只用到了2.5 ms,其他時間都是保持低電平。所以每個S1信號也可以看成由2.5 ms周期PWM信號(S2)和17.5 ms的低電平信號(S3)組成,其關系如圖1所示。如果S3信號可以借助外部電路獲得,那么單片機對S1信號的產(chǎn)生就變成了只對S2信號的產(chǎn)生。而S2是一個周期為2.5 ms,高電平是0.5~2.5 ms的PWM信號。這樣原來在20 ms時間內PWM模塊只能產(chǎn)生1路PWM信號,利用PWM模塊的定時溢出中斷功能,在中斷程序中每2.5 ms給PWM模塊一組參數(shù)和輸出對應PWM的通道序號,就可以在原來1路信號上分時串聯(lián)產(chǎn)生8路PWM信號,其關系如圖2所示。最后通過通道序號信號結合分離電路將8路PWM信號分離開,達到分時復用的效果。

圖1 PWM信號S1波形

圖2 分時串聯(lián)產(chǎn)生8通道PWM信號
分離電路如圖3所示。該分離電路即可實現(xiàn)對8路信號的分離,也同時實現(xiàn)S3信號。實現(xiàn)過程如下:1) 多路分時復用PWM信號經(jīng)過非門取反;2) 和分時復用PWM信號對應的通道號信號經(jīng)過一個3-8譯碼器,獲得8路分離的通道有效信號;3) 上面2路信號通過或非運算將原來復用的信號完全分離出來,同時產(chǎn)生S3信號。以通道1為例,其時序圖見圖4,其它通道類似。

圖3 分時復用分離電路模塊

圖4 分離電路通道1時序圖
為驗證原理可行,本文以ATmega128[9]為例,通過軟硬件的配合實現(xiàn)多路舵機控制。ATmega128為基于AVR RISC結構的8位低功耗CMOS微處理器,數(shù)據(jù)吞吐率高達1 MIPS/MHz,128 kB的系統(tǒng)內可編程Flash,53個通用I/O口,4個定時器/計數(shù)器,6路分辨率可編程2~16位的PWM模塊。這6路PWM通道分為2組,分別通過定時器/計數(shù)器1和定時器/計數(shù)器3來實現(xiàn),每組對應3個單片機引腳,分別用后綴A,B,C區(qū)分,表示通道A、通道B和通道C。對應設置占空比寄存器為OCR1A,OCR1B,OCR1C和OCR3A,OCR3B,OCR3C。因此按1的原理,6路PWM將可實現(xiàn)48路PWM輸出。
2.1 硬件電路設計
系統(tǒng)的原理圖如圖5所示。整個電路主要用到ATmega128的6路PWM模塊接口,其中分時復用分離電路模塊的原理圖如圖6所示,晶振為8 MHz。

圖5 系統(tǒng)總體原理圖

圖6 分時復用分離電路模塊原理圖
圖5系統(tǒng)原理圖說明如下,ATmega128的6路PWM信號輸出引腳是OC1A,OC1B,OC1C和OC3A,OC3B,OC3C,單片機的PA0,PA1,PA2引腳和PC0,PC1,PC2引腳分別配合PWM信號輸出相應通道的序號值。所有信號經(jīng)過分離電路模塊,就將原來分時復用的PWM信號還原為獨立的48個通道PWM信號。在圖6中的具體電路和圖3原理圖有一點差別,圖6沒有非門,主要是ATmega128的PWM的輸出極性可以設定取反(如果單片機沒有這個功能,需要非門),這里就省掉了一個非門簡化了電路,但在軟件中要注意這點,由于極性反了,軟件中PWM控制的就是原來低電平的時長了,在下面軟件中通過“2 500-PWM通道占空比的值”實現(xiàn)。
2.2 軟件實現(xiàn)
在AVR Studio 6.2中開發(fā)軟件,其軟件實現(xiàn)如主程序框圖7和中斷溢出程序框圖8所示。

圖7 主程序框圖

圖8 溢出中斷程序框圖
定義6個PWM通道占空比的值所放的全局數(shù)組:PWM_Duty1A[8]、 PWM_Duty1B[8]、 PWM_Duty1C[8]、PWM_Duty3A[8]、PWM_Duty3B[8]和PWM_Duty3C[8]。
主程序對系統(tǒng)初始化關鍵代碼如下:
DDRA=0xFF; //PA口設為輸出
DDRC=0xFF; //PC口設為輸出
PORTA=0x00; //初始PA口為0
PORTC=0x00; //初始PC口為0
sei(); //使能全局中斷
主程序對PWM模塊組1的初始化代碼如下:
TCCR1A=0xAA; //組1通道A,B,C均設置為比較輸出模式,比較匹配時清0
TCCR1B=0x1A; //采用快速PWM模式,8分頻
DDRB=0xFF; //PB口設為輸出
OCR1A=2500-PWM_Duty1A[0]; //賦值組1通道A的占空比,由于極性取反,要用2500相減
OCR1B=2500-PWM_Duty1B[0]; //賦值組1通道B的占空比,由于極性取反,要用2500相減
OCR1C=2500-PWM_Duty1C[0]; //賦值組1通道C的占空比,由于極性取反,要用2500相減
TCNT1=0X0000; //設置定時器1的初始值為0
ICR1=0x09C4; //PWM周期為2500,跟晶振有關
TIMSK=0X04; //允許定時器1溢出中斷
主程序對PWM模塊組2的初始化程序和上面類似。
在溢出中斷程序中,完成循環(huán)計數(shù)、送出相應通道號序號值和對應占空比值,由于ATmega128單片機OCRnx寄存器是雙緩沖結構,這次寫的值在下一個周期起作用,所以程序中需要Count1-1送出對應通道號序號值。PWM組1的溢出中斷程序關鍵代碼如下:
Count1++; //循環(huán)計數(shù)
if(Count1==8) //一共8個通道循環(huán)
{
Count1=0;
PORTA=7; //送出對應通道序號
}
else PORTA=Count1-1; //送出對應通道序號
//賦值組1的通道A、B、C對應PWM的占空比
OCR1A=2500-PWM_Duty1A[Count1];
OCR1B=2500-PWM_Duty1B[Count1];
OCR1C=2500-PWM_Duty1C[Count1];
對PWM組2的溢出中斷程序和上面類似。
2.3 實驗結果
通過AVR Studio 6.2和Proteus 8 Professional軟件聯(lián)合仿真,設定PWM組1的A通道的占空比數(shù)據(jù):PWM_Duty1A[]={100,300,500,700,900,1 100,1 300,1 500},對應單片機OC1A引腳和分離電路PWM 0~7這8個引腳的波形時序圖見圖9,時間是60 ms,顯示了3個完整PWM周期。
其他5個單片機引腳和40個分離電路引腳類似,結果表明本文的軟硬件可以完全實現(xiàn)48路PWM信號輸出,提出的分時復用方法可行。
以ATmega128單片機為實例,通過AVR Studio 6.2和Proteus 8 Professional軟件聯(lián)合仿真,可以得出本文分時復用PWM模塊原理完全可行,可以實現(xiàn)原來1路PWM模塊通過分時復用實現(xiàn)8路PWM信號,單片機/DSP只要內部有PWM模塊就完全可以實現(xiàn)本文的方法,充分發(fā)揮了內部PWM模塊的高精度和易用性。并演示了只用12個引腳就實現(xiàn)了48路高精度PWM信號輸出,實時性高和算法簡單。在需要多路PWM控制舵機的場合,只要再配上相應驅動接口,就可以成為一個功能強大的控制器,對電動舵機在機器人、電動假肢和航模等應用具有很強參考價值和實用價值。
[1] 米月星,林輝,李志.基于DSP+CPLD的四電動舵機伺服控制器設計[J].微特電機,2012,40(8):61-62,70.
[2] 王爾申,陳士英,石劍民.基于FPGA的機載PWM 信號轉換器仿真與實現(xiàn)[J].計算機工程與設計,2013,34(8):2850-2854.
[3] 劉學菁.舵機對機器人的驅動控制[J].天津職業(yè)院校聯(lián)合學報,2011,13(10):82-95.
[4] 莊嚴,宋鳴,張劭鳳,等.基于51單片機的六足機器人控制系統(tǒng)設計與制作[J].價值工程,2013,32(30):51-53.
[5] 付麗,劉衛(wèi)國,伊強.單片機控制的多路舵機用PWM波產(chǎn)生方法[J].微特電機,2006,34(2):28-29.
[6] 韓慶瑤,洪草根,朱曉光,等.基于AVR單片機的多舵機控制系統(tǒng)設計及仿真[J].計算機測量與控制,2011,19(2):332-334.
[7] 邵平,莫燕斌,連晉平,等.一種基于74HC595產(chǎn)生舵機用多路PWM波的方法[J].肇慶學院學報,2013,34(5):1-5.
[8] 梁鋒,王志良,解侖,等.多舵機控制在類人機器人上的應用[J].微計算機信息,2008,24(1):242-243.
[9] 沈建良,趙文宏,賈玉坤,等.ATmega128單片機入門與提高[M].北京:北京航空航天大學出版社,2009.
Multi-Channel Control Signal of Electrical Steering Gear Based on Time-Division Multiplexing PWM Module
WUQing,LIUHong-zhou,ZHENGJian-rong
(East China University of Science and Technology,Shanghai 200237,China)
A novel method to implement multi-channel control signal of electrical steering gear based on time-division multiplexing PWM module was presented. With some simple external circuits, a MCU/DSP's PWM module output function was integrated and timer overflow interrupt function was integrated to separate eight control signals from a time-division multiplexing PWM module. The more an MCU/DSP has PWM modules, the more control signal channels can be extended. The feasibility of this solution was verified by the simulation of hardware and software of the ATmega128 and 48 PWM signals were realized. The advantage of this solution is integrating PWM's hardware module and software interrupt function to realize multi-channel control signals by using a small number of MCU/DSP I/O outputs, which occupies less system resources with high precision, easy programming and good real-time performance.
time division multiplexing; PWM module; electrical steering gear; single chip microcomputer; DSP
2015-11-06
TM33
A
1004-7018(2016)08-0113-04
吳清(1972-),男,博士,講師,研究方向為嵌入式系統(tǒng)開發(fā)、機電一體化應用。