標(biāo)題: 詳細(xì)的舵機控制原理資料 [打印本頁]
作者: dfevfvdvfd 時間: 2017-3-4 23:13
標(biāo)題: 詳細(xì)的舵機控制原理資料
目錄
一.舵機PWM信號介紹... 1
1.PWM信號的定義... 1
2.PWM信號控制精度制定... 2
二.單舵機拖動及調(diào)速算法... 3
1.舵機為隨動機構(gòu)... 3
(1)HG14-M舵機的位置控制方法... 3
(2)HG14-M舵機的運動協(xié)議... 4
2.目標(biāo)規(guī)劃系統(tǒng)的特征... 5
(1)舵機的追隨特性... 5
(2)舵機ω值測定... 6
(3)舵機ω值計算... 6
(4)采用雙擺試驗驗證... 6
3.DAV的定義... 7
4.DIV的定義... 7
5.單舵機調(diào)速算法... 8
(1)舵機轉(zhuǎn)動時的極限下降沿PWM脈寬... 8
三.8舵機聯(lián)動單周期PWM指令算法... 10
1.控制要求... 10
2.注意事項... 10
3.8路PWM信號發(fā)生算法解析... 11
4.N排序子程序RAM的制定... 12
5.N差子程序解析... 13
6.關(guān)于掃尾問題... 14
(1)提出掃尾的概念... 14
(2)掃尾值的計算... 14
一.舵機PWM信號介紹1.PWM信號的定義PWM信號為脈寬調(diào)制信號,其特點在于他的上升沿與下降沿之間的時間寬度。具體的時間寬窄協(xié)議參考下列講述。我們目前使用的舵機主要依賴于模型行業(yè)的標(biāo)準(zhǔn)協(xié)議,隨著機器人行業(yè)的漸漸獨立,有些廠商已經(jīng)推出全新的舵機協(xié)議,這些舵機只能應(yīng)用于機器人行業(yè),已經(jīng)不能夠應(yīng)用于傳統(tǒng)的模型上面了。
目前,北京漢庫的HG14-M舵機可能是這個過渡時期的產(chǎn)物,它采用傳統(tǒng)的PWM協(xié)議,優(yōu)缺點一目了然。優(yōu)點是已經(jīng)產(chǎn)業(yè)化,成本低,旋轉(zhuǎn)角度大(目前所生產(chǎn)的都可達到185度);缺點是控制比較復(fù)雜,畢竟采用PWM格式。
但是它是一款數(shù)字型的舵機,其對PWM信號的要求較低:
(1) 不用隨時接收指令,減少CPU的疲勞程度;
(2) 可以位置自鎖、位置跟蹤,這方面超越了普通的步進電機;
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.gif |
其PWM格式注意的幾個要點:
(1) 上升沿最少為0.5mS,為0.5mS---2.5mS之間;
(2) HG14-M數(shù)字舵機下降沿時間沒要求,目前采用0.5Ms就行;也就是說PWM波形可以是一個周期1mS的標(biāo)準(zhǔn)方波;
(3) HG0680為塑料齒輪模擬舵機,其要求連續(xù)供給PWM信號;它也可以輸入一個周期為1mS的標(biāo)準(zhǔn)方波,這時表現(xiàn)出來的跟隨性能很好、很緊密。
2.PWM信號控制精度制定file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.gif
1 DIV = 8uS ;250DIV=2mS
時基寄存器內(nèi)的數(shù)值為:(#01H)01 ----(#0FAH)250。
共185度,分為250個位置,每個位置叫1DIV。
則:185÷250 = 0.74度 / DIV
PWM上升沿函數(shù): 0.5mS + N×DIV
0uS ≤ N×DIV ≤ 2mS
0.5mS ≤ 0.5Ms+N×DIV ≤ 2.5mS
二.單舵機拖動及調(diào)速算法1.舵機為隨動機構(gòu)(1)當(dāng)其未轉(zhuǎn)到目標(biāo)位置時,將全速向目標(biāo)位置轉(zhuǎn)動。
(2)當(dāng)其到達目標(biāo)位置時,將自動保持該位置。
所以對于數(shù)字舵機而言,PWM信號提供的是目標(biāo)位置,跟蹤運動要靠舵機本身。
(3)像HG0680這樣的模擬舵機需要時刻供給PWM信號,舵機自己不能鎖定目標(biāo)位置。
所以我們的控制系統(tǒng)是一個目標(biāo)規(guī)劃系統(tǒng)。
(1)HG14-M舵機的位置控制方法舵機的轉(zhuǎn)角達到185度,由于采用8為CPU控制,所以控制精度最大為256份。目前經(jīng)過實際測試和規(guī)劃,分了250份。具體劃分參見《250份劃分原理》。
將0—185分為250份,每份0.74度。
控制所需的PWM寬度為0.5ms—2.5ms,寬度2ms。
2ms÷250=8us;
所以得出:PWM信號 =1度/8us;
|
|
|
|
|
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.gif |
|
| |
|
| PWM = 0.5 + N×DIV;(DIV=8us)
| |
(2)HG14-M舵機的運動協(xié)議
|
|
|
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.jpg |
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image008.gif |
|
運動時可以外接較大的轉(zhuǎn)動負(fù)載,舵機輸出扭矩較大,而且抗抖動性很好,電位器的線性度較高,達到極限位置時也不會偏離目標(biāo)。
2.目標(biāo)規(guī)劃系統(tǒng)的特征(1)舵機的追隨特性file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.gif
① 舵機穩(wěn)定在A點不動;
② CPU發(fā)出B點位置坐標(biāo)的PWM信號;
③ 舵機全速由A點轉(zhuǎn)向B點;
④ CPU發(fā)出B點PWM信號后,應(yīng)該等待一段時間,利用此時間舵機才能轉(zhuǎn)動至B點。
那么,具體的保持(等待)時間如何來計算,如下講解:
令:保持時間為Tw
當(dāng)Tw≥△T時,舵機能夠到達目標(biāo),并有剩余時間;
當(dāng)Tw≤△T時,舵機不能到達目標(biāo);
理論上:當(dāng)Tw=△T時,系統(tǒng)最連貫,而且舵機運動的最快。
實際過程中由于2個因素:
① 1個機器人身上有多個舵機,負(fù)載個不相同,所以ω不同;
② 某個舵機在不同時刻的外界環(huán)境負(fù)載也不同,所以ω不同;
則連貫運動時的極限△T難以計算出來。
目前采取的方法是經(jīng)驗選取ω值。
(2)舵機ω值測定舵機的ω值隨時變化,所以只能測定一個平均值,或稱出現(xiàn)概率最高的點。
依據(jù) ① 廠商的經(jīng)驗值;
② 采用HG14-M具體進行測試;
測試實驗:① 將CPU開通,并開始延時Tw;
② 當(dāng)延時Tw到達后,觀察舵機是否到達目標(biāo);
測定時采用一段雙擺程序,伴隨示波器用肉眼觀察Tw與△T的關(guān)系。
(3)舵機ω值計算一般舵機定為0.16--0.22秒/60度;
取0.2秒/60度>> 1.2秒/360度>> 0.617秒/185度
則ω為360度/1.2秒,2Π/1.2秒
ω=300度/秒
那么185度轉(zhuǎn)動的時間為185度÷360度/1.2秒 = 0.6167秒。
(4)采用雙擺試驗驗證
|
|
|
|
|
|
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.gif |
|
| |
|
|
| 發(fā)現(xiàn):當(dāng)Tw定在0.618秒時,利用示波器觀察到舵機能夠運動至2個目標(biāo)點。 則:Tw=△T= 0.618秒
| |
|
|
| 實驗過程中,設(shè)定舵機運轉(zhuǎn)的目標(biāo)角度查為185度。
| |
|
|
| |
|
3.DAV的定義將185度的轉(zhuǎn)角分為250個平均小份。
則:每小份為0.74度。
定義如下:DAV =0.74度
由于:ω = 0.2秒/60度
則:運行1 DAV所需時間為:0.72度÷0.2秒/60度 = 2.4 mS;
4.DIV的定義舵機電路支持的PWM信號為0.5mS—2.5mS,總間隔為2mS。
若分為250小份,則2mS÷250 = 0.008 mS = 8uS
定義如下:DIV = 8uS
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image012.gif
那么1 DAV(0.74度)對應(yīng)的△T為:0.74度÷60度/0.2秒 =2.4 67mS.。
5.單舵機調(diào)速算法
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.gif |
測試內(nèi)容:將后部下降沿的時間拉至30ms沒有問題,舵機照樣工作。
將后部下降沿的時間拉至10ms沒有問題,舵機照樣工作。
將后部下降沿的時間拉至2.6ms沒有問題,舵機照樣工作。
將后部下降沿的時間拉至500us沒有問題,舵機照樣工作。
實踐檢驗出:下降沿時間參數(shù)可以做的很小。目前實驗降至500uS,依然工作正常。
原因是:(1)舵機電路自動檢測上升沿,遇上升沿就觸發(fā),以此監(jiān)測PWM脈寬“頭”。
(2)舵機電路自動檢測下降沿,遇下降沿就觸發(fā),以此監(jiān)測PWM脈寬“尾”。
(1)舵機轉(zhuǎn)動時的極限下降沿PWM脈寬
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image014.gif |
△T:舵機運轉(zhuǎn)1DAV(7.4度)所需要的最小時間,目前計算出的數(shù)值為2.467mS;
△T前面的20 mS等待時間可以省略,舵機依然工作;而且得出舵機跟隨的最快驅(qū)動方式。
|
|
|
|
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image016.jpg |
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.gif |
|
舵機Tw數(shù)據(jù)實驗表格
Tw值 | | | | |
500us | | | |
|
800us | | | |
|
1ms | | | |
|
|
1.1ms | | | | |
1.2ms | | | | |
1.6ms | | | | |
2ms | | | | |
2.6ms | | | | |
10ms | | | | |
20ms | | | | |
30ms | | | | |
40ms | | | | |
50ms | | | | |
|
70ms | | | | |
100ms | | | | |
|
|
|
|
|
令人質(zhì)疑的地方為1.1ms時的表現(xiàn),得出的Tw≈ △T;
也就是說1.1ms =2.467ms,顯然存在問題。
經(jīng)過考慮重新觀察PWM波形圖發(fā)現(xiàn),電機真正的啟動點如下圖:
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image018.gif |
實際上由A到B的運動時間為:△T = Tw +(B點的)PWM
三.8舵機聯(lián)動單周期PWM指令算法1.控制要求要求同時發(fā)給8個舵機位置目標(biāo)值,該指令的執(zhí)行周期盡量短,目的有2個:
其一,是為了將來擴充至24舵機;其二,目標(biāo)越快,舵機的轉(zhuǎn)動速度越快;
我們以8路為1組或稱1個單位,連續(xù)發(fā)出目標(biāo)位置,形成連續(xù)的目標(biāo)規(guī)劃曲線,電機在跟隨過程中自然形成了位置與速度的雙指標(biāo)曲線,實現(xiàn)8路舵機聯(lián)動。
2.注意事項從24個端口,P0.0、P1.0到P2.0,單DIV循環(huán)的最小時間只有8us,所以串行運算是不行的,那么就采用并行運算。
目前采用的并行算法是P0.0—P0.7為一個基本單位,8位一并。
實際案例:P1口的8個位置個不相同;
端口 | | | | | | | | |
N寄存器 | | | | | | | | |
目標(biāo)位置(度) | | | | | | | | |
N數(shù)值(整數(shù)) | | | | | | | | |
PWM寬度ms | | | | | | | | |
注意:N為整數(shù),依照上表看出,由于整數(shù)原因,定位不能實現(xiàn)的有45度、60度等。
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image020.gif |
3.8路PWM信號發(fā)生算法解析我們預(yù)計將整個周期控制在3.5-5ms內(nèi);
由上圖得知:P1口的8個端在不同時間產(chǎn)生下降沿。
那么由上例如:我們的P1.5口,他的N為125
那么就需要它在125個DIV后產(chǎn)生下降沿,時間為(125*8us=1000us)。
我們在其中發(fā)現(xiàn)2個關(guān)鍵參數(shù):①時間參數(shù)N=125
②邏輯參數(shù) P1.5=#0DFH
邏輯參數(shù)的定義:如下,采用ANL指令,操作P1口。
| | | | | | | | | | P1.0= # FEH | | | | | | | | |
| P1.1= # FDH | | | | | | | | |
| P1.2= # FBH | | | | | | | | |
| P1.3= # F7H | | | | | | | | |
| P1.4= # EFH | | | | | | | | |
| P1.5= # DFH | | | | | | | | |
| P1.6= # BFH | | | | | | | | |
| P1.7= # 7FH | | | | | | | | |
|
| |
ANL端口邏輯參數(shù)表
例如:將P1.5口產(chǎn)生下降沿,就將# 0DFH 去“ANL” P1口。
邏輯“ANL”指令,馮“0”得“0”,不影響其他位。
具體的程序操作如下:
① 開3.5ms定時中斷
② 取出8個端(P1.0-P1.7)的位置值,也就是8個N值;并賦予相應(yīng)的端邏輯參數(shù);
M5=N5-N4 M6=N6-N5 M7=N7-N6 M8=N8-N7
| |
M1=N1 M2=N2-N1 M3=N3-N2 M4=N4-N3
| |
③ 將這8個值由大到小排列,相應(yīng)端的邏輯參數(shù)值也隨著N的順序排列,一一對應(yīng);④ 將N值做減法,求得:
⑤ 取出 M1,延時M1*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M2,延時M2*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M3,延時M3*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M4,延時M4*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M5,延時M5*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M6,延時M6*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M7,延時M7*DIV,ANL相應(yīng)的邏輯參數(shù);
取出 M8,延時M8*DIV,ANL相應(yīng)的邏輯參數(shù);
⑥ 8個端的下降沿全部產(chǎn)生完畢,等待一定的Tw值,或等待3.5ms中斷的到來;
⑦ 中斷到來后,清理中斷標(biāo)志,然后結(jié)束該程序。RET
注意事項:當(dāng)進行逐個排序延時的過程中,CPU要取出M1、M2、M3….M8,那么會有1個取數(shù)指令周期,當(dāng)CPU采用12MHz時為1us。最終應(yīng)該在第8個延時,即M8時扣除掉,具體指令參見指令集。
4.N排序子程序RAM的制定入口處
| | | | | | | | |
N值寄存器地址 | | | | | | | | |
ANL邏輯數(shù)寄存器地址 | | | | | | | | |
ANL邏輯數(shù)值 | | | | | | | | |
|
|
|
|
|
|
|
|
|
備注:37寄存器內(nèi)存放的是P1.7端口的N值;3F寄存器內(nèi)存放的是P1.7端口的ANL邏
輯參數(shù)值;
出口處
從左到右為N值從大到小排列 (大> N值 > 。
N值寄存器地址 | | | | | | | | |
ANL邏輯數(shù)寄存器地址 | | | | | | | | |
ANL邏輯數(shù)值 | | | | | | | | |
|
|
|
|
|
|
|
|
|
所謂的“未知”:由于排列按照大到小順序,“未知”內(nèi)存放的為端口信息要根據(jù)排序
做相應(yīng)的調(diào)整。
備注:30H內(nèi)存放的是某位的N值,其值最大;
37H內(nèi)存放的是某位的N值,其值最;
38H—3FH內(nèi)存放ANL數(shù),可以根據(jù)其數(shù)值判斷出是具體那個端口的下降沿。
例如:其值為“#FBH”那么它就是P1.2;
5.N差子程序解析所謂N差子程序,要觀察PWM口的邏輯時序特性。要求連續(xù)將8位端口分別產(chǎn)生
下降沿。所以有個先后問題,解決的方法有2種:
①打開8個時間中斷;
②按先后順序排列,先后觸發(fā);
由于CPU不能開啟8個中斷,所以采用后者方法,那么,就可以得出以下結(jié)論:
第1個 觸發(fā)位所用的時間為 N1- 0 =M1;
第2個 觸發(fā)位所用的時間為 N2-N1=M2;
第3個 觸發(fā)位所用的時間為 N3-N2=M3;
第4個 觸發(fā)位所用的時間為 N4-N3=M4;
第5個 觸發(fā)位所用的時間為 N5-N4=M5;
第6個 觸發(fā)位所用的時間為 N6-N5=M6;
第7個 觸發(fā)位所用的時間為 N7-N6=M7;
第8個 觸發(fā)位所用的時間為 N8-N7=M8;
大 小
入口:30H 31H 32H 33H 34H 35H 36H 37H
由于上接排序字程序,所以已經(jīng)按照從大到小排列,做減法后差所以全為正數(shù)。
大 - 小
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif30H - 31H 30H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif31H - 32H 31H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image022.gif32H - 33H 32H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image023.gif33H - 34H 33H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image024.gif34H - 35H 34H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif35H - 36H 35H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image021.gif36H - 37H 36H
file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image022.gif37H 37H
調(diào)用延時程序時,37H最先出,30H最后出。
6.關(guān)于掃尾問題(1)提出掃尾的概念我們提出了1個掃尾的新概念:當(dāng)CPU執(zhí)行完8個位的下降沿操作后(最多為2.5ms),會有向下1個周期過渡的時間間隔,其主要為2個功能:
①保證下降沿的準(zhǔn)確性;
②為舵機的跟蹤留出足夠的時間;
當(dāng)PWM信號以最小變化量即(1DIV=8us)依次變化時,舵機的分辨率最高,但是速度會減慢。
例如:先發(fā)一個PWM信號N=125,相隔20ms后再發(fā)1個PWM信號N=126。那么舵機在20ms內(nèi)轉(zhuǎn)動了0.74度,計算得出:ω=0.74度/20ms= 37度/秒;
HG14-M舵機空載時:ω=300度/秒
發(fā)現(xiàn)與最快速度相差8倍之多!
(2)掃尾值的計算圖中有A點、B點,
|
|
|
|
| file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image025.gif |
|
| 舵機從PWM_A發(fā)出后開始轉(zhuǎn)動,經(jīng)過△T時間后接收完畢PWM_B信號后,又重新開始新的轉(zhuǎn)動。
| |
|
∵Tw=△T - PWM_ B ∴l(xiāng)imtTw=2.467ms-0.5ms= 1.967ms
| |
PWM處在最小極限長度時:PWM_A = 0.5ms
PWM_B = 0.5ms
必要條件:△T≥2.467ms
∵Tw=△T - PWM_ B ∴l(xiāng)imtTw=2.467ms-2.5ms= -0.033ms
| |
PWM處在最長極限長度時:PWM_A = 2.5ms
PWM_B = 2.5ms
必要條件:△T≥2.467ms
為了保證在2種極限情況下舵機都能正常工作,我們?nèi)較長的延時,其經(jīng)驗值為2.8ms;這樣舵機都能正常跟隨而且速度接近最大值,采用中斷法延時2.8ms。
作者: yeyuaihaozhe 時間: 2017-9-10 12:17
樓主,可以給個完整版資料嗎,謝謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |