Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: miaoichi
打印 上一主題 下一主題

Roboard 的 PWM 好像會干擾?

[複製鏈接]
1#
發表於 2012-1-12 11:53:02 | 顯示全部樓層
請教下...
rcservo_Init(RCSERVO_USEPINS1TO24)
裡面的RCSERVO_USEPINS1 TO 24 這個您是從哪找到的??
因為我沒看過這東西...

然後你的問題[很多其他的pwm好像也都會有信號送到其他馬達]
是怎樣的情況?

*已測試過兩顆RS-0263馬達  未出現你說的情況...
2#
發表於 2012-1-12 16:24:59 | 顯示全部樓層
本帖最後由 roboardgod 於 2012-1-12 16:34 編輯
哈哈
RB魔人出現了
而且有很壯觀的新辦公室耶XD
mzw2008 發表於 2012-1-12 14:15


既然已經鯨魚大大注意到了, 本魔就順便自介一下吧!

自介:


稱號: RoBoard魔人(還是隻嫩魔而已啦)

等級: RoBoard初學者, 機器人菜鳥

職業: DMP象牙塔小書僮

目標: 成為RoBoard神人

夢想: RoBoard控制BigDog


本魔受 DMP 象牙塔上焚書坑儒的萬惡罪魁──藏鏡人指示, 專門來此地服 lu , 幫忙解答關於 RoBoard 的技術問題!


本魔目前大二,剛開始進入RoBoard與機器人的領域學習, 知識層面或許有很多不足的地方, 不足之處未來還請版上諸位大大不吝指導!


lu , 我來拜碼頭啦! 以後本魔萬一在版上搞出笑話, 還要請您多罩一下囉!

3#
發表於 2012-1-12 16:27:21 | 顯示全部樓層
順便預告: 等 lu 大進駐新總部, 我會代替大家採訪 lu 大的高級專屬辦公室喔!
敬請期待~~
4#
發表於 2012-1-13 09:57:49 | 顯示全部樓層
本帖最後由 roboardgod 於 2012-1-13 09:58 編輯

m大
你先確定下你RB背面的PULL-UP/DOWN開關 有切到PULL-DOWN位置
請再進一步確認BIOS裡面 Chipset > SouthBridge Configuration > Multi-Function Port Configuration選單的Port0~2的每個Bit都有切成OUT 0


如果沒有這樣設定的話 馬達在呼叫rcservo_Init()的時候 PWM腳位可能會從1變成0  導致馬達誤認為收到pulse亂動歐
5#
發表於 2012-1-13 10:43:53 | 顯示全部樓層
本帖最後由 roboardgod 於 2012-1-13 12:34 編輯

程式有些小問題

M大的code
  1. int main(int argc, char **argv){
  2.     roboio_SetRBVer(RB_100);// first set the correct RoBoard version
  3.     if(InitServo())
  4.        return -1;
  5.     if(argc == 4)   {
  6.        BodyServoDrive((atoi(argv[1]) - 1),atol(argv[2]),atol(argv[3]));
  7.        return 0;
  8.     }    else if(argc == 3)   {
  9.         rcservo_OutPin((atoi(argv[1]) -1), atoi(argv[2]));  //你在前面InitServo()這個function就已經把所有PWM切成Servo-Mode PIN了  所以這個 GPIO-Mode PIN function :rcservo_OutPin() 在這使用會沒有效果喔~
  10.     }    else   {
  11.         printf("input example-- %s channel period duty \n",argv[0]);
  12.         printf("channel : from 1 to 19 \n");
  13.         printf("period 10ms => 10000\n");
  14.         printf("duty 1500us => 1500\n");
  15.     }
  16.     return -1;
  17. }


  18. int InitServo(void){
  19.      int i;
  20.      for(i=RCSERVO_PINS1;i<=RCSERVO_PINS24;i++)
  21.      if(i<5 || i>10)  //RCSERVO_PINS5其實不等於5喔~RCSERVO_PINS10也不等於10!   這邊建議改成 if(i<RCSERVO_PINS5 || i>RCSERVO_PINS10 ) 喔   ^^
  22.            rcservo_SetServo(i, RCSERVO_SERVO_DEFAULT_NOFB);     // select the servo model as non-feedback servo
  23.      if (rcservo_Init(RCSERVO_USEPINS1TO24) == false)  // set PWM/GPIO  as Servo mode
  24.     {
  25.         printf("ERROR: fail to init RC Servo lib (%s)!\n", roboio_GetErrMsg());
  26.         return -1;
  27.     }
  28.     return 0;
  29. }
  30. void BodyServoDrive(int channel, long period, long duty){
  31.     rcservo_EnterPWMMode();  // make all servo-mode pins go into PWM mode
  32.     printf("Send PWM pulses of period %ldus duty %ldus on pin %d...\n",period,duty,channel+1);
  33.     rcservo_SendCPWM(channel, period, duty);
  34.     printf("Press ENTER to stop.\n");
  35.     getchar();
  36.     rcservo_StopPWM(channel);
  37.     rcservo_Close();  // close RC Servo lib  //rcservo_Close()最好要放在程式結束的地方
  38. }   
