Robofun 機器人論壇
標題:
讀取RC接收機 PWM 訊號的問題
[打印本頁]
作者:
Curtiss
時間:
2009-2-8 14:56
標題:
讀取RC接收機 PWM 訊號的問題
我利用 Arduino 的 pulseIn() 函式去讀取 Futaba R149DP 接收機輸出的 PWM 訊號,發現所得到的脈波寬度偶而會有變動。
轉換成 Serial Servo Controller 的命令去驅動伺服機時,就會有點跳動。
但是把伺服機直接插在 Futaba 接收機上,伺服機卻很穩定,不會亂跳。
請問是否有人遇過相同的問題?
從 Serial port 傳回電腦的訊息如下:(第一個數字是脈波寬度(us),第二個數字是轉換成 MiniSSC II mode 的命令)
1521 127
1521 127
1513 126
1513 126
1521 127
1521 127
1513 126
1513 126
1521 127
1521 127
1513 126
1513 126
1521 127
1521 127
1522 127
1512 125
1512 125
1518 127
程式碼如下:
// Futaba receiver PWM-signal decoding and Servo Test
#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
#define RC_Pin 4
SoftwareSerial SW_Serial = SoftwareSerial(rxPin, txPin);
byte SSC_cmd;
byte i, iValue, ScaleFactor;
long RC_PWM[8];
void setup()
{
// define pin modes for Software Serial
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// Setup the data rate for Serial ports
Serial.begin(9600);
SW_Serial.begin(9600);
}
void loop()
{
RC_PWM[1]=pulseIn(4,HIGH); // read pulse width from pin 4
Serial.print(RC_PWM[1]);
Serial.print(" ");
SSC_cmd = 127 + (RC_PWM[1]-1520) * 254/1000;
SetServo(7,SSC_cmd);
Serial.println(SSC_cmd,DEC);
delay(100);
}
// Function : SetServo (Ch, Position)
void SetServo(byte Ch, byte Position)
{ // MiniSSC II mode
byte CMD_sync=255;
SW_Serial.print(CMD_sync,BYTE);
SW_Serial.print(Ch,BYTE);
Position=constrain(Position,0,254);
SW_Serial.print(Position,BYTE);
}
作者:
kaffe
時間:
2009-2-8 20:38
我認為是取樣頻率跟Rx近來的頻率沒有對齊. 因為近來的信號是20MHz的. 可是Arduino的話. 要想辦法剛好20MHz.
你可以參考這兩個網址看看.
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230608024/11
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1199165055/14
Kaffe
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2