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