五線舵機驅動程式 Arduino 舵機驅動調速

2021-10-16 23:38:17 字數 2355 閱讀 5880

本帖最後由 xia_jason27 於 2015-6-5 16:16 編輯

關於舵機調速的一些想法和不理解的地方

關於180°數字舵機的驅動方式,自己在網上也有查過資料,基本上是通過脈衝訊號的高低電平的時間來控制位置,但是一般實際應用的話舵機速度都會偏快,下面是一些我實際的一些嘗試。

舵機資料:

jx servo/pdi-5521mg/20kg大扭力/矩金屬齒輪數字標準舵機

死區: 2μs

最大脈寬:500-2500us(適合微控制器控制板)

角度範圍:實際角度172±2°

電機:鐵芯

工作電壓:  dc4.8~6.0 v

速度 (4.8v): 0.18sec/85°

速度 (6v): 0.16 sec/85°

扭力 (4.8v): 17.25kg.cm (239.55oz/in)

扭力 (6.0v):  20.32 kg.cm (281.89 oz/in)

尺寸: 40.5x20.2x44.2mm /1.59 x0.80x1.74 in

重量:  55.6 g (1.96oz)

連線線: jr  265 mm (10.43in)

輸出齒:25t(futaba通用)

舵機控制方法:

1. 由於電機是133mhz工作頻率,所以這邊每個脈衝週期為3030us.  目標是控制電機旋轉90°,並可以通過改變delay()裡的數值改變速度。

將90°的行程分為a份,在每乙份後面插入乙個延時。因為舵機的死區為2us,不知道是不是每次增加的高電平時間不能超過2us。

部分**如下:

for(a = duration;a>=0;a--)

delay(2000);

void servorun() {

digitalwrite(sp1,high);

delaymicroseconds(510 + a*interval);

digitalwrite(sp1,low);

delaymicroseconds(3000 - 510 - interval*a);

delaymicroseconds(interval);

實驗結果:

速度可以得到控制,但是會出現抖舵現象。個人覺得可能是插入delay時間太長,電機動作不連續。

2. 希望能達到舵機起步時速度逐漸加快,中間部分舵機速度為峰值,快到達90°時逐漸減慢,大致為正弦0-180°變化。

主要的控制方式為對高電平時間增量採用正弦變化。**如下:

for(a = 0; a<=100; a++){

interval = map(a,0,100,0,90);

float delaytime = cos(interval*(3.1412/180));

digitalwrite(sp1, high);

delaymicroseconds(startangle+2*a);

digitalwrite(sp1,low);

delaymicroseconds(3030-startangle-2*a);

delay(7*delaytime);

for(a = 101; a<=400; a++){

digitalwrite(sp1, high);

delaymicroseconds(startangle+2*a);

digitalwrite(sp1,low);

delaymicroseconds(3030-startangle-2*a);

int delta;

interval = map(a,201,400,0,180);

delta = 3*sin(interval*(3.1412/180));

a = a+delta;

for(a = 401; a<=duration/2; a++){

interval = map(a,401,duration/2,0,90);

float delaytime = sin(interval*(3.1412/180));

digitalwrite(sp1, high);

delaymicroseconds(startangle+2*a);

digitalwrite(sp1,low);

delaymicroseconds(3030-startangle-2*a);

delay(7*delaytime);

實驗結果:

在sg90微型舵機上工作正常(週期換成20ms),但是用在大功率舵機上時舵機內部會有異響,並有抖舵現象發生。

這邊還想請教一下各位資深玩家,如果想控制舵機速度達到類似正弦曲線的效果,應該如何控制啊?還有這樣控制出現抖舵現象,是因為開關電源電流不夠引起的嗎?

本人剛剛接觸arduino,還有很多地方不懂,望指教。。

Arduino 舵機的驅動

在機械人機電控制系統中,舵機控制效果是效能的重要影響因素。舵機可以在微機電系統和航模中作為基本的輸出執行機構,其簡單的控制和輸出使得微控制器系統非常容易與之介面。舵機是一種位置 角度 伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。目前在高檔遙控玩具,如航模,包括飛機模型,潛艇模型 遙...

Arduino 舵機驅動板程式設計

我的驅動板是16路基於i2c介面通訊,這個arduino庫底層都做好了,精度是12位 4096 設定非常簡單,設定一下頻率50,那麼週期是20ms 如果你想要0.5ms脈寬,那麼設定的值是 0.5 20.0 4096setpin函式最後乙個引數是控制電平是否反轉 示例程式設定的是ch0為持續低電平,...

Linux裝置驅動程式學習筆記12 中斷呼叫流程

通過輪詢的方式去查詢各個硬體的狀態顯得有的低效,一種更好的機制是當硬體狀態準備好之後能夠主動地報告給cpu。中斷就是這樣的一種機制,它允許硬體發訊號給cpu。下面就先分析一下當乙個中斷發生時,linux系統的處理流程。首cpu在收到中斷線上的中斷訊號後,會跳到某個固定的位址去執行 這個位址被稱為中斷...