複製代碼





魔人修過的code
  1. //程式使用PIN S1~S4 及 S11~S24  為Servo-Mode PIN
  2. #define USEDPINS  (RCSERVO_USEPINS1+RCSERVO_USEPINS2+RCSERVO_USEPINS3+RCSERVO_USEPINS4+RCSERVO_USEPINS11+RCSERVO_USEPINS12+RCSERVO_USEPINS13+RCSERVO_USEPINS14+RCSERVO_USEPINS15+RCSERVO_USEPINS16+RCSERVO_USEPINS17+RCSERVO_USEPINS18+RCSERVO_USEPINS19+RCSERVO_USEPINS20+RCSERVO_USEPINS21+RCSERVO_USEPINS22+RCSERVO_USEPINS23+RCSERVO_USEPINS24)

  3. int InitServo(void);
  4. void BodyServoDrive(int channel, long period, long duty);
  5. int main(int argc, char **argv)
  6. {
  7.     roboio_SetRBVer(RB_100);// first set the correct RoBoard version
  8.     if(InitServo())
  9.        return -1;
  10.     if(argc == 4)
  11.    {
  12.        BodyServoDrive((atoi(argv[1]) - 1),atol(argv[2]),atol(argv[3]));
  13.     }
  14.     else if(argc == 3)
  15.    {
  16.         if((atoi(argv[1]) -1) >=  RCSERVO_PINS5 && (atoi(argv[1]) -1) <=  RCSERVO_PINS10 )
  17.              rcservo_OutPin((atoi(argv[1]) -1), atoi(argv[2]));
  18.         }else
  19.    {
  20.         printf("input example-- %s channel period duty \n",argv[0]);
  21.         printf("channel : from 1 to 19 \n");
  22.         printf("period 10ms => 10000\n");
  23.         printf("duty 1500us => 1500\n");
  24.     }
  25.     rcservo_Close();
  26.     return -1;
  27. }

  28. int InitServo(void)
  29. {
  30.      int i;
  31.      for(i=RCSERVO_PINS1;i<=RCSERVO_PINS24;i++)
  32.           if(i< RCSERVO_PINS5 || i> RCSERVO_PINS10 )
  33.                 rcservo_SetServo(i, RCSERVO_SERVO_DEFAULT_NOFB);     // select the servo model as non-feedback servo
  34.      if (rcservo_Init(USEDPINS) == false)  // set PWM/GPIO  as Servo mode
  35.     {
  36.         printf("ERROR: fail to init RC Servo lib (%s)!\n", roboio_GetErrMsg());
  37.         return -1;
  38.     }
  39.     return 0;
  40. }

  41. void BodyServoDrive(int channel, long period, long duty)
  42. {
  43.     rcservo_EnterPWMMode();  // make all servo-mode pins go into PWM mode
  44.     printf("Send PWM pulses of period %ldus duty %ldus on pin %d...\n",period,duty,channel+1);
  45.     rcservo_SendCPWM(channel, period, duty);
  46.     printf("Press ENTER to stop.\n"); getchar();
  47.     rcservo_StopPWM(channel);
  48. }

  49.   
複製代碼
試過基本上是沒問題
有問題在提出來吧^^~
6#
發表於 2012-1-13 12:21:27 | 顯示全部樓層
哇  魔人駕到..... 請受小弟一拜
lucrece_lu 發表於 2012-1-13 09:36



   不不不~ lu大駕到.....  請受小魔一拜
7#
發表於 2012-1-16 09:35:32 | 顯示全部樓層
本帖最後由 roboardgod 於 2012-1-16 09:49 編輯

回鯨魚大
就RB100來說PWM的三個腳位為GND,VXX,GPXX
所以電源給多少伏的電   VXX那根腳位就會出來一樣的電歐
基本上電池超過6V   放電能力不要太差   基本上是不會有問題的^^

回M大
至於獨立電源...   M大你的馬達應該不會都不一樣吧?   (電壓一樣的話是不用特別這樣做的呦)
然後你說的方法是正確的歐~



馬達亂動本魔猜測應該是跟電源沒什麼關係
請檢查下15樓, 16樓回覆的那些要件
如果還不行的話再提出來吧^^!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-2 23:57 , Processed in 0.223318 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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