PDA

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.

goara
25.05.2010, 13:54
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??

goara
25.05.2010, 19:08
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

goara
25.05.2010, 20:32
achso ja, für c hab ich auch noch irgdnwo code, wobei assambler geht ja auch in c...

Hartgas
26.05.2010, 10:59
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?

Hartgas
26.05.2010, 10:59
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?

Hartgas
26.05.2010, 10:59
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?

Hartgas
26.05.2010, 10:59
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?

goara
26.05.2010, 11:26
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...

Hartgas
26.05.2010, 11:31
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?

goara
26.05.2010, 11:45
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 ;-)

goara
26.05.2010, 18:20
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