Problem bei PWM Messung am Rx Ausgang

Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#1 Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

Guten Morgen Heliflieger,

im Rahmen des Sticki Logger Projekts bin ich im Moment meine "PWM Mess Funktion" am optimieren. Dabei ist mir aufgefallen, dass noch immer ein starkes Rauschen in den Messergebnissen ist. Das bringt den CCPM Demixer leider etwas durcheinander. Also muss es beseitigt werden :)
Im Anhang findet ihr ein Chart das eine einfache Bewegung des Hecks zeigt. Wisst ihr wie das Rauschen zu stande kommen könnte und wieso es z.B. beim Heck Kanal plötzlich aufhört? Der Messbereich ist mit der Funktion 1600 Digits groß. (+800/-800 im Chart)
Das ist die (simple) Funktion um die PWM vom Empfänger zu messen: Die Funktion wird per Timer Interrupt mit 60 Hz aufgerufen.

Code: Alles auswählen

inline static uint16_t pwmIn(volatile uint8_t *port, uint8_t pin) 
{
	unsigned short counter;

	counter = 0;
	while (! (*port & (1 << pin)) )	// wait on PIN == LOW
	{
		if (0 == ++counter) return (0);	// overflow --> return 0
	}	
	counter=0;
	//Dauer zählen
	while (*port & (1 << pin))	// wait on PIN == HIGH
	{
		if (0 == ++counter) return (0);	// overflow --> return 0
	}
	
	//return the result
	return (counter);
}
Vielen Dank schonmal für eure Hilfe!
Dateianhänge
Log_Analyse.xls
(34.5 KiB) 21-mal heruntergeladen
Log_Analyse.ods
(137.09 KiB) 19-mal heruntergeladen
Gruß,
Patrick
Benutzeravatar
ER Corvulus
Beiträge: 16688
Registriert: 14.04.2005 23:17:06
Wohnort: ziemlich hoch über Augsburg ;)

#2 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von ER Corvulus »

m.E. sind 60hz bei Impulsbreiten von 1,0 bis 2,0 ms einfach zuwenig für ne vernünftige Auflösung - oder bin ich da so daneben? (ich lese das so, dass Du ab Signal High die Anzahl der Interrupts zählst, bis das Signal wieder auf Low geht)
Normalerweise sollte die Samplingrate doch mindest doppelt so gross wie die höchste zu messende frequenz sein - damit wäre man für ein Impuls von 1ms bei 2kHz. Müsstest aber noch deutlich höher gehen, weil du ja die zwischen 1ms und 2ms noch "Auflösen" musst.
Falls ich da völlig daneben stehe - sag bescheid :oops:

Grüsse wolfgang
Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#3 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

ER Corvulus hat geschrieben:(ich lese das so, dass Du ab Signal High die Anzahl der Interrupts zählst, bis das Signal wieder auf Low geht)
Ups, dann habe ich wohl etwas ungenau geschrieben. Die Funktion wird mit 60 Hz aufgerufen. In der Funktion wird dann der Counter mit 8mHz (Systemtakt) hochgezählt.
Das mit dem Interrupt hat den Sinn, dass ich so in der PC Software wieder genau den 60Hz Takt bei der Wiedergabe treffen kann und so keine Synchronitäts Probleme bekomme.
Gruß,
Patrick
Benutzeravatar
FPK
Beiträge: 4647
Registriert: 01.12.2005 17:21:35
Wohnort: Franken

#4 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von FPK »

sungamer hat geschrieben:In der Funktion wird dann der Counter mit 8mHz (Systemtakt) hochgezählt.
Wie stellst Du sicher, dass der Counter mit 8 MHz hochgezählt wird? Hast Du Dir den generierten Assemblercode für die Messchleife angeschaut? Wie schnell läuft die CPU?
- T-Rex 450 SE: Scorpion -8; 14er Ritzel; Jazz; 3xHS65HB; S9650; Gy401; R607FS
- T-Rex 450 CDE mit UH-1C-Rumpf im Bau: 430L; 4xHS56; Gy401; Schulze 8.35
- T-Rex 500: Scorpion 3026-1600; BL60G; 3xS9650; AC-3X; BLS-251; R617FS
- T-Rex 700N: OS 91 SZ-PS; TS: 3*JR8717; Gas: S9254; LTG/LTS-6100; MultiGov Pro; ReactorX; R6008HS
- Hornet X3D; Micron V2; Blade mSR; Piccolo V2
- diverse Simulatoren: lieber Sim statt E
- diverse Flächenflieger
- T8, FF-7 FASST, FX-18
Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#5 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

