Hallo Leute,
konkret möchte ich einen vorhandenen 35 MHz PPM Sender und Empfänger auf
PCM umprogrammieren, auf beiden Seiten werkelt aus verschiedneen Gründen
bereits ein AVR. Meine Frage dürfte aber für jede serielle Funkstrecke
mit 2 Symbolen gelten, bei dem der µC das Signal erst nach
FM-Demodulation und Komparator zu sehen bekommt.
------
FRAGE:
------
Wie liest der µC am zuverlässigsten ein gestörtes Signal?
Welche Ideen gibt es, außer einem Tiefpassfilter?
Ziel ist z. B. ein Bit korrekt zu erkennen, von dem nur noch 2/3
vorhanden sind, weil es total mit Spikes durchsetzt ist.
Ist das AVR Uart mit passendem RC-Filter dafür geeignet?
Wie funktioniert das bei bestehenden Modellbau-Empfängern
-----
Ziel:
-----
Bits "entprellen" lernen auch für AFU
Ein nettes Bastelprojekt, das nachher gut funktioniert und ein bisschen
mehr bietet (Checksumme/Failsafe)
-----------
Nicht Ziel:
-----------
Es geht hier nicht um die Fehlerbehandlung (Checksumme,
Fehlerkorrektur). Da werde ich vermutlich ein bekanntes Protokoll nehmen
und gut ist:
https://www.aerodesign.de/peter/2000/PCM/pcm_systeme.gif
Krümelmonster meinte:
> Wie liest der µC am zuverlässigsten ein gestörtes Signal?
In dem Du jedes Bit mehrfach abtastest und eine Mehrheitsentscheidung
machst, ob das Bit nun 0 oder 1 ist.
Um so feiner die Abtastung um so besser ist die Entscheidung, aber
um so mehr wird der Prozessor auch belastet.
mfg
~Mercedes~ schrieb:> Um so feiner die Abtastung um so besser ist die Entscheidung, aber> um so mehr wird der Prozessor auch belastet.
Das muss nicht zwingend den Prozessor belasten - die UART macht das
auch, aber in Hardware. Je nach Ausführung/Programmierung mit 8- oder
16-facher Abtastung (das ist auch der Grund dafür, warum der Takt, der
dem Baudratengenerator der UART zugeführt wird, entsprechen dem 8- oder
16-fachen der maximal möglichne Baudrate entspricht).
Wenn 8- oder 16-fache Abtastung genügt, könnte hier also eine UART
verwendet werden.
Moin,
Krümelmonster schrieb:> Wie liest der µC am zuverlässigsten ein gestörtes Signal?> Welche Ideen gibt es, außer einem Tiefpassfilter?
Mit einem "matched Filter".
Ansonsten wirds auch wichtig sein, irgendwie auf der Empfangsseite
moeglichst exakt rauszukriegen, wann genau das Maximum der Energie des
empfangenen Bits aus dem matched Filter purzelt - dann klappts auch
leichter mit der Entscheidung ob's 1 oder 0 war...
Gruss
WK
~Mercedes~ schrieb:> In dem Du jedes Bit mehrfach abtastest und eine Mehrheitsentscheidung> machst, ob das Bit nun 0 oder 1 ist.
Ok, das verstehe ich. Worüber ich nun grübele, ist, wie ich das über
Bitgrenzen hinweg mache. Sobald ich auf eine Sendung synchronisiert bin,
ist das ja relativ einfach, aber was mache ich, wenn ich auf den
Sendungsanfang lausche?
Rufus Τ. F. schrieb:> Wenn 8- oder 16-fache Abtastung genügt, könnte hier also eine UART> verwendet werden.
Wieder was gelernt, dankeschön.
Ich habe gerade mal nachgerechnet:
Übliche Zeichendauer = 0,3 ms / Baudrate 3333,3...
AVR Takt 16MHz, AVR tastet alle 160 Takte ab
16MHz / 128 * 0,0003s ergibt 30 Samples je Zeichen.
Angenommen F_AVR=16MHz und T_Symbol=0,3ms sind fest... Könnte man noch
etwas machen? Höher Abtastfrequenz geht eher nicht mehr, ich will meine
Bits ja auch noch verarbeiten können?
So wie's aussieht probier ich's erstmal mit dem Hardware UART.
Moin,
Krümelmonster schrieb:> Dergute W. schrieb:>> matched Filter>> Was ist das? Ein Bandpass für meine Baudrate?
Sowas hier:
https://de.wikipedia.org/wiki/Optimalfilter
Ueblicherweise nimmt man nicht direkt naggisches "Rechteck" z.B. aus
einem UART, um damit einen Sender zu modulieren - die Bandbreite des
Sendesignals ist dann arg hoch. Da legt man auf der Sendeseite erst
einen Tiefpass drueber. Der sollte so das Signal beeinflussen, dass die
Bandbreite moeglichst klein bleibt, sich aber einzelne Bits nicht
gegenseitig beeinflussen. "In echt" gerne einen mit z.b.
root-raised-cosine Charakteristik.
Wenn man dann auf der Empfangsseite das Signal moeglichst gut aus dem
Rauschen rausfischen will, geht das mit einem "matched Filter", dessen
Impulsantwort entspricht dann der Impulsantwort des Sendefilters, nur
"zeitlich umgedreht".
Wenn man doch "nur" mit Rechtecken operiert, dann ist das matched Filter
dazu auch ein Filter mit einer rechteckigen Impulsantwort. Das ist dann
das, was meine Vorschreiber schon mit Mehrfachabtastung,
Mehrheitsentscheidung,etc. beschrieben hatten.
Gruss
WK
Dergute W. schrieb:> Ueblicherweise nimmt man nicht direkt naggisches "Rechteck" z.B. aus> einem UART
Ich habe die Senderplatine so gelassen, wie sie war und nur den µC durch
einen AVR ersetzt. Soweit ich sehe, wird das PPM-Signal C und R
abgerundet.
Rufus Τ. F. schrieb:> Wenn 8- oder 16-fache Abtastung genügt, könnte hier also eine UART> verwendet werden.
Von 16 nach 8, das ist wohl das, was mit dieser Anweisung passiert?
UCSRA |= (1 << U2X);