Robofun 機器人論壇

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

讀取RC接收機 PWM 訊號的問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-2-8 14:56:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我利用 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);
}
2#
發表於 2009-2-8 20:38:50 | 只看該作者
我認為是取樣頻率跟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
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-5 14:54 , Processed in 0.101960 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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