2018年5月2日 星期三

ROSA 系統開發 57 ─ 再談 SG90 的控制

http://4rdp.blogspot.com/2018/05/rosa-57-sg90.html





OTTO like 使用 SG90 伺服馬達當作機器人動作控制的馬達,開發 ROSA 複雜系統,並未使用大眾習慣泛用的 Servo.h 函數庫,主要原因是避免未來加入其它功能造成 Timer 或中斷衝突問題。這裡定義  SG90 的驅動脈波寬度,轉 0° 為 560 ms,轉 180° 為 2000 ms 為基準來設計。
 
#define MAXus  2000 // us     2000 us = 2 ms = 0.002 sec
#define MINus  560  // us
#define GAIN   (MAXus-MINus)/180.0
// Servo 的角度定義 -------------------------------------
#define hon 251         // hold on
#define hof 250          // hold off
#define idl 255           // Servo idle



SG90 伺服馬達,若持續每約 20 ms 送一次脈衝訊號,馬達會持續通電可以維持住設定的角度,用手是扳不動馬達,這種情形稱為 hold on,反之沒有持續送訊號就稱為 hold off,馬達不吃電,此時很容易扳動馬達,所以 hon 與 hof 就是設定要不要繼續讓馬達吃電維持固定角度。idl 表示不變更馬達設定。
 
下面的代碼分別表示不同的馬達角度,SG90 不是非常精準的伺服馬達,馬達設定角度跟實際旋轉的角度有些微偏差,因為 OTTO like 需要兩腳站立行走,如果角度偏差太大會造成行走偏斜,所以用代碼編寫動作程序,相同程式燒錄到不同 OTTO like 只要修改這些代碼角度,重新編譯後就可以很簡單修正偏差。
 
// OTTO 右腿上肢
#define RR6  30  // 注意 LR4 才不會卡到
#define RR4  40
#define RR3  65
#define RMD 100
#define RL3 135
#define RL4 150
#define RL6 166
#define RL9 180

// OTTO 左腿上肢
#define LR9   0
#define LR6  28
#define LR4  48
#define LR3  62
#define LMD  90
#define LL3 125  
#define LL4 140  
#define LL6 155      // 注意 RL4 才不會卡到
                         
// OTTO 右腿下肢              
#define RU9   0
#define RU6  20
#define RU4  35
#define RU3  47
#define RU2  59
#define RSD  81
#define RD3 110  
#define RD4 126
#define RD6 141
#define RD9 180
                         
// OTTO 左腿下肢              
#define LU9   0
#define LU6  30
#define LU4  46
#define LU3  63
#define LU2  73
#define LSD  95
#define LD3 123  
#define LD4 138  
#define LD6 155  

#define LD9 180  

沒有留言:

張貼留言