圓創力科技

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

查看: 20917|回復: 7

請問如何控制伺服馬達正反轉[已解決]

  [複製鏈接]
jack800417 發表於 2012-4-30 22:17 | 顯示全部樓層 |閱讀模式
本帖最後由 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
但是程式寫入後,伺服馬達變成卡卡的,過一下就過熱後馬上拔掉=="



magiccar 發表於 2012-5-2 23:15 | 顯示全部樓層
”四服”馬達是那四服呢?修一下標題吧!

用”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 | 顯示全部樓層
本帖最後由 jack800417 於 2012-5-3 17:05 編輯
magiccar 發表於 2012-5-2 23:15
”四服”馬達是那四服呢?修一下標題吧!

用”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



magiccar 發表於 2012-5-5 00:25 | 顯示全部樓層
jack800417 發表於 2012-5-3 17:05
老師,有幾行有些不懂
逆轉 3 秒
For i = 0 To 100    '(週期為 30ms * 100 ~= 3 秒)  ...

”如果要持續轉動6秒就是 (30ms * 200)  對吧?”  => 答對了!

用 5us 計算是因為它是 Pulseout 的最小輸出時間長度,所以
Pulseout(0, 1) =>代表輸出一個 5us 時間長度的脈波到 P0 腳位
這樣清楚了嗎?

如果已解決你的問題,請回覆讓我知道喔!
或在標題前加上”[已解決]"字樣。謝謝了!


 樓主| jack800417 發表於 2012-5-5 16:22 | 顯示全部樓層
恩恩~謝謝老師~~{:soso_e113:}
 樓主| jack800417 發表於 2012-5-9 01:27 | 顯示全部樓層
本帖最後由 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這又是幾度呢?
還有很多要算,總不可能請老師幫我算吧....
所以如果有公式的話,可以教我嗎?
magiccar 發表於 2012-5-9 15:54 | 顯示全部樓層
jack800417 發表於 2012-5-9 01:27
老師
Pause 29            '( 200*5us = 1ms,30ms - 1ms = 29ms)
信號週期是 30ms,所以週期 -( Pulse ...

360度的伺服馬達無法控制角度,只能控制正逆轉,及其轉速。
180度的伺服馬達你就照比例就可以了。
比例:
   300 - 160 = 140
   140 可動 90 度角,則每動一度角須增減 (140/90) 的值。
 樓主| jack800417 發表於 2012-5-10 20:41 | 顯示全部樓層
好~謝謝老師~~
每1的值差不多可以控制1.56的角度
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

QQ|Archiver|手機版|小黑屋|圓創力科技有限公司 IOP Robotic Technology Co.,Ltd Tel: 07-3924582 Fax: 07-3924001

GMT+8, 2024-11-23 21:42 , Processed in 0.032583 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表