Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 7391|回復: 21

要如何讓馬達動呢?

[複製鏈接]
發表於 2010-5-16 12:16:10 | 顯示全部樓層 |閱讀模式
目前可以開始寫程式了,但是要如何讓馬達動呢?
我裝了一個servo在第0個位置,然後寫了下面的code
但看了文件,好像還不會讓它動起來~~~
請問有人可以教一下嗎?
謝謝

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "userio.h"
#include "demofile.h"
#include <roboard.h>

int main(int argc, char* argv[])
{
    //初始化
    if (rcservo_Initialize(RCSERVO_USECHANNEL0) == true)
{
  showmsg("...success\n");
  //設定servo no feedback
  rcservo_SetServo(RCSERVO_USECHANNEL0, RCSERVO_SERVO_DEFAULT_NOFB);

  //關閉servo lib
  rcservo_Close();
        showmsg("press any key to ending \n");
  keyboard_waitkey();
  return 1;
}


}
發表於 2010-5-18 01:19:45 | 顯示全部樓層
首先確認showmsg("...success\n");
這行到底有沒有跑到, 至少要看初始化到底有過了沒

使用RC Servo lib
有這三種模式 Capture mode,  Action playing mode,  PWM mode
第一種給高級貨用的, 第二種為"動作"播放,  標準來講使用最後一種, 便宜貨沒辦法...

PWM模式使用以下作法
把你那行....
rcservo_SetServo(RCSERVO_USECHANNEL0, RCSERVO_SERVO_DEFAULT_NOFB);
改為
rcservo_EnterPWMMode();
unsigned long PWM_period = 20000; //20000us
unsigned long PWM_duty = 1500; // PWM 0.15 ms 置中
unsigned long count = 100;
rcservo_SendPWMPulses(channel, 20000, 1500, 100); <=後三個參數就是上面那三個
while (!rcservo_IsPWMCompleted(channel));

其實roboard的PWM很精確...可以做到1us , 可以做很搞笑的應用喔
 樓主| 發表於 2010-5-18 09:09:22 | 顯示全部樓層
我的showmsg("rcservo_Initialize success.\n")有印出來,但是馬達都沒有動~~~~

int main(int argc, char* argv[])
{
    unsigned long usedchannels = 0x00ffff80L; //default to use channels 7~23
    if(rcservo_Initialize(usedchannels))
    {
     showmsg("rcservo_Initialize success.\n");
     unsigned long PWM_period = 20000L; //20000us
     unsigned long PWM_duty_middle = 1500L; // PWM 1.5 ms 置中
     unsigned long PWM_duty_left = 800L; // PWM 0.8 ms 置中
     unsigned long PWM_duty_right = 2200L; // PWM 2.2 ms 置中
     unsigned long count = 100;      
      rcservo_EnterPWMMode();
      while(true)
   {
         rcservo_SendPWMPulses(usedchannels, PWM_period, PWM_duty_left,1);
   showmsg("playing PWM_duty_left .\n");
         while (!rcservo_IsPWMCompleted(usedchannels));
   showmsg("finishing PWM_duty_left .\n");
   Sleep(2000);
         rcservo_SendPWMPulses(usedchannels, PWM_period, PWM_duty_middle,1);
   showmsg("playing PWM_duty_middle .\n");
         while (!rcservo_IsPWMCompleted(usedchannels));
   showmsg("finishing PWM_duty_middle .\n");
   Sleep(2000);
         rcservo_SendPWMPulses(usedchannels, PWM_period, PWM_duty_right,1);
   showmsg("playing PWM_duty_right .\n");
         while (!rcservo_IsPWMCompleted(usedchannels));
   showmsg("finishing PWM_duty_right .\n");
   Sleep(2000);
      }
   }   
   rcservo_Close();
}
發表於 2010-5-18 13:41:31 | 顯示全部樓層
本帖最後由 acen2008 於 2010-5-18 14:21 編輯

HI~
rcservo_SendPWMPulses和rcservo_SetServo是設定單一channel的函數
所以channel參數只能輸入0、1、2、3...、23喔 (要使用到23以上要小改一下RoBoard)
而rcservo_Initialize()中的channel是可設定為複數的,假如你要使用channel 0、1、4
輸出PWM,則channel = RCSERVO_USECHANNEL0 + RCSERVO_USECHANNEL1 +
RCSERVO_USECHANNEL4,假如只要用到channel 1的話,
channel = RCSERVO_USECHANNEL1 就可以了。

下面的code是我測過可動的,不妨參考一下:)

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

