Forum: Mikrocontroller und Digitale Elektronik PWM mit Extras auf ATMega32?


von Florian R. (Firma: TU Wien) (frist)


Angehängte Dateien:

Lesenswert?

Hallo,
ich würde gern mit einem atmega32 eine Art spezielles PWM Signal 
generieren.

Ich brauche ein PWM Signal, Frequenz (1kHz bis 10kHz) und Tastverhältnis 
(0-95%)einstellbar. So weit kein Problem, lässt sich mit dem einem der 
Counter Atmega32 leicht erledigen. Das Problem ist jetzt, dass ich 
immer, wenn das Signal länger als 200 µs low ist, einen 1 µs langen Puls 
extra brauche. Die Zeiten sollten eingehalten werden, auch wenn der µC 
noch was anders erledigt (Display, ein paar Tasten zum Einstellen, 
RS-232, …).

Das Bildchen zeigt mal ein paar mögliche Signalformen.

Wie könnte ich da vorgehen? Mit den drei Timern müsst sich da doch was 
machen lassen, aber ich komm nicht wirklich auf einen grünen Zweig.

Das Signal soll übrigens zur Leistungsstellung eines Laser benutzt 
werden und der Laser hätte eben gern min. alle 200 ms einen 1ms Puls, 
damit das Plasma Ionisiert bleibt. Die langen Pulse des eigentlichen PWM 
Signals bestimme dabei die abgegebenen Laserpulse, die kurzen 1µs Pulse 
alle 200µs halten das Gas ionisiert, aber unter der Laserschwelle, 
weshalb keine Leistung emittiert wird.  Jetzt könnte man diese Signal 
Notfalls ja einfach extern erzeuge und die beiden Signale 
Oder-Vernküpfen, aber mir missfällt, dass das dann die Abgabeleistung 
beeinflusst, wenn die 1 µs Pulse in der Nähe (<200 µs) der eigentlichen 
Pulse auftreten.

Grüße
Flo

von Bernhard M. (bernhard84)


Lesenswert?

Hi.

Hier ein Vorschlag, der gehen könnte, habs aber nicht überprüft:
Also den einen Counter ganz normal einstellen, dass er deine PWM macht. 
Zusätzlich den Output-Compare-Int für diesen Timer setzen. Der müsste 
dann einen Interrupt machen, sobald dein PWM-Signal von high auf Low 
geht.
Dieser Interrupt startet dann einen zweiten Timer, der nach 200 us einen 
Overflow und somit einen Interrupt macht. Diesen Timer benutzt du dann 
um deinen 1 us Puls zu machen.
Zusätzlich benutzzt du noch den OVF-Int vom ersten timer um den 2. 
auszuschalten, damit er keinen imouls mehr macht, wenn dein PWM-Signal 
high ist.
Das ganze lässt du dann an 2 pins nach draußen gehen, die du veroderst. 
Evtl. gehts auch mit einem Pin, dann ist der Aufwand in den 
Interrupt-Routinen aber höher.

Das ganze hängt davon ab, ob es geht, dass der Timer im PWM-Modus einen 
Compare-Interrupt machen kann. da bin ich mir nicht sicher. Vielleicht 
kann da jemand anderes was dazu sagen.

Bernhard

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo Bernhard,
danke für Deinen Vorschlag. In diese Richtung hab ich auch schon kurz 
gedacht, ich würde das aber lieber ganz in Hardware machen, also ohne, 
dass der Interrupt irgendwelche Zähler konfigurieren muss. Ich mach mir 
Sorgen, den Interrupt mal zu verpassen. Das würde mir angeblich das arme 
Plasma im Laser übernehmen.

Es wäre ganz einfach, wenn man die Zähler im ATMega durch ein externes 
Signal löschen könnte, das geht aber leider nicht.

Drum tendiere ich inzwischen dazu auf dem µC nur das eigentliche PWM 
Signal zu mache und die Extrapulse mit zwei externen Zählern.

Das PWM Signal resetet den ersten Zähler, der zählt runter, das dauert 
200µs, dann erzeugt er einen kurzen Puls, der setzt ein RS-Flipflop, und 
resetted einen zweiten Zähler, der zählt 1µs runter und löscht das 
Flip-Flop wieder. Das Ausganssignaldes Flip-Flops oderer ich mit dem PWM 
Signal. Vielleicht brauchst auch ein JK-Flipflop statt RS, muss ich mir 
noch überlegen.

Als Zähler fallen mir im Moment nur der 74HC161 ein, der hat aber leider 
nur 4bit, so dass ich min. 3 kaskadieren müssten. Ein programmierbarer 
16 bit Zähler mit Reset wäre schön. Kennt zufällig jemand einen. Mit dem 
altbekannten 8254 könnte man sicher was machen, aber der hat mich schon 
vor über 15 Jahren in meinem ersten 80386er so gestresst...

Grüße
Flo

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
Noch kein Account? Hier anmelden.