Archiv verlassen und diese Seite im Standarddesign anzeigen : Quadcopter Frage wegen Rc Empfänger
Basti1204
17.05.2010, 19:22
Hey Leute,
es geht um folgendes ich grüble jetzt schon ein paar Tage über mein Quadprojekt, genauer gesagt geht es mir um die Auswertung
des RC Empfangers (Ohne Summensignal)
Meine Idee wäre:
Für jeden Kanal einen Atmel mit 16 bit Timer dranhängen und mit Pulsweitenmessung messen. Die 3 Atmels senden dann die Daten über UART
an einen Atmel32 der die auswertung übernimmt und die Motoren steuert.
Ist UART schnell genug oder lieber I2C?
was sagt ihr könnte des ganze so funktionieren?
Vielen Dank im vorraus.
JoeBlack
17.05.2010, 20:01
Uart müsste schnell genug sein, aber das auslesen des Empfängers kann auch ein Atmel mit drei Eingängen machen da die Impulse meines Wissens nach nacheinander kommen und sich in sofern nicht behindern.
Soviel ich gelesen habe hast Du dann sogar immernoch genügend Leistung über um die Motoransteuerung mit dem selben Chip zu erledigen.
Allerdings habe ich dahingehend noch keine eigenen Erfahrungen gemacht.
Basti1204
17.05.2010, 20:08
Hm das wäre natürlich ne idee wenn die hintereinander senden, hat mir schon mal sehr geholfen, vielen dank.
das geht viel einfacher wenn du das Summensignal abgreifst, (das was die Funke empfängt) das gibst du auf den ICP am uC und kannst mit nur einem Pinn alle Kanäle lesen. schau mal bei meinm Quadrocopter-thread, da hab ich das auch gemacht..
JoeBlack
25.05.2010, 14:49
@ Goara
Im ersten Post von Basti steht, dass er das auslesen ohne Summensignal machen will.
Kann ich verstehen wenn der Empfänger keines zum direkten Abgriff bereit stellt und man ihn nicht öffnen will.
Zumal die Garantie dadurch erlöschen müsste.
@ Basti
Hast Du es inzwischen schonmal versucht und wenn ja, hats geklappt?
Basti1204
25.05.2010, 17:59
habs leider wegen Zeitmangel nicht testen können.
Was ich aber noch nicht verstehe ist wie ich das Summensignal
"entschlüsseln" kann es sind ja mehrere Flankenwechsel in einem Impuls woher weis ich jetzt welcher Teil welcher Kanal ist??
das geht so:
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 20000000
$baud = 9600
' ----- Empfänger -----
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
'-----------Interupts----------
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
Enable Interrupts
'...
'blablablabalbal... codecode
'...
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
End
Die Signale sind alle am anfang von dem Signal, das erste nach der langen Pause ist also kanal 1 usw...
http://dyyyh.de/quadro/summensignal.jpg
[/code]
Basti1204
25.05.2010, 19:27
danke werds eventl die Woche mal testen ob ichs hinbekomme
JoeBlack
25.05.2010, 20:01
Um das Summensignal auszulesen gibts soviel ich weiss auch bereits fertigen Quellcode für Bascom und C im RN-Wissen
MfG JoeBlack
achso ja, für c hab ich auch noch irgdnwo code, wobei assambler geht ja auch in c...
Hi Leude!
Da ich selber Mikrokopter-Pilot bin wollte ich der Einfachheit halber mal fragen, warum ihr nicht einfach den Empfänger auf Summensignal umbaut.
Im Mikrokopter-Forum gibts reichlich Umbauanleitungen dazu.
Zudem gibts im Mikrokopter-Shop die Quadro PPM. Diese hat die Aufgabe die einzelnen Signale, egal welchen Empfängers, 2,4GHz oder 40/35 MHz in ein Summensignal zusammenzufassen.
Nicht das ich euch das nicht gönnen würde rumzubasteln, aber die Alternative wäre doch ein bischen einfacher oder?
Hi Leude!
Da ich selber Mikrokopter-Pilot bin wollte ich der Einfachheit halber mal fragen, warum ihr nicht einfach den Empfänger auf Summensignal umbaut.
Im Mikrokopter-Forum gibts reichlich Umbauanleitungen dazu.
Zudem gibts im Mikrokopter-Shop die Quadro PPM. Diese hat die Aufgabe die einzelnen Signale, egal welchen Empfängers, 2,4GHz oder 40/35 MHz in ein Summensignal zusammenzufassen.
Nicht das ich euch das nicht gönnen würde rumzubasteln, aber die Alternative wäre doch ein bischen einfacher oder?
Hi Leude!
Da ich selber Mikrokopter-Pilot bin wollte ich der Einfachheit halber mal fragen, warum ihr nicht einfach den Empfänger auf Summensignal umbaut.
Im Mikrokopter-Forum gibts reichlich Umbauanleitungen dazu.
Zudem gibts im Mikrokopter-Shop die Quadro PPM. Diese hat die Aufgabe die einzelnen Signale, egal welchen Empfängers, 2,4GHz oder 40/35 MHz in ein Summensignal zusammenzufassen.
Nicht das ich euch das nicht gönnen würde rumzubasteln, aber die Alternative wäre doch ein bischen einfacher oder?
Hi Leude!
Da ich selber Mikrokopter-Pilot bin wollte ich der Einfachheit halber mal fragen, warum ihr nicht einfach den Empfänger auf Summensignal umbaut.
Im Mikrokopter-Forum gibts reichlich Umbauanleitungen dazu.
Zudem gibts im Mikrokopter-Shop die Quadro PPM. Diese hat die Aufgabe die einzelnen Signale, egal welchen Empfängers, 2,4GHz oder 40/35 MHz in ein Summensignal zusammenzufassen.
Nicht das ich euch das nicht gönnen würde rumzubasteln, aber die Alternative wäre doch ein bischen einfacher oder?
sorry, aber die quadroppm ist die sinnloseste Geldverschwendung die ich je gesehen habe.
sie macht aus den Servosignalen, die der Empfänger aus dem Summernsignal generiert hat wieder das Summensignal.
Das ist ungefähr so sinnvoll wie die Daten in Lochkarten zu speichern und dann mit der propellerspitze als lesekopf wieder auszulesen... :m
Ok, mann muss den Empfänger nicht aufmachen, aber wer einen Quadro baut sollte auch einen empfänger öffnen können und ein Kabel anlöten...
Soweit ich weiß lassen sich ja nicht alle Empfänger auf ein Summensignal umbauen...
Die 2,4GHz Dinger so gut wie garnicht...
Daher is die Quadro PPM meiner Ansicht nach garnicht ganz so sinnlos.
Ich hab zwar meinen Empfänger auch auf Summensignal gefrickelt aber das kann ja auch nicht unbedingt jeder oder?
Ok, haste recht, bei 2,4Ghz macht es vielleicht sinn, da man sonst eine schnelle auswertelektronik bräuchte, aber bei den herkömmlichen Empfängern ist immer ein Summensignal vorhanden..
JoeBlack
26.05.2010, 14:27
Da man zur not die Kanäle auch alle einzeln einlesen kann kommt man wohl unterm Strich deutlich besser weg wenn man einen kleinen Atmega nimmt und den nur zum einlesen der einzelnen Kanäle nutzt. Das sollte einiges billiger werden.
Wenn man das nicht selbst bauen und programmieren will kann man natürlich auch das QuadroPPM-Modul nehmen, aber ich würde wohl eher ner Selbstbaulösung den Vorzug geben, zumal mein Hauptcontroler dadurch noch entlastet wird weil er nicht die Werte selbst einlesen muss sondern bereits vorberechnet über RS232 oder I2C bekommt.
MfG JoeBlack
rideyourstyle
26.05.2010, 16:13
das geht so:
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 20000000
$baud = 9600
' ----- Empfänger -----
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
'-----------Interupts----------
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
Enable Interrupts
'...
'blablablabalbal... codecode
'...
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
End
Die Signale sind alle am anfang von dem Signal, das erste nach der langen Pause ist also kanal 1 usw...
http://dyyyh.de/quadro/summensignal.jpg
[/code]
OT:
Was macht denn da ein MKII neben dem KO? Auch ein selbstbauprojekt ;-)
weiter links steht sogar nochmal einer ;) leider kein selbstbau, wobei ich auch shcon dran rumgelötet hab ... braucht man hald zum feieren ^^
LJ-Products.de
02.07.2010, 01:25
das geht so:
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 20000000
$baud = 9600
' ----- Empfänger -----
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
'-----------Interupts----------
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
Enable Interrupts
'...
'blablablabalbal... codecode
'...
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
End
Die Signale sind alle am anfang von dem Signal, das erste nach der langen Pause ist also kanal 1 usw...
http://dyyyh.de/quadro/summensignal.jpg
[/code]
Hi Goara,
Habe dein Code mal in Bascom ausprobiert, aber er funktioniert nicht.
Summensignal ist am ICP angeschlossen (Empfänger = ACT DSL4top Typ: MK)
Hier mein Code:
'Einstellungen
$regfile = "m644pdef.dat" 'Atmega 644P
$crystal = 20000000 '20Mhz ext
$baud = 115200
$hwstack = 100
$swstack = 100
$framesize = 100
'ADC Einstellungen
Config Adc = Single , Prescaler = Auto , Reference = Aref 'Aref = 3V3
Start Adc
'Acc Nullwerte: Z = 611 ; Y = 497 ; X = 511 für ACC-Mode
'I2C Bus Einstellungen
Config Scl = Portc.0 'I2C Port SCL
Config Sda = Portc.1 'I2C Port SDA
I2cstart 'I2C Bus starten
'Serialport Einstellungen
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 254
Config Serialout = Buffered , Size = 254
'PPM Messung
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
'Interrupteinstellungen
Enable Interrupts 'Interrupts einschalten
Do
'Mainblablabla
Loop
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
'Ende des Programms######################################### ####################
End
Habe mir die Kanäle mit
Print Kanal_nick ; " Nick"
Print Kanal_yaw ; " Yaw"
Print Kanal_nick_init ; " Nick init"
Print Kanal ; " Kanal"
anzeigen lassen. Leider ist alles 0. Bis auf "Kanal" der wechselt.
Desweiteren habe ich auch versucht, den Timerpreloader auf 55536 anstatt 40000 zu stellen (um auf 4 ms zu kommen). Leider auch ohne erfolg.
Dann habe ich auch noch diesen Code hier ausprobiert:
http://www.rn-wissen.de/index.php/RC-Empf%C3%A4nger_auswerten
und auf meine Werte angepasst (Timer1, Summensignal am INT1, Preloader usw.) auch ohne Erfolg.
Empfänger funktionier (Am Kanal1 hab ich das Summensignal, Am kanal2 hängt ein Servo)
Kann mir jemand vll weiter helfen?
Danke
Besserwessi
02.07.2010, 09:37
Beim Code oben fehlt noch etwas. Bis jetzt wird nur die Fallende Flanke ausgewertet. Es müßte da auch noch was bei der Steigenden Flanke passieren:
Bei der Steigenden Flanke müßte der Timer auf einen Startwert (z.B. 0 ) gesetzt werden, und dann auf die fallende Flanke umgeschatet werden.
Bei der Fallenden Flanke = Ende des Pulses, kann man dann die Zeit auslesen und müßte dann auch wieder die steigende Flanke umschalten.
Im Zweifelsfall sollte man erstman dem Compiler das retten der Register überlassen, auch wenn es langsamer wird. Da ist man dann sicher nicht noch da einen Fehler drin zu haben.
Wenn man schon den ICP Eingang nutzt, könnte man die Zeit auch gleich aus dem ICP Registern auslesen. Das wird etwas genauer, auch wenn das auslesen aus dem Timer auch ausrechend genau ist.
Das externe zusammenführen der Signal zu einem Summensignal ist zwar ein Umweg, aber auch nicht so kompliziert. Das könnte man realtiv leicht selber aufbauen mit einer Diode je Kanal und einem Pulldown Widerstand - da ist ja nur eine Oder Verknüpfung.
LJ-Products.de
02.07.2010, 09:53
Hi,
hier im Wiki:
http://www.rn-wissen.de/index.php/RC-Empf%C3%A4nger_auswerten
wird doch auch nur die fallende Flanke ausgewertet oder hab ich da irgendo was übersehen?
Bye
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.