Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5628|回復: 11
打印 上一主題 下一主題

[請教] 關於控制 Servo 轉動的速度...(有高人解答,快來看~)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2010-6-29 17:18:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 tommylin 於 2010-6-30 23:42 編輯

請問大大們~RoboIO.lib 有可以控制 servo 轉動速度的功能嗎?


感謝先~
2#
發表於 2010-6-29 17:42:07 | 只看該作者
從沒在注意轉速問題
不過似乎調整PWM週期可以控制喔
分享的範例是用10000us ---> 本來也是這樣用
可是我最近改用20000us , 感覺有變慢
今晚回來實際測一下好了
3#
 樓主| 發表於 2010-6-30 11:20:22 | 只看該作者
殘念~
昨晚測試了..改週期不行的...
4#
發表於 2010-6-30 22:04:29 | 只看該作者
本帖最後由 acen2008 於 2010-6-30 22:33 編輯

HI

RoBoIO Library中有可以控制速度的函數唷, 依照馬達有無feedback
功能可以使用下列方法 :

1. 沒有feedback的馬達
    在初始化(rcservo_Initialize)後, 可以使用rcservo_EnterPlayMode_NOFB()把
    沒有feedback的馬達先歸位, 而歸位的位置就是要傳入這個函數的引數(它是一個陣列)
    , 然後再使用rcservo_MoveTo()這個函數, rcservo_MoveTo()的第一個引數是馬達下
    一個位置的陣列, 第二個引數就是時間, 時間以ms為單位, 設定1000L的話, 就是馬達從現
   在的位置轉到下個位置需要花1秒, 2000L的話就是2秒, 3000L的話就是3秒, 建議可以把
   函數放在for loop 中, 依序傳入角度陣列與時間.....
   (註 : rcservo_MoveTo(array, time), array 是記錄馬達角度的陣列, time是時間)

2. 有feedback的馬達(例如 : kondo, hitec)
    初始化(rcservo_Initialize)後, 呼叫rcservo_EnterCaptureMode(), 可以使用
    rcservo_ReadPositions()來取得目前馬達的位置, 並且將位置放在陣列中, 擷取
    數筆後, 呼叫rcservo_EnterPlayMode(), 就可以再使用rcservo_MoveTo()讓馬
    達依照剛剛所擷取回來的角度轉了(依序把角度陣列與時間傳入)

試試看吧
5#
發表於 2010-6-30 23:01:46 | 只看該作者
請教這些參數是哪裡看來的呢?
雖然不會有速度上的需求
不過還是感謝多學了點東西哩XD
6#
 樓主| 發表於 2010-6-30 23:41:32 | 只看該作者
acen2008 大大~
您的解說來的真是時候阿!!! 太感謝了, 馬上試試...
我爬了國外討論版都沒有人提到這個功能,我還覺得納悶 ~"~

(p.s acen2008大大.. 你真是強人阿...謝謝指導 )
7#
發表於 2010-7-1 09:06:46 | 只看該作者
本帖最後由 acen2008 於 2010-7-1 09:09 編輯

我只是一個對RoBoard有興趣的玩家而已...
希望大家一起玩RoBoard^^

補充上面說明 :
    陣列宣告建議是一個size為32的unsigned long
    例如 : unsigned long position[32] - 一組馬達角度
             或是unsigned long positions[5][32] - 五組馬達角度 (傳入rcservo_MoveTo()
                                                                                     還是得一組一組傳)
8#
 樓主| 發表於 2010-7-1 15:47:41 | 只看該作者
回復 4# acen2008

Hi acen2008 大大... 再請教一下..

RBAPI(void) rcservo_MoveTo(unsigned long* width, unsigned long playtime);

上述這個function 缺少一個 Channel 變數,

呼叫 rcservo_MoveTo() 的時候, 怎麼指定是 move 哪一個 channel 呢?


先謝嚕~
9#
發表於 2010-7-1 20:31:51 | 只看該作者
是用傳入的陣列表示的喔

陣列第1個值代表第0個馬達角度, 第2個代表第1個馬達角度......依此類推

角度值就是它的duty 大小 (單位 : 1 us)
10#
發表於 2010-7-1 22:45:02 | 只看該作者
這就是roboard的動作播放模式哩
這樣就可以輕易錄製動作並且連續撥放
是一種很方便的控制功能
只是之前都用另外一種, 沒看到他後面的playtime
真是感謝了

詳細資訊這裡有
http://www.roboard.com/Files/RB-100/RoBoard_Training_SW_v16.pdf
45頁的地方
原來早就看過, 卻跳過了
我都一直注意他的PWM MODE而已@@
11#
發表於 2010-7-2 09:47:28 | 只看該作者
感謝鯨大把文件連接貼上來
裡面的rcservo_SetAction() + rcservo_PlayAction() 除了等於
rcservo_MoveTo()的功能外, 還有釋放控制權的功能, 也就是馬達在運
轉的同時, 程式還能處理其它的事情(寫在While{}中, 例如 : 讀感測器
回傳的訊號)用rcservo_MoveTo()的話, RoBoard 就只做馬達運轉的
功能, 直到所有角度都跑完, 昨天花了幾分鐘寫了有關rcservo_MoveTo()
的使用, 等一下會貼上來, 而rcservo_PlayAction() 的使用其實是大同小異的
12#
發表於 2010-7-2 10:08:00 | 只看該作者
我用了兩個沒有feedback的馬達做測試, 分別接在channel0和channel1上
送了5組不同的馬達位置, 用rcservo_MoveTo() 來幫我完成, code如下 ,
參考看看囉~
=============================================

#include <stdio.h>
#include "roboard.h"

int main()
{
    int i,j;

    unsigned long position_home[32] = {0L};
    unsigned long position[32]           = {0L};
    unsigned long positions[5][32];

    position_home[0] = 1500L; position_home[1] = 1000L; // 馬達的初始角度

    positions[0][0] = 1200L ; positions[0][1] = 1500L; // 馬達的轉動角度
    positions[1][0] = 1700L ; positions[1][1] = 800L;   // 共5組(2個馬達)
    positions[2][0] = 1000L ; positions[2][1] = 1700L; // 角度值是我隨意
    positions[3][0] = 2000L ; positions[3][1] = 1300L; // 填的
    positions[4][0] = 1500L ; positions[4][1] = 1500L;

    roboio_SetRBVer(RB_100); // 設定為RoBoard RB_100

    // 用了channel0, channel1, 馬達型態為無feedback伺服馬達
    for(i=0; i<2; i++)
        rcservo_SetServo(i, RCSERVO_SERVO_DEFAULT_NOFB);

    rcservo_Initialize(RCSERVO_USECHANNEL0 + RCSERVO_USECHANNEL1);

    rcservo_EnterPlayMode_NOFB(position_home); // 馬達一開始的角度

    for(i=0; i<5; i++) // 把五組馬達轉動角度依序傳入rcservo_MoveTo()
    {
        for(j=0; j<2; j++)
            position[j] = positions[i][j];
        rcservo_MoveTo(position, 1000L);  // 時間設定1秒
    }

    rcservo_Close();
    return 0;
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-12-4 02:02 , Processed in 0.221827 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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