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