PWM Eingänge für ATMega32

Gast #561537
Lesenswert?

Ich habe mehrere Sensoren mit PWM Ausgang, die ich mit dem Mega32 
verarbeiten will. Wie kann man das am Besten machen und wieviele solcher 
Sensoren sind max. anschließbar. Der Wert des Sensors ist das PWM 
Verhältnis.

Falls Beispiele genannt werden, möglichst in Assembler.

mfg
Quehl
Gast #561706
Lesenswert?

Hi,

@Kai: da sagt das Datenblatt aber etwas anderes:
- 8 single ended channels
- 7 differential channels (TQFP only)
- 2 differential channels with gain (1x, 10x, 200x)

Und ich würde lieber versuchen, das ganze über die capture funktion des 
timers zu realisieren. Also bei steigender/fallender Flanke einen 
Interrupt generieren und die entsprechenden Timerwerte ermitteln. Die 
Zeitabstände kann man dann in das PWM Verhältnis umrechnen.

Gruß

Fred
#561735
Lesenswert?

Es kommt (wie immer) auf die Details an. Der Umweg über Tiefpass und ADC 
ist prinzipiell eine gute Lösung, aber nicht immer die beste.

Capture ist die beste Lösung, die AVRs (zumindest die mir näher 
bekannten) haben aber nur einen Hardware-Capture-Kanal.

Nun kommt es auf die Frequenz der PWM-Signale an. Ist sie langsam genug, 
kann man die Eingänge pollen und auf Änderung prüfen (mehrkanaliges 
Software-Capture).

Es lohnt sich auch, darüber nachzudenken, ob man nicht einen AVR mit 
Pinchange-Interrupt benutzt, da lässt sich Software-Capture einfacher 
realisieren.

Also, nenne die zu erwartenden Frequenzen, dann sehen wir weiter...

...
#562014
Lesenswert?

...oder man schaltet mit ein paar Port-Pins einen Muxer und legt so die 
zu messenden Eingänge der Reihe nach an den Capture-Eingang zum Messen. 
Dauert dann aber halt immer min. 2 Taktperioden (eine während der 
(asynchron) umgeschaltet wird, die nächste kann man dann messen).
(Firma: ZeuSWarE GmbH) #562137
Lesenswert?

@ Fred:
ja ne sry,
meinte 8ports,

zu den sogenannten 7 differentiellen:

man kann ADC0..6 nur differentiell zu ADC0..2 also 3 ports messen,
womit man bei
>>NUR 3 'wirkliche' differnentielle kanäle hat,
nimmt man differentiell nur ein externe refferenzspannung
 an port ADC1 kann man effektiv 7 spannungen differentiell messen.

und natürlich wenn
 8 kanäle...


aber ein frage stellt sich noch:
>>Wie groß ist die ausgangsauflösung deiner sensoren ,10mV?
den der ATMega32 hat nur ein 10bittigen ADC.

grüüüüße
#562511
Lesenswert?

also PWM ist digital und darum nicht an den Analogeingängen zu 
gebrauchen, sonst bitte mehr Informationen.
Zeitdauer hatte ich mal was mit 300ms gelesen. Aktuell müßte ich das 
noch nachsehen. Das captureregister fiel mir zwar auch ein, nur gibt es 
dafür nur einen Eingang. Kann man vielleicht die Int. Eingänge benutzen, 
sind immerhin 3 Eingänge mit Captureeingang 4 Eingänge. Da müßte man 
doch im Interupt Zweig nur den Timer1 Stand auslesen und sichern. 
Kleines Problem ist, wenn die Interrupts gleichzeitig auftreten. Bleibt 
die Interruptanforderung solange bestehen, bis der aktuelle Interrupt 
abgearbeitet ist? Dann hätte ich eine kleine Ungenauigkeit drin, die 
aber evtl. akzeptiert werden könnte, wenn die Int.abarbeitung kurz 
gehalten wird.

Pollen ist nicht ganz so gut, weil durch bedingte Jumps unterschiedl. 
Laufzeiten entstehen und die Programme recht groß werden sollen. Nicht 
nur Tests sondern auch Anwendung.

Welcher AVR hat Pinchange Interrupt? Verwenden will ich nur DIP Gehäuse.

mfg
Quehl
#562590
Lesenswert?

Also bei 300ms Periodendauer schafft das der AVR mit Software-Capture 
mit links uns 40 Fieber...

Ich würde die Eingänge (einen Port für 8 Signale, bei Bedarf einen 
weiteren Port für weitere 8 Signale) im Timer-Interrupt abfragen. Mit 
der modifizierten PeDa-Tastenabfrage (Entprellung raus, dafür beide 
Flanken auswerten) ist das mit wenigen Takten in der Timer-ISR getan.
Das Hauptprogramm wertet dann die Flanken-Flags aus und liest den 
(Software-) Zähler ab, den die Timer-ISR hochzählt.
Der (beim Pollen) von Dir befürchtete Jitter durch unterschiedliche 
Programmlaufzeiten tritt nicht auf, das Pollen erfolgt im 
Timer-Interrupt mit einem von Dir frei bestimmbaren Zeitraster.

Da das Programm vermutlich noch etwas mehr tun soll, muss man sehen, wie 
man die restlichen Jobs mit der Timer-ISR verzahnt.

PCI findest Du z.B. bei der Mega[4/8/16]8-Serie (DIL28). Das ist bei der 
langsamen Signalfrequenz aber nicht nötig.

Betreffs ADC: Jedes PWM-Signal lässt sich mit einem Tiefpass zu einem 
Analogsignal wandeln und dann mit ADC messen. Ob das sinnvoll ist, 
entscheidet der Einzelfall. Signale mit Periodendauer über 10ms (unter 
100Hz) würde ich durch Tastgradmessung (Zeitmessung, Software-Capture) 
auswerten.

...
Gast #562908
Lesenswert?

danke, das hört sich ganz gut an. Meine Gedanken waren von den Flanken 
als genaueste Möglichkeit vernebelt. Und weil das so in den 
Datenblättern steht.

PCI sind doch die Interruptpins? Die gibt es beim Mega32 auch. da sogar 
3 Pins und beim Mega8 nur 2 Pins. Sonst hab ich beim Mega8 nichts 
darüber gefunden.

Je nach Anforderung werde ich mal beides im Auge behalten.

mfg
Quehl
#562932
Lesenswert?

PCI: Ich sprach nicht vom Mega8 sondern vom Mega48, Mega88 und Mega168. 
Schau mal in dessen Datenblatt. Externer Interrupt und PCI sind 
Zweierlei.

Bei Deinem Tempo (unter 100Hz) fährts Du aber mit Scann im 
Timer-Interrupt bedeutend ressourcenschonender. Außerdem kannst Du einen 
Software-Zähler nehmen, dessen Zähltakt Du mit einem Timer Deinen 
Wünschen anpassen kannst. Dies kann (falls alle Sensoren mit halbwegs 
gleicher Frequenz "klappern") Divisionen einsparen, die beim AVR recht 
ressourcenfressend sind.

...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren