crabtack
11.12.2014, 19:59
Hallo!
Für meinen Quadrocopter verwende ich Xbee Funkmodule.
um genau zu sein, das XBee-PRO 802.15.4,63mW,Drahtantenne
Momentan teste ich die Motoren, indem ich mit einem Xmega einen Dualshock2 (PS2 Controller) auswerte und die Daten der Y Achse eines Sticks per UART zum Copter sende, der dann die Motoren entsprechend ansteuert.
Das Problem ist, dass das nur auf einer Reichweite von weniger als einem Meter funktioniert obwohl ja eigentlich ein Km möglich sein sollte.
Früher hatte ich das Problem, dass die gesendeten Daten nur sporadisch ankamen.
Das konnte ich beheben, indem ich die Länge der Antennen verdoppelt habe, danach funktionierte es einwandfrei, aber halt nur auf einer sehr kleinen Entfernung.
Einen Konfigurationsfehler kann ich eigentlich Ausschließen, da ich die beiden Funkmodule erstmal auf Werkseinstellungen zurücksetze und sie dann standardmäßig mit 63mW (18dBm) senden.
Ja, das wird noch auf 10 geändert, wenn es funktioniert, damit ich legal bleibe.
Die Initialisierung des Xbees sieht dabei so aus:
Fernbedienung:
_delay_ms(1000);
UART_Comm::Send_Xcommand("+++");
_delay_ms(1000);
_delay_ms(100);
/* Werkseinstellungen
_delay_ms(100);
UART_Comm::Send_Xcommand("ATRE",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(200);
*/
UART_Comm::Send_Xcommand("ATID3432",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATMY1",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDH0",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDL2",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(100);
Copter:
_delay_ms(1000);
UART_Comm::Send_Xcommand("+++");
_delay_ms(1000);
_delay_ms(100);
/* Werkseinstellungen
_delay_ms(1000);
_delay_ms(100);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATRE",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(200);*/
UART_Comm::Send_Xcommand("ATID3432",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATMY2",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDH0",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDL1",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(100);
Die Werkseinstellungen sind auskommentiert, die müssen ja nicht jedes mal wieder hergestellt werden.
Das senden von Daten erfolgt dabei wie erwartet über UART, ich denke, den Code brauche ich nicht reinzustellen.
Die Datenübertragung erfolgt momentan noch mit einer Baudrate von 9600, die wird später natürlich noch raufgeschraubt.
Hat jemand eine Idee, woran es liegen kann, dass die Reichweite so gering ist?
Das Problem ist übrigens unabhängig davon, ob die Motoren laufen oder nicht.
mfg
Olaf
Für meinen Quadrocopter verwende ich Xbee Funkmodule.
um genau zu sein, das XBee-PRO 802.15.4,63mW,Drahtantenne
Momentan teste ich die Motoren, indem ich mit einem Xmega einen Dualshock2 (PS2 Controller) auswerte und die Daten der Y Achse eines Sticks per UART zum Copter sende, der dann die Motoren entsprechend ansteuert.
Das Problem ist, dass das nur auf einer Reichweite von weniger als einem Meter funktioniert obwohl ja eigentlich ein Km möglich sein sollte.
Früher hatte ich das Problem, dass die gesendeten Daten nur sporadisch ankamen.
Das konnte ich beheben, indem ich die Länge der Antennen verdoppelt habe, danach funktionierte es einwandfrei, aber halt nur auf einer sehr kleinen Entfernung.
Einen Konfigurationsfehler kann ich eigentlich Ausschließen, da ich die beiden Funkmodule erstmal auf Werkseinstellungen zurücksetze und sie dann standardmäßig mit 63mW (18dBm) senden.
Ja, das wird noch auf 10 geändert, wenn es funktioniert, damit ich legal bleibe.
Die Initialisierung des Xbees sieht dabei so aus:
Fernbedienung:
_delay_ms(1000);
UART_Comm::Send_Xcommand("+++");
_delay_ms(1000);
_delay_ms(100);
/* Werkseinstellungen
_delay_ms(100);
UART_Comm::Send_Xcommand("ATRE",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(200);
*/
UART_Comm::Send_Xcommand("ATID3432",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATMY1",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDH0",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDL2",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(100);
Copter:
_delay_ms(1000);
UART_Comm::Send_Xcommand("+++");
_delay_ms(1000);
_delay_ms(100);
/* Werkseinstellungen
_delay_ms(1000);
_delay_ms(100);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATRE",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(200);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(200);*/
UART_Comm::Send_Xcommand("ATID3432",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATMY2",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDH0",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATDL1",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATWR",true);
_delay_ms(100);
UART_Comm::Send_Xcommand("ATCN",true);
_delay_ms(100);
Die Werkseinstellungen sind auskommentiert, die müssen ja nicht jedes mal wieder hergestellt werden.
Das senden von Daten erfolgt dabei wie erwartet über UART, ich denke, den Code brauche ich nicht reinzustellen.
Die Datenübertragung erfolgt momentan noch mit einer Baudrate von 9600, die wird später natürlich noch raufgeschraubt.
Hat jemand eine Idee, woran es liegen kann, dass die Reichweite so gering ist?
Das Problem ist übrigens unabhängig davon, ob die Motoren laufen oder nicht.
mfg
Olaf