FPK hat geschrieben: Wie stellst Du sicher, dass der Counter mit 8 MHz hochgezählt wird? Hast Du Dir den generierten Assemblercode für die Messchleife angeschaut? Wie schnell läuft die CPU?
Okay, es sind nicht ganz 8mHz, die ganze Schleife benötigt für jeden Durchlauf 12 Zykles. Tut aber auch nichts zu Sache, auf jeden Fall schneller als die Impulsbreite des Rx.
Der CPU läuft mit 8 mHz.
Gruß,
Patrick
Benutzeravatar
FPK
Beiträge: 4647
Registriert: 01.12.2005 17:21:35
Wohnort: Franken

#6 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von FPK »

sungamer hat geschrieben:
FPK hat geschrieben: Wie stellst Du sicher, dass der Counter mit 8 MHz hochgezählt wird? Hast Du Dir den generierten Assemblercode für die Messchleife angeschaut? Wie schnell läuft die CPU?
Okay, es sind nicht ganz 8mHz, die ganze Schleife benötigt für jeden Durchlauf 12 Zykles.
Gemessen oder geschätzt :)?
Tut aber auch nichts zu Sache, auf jeden Fall schneller als die Impulsbreite des Rx.
Doch, weil Du alleine durch den Code eine Ungenauigkeit von zwei (Anfang- und Ende) Schleifendurchläufen erhälst. Aber das ist nur ein Punkt ;) Kann natürlich auch noch am Signal (Sender/Empfänger) oder an der Eingangselektronik liegen.
- T-Rex 450 SE: Scorpion -8; 14er Ritzel; Jazz; 3xHS65HB; S9650; Gy401; R607FS
- T-Rex 450 CDE mit UH-1C-Rumpf im Bau: 430L; 4xHS56; Gy401; Schulze 8.35
- T-Rex 500: Scorpion 3026-1600; BL60G; 3xS9650; AC-3X; BLS-251; R617FS
- T-Rex 700N: OS 91 SZ-PS; TS: 3*JR8717; Gas: S9254; LTG/LTS-6100; MultiGov Pro; ReactorX; R6008HS
- Hornet X3D; Micron V2; Blade mSR; Piccolo V2
- diverse Simulatoren: lieber Sim statt E
- diverse Flächenflieger
- T8, FF-7 FASST, FX-18
fireball

#7 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von fireball »

Falsches herangehen würde ich fast sagen - reagier lieber auf einen I/O state change per Interrupt und merke Dir da jeweils den Stand eines Timers - und nicht mit einer Routine, die regelmäßig aufgerufen wird...
Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#8 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

fireball hat geschrieben:reagier lieber auf einen I/O state change per Interrupt und merke Dir da jeweils den Stand eines Timers - und nicht mit einer Routine, die regelmäßig aufgerufen wird...
Das wäre mir auch am liebsten! Problem ist, dass ich keine 5 Interrupts habe die auf steigende Flank am Pin reagieren...
Gruß,
Patrick
fireball

#9 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von fireball »

Reicht nicht einer, der auf alle Ports reagiert? Musst Du Dir halt den letzten State von allen Ports merken und vergleichen, welcher ausgelöst hat.
Benutzeravatar
FPK
Beiträge: 4647
Registriert: 01.12.2005 17:21:35
Wohnort: Franken

#10 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von FPK »

Naja, soviel sollte das trotzdem nicht ausmachen, vor allem die teilweise symmetrischen Ausschläge nach oben und unten von zwei Kanälen (und das ist nicht nur zwischen TS-Kanälen der Fall, was eher auf ein Senderpotiproblem deuten würde) sind schon komisch. Kannst Du die Pulse mal mit einem Oszi anschauen?
- T-Rex 450 SE: Scorpion -8; 14er Ritzel; Jazz; 3xHS65HB; S9650; Gy401; R607FS
- T-Rex 450 CDE mit UH-1C-Rumpf im Bau: 430L; 4xHS56; Gy401; Schulze 8.35
- T-Rex 500: Scorpion 3026-1600; BL60G; 3xS9650; AC-3X; BLS-251; R617FS
- T-Rex 700N: OS 91 SZ-PS; TS: 3*JR8717; Gas: S9254; LTG/LTS-6100; MultiGov Pro; ReactorX; R6008HS
- Hornet X3D; Micron V2; Blade mSR; Piccolo V2
- diverse Simulatoren: lieber Sim statt E
- diverse Flächenflieger
- T8, FF-7 FASST, FX-18
Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#11 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

