您的位置:網(wǎng)站首頁 > 優(yōu)秀論文 > 正文
舵機在機器人技術中的應用及編程方法
作者:秦萍來源:原創(chuàng)日期:2013-12-07人氣:1953
1 舵機結(jié)構(gòu)及工作原理
舵機主要由舵盤、減速齒輪組、位置反饋電位器、直流電機、控制電路板組成,其工作原理(圖1所示):控制電路接收信號源的控制脈沖,并驅(qū)動電機轉(zhuǎn)動;齒輪組將電機的速度成大倍數(shù)縮小,并將電機的輸出扭矩放大響應倍數(shù),然后輸出;電位器和齒輪組的末級一起轉(zhuǎn)動,測量舵機軸轉(zhuǎn)動角度;電路板檢測并根據(jù)電位器判斷舵機轉(zhuǎn)動角度,然后控制舵機轉(zhuǎn)動到目標角度或保持在目標角度。
2 舵機的控制方法
舵機的控制信號為周期為20ms的脈寬調(diào)制信號,該脈沖的高電平部分一般為0.5ms~2.5ms,對應的舵機轉(zhuǎn)動角度為0~180°,理想情況下脈沖高電平寬度與舵機轉(zhuǎn)動角度成正比。即舵機轉(zhuǎn)動角度=180°×(脈沖高電平寬度-0.5)/2??梢杂脝纹瑱C作為舵機的控制單元,使PWM信號的脈沖寬度實現(xiàn)微秒級的變化,從而提高舵機的轉(zhuǎn)角精度。單片機完成控制算法,再將計算結(jié)果轉(zhuǎn)化為PWM信號輸出到舵機,由于單片機系統(tǒng)是一個數(shù)字系統(tǒng),整個系統(tǒng)工作可靠。單片機控制系統(tǒng)對舵機輸出轉(zhuǎn)角的控制,分為兩個步驟。第一步是產(chǎn)生基本的周期為20ms的PWM信號,第二步是PWM信號脈寬的確定,調(diào)整占空比??刂葡到y(tǒng)中實現(xiàn)一個舵機的控制,通常采用使用單片機的一個定時器來實現(xiàn)。根據(jù)PWM信號占空比,分別設定定時器中斷的初值,將20ms分為兩次中斷執(zhí)行,一次短時間中斷和一次較長時間中斷,控制輸出信號的電平變換,產(chǎn)生要求的PWM信號。
3 應用舉例及編程方法
我們采用宏晶STC12C5A60S2單片機,它是宏晶科技生產(chǎn)的高速、低功耗、超強抗干擾的新一代單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快近十倍。制作的自動投球機器人,機器人每次攜帶6個小球,通過單片機控制兩個舵機制作兩個擋板,擋板配合動作,將小球投到指定位置。兩個擋板初始位置為:下面的擋板1在“擋”位置、上面的擋板2在“縮”位置,開始向投球機器人裝入小球。啟動投球機器人后,擋板2運動到“擋”位置,按照規(guī)定的路線循跡運動,運動到指定位置后,投球機器人開始投球。具體動作為:擋板1“縮”,投下一個小球,然后擋板1“擋”,擋板2“縮”,第二個小球落到最下面的位置,然后擋板2“擋”,等待投球;依次類推,投入六個小球后,工作結(jié)束。
單片機晶振頻率為12MHz,P36輸出舵機1的PWM控制信號,P37作為輸出舵機2的PWM控制信號,分別采用16位定時器T0、T1產(chǎn)生兩路PWM信號P36、P37。
以舵機1控制為例,通過設定定時器T0工作在定時模式,定時時間到產(chǎn)生中斷來產(chǎn)生PWM信號。特殊功能寄存器AUXR中的T0x12、T1x12位分別設定T0、T1對系統(tǒng)時鐘進行12分頻還是不分頻計數(shù)定時,我們設定T0x12、T1x12為“0”,選擇對系統(tǒng)時鐘12分頻計數(shù)定時,則定時器計一個數(shù)時間為1us,產(chǎn)生2ms時間需計數(shù)2000個。初始時舵機1帶動擋板1運動到“擋”位置,根據(jù)擋板運動位置(舵機轉(zhuǎn)動角度)確定脈寬的初始值a,即a=(2000/180)*舵機轉(zhuǎn)動角度+500。然后設定定時器T0的初值TH0=-(65536-a)/256、TL0=-(65536-a)%256;并置輸出P36為高電平,啟動定時器T0,T0開始定時。當定時器計數(shù)溢出時,觸發(fā)計數(shù)器溢出中斷函數(shù)void timer0() interrupt 1 using 1,在子函數(shù)中,改變輸出P36為反相(此時變?yōu)榈碗娖剑?,計算ci =20000-a,并重新設定定時器T0的初值,直到定時器再次產(chǎn)生溢出中斷,重復上一過程。
參考程序(部分):
#define uchar unsigned char
#define uint unsigned int
sbit dj1=P3^6;
sbit dj2=P3^7;
uint a,bi,ci,d;
void timer0( ) interrupt 1 using 1
{
dj1=!dj1;
ci=20000-a;
TH0=(65536-ci)/256;
TL0=(65536-ci)%256;
TF0=0;
}
void djdang1()/*擋板1擋位置函數(shù)*/
{
dj1=1;
a=(2000/180)*130+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void djsuo1()/*擋板1縮位置函數(shù)*/
{
dj1=1;
a=(2000/180)*70+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void S_T() /*程序初始化*/
{
TMOD=0X11;
P3M1=0x00;
P3M0=0xff;
AUXR=0X00;
start_=1;
while(start_==1) //等待按鍵
{;}
}
void main() /*主函數(shù)*/
{
S_T();
djdang1();
djsuo2();
delay_ms(10000); /裝入小球
djdang2();
delay_ms(900);
……… ;//運行到指定位置
djsuo1();
delay_ms(800);
djdang1();
delay_ms(850);
djsuo2();
delay_ms(800);
djdang2();//投入一個小球
……………
}
舵機主要由舵盤、減速齒輪組、位置反饋電位器、直流電機、控制電路板組成,其工作原理(圖1所示):控制電路接收信號源的控制脈沖,并驅(qū)動電機轉(zhuǎn)動;齒輪組將電機的速度成大倍數(shù)縮小,并將電機的輸出扭矩放大響應倍數(shù),然后輸出;電位器和齒輪組的末級一起轉(zhuǎn)動,測量舵機軸轉(zhuǎn)動角度;電路板檢測并根據(jù)電位器判斷舵機轉(zhuǎn)動角度,然后控制舵機轉(zhuǎn)動到目標角度或保持在目標角度。
2 舵機的控制方法
舵機的控制信號為周期為20ms的脈寬調(diào)制信號,該脈沖的高電平部分一般為0.5ms~2.5ms,對應的舵機轉(zhuǎn)動角度為0~180°,理想情況下脈沖高電平寬度與舵機轉(zhuǎn)動角度成正比。即舵機轉(zhuǎn)動角度=180°×(脈沖高電平寬度-0.5)/2??梢杂脝纹瑱C作為舵機的控制單元,使PWM信號的脈沖寬度實現(xiàn)微秒級的變化,從而提高舵機的轉(zhuǎn)角精度。單片機完成控制算法,再將計算結(jié)果轉(zhuǎn)化為PWM信號輸出到舵機,由于單片機系統(tǒng)是一個數(shù)字系統(tǒng),整個系統(tǒng)工作可靠。單片機控制系統(tǒng)對舵機輸出轉(zhuǎn)角的控制,分為兩個步驟。第一步是產(chǎn)生基本的周期為20ms的PWM信號,第二步是PWM信號脈寬的確定,調(diào)整占空比??刂葡到y(tǒng)中實現(xiàn)一個舵機的控制,通常采用使用單片機的一個定時器來實現(xiàn)。根據(jù)PWM信號占空比,分別設定定時器中斷的初值,將20ms分為兩次中斷執(zhí)行,一次短時間中斷和一次較長時間中斷,控制輸出信號的電平變換,產(chǎn)生要求的PWM信號。
3 應用舉例及編程方法
我們采用宏晶STC12C5A60S2單片機,它是宏晶科技生產(chǎn)的高速、低功耗、超強抗干擾的新一代單片機,指令代碼完全兼容傳統(tǒng)8051,但速度快近十倍。制作的自動投球機器人,機器人每次攜帶6個小球,通過單片機控制兩個舵機制作兩個擋板,擋板配合動作,將小球投到指定位置。兩個擋板初始位置為:下面的擋板1在“擋”位置、上面的擋板2在“縮”位置,開始向投球機器人裝入小球。啟動投球機器人后,擋板2運動到“擋”位置,按照規(guī)定的路線循跡運動,運動到指定位置后,投球機器人開始投球。具體動作為:擋板1“縮”,投下一個小球,然后擋板1“擋”,擋板2“縮”,第二個小球落到最下面的位置,然后擋板2“擋”,等待投球;依次類推,投入六個小球后,工作結(jié)束。
單片機晶振頻率為12MHz,P36輸出舵機1的PWM控制信號,P37作為輸出舵機2的PWM控制信號,分別采用16位定時器T0、T1產(chǎn)生兩路PWM信號P36、P37。
以舵機1控制為例,通過設定定時器T0工作在定時模式,定時時間到產(chǎn)生中斷來產(chǎn)生PWM信號。特殊功能寄存器AUXR中的T0x12、T1x12位分別設定T0、T1對系統(tǒng)時鐘進行12分頻還是不分頻計數(shù)定時,我們設定T0x12、T1x12為“0”,選擇對系統(tǒng)時鐘12分頻計數(shù)定時,則定時器計一個數(shù)時間為1us,產(chǎn)生2ms時間需計數(shù)2000個。初始時舵機1帶動擋板1運動到“擋”位置,根據(jù)擋板運動位置(舵機轉(zhuǎn)動角度)確定脈寬的初始值a,即a=(2000/180)*舵機轉(zhuǎn)動角度+500。然后設定定時器T0的初值TH0=-(65536-a)/256、TL0=-(65536-a)%256;并置輸出P36為高電平,啟動定時器T0,T0開始定時。當定時器計數(shù)溢出時,觸發(fā)計數(shù)器溢出中斷函數(shù)void timer0() interrupt 1 using 1,在子函數(shù)中,改變輸出P36為反相(此時變?yōu)榈碗娖剑?,計算ci =20000-a,并重新設定定時器T0的初值,直到定時器再次產(chǎn)生溢出中斷,重復上一過程。
參考程序(部分):
#define uchar unsigned char
#define uint unsigned int
sbit dj1=P3^6;
sbit dj2=P3^7;
uint a,bi,ci,d;
void timer0( ) interrupt 1 using 1
{
dj1=!dj1;
ci=20000-a;
TH0=(65536-ci)/256;
TL0=(65536-ci)%256;
TF0=0;
}
void djdang1()/*擋板1擋位置函數(shù)*/
{
dj1=1;
a=(2000/180)*130+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void djsuo1()/*擋板1縮位置函數(shù)*/
{
dj1=1;
a=(2000/180)*70+500;
TH0=-(a/256);
TL0=-(a%256);
EA=1;
ET0=1;TR0=1;
}
void S_T() /*程序初始化*/
{
TMOD=0X11;
P3M1=0x00;
P3M0=0xff;
AUXR=0X00;
start_=1;
while(start_==1) //等待按鍵
{;}
}
void main() /*主函數(shù)*/
{
S_T();
djdang1();
djsuo2();
delay_ms(10000); /裝入小球
djdang2();
delay_ms(900);
……… ;//運行到指定位置
djsuo1();
delay_ms(800);
djdang1();
delay_ms(850);
djsuo2();
delay_ms(800);
djdang2();//投入一個小球
……………
}
欄目分類
熱門排行
推薦信息
期刊知識
- 2025年中科院分區(qū)表已公布!Scientific Reports降至三區(qū)
- 官方認定!CSSCI南大核心首批191家“青年學者友好期刊名單”
- 2023JCR影響因子正式公布!
- 國內(nèi)核心期刊分級情況概覽及說明!本篇適用人群:需要發(fā)南核、北核、CSCD、科核、AMI、SCD、RCCSE期刊的學者
- 我用了一個很復雜的圖,幫你們解釋下“23版最新北大核心目錄有效期問題”。
- 重磅!CSSCI來源期刊(2023-2024版)最新期刊目錄看點分析!全網(wǎng)首發(fā)!
- CSSCI官方早就公布了最新南核目錄,有心的人已經(jīng)拿到并且投入使用!附南核目錄新增期刊!
- 北大核心期刊目錄換屆,我們應該熟知的10個知識點。
- 注意,最新期刊論文格式標準已發(fā)布,論文寫作規(guī)則發(fā)生重大變化!文字版GB/T 7713.2—2022 學術論文編寫規(guī)則
- 盤點那些評職稱超管用的資源,1,3和5已經(jīng)“絕種”了