目錄
一.舵機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.目標規(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è)的標準協(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度);缺點是控制比較復雜,畢竟采用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的標準方波; (3) HG0680為塑料齒輪模擬舵機,其要求連續(xù)供給PWM信號;它也可以輸入一個周期為1mS的標準方波,這時表現(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)當其未轉(zhuǎn)到目標位置時,將全速向目標位置轉(zhuǎn)動。 (2)當其到達目標位置時,將自動保持該位置。 所以對于數(shù)字舵機而言,PWM信號提供的是目標位置,跟蹤運動要靠舵機本身。 (3)像HG0680這樣的模擬舵機需要時刻供給PWM信號,舵機自己不能鎖定目標位置。 所以我們的控制系統(tǒng)是一個目標規(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)動負載,舵機輸出扭矩較大,而且抗抖動性很好,電位器的線性度較高,達到極限位置時也不會偏離目標。
2.目標規(guī)劃系統(tǒng)的特征(1)舵機的追隨特性file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.gif
① 舵機穩(wěn)定在A點不動; ② CPU發(fā)出B點位置坐標的PWM信號; ③ 舵機全速由A點轉(zhuǎn)向B點;
④ CPU發(fā)出B點PWM信號后,應(yīng)該等待一段時間,利用此時間舵機才能轉(zhuǎn)動至B點。
那么,具體的保持(等待)時間如何來計算,如下講解: 令:保持時間為Tw 當Tw≥△T時,舵機能夠到達目標,并有剩余時間; 當Tw≤△T時,舵機不能到達目標; 理論上:當Tw=△T時,系統(tǒng)最連貫,而且舵機運動的最快。
實際過程中由于2個因素: ① 1個機器人身上有多個舵機,負載個不相同,所以ω不同; ② 某個舵機在不同時刻的外界環(huán)境負載也不同,所以ω不同; 則連貫運動時的極限△T難以計算出來。 目前采取的方法是經(jīng)驗選取ω值。
(2)舵機ω值測定舵機的ω值隨時變化,所以只能測定一個平均值,或稱出現(xiàn)概率最高的點。 依據(jù) ① 廠商的經(jīng)驗值; ② 采用HG14-M具體進行測試; 測試實驗:① 將CPU開通,并開始延時Tw; ② 當延時Tw到達后,觀察舵機是否到達目標; 測定時采用一段雙擺程序,伴隨示波器用肉眼觀察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):當Tw定在0.618秒時,利用示波器觀察到舵機能夠運動至2個目標點。 則:Tw=△T= 0.618秒
| |
|
|
| 實驗過程中,設(shè)定舵機運轉(zhuǎn)的目標角度查為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個舵機位置目標值,該指令的執(zhí)行周期盡量短,目的有2個: 其一,是為了將來擴充至24舵機;其二,目標越快,舵機的轉(zhuǎn)動速度越快; 我們以8路為1組或稱1個單位,連續(xù)發(fā)出目標位置,形成連續(xù)的目標規(guī)劃曲線,電機在跟隨過程中自然形成了位置與速度的雙指標曲線,實現(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寄存器 | | | | | | | | | 目標位置(度) | | | | | | | | | 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ā)生算法解析我們預計將整個周期控制在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中斷的到來; ⑦ 中斷到來后,清理中斷標志,然后結(jié)束該程序。RET
注意事項:當進行逐個排序延時的過程中,CPU要取出M1、M2、M3….M8,那么會有1個取數(shù)指令周期,當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個掃尾的新概念:當CPU執(zhí)行完8個位的下降沿操作后(最多為2.5ms),會有向下1個周期過渡的時間間隔,其主要為2個功能: ①保證下降沿的準確性; ②為舵機的跟蹤留出足夠的時間; 當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。
|