FPK hat geschrieben:Kannst Du die Pulse mal mit einem Oszi anschauen?
Schon gemacht, aufm Oszi ist das PWM Signal vom Empfänger ohne Rauschen oder Ähnliches. Die Flanke steigt auch sehr Steil an, es kann also nicht da dran liegen, dass HIGH unterschiedlich erkannt wird.
Komisch finde ich, dass ab Frame 357 das starke Rauschen auf dem Heckkanal verschwindet. Wo dran liegt das wohl? :?

EDIT: Habe im Anhang mal noch einen neuen Log angehangen! Auffallend ist, dass die Messungen manchmal sehr gut sind. Aber leider auch schlechte Phasen vorkommen.
Dateianhänge
Log_Analyse_2.ods
(132.43 KiB) 25-mal heruntergeladen
Log_Analyse_2.xls
(39.5 KiB) 19-mal heruntergeladen
Gruß,
Patrick
Benutzeravatar
ER Corvulus
Beiträge: 16688
Registriert: 14.04.2005 23:17:06
Wohnort: ziemlich hoch über Augsburg ;)

#12 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von ER Corvulus »

Das Problem liegt daran, dass Du nicht "Herr über die CPU" bist. Kannst du sicherstellen, das der Rechenknecht in deinem Timer-Interupt wirklich nix - also gaaaaarnix macht als die Zählroutine aufzurufen? In som Echtzeitsystem laufen ja "nebenbei" noch so nette Sachen wie Schnittstellen-Handling, die so ein "lumpigen" Timer schlicht mal eben unterbrechen.
Zeitkritische Sachen haben in so einem Interupt mit niedriger Priorität nix zu suchen. Der Ansatz (vonFireball) mit dem Interrupt vom Change des I/Os mit Zeitstempel macht da sicher mehr sinn. den Timer benutzt dann, um aktuellen Werte der Kanäle in die schnittstellen-Puffer zu schieben.

Grüsse Wolfgang
Benutzeravatar
sungamer
Beiträge: 1473
Registriert: 09.10.2006 23:24:23
Wohnort: Eschweiler

#13 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von sungamer »

Ich könnte den Timer immer auf steigene Flanke am Eingang Reseten und diesen Wert dann benutzten. Wäre am besten! Nur wie oben schon geschrieben, weis ich nicht wie das bei 5 Eingänge um zu setzen ist... :oops:
Gruß,
Patrick
Benutzeravatar
ER Corvulus
Beiträge: 16688
Registriert: 14.04.2005 23:17:06
Wohnort: ziemlich hoch über Augsburg ;)

#14 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von ER Corvulus »

Na, du hast für jeden Eingang 3 variablen: Status (High/Low) und istTimer, altTimer
In jedem IRQ guckst erstmal, wo der herkommt.
Dann ob steigend oder fallend.
Steigend: istTimer auf systemzeit stellend, Status setzten
Fallend: Aktuellen istTimer von der systemzeit abziehen und nach altTimer schieben

In Deinem 60Hz-IRQ holst dann die Werte aus altTimer ab, rechnest sie um schiebst sie zu deinem USB-Puffer (jeweils für alle 5 Ports/Pins)
Damit bist bei einem "Versatz"/latenz von 1 Pediode (als <20ms), sollte für ne Sync fürn Sim reichen.

Grüsse Wolfgang
Benutzeravatar
FPK
Beiträge: 4647
Registriert: 01.12.2005 17:21:35
Wohnort: Franken

#15 Re: Problem bei PWM Messung am Rx Ausgang

Beitrag von FPK »

Auch bei dem neuen Log sind die Ausschläge oft symmetrisch auf zwei Kanälen. Denk mal drüber nach, ob das irgendwie systematisch verursacht sein könnte, ich kenne leider das komplette Programm nicht.
- T-Rex 450 SE: Scorpion -8; 14er Ritzel; Jazz; 3xHS65HB; S9650; Gy401; R607FS
- T-Rex 450 CDE mit UH-1C-Rumpf im Bau: 430L; 4xHS56; Gy401; Schulze 8.35
- T-Rex 500: Scorpion 3026-1600; BL60G; 3xS9650; AC-3X; BLS-251; R617FS
- T-Rex 700N: OS 91 SZ-PS; TS: 3*JR8717; Gas: S9254; LTG/LTS-6100; MultiGov Pro; ReactorX; R6008HS
- Hornet X3D; Micron V2; Blade mSR; Piccolo V2
- diverse Simulatoren: lieber Sim statt E
- diverse Flächenflieger
- T8, FF-7 FASST, FX-18
Antworten

Zurück zu „Klönschnack“