Robofun 機器人論壇

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

Roboard 的 PWM 好像會干擾?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2012-1-8 17:29:45 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
以下範例程式是輸入要執行的pin,channel, period, duty 來控制某一個pwm
但是一執行,很多其他的pwn好像也都會有信號送到其他馬達,
請問是哪裡有問題?是軟體還是硬體?




  1. int main(int argc, char **argv)
  2. {
  3. int i;
  4. roboio_SetRBVer(RB_100;
  5. for(i=RCSERVO_PINS1;i<=RCSERVO_PINS24;i++) //只初始 1~4 , 11~24的pwm
  6. if(i<RCSERVO_PINS5 || i>RCSERVO_PINS10)
  7.     rcservo_SetServo(i, RCSERVO_SERVO_DEFAULT_NOFB); // select the servo model as non-feedback servo
  8. if (rcservo_Init(RCSERVO_USEPINS1TO24) == false) // set PWM/GPIO pin 1~4 , 11~24 as Servo mode
  9. {
  10. printf("ERROR: fail to init RC Servo lib (%s)!\n", roboio_GetErrMsg());
  11. return -1;
  12. }

  13. rcservo_EnterPWMMode(); // make all servo-mode pins go into PWM mode
  14. printf("Send PWM pulses of period %ldus duty %ldus on pin %d...\n",period,duty,channel+1);
  15. rcservo_SendCPWM((atoi(argv[1]) - 1),atol(argv[2]),atol(argv[3]));
  16. printf("Press ENTER to stop.\n"); getchar();
  17. rcservo_StopPWM(channel);
  18. rcservo_Close(); // close RC Servo lib
  19. }
複製代碼
2#
 樓主| 發表於 2012-1-10 21:57:32 | 顯示全部樓層
本帖最後由 miaoichi 於 2012-1-10 21:59 編輯

感謝m大幫忙,我把程式重貼了,請幫我再看一下。謝謝



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

  22.     return -1;
  23. }



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

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





複製代碼
3#
 樓主| 發表於 2012-1-10 22:02:59 | 顯示全部樓層
有用到的pwm 共18個
PWM1 -> Servo
PWM2 -> Servo
PWM3-> Servo
PWM4-> Servo
PWM11-> Servo
PWM12-> Servo
PWM13-> Servo
PWM14-> Servo
PWM15-> Servo
PWM16-> Servo
PWM17-> Servo
PWM18-> Servo
PWM19-> Servo
PWM20-> Servo
PWM21-> Servo
PWM22-> Servo
PWM23-> Servo
PWM24-> Servo
4#
 樓主| 發表於 2012-1-12 23:16:55 | 顯示全部樓層
本帖最後由 miaoichi 於 2012-1-12 23:21 編輯
請教下...
rcservo_Init(RCSERVO_USEPINS1TO24)
裡面的RCSERVO_USEPINS1 TO 24 這個您是從哪找到的??
因 ...
roboardgod 發表於 2012-1-12 11:53


歹勢,這是我寫的但是我忘了貼上去。

    #define RCSERVO_USEPINS1TO24 (RCSERVO_USEPINS1+RCSERVO_USEPINS2+RCSERVO_USEPINS3+RCSERVO_USEPINS4+RCSERVO_USEPINS5+RCSERVO_USEPINS6+RCSERVO_USEPINS7+RCSERVO_USEPINS8+RCSERVO_USEPINS9\
+RCSERVO_USEPINS10+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)



我的問題是我把18個馬達都接上去,然後用我自己寫的程式去一個一個下command控制,
例如: sudo ./hexapod.exe 1  10000   1500
                ./hexapod.exe channel   period    duty

但是一執行下去,其他的馬達也會跟著亂動。
5#
 樓主| 發表於 2012-1-13 22:31:59 | 顯示全部樓層
回復 12# mzw2008


   我是RB-100,所以我要分開供電?(主板一個電源,全部馬達一個電源,接地共接這樣嗎?)
如果是,我想應該是這個問題。那我再修改一下電路再來試試。

謝謝
6#
 樓主| 發表於 2012-1-13 22:33:11 | 顯示全部樓層
程式有些小問題

M大的code




魔人修過的code
試過基本上是沒問題
有問題在提出來吧^^~
roboardgod 發表於 2012-1-13 10:43


感謝魔人大的指正,小的馬上再來試試。等結果上po上來吧
謝謝
7#
 樓主| 發表於 2012-1-14 00:25:10 | 顯示全部樓層
請問一下,可以說明RB100獨立電源怎麼接?
pwm三個腳
- => 共地
+ => 獨立電源
P => 從rb拉pwm出來嗎? (若是,但因為pwm的電源位準不同,這樣接對嗎?)
不對的話,請指正。謝謝
8#
 樓主| 發表於 2012-1-16 21:27:47 | 顯示全部樓層
感謝各位大大的相助。
目前已經可以了,也不需要獨立電源。
原因是我初始化的地方弄錯了~~
謝謝大家
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-3 02:43 , Processed in 0.216745 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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