Hallo Community, Thread mit Informationen zum Stromwandler und verschaltung: Beitrag "Abfragen von mehreren Stromwandlern (PWM, DutyCycle)" Ich habe an einen ATMega644 mit 14.7456 Mhz mehrere Stromwandler ueber einen analogschalter CD4067 am ICP pin den Atmega angeschlossen. Nun frage ich mich wie ich das ganze am einfachsten und resourcensparendesten Auswerten kann. Die Stromwandler haben normalerweise eine PWM Frequenz von 125Hz, allerdings schwankt die Frequenz im Bereich von 120-130Hz. Damit ich nun den DutyCycle errechnen kann muss ich quasi mit den Interrupt Capture Mode auf beide Flanken triggern, und immer einen Cycle als ganzes aufzeichnen um quasi meine 100% zu haben und davon dann den DutyCycle errechnen zu koennen, soweit richtig? Nun die andere Frage, wenn ich den Timer1 16Bit ohne Prescaler laufen lasse wird er mit ja zwangslaeufig ein oder mehrmal ueberlaufen, dass muesste ich ja auch mit verrechnen, um eine moeglichst hohe Aufloesung zu bekommen? Und dann noch der Punkt, die PWM scheint etwas zu schwanken auch bei konstanten Stromwert, sieht zumindest auf den OSZI so aus, aber mit einer 4er Mittelwertbildung siehts dann ganz gut aus. Kann ich fuer diese Mittelwertbildung einfach den NoiseCancleer des AVR verwenden oder muss ich das in Software loesen? Wie das ganze theoretisch aussehen soll ist mir durchaus klar, aber wie ich das moeglichst effizient umsetzen kann weiss ich nicht, weil wahrscheinlich das Rechnen mit einer 16Bit zahl auf den Atmega nicht grad sparsam ist oder? Vielen Dank fuer eure Unterstuetzung. Freakster235
Freakster235 schrieb: > Damit ich nun den DutyCycle errechnen kann muss ich quasi mit den > Interrupt Capture Mode auf beide Flanken triggern, und immer einen Cycle > als ganzes aufzeichnen um quasi meine 100% zu haben und davon dann den > DutyCycle errechnen zu koennen, soweit richtig? Im Prinzip: ja. Du stellst die Dauer das Low-Pegels fest, du stellst die Dauer des High-Pegels und fest, und die Summe davon ist dann die Periodendauer. Der Duty-Cycle ist dann ja nichts anderes als das Verhälnis von High_pegel zur Periodendauer. > Nun die andere Frage, wenn ich den Timer1 16Bit ohne Prescaler laufen > lasse wird er mit ja zwangslaeufig ein oder mehrmal ueberlaufen, dass > muesste ich ja auch mit verrechnen, um eine moeglichst hohe Aufloesung > zu bekommen? möglichst hohe Auflösung ist eine Sache. möglichst hohe SINNVOLLE Auflösung ist eine ganz andere Sache. Wie genau ist denn dein Stromwandler? Wie sinnvoll ist es denn, wenn du auch noch die 8-te Nachkommastelle berechnest? > Und dann noch der Punkt, die PWM scheint etwas zu schwanken auch bei > konstanten Stromwert, sieht zumindest auf den OSZI so aus, aber mit > einer 4er Mittelwertbildung siehts dann ganz gut aus. Kann ich fuer > diese Mittelwertbildung einfach den NoiseCancleer des AVR verwenden oder > muss ich das in Software loesen? Das musst du in Software machen. Allerdings: die genau Frequenz interessiert dich doch eigentlich gar nicht. Dich interessiert doch nur das Verhätlnis von High-Pegel zur Periodendauer. Beides bestimmst du, in dem du die Pegel ausmisst. Wenn wir davon ausgehen, dass sich während einer einzigen PWM der Duty-Cycle nicht wesentlich ändern wird, dann ist es eigentlich egal, ob die PWM-frequenz ein wenig schwankt. Denn wichtig ist ja nur das Verhältnis von High zu Low. > wahrscheinlich das Rechnen mit einer 16Bit zahl auf den Atmega nicht > grad sparsam ist oder? 16 Bit ist noch kein großes Problem.
Hallo Karl Heinz, also die moegliche Aufloesung meiner Stromwandler ist hoechstens eine veraenderung des DutyCycles um 0.01ms, dass ist aber dann das ausserste was ich. Laut Datenblatt liefert er sogar nur eine Veraenderung von 0.1ms. Also duefte es rein von der Aufloesung her ja kein problem sein und ich kann den Timer1 sogar mit Prescaler laufen lassen, oder? Ja genau, die Frequenz interessiert mich ueberhaupt nicht, ich will nur das Verhaeltnis von high zu low und daraus dann evtl. das mittel bilden wenn es zu unruhig ist, was es auf dem Oszi auch ist. Wie kann ich denn am einfachsten einen Mittelwert bilden auf den AVR, ich hab hier im Forum mal ein Bespiel gesehen da wurden bits geshiftet fuer mittelwert, nur war mir nicht wirklich klar wie das mit den shiften funktionieren soll, also zur mittelwertbildung. Vielen Dank
@ Freakster235 (Gast)
>Wie kann ich denn am einfachsten einen Mittelwert bilden auf den AVR,
So wie immer. Einfach mehrere Messwerte addieren und duch Anzahl der
Messwerte teilen. Dabei darf kein Überlauf auftreten, also große (16/32)
Bit Variablen nutzen.
Freakster235 schrieb: > also die moegliche Aufloesung meiner Stromwandler ist hoechstens eine > veraenderung des DutyCycles um 0.01ms, dass ist aber dann das ausserste > was ich. > Laut Datenblatt liefert er sogar nur eine Veraenderung von 0.1ms. Was für ein Glück, daß die Einheit des duty cycle bzw. - warum reden wir eigentlich nicht deutsch? - Tastverhältnisses gar nicht Millisekunden sind. Aber sei es drum. Bei 125Hz nominaler Wiederholfrequenz haben wir eine Periodendauer von 8ms. Deine 10µs sind dann 1/800 davon. Oder knapp 10 Bit Auflösung (0.1ms bzw 80:1 wären gar nur 6.3 Bit). > Also duefte es rein von der Aufloesung her ja kein problem sein und ich > kann den Timer1 sogar mit Prescaler laufen lassen, oder? Der Timer sollte zwischen zwei fallenden Flanken mindestens 10 Bit durchlaufen. Oder anders ausgedrückt: die Differenz der Capture-Werte zwischen zwei fallenden Flanken muß mindestens 800 sein. Sonst verschenkst du Genauigkeit. Zwischen 800 und den maximal möglichen 65536 für einen 16-Bit Timer sollte irgendein passender Prescaler-Wert zu finden sein. So lange die Wiederholfrequenz des Sensors größer ist als die Überlauffrequenz des Timers kannst du dann ganz bequem mit 16-bit unsigned Arithmetik arbeiten. Da die Information im Tastverhältnis steckt, ist die genaue Zahl irrelevant. Eine Mittelung würde am besten über den Quotienten erfolgen. XL
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.