int main(void)
{
        //使用的Library是V1.6版要呼叫roboio_SetRBVer(),不是則不用
        //使用的硬體是RB100,輸入參數=RB_100,使用RB110,輸入參數=RB_110
        //Note : RB110只有16組PWM
        roboio_SetRBVer(RB_100);
       
        //rcservo_SetServo是設定單一channel的函數,channel = 0 ~ 23
        //必須在rcservo_Initialize之前呼叫
        rcservo_SetServo(0, RCSERVO_SERVO_DEFAULT_NOFB);
        rcservo_SetServo(1, RCSERVO_SERVO_DEFAULT_NOFB);

        //初始化:把Channel 0和1切換成PWM輸出,其他channel為GPIO
        if(rcservo_Initialize(RCSERVO_USECHANNEL0 +
                                       RCSERVO_USECHANNEL1) == false)
        {
                //初始化失敗則印出錯誤訊息
                printf("%s",roboio_GetErrMsg());
                rcservo_Close();
                return -1;
        }

        //進入PWM Mode
        rcservo_EnterPWMMode();
       
        //將period = 10000us,duty = 1500us,count = 50 次的PWM從channel 0 輸出
        //將period = 10000us,duty = 1700us,count = 10 次的PWM從channel 1 輸出
        //rcservo_SendPWMPulses是設定單一channel的函數,channel = 0 ~ 23
        rcservo_SendPWMPulses(0,10000L,1500L,50L);
        rcservo_SendPWMPulses(1,10000L,1700L,10L);

        printf("Send PWM pulse.\n");

        //等channel 0 的PWM送完
        while (rcservo_IsPWMCompleted(0) == false);

        //結束程式
        rcservo_Close();
        return 0;
}
發表於 2010-5-18 16:21:57 | 顯示全部樓層
HI~
rcservo_SendPWMPulses和rcservo_SetServo是設定單一channel的函數
所以channel參數只能輸入0、1、2、 ...
acen2008 發表於 2010-5-18 13:41

咦?! 請教一下喔
Roboard不就24組PWM而已嗎?
為何會說要設定到24以上還需要另外的花樣?
哪來的24以上?
 樓主| 發表於 2010-5-18 16:46:01 | 顯示全部樓層
原廠文件有說
可使用 25~32 pwm -> 利用com1來改
發表於 2010-5-18 17:39:03 | 顯示全部樓層
com 1...那是要外接吧
我是說板子上的部份耶
外接等於是要多少都有了啊
像我用com接出來...上百顆都能接了---> 應用在遊樂場的跑馬台
 樓主| 發表於 2010-5-18 23:01:17 | 顯示全部樓層
回復 4# acen2008


    我將你的code整個貼上,然後執行,還是沒有反應~~~~~
另外偷偷問一下, pwm第一個是哪一邊呀??看了文件好像沒有說得很清楚`~~
發表於 2010-5-18 23:30:47 | 顯示全部樓層
http://www.roboard.com/Files/RB-100/RoBoard_RB-100_v2r0A.pdf
第七頁
S1從SPI右邊那個開始往"上"算
USB右邊那個是S16
板子上面也有標示喔
 樓主| 發表於 2010-5-19 00:42:28 | 顯示全部樓層
看起來我接的PWM位置沒錯,但是還是沒有動起來~~~~
還有沒有什麼可能??
發表於 2010-5-19 01:01:08 | 顯示全部樓層
聽起來就超怪
應該要會動了哩

板子電壓給多少?
發表於 2010-5-19 08:06:34 | 顯示全部樓層
S1 = channel 0
你再確認一下你有沒有接錯吧
還是你照起來 這樣也許快一點
 樓主| 發表於 2010-5-19 08:44:12 | 顯示全部樓層
我是接6V的電池(右邊供電),左邊(黑紅白)就是馬達(Futaba 3003) ,但是都沒反應





1.jpg
發表於 2010-5-19 10:03:12 | 顯示全部樓層
HI~
圖中你的馬達接到channel 2了(S3)
請換到channel 0和1應該就可以了
另一種方法,你將程式中的channel改為channel 2也可以:)
 樓主| 發表於 2010-5-19 10:32:44 | 顯示全部樓層
原來0 和 1 是與 其他14個是分開的喔~~~~,害我一直以為那個就是第1個~~~
晚上再來試試~~~謝謝喔
發表於 2010-5-19 13:55:20 | 顯示全部樓層
哈哈哈....我昨天講的位置你沒仔細看喔
果然有圖有真相
真的是接錯
其實板上就有標示, 仔細看清楚喔
發表於 2010-5-19 13:56:04 | 顯示全部樓層
忽然發現你的VGA沒有貼散熱片喔...
快去貼一片吧
這樣用還滿危險
 樓主| 發表於 2010-5-19 15:50:12 | 顯示全部樓層
對呀,我的vga很熱~~~~~不知要貼哪一種的~~~~~還有
roboard好像會很耗電。我的2400mAh的很快就沒電了
 樓主| 發表於 2010-5-19 22:28:23 | 顯示全部樓層
= = 果然可以動了~~~~~感謝樓上諸位大大~~~
發表於 2010-5-19 23:46:01 | 顯示全部樓層
散熱片我就是去買電腦專門貼在RAM上面那種小片的而已
只要有貼就好
不用管是不是很大片
但要小心旁邊的零件比晶片高了一點點
散熱片貼的時候小心不要碰到

耗電的問題
板子: 5V*400mA 約是2W
VGA: 5V * 80mA =0.4W
其實...一顆SERVO就超過他了, 何況你一台機器人裝了十多顆SERVO, 所以其實還好,
而且硬要省電可以連VGA卡都拔掉不用裝, 一樣可以用
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2022-8-13 11:08 , Processed in 0.225557 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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