請問如何控制伺服馬達正反轉[已解決]
本帖最後由 jack800417 於 2012-5-5 16:23 編輯小弟手上有3顆伺服馬達
紅線接 VCC
黑線接 GND
白線接 P0
以下是小弟嘗試的程式
Sub MAIN()
Low 0
Output(0)
Do
Pulseout(0, 260) '(控制P0的伺服器,自由變動260到360')
Pause 30
Loop
End Sub
但是程式要如何寫,再讓伺服馬達反轉呢?
有嘗試過加一個負號 ->
DoPulseout(0, 260) '(控制P0的伺服器,自由變動260到360')Pause 300
Pulseout(0, -260)
LoopEnd Sub
但是程式寫入後,伺服馬達變成卡卡的,過一下就過熱後馬上拔掉=="
”四服”馬達是那四服呢?修一下標題吧!
用”Pulseout”的指令是對的,不過你要注意一下參數的單位是5us(按F1查指令集)
時間只有長短,沒有負值(坐時光機就會有了!),這是第一點。
第二點要說的是,R/C伺服馬達到底需要什麼樣的信號?
R/C伺服馬達的驅動方式是利用週期約為20~30ms 的 PWM(Pulse Width Modulation;脈波寬度調變)信號,運用0.8ms ~ 2.2ms 的脈波寬度來控制R/C伺服馬達的轉角(180度的伺服馬達)或轉向(360度的伺服馬達)。其中 1.5ms 是中位點(180度的伺服馬達)或停止轉動(360度的伺服馬達)。
落落長的說明包含兩個程式撰寫的要點:
1。Pulseout 的值要給多少?
0.8ms/5us = 160(-90度/逆轉)
1.5ms/5us = 300( 0度/不轉)
2.2ms/5us = 440(-90度/正轉)
2。因為這個信號週期是 30ms,所以週期 -( Pulseout 用掉的時間+其他的指令時間)必須小於 30ms。
Sub main()
Dim i As Word
Low 0
Output(0)
'逆轉 3 秒
For i = 0 To 100 '(週期為 30ms * 100 ~= 3 秒)
Pulseout(0, 200) '( 200 < 300,動作為逆轉)
Pause 29 '( 200*5us = 1ms,30ms - 1ms = 29ms)
Next
'正轉 3 秒
For i = 0 To 100
Pulseout(0, 400) '( 400 > 300,動作為正轉)
Pause 28 '( 400*5us = 2ms,30ms - 2ms = 28ms)
Next
End Sub
如果已解決你的問題,請回覆讓我知道喔!
本帖最後由 jack800417 於 2012-5-3 17:05 編輯
magiccar 發表於 2012-5-2 23:15 static/image/common/back.gif
”四服”馬達是那四服呢?修一下標題吧!
用”Pulseout”的指令是對的,不過你要注意一下參數的單位是5us ...
老師,有幾行有些不懂
逆轉 3 秒
For i = 0 To 100 '(週期為 30ms * 100 ~= 3 秒) <--所以我如果要持續轉動6秒就是 (30ms * 200)對吧?
Pulseout(0, 200) '( 200 < 300,動作為逆轉)
Pause 29 '( 200*5us = 1ms,30ms - 1ms = 29ms)<-----5us 可以當作固定值嗎?還是是有特定的原因所以用5us ?
Next
'正轉 3 秒
For i = 0 To 100
Pulseout(0, 400) '( 400 > 300,動作為正轉)
Pause 28 '( 400*5us = 2ms,30ms - 2ms = 28ms)
Next
End Sub
jack800417 發表於 2012-5-3 17:05 static/image/common/back.gif
老師,有幾行有些不懂
逆轉 3 秒
For i = 0 To 100 '(週期為 30ms * 100 ~= 3 秒)...
”如果要持續轉動6秒就是 (30ms * 200)對吧?” => 答對了!
用 5us 計算是因為它是 Pulseout 的最小輸出時間長度,所以
Pulseout(0, 1) =>代表輸出一個 5us 時間長度的脈波到 P0 腳位
這樣清楚了嗎?
如果已解決你的問題,請回覆讓我知道喔!
或在標題前加上”[已解決]"字樣。謝謝了!
恩恩~謝謝老師~~{:soso_e113:} 本帖最後由 jack800417 於 2012-5-9 01:36 編輯
老師
Pause 29 '( 200*5us = 1ms,30ms - 1ms = 29ms)
信號週期是 30ms,所以週期 -( Pulseout 用掉的時間+其他的指令時間)必須小於 30ms。
這段在這程式內的作用是做捨麼的壓
感覺改小或一樣好像沒啥改變耶~
另外
0.8ms/5us = 160(-90度/逆轉)
1.5ms/5us = 300(0度/不轉)
2.2ms/5us = 440(-90度/正轉)
160要怎麼換算成-90度呢?
如果我想算1.65ms/5us=330這又是幾度呢?
還有很多要算,總不可能請老師幫我算吧....
所以如果有公式的話,可以教我嗎?
jack800417 發表於 2012-5-9 01:27 static/image/common/back.gif
老師
Pause 29 '( 200*5us = 1ms,30ms - 1ms = 29ms)
信號週期是 30ms,所以週期 -( Pulse ...
360度的伺服馬達無法控制角度,只能控制正逆轉,及其轉速。
180度的伺服馬達你就照比例就可以了。
比例:
300 - 160 = 140
140 可動 90 度角,則每動一度角須增減 (140/90) 的值。 好~謝謝老師~~
每1的值差不多可以控制1.56的角度
頁:
[1]