PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Externes PWM-Signal einlesen und Auswerten



Caligula
20.08.2008, 19:56
Hallo,
ich habe folgedes Problem.

Ein PWM-Singnal mit 0V bzw. 5V und einer Frequenz von ca. 6,6kHz (T =ca. 150us) müsste ich in den MC einlesen und das Tastverhältnis feststellen. Welches dann alle ca. 500ms ausgegeben werden soll (bsp. Display)

V= Tein / (Tein-Taus)

als Hardware ist ein Atmega8 mit einem extrenen Quarz von 3,6864 MHz geplant.

- Gibt es da eine "Musterlösung" welche die Hauptschleife nicht unbedingt ausbremst?

- Schaffe ich eine Fehlerfreie auswertung mit dieser Quarzfrequenz?

gruß Cali :)

stefan_Z
20.08.2008, 23:59
Hmm sollte machbar sein, ja....
Grundsätzlich braucht das einen oder mehrere Interrupts, damits genau ist.
Ansätze wären:
A - Du kennst den genauen Takt der PWM und kannst entsprechend mit einem Vielfachen per µC annähern und dann einfach das Signal ausreichend oft sampeln. Also wenns 8 Bit bei 1kHz wären, dann alle 1/1000tel sekunde nachsehen, was der Pin macht. Das 256 mal und dann den Durchschnitt berechnen. Das wäre dann ein timer-Interrupt - AVRcalc hilft bei der Suche nach passenden Einstellungen!

B - Analog: du klemmst die PWM an einen ADC und schaust, was der so ausspuckt. Sicherlich sehr einfach, aber schon gut. Grad wenn beide 5V haben und vom selben Netz gespeist werden ne Alternative...

C - Holzhammermethode: Jeden Flankenwechsel per INTx oder Pinchange-INT protokollieren und dass dann ausrechnen. Funktioniert gut, wenn man ein relativ gleichmäßiges PWM-Signal hat. Wenns stark schwankt, dann wirds zu ungenau, weil der µC ja nicht weiß, welches die erste und welches die letzte Flanke ist.

Wer Denkfehler findet, darf sie mitteilen ;-)

fhs
21.08.2008, 08:28
Hi,

mit Interrupts durch die "input capture unit" (erfordert Umschalten der Flankenempfindlichkeit!) in Zusammenarbeit mit einem Timer wird das am effektivsten zu realisieren sein. Du sagst, Dein Signal liegt bei 6,6kHz, hast aber nicht verraten, welche Werte das Tastverhältnis annehmen kann -- davon hängt es ab, ob Deine Prozessorfrequenz ausreicht. Wenn Du keinen Mittelwert des Tastverhältnisses benötigst, sondern eine Messung alle 500ms ausreicht, ist alles noch unproblematischer; dann gehen auch die "brute force" Methoden gut!

Da ich kein Bascom spreche, kann ich Dir nur allgemeine Vorschläge zur Realisierung machen, aber keine konkreten Programmiervorschläge geben.

MfG

Fred

Caligula
21.08.2008, 16:57
huhu,

das Tastverhältnis geht von ca. 1% -99% es kommt direkt aus einem Pic mit einer Frequenz von 6.6kHz. Dieses Tastverhältnis spiegelt den aktuellen "Istwert" eines Sensors (in unserem Fall eine Digitalwaage)wieder.

Dieses Signal müssen wir dann Softwareseitig annähern, das bei der
leeren Waage dann der Wert 0% bzw bei max. Belastung dann 100% weiterverabeitet wird. (Eventuell ist eine anzeige dieses Wertes auf einem Display geplant)

Aber unser Primärziel ist es diesen Wert (0%-100%) dann auf ein Industriestandartsignal von 4-20mA zu konvertieren, damit wir diesen Sensor mit einem Handelsüblichen Regler verabeiten können.

Es handelt sich zwar nur um ein Schulungsmodel (mit großer Totzeit) aber es währe totzdem nicht so schön, wenn die Anzeige im Dislay um 5% schwankt bei konstantem Gewicht auf der Waage.

Alternative a)
Wir Verarbeiten das Signal komplet mit einer OP-Ampschaltung aus, was ich aber nicht unbedingt Zeitgemäs finde und jeder der schon mal mit OP´s gearbeitet hat weis, das sich 95% der "Schulbuchschaltungen" nicht 1 zu 1 realisieren lässt.(Theorie vs. Praxis)

Alternative b)
Wir lesen das Rs232 (mithilfe eines 232 ic´s) direkt aus der Waage aus. http://www.kern-sohn.com/pdf/BA_FCB_d.pdf (leider bin ich in Sachen RS232 ein Volllaie deswegen fällt es mir schwer den Aufwand zu Bewerten -> Expertenmeinung wäre Super) ... ist wahrscheinlich nicht der einfachste Weg aber der genauste mit vielen Möglichkeiten (Display usw.)

Alternative c)
Tiefpass (RC-Schaltung) an den Pwm-Ausgang und dann mit ADC in den uC Einlesen und später mit Wertetabelle Softwareseitig "Kalibrieren".
Bsp.:
"Digitalerconvertierter Analogwert" -> " Tastgrad"
0-12 -> 1%
13-24 ->2%
25-36 -> 3%
usw.
Sehr einfache Variante ist nur eine Frage der Genauigkeit.
Könnte mir vorstellen, das sich nicht wieder die exakte Spannungswert wie ein Verzögerungsglied 1. Ordnung verhält bei einem Sprung.

Alternative d)
Das Pwm-Signal direkt in den uC einlesen und Auswerten (eure Vorschläge)

Alternative e)
Die Nadel im Heuhaufen finden. (vielleicht gibts ja fertige IC´s)

Alternative f)
(siehe Anhang)
hab die "Steuerleitungen" mal weggelassen (Reset; input enable usw.)
geht hier ja nur um das Prinzip.

Ps: Jetzt bin ich aber mal auf eure Meinungen gespannt 8-[

gruß Cali :)

fhs
21.08.2008, 19:27
Hallo,

was spricht gegen die von Dir schon genannte Auswertung des RS232-Signals? Ich habe den Text im Datenblatt nur überflogen und bin mir nicht sicher, ob man die RS232-Parameter immer wieder neu einstellen muss; aber zumindest scheint das Gewicht (ob stabil oder nicht) kontinuierlich ausgegeben zu werden. Damit würdest Du Dir den ganzen Aufwand ersparen, die Rohdaten der Wägezelle auszuwerten! Die Datenübertragung ist gut dokumentiert und eine Interface schnell aufgebaut. Du sagt, Du hast damit keine Erfahrung; die wirst Du aber schnell bekommen und weniger Probleme haben als mit der Rohdatenauswertung.

Gruß

Fred