|
我利用 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);
} |
|