Forum: Mikrocontroller und Digitale Elektronik 2 PWM-Ausgänge synchronisieren


von Sparfuchs (Gast)


Lesenswert?

Hallo,

meine Anwendung braucht 2 Rechtecksignale mit unterschiedlichen, im 
Betrieb einstellbaren Frequenzen und einer definierten und im Betrieb 
einstellbaren Phasenlage (-90° bis 90°) zwischen den beiden Ausgängen.

Kann man das mit AVRs realisieren?

Dachte daran 2 CTCs zu verwenden. Die Synchronisierung bereitet noch 
Kopfschmerzen: Habe Tips gefunden, dass man sich die Anzahl der Zyklen 
zwischen der Initialisierung der beiden Ausgänge zu debuggen und TCNT 
entsprechend vorher einzustellen. Finde ich nicht gerade elegant. Geht 
das besser?

Danke im Voraus für Hilfe!

von Michael G. (sparrenburg)


Lesenswert?

Hallo,

geht das auch analog? Wäre unter Umständen einfacher.

Ansonsten: Mit einem Cortex M3 habe ich vor ein paar Tagen eine 
Simulation geschrieben, damit er meinem DUT einen Inkrementalgeber 
simuliert. Da habe ich eine Phasenverschiebung von 90° fest. Realisiert 
über zwei Timer-IRQ's.

Wie genau solls denn sein?

Grüße
Michi

von slw (Gast)


Lesenswert?

Ja, allerdings nicht mit allen. Schau Dir PWM3 an. bei xmega bin ich mir 
nicht sicher.

von Sparfuchs (Gast)


Lesenswert?

Erstmal danke für die ersten antworten!

Michael G. schrieb:
> geht das auch analog? Wäre unter Umständen einfacher.

Ich brauche auf jeden Fall ein digitales Interface, daher die Idee einen 
uC zu verwenden. Aber selbst wenn ein DA-Wandler oder ein digitales Poti 
verwendet wird, wie kann man sowas analog einfacher realisieren? Ich 
dachte, da Rechtecksignal, ist es auf jeden Fall digital besser und 
einfacher zu machen.

> Realisiert über zwei Timer-IRQ's.

Ein Timer, zwei OCR und zwei Timer IRQs. Ist eine gute Idee... Mal 
drüber gedanken machen....

Michael G. schrieb:
> Wie genau solls denn sein?

8 bit für beides (Frequenz und Phasenlage) wäre Wunsch. 6 Bit sollten es 
mindestens sein. Frequenz zwischen 40-60kHz. Phasenlage (zwischen den 
beiden Signalen!) zwischen -90° und 90°. Die Rechtecksignale haben 
jeweils eine feste Pulsweite = 50%.

Würde gerne einen Atmega oder Attiny verwenden. Habe mit denen Erfahrung 
und eh noch ein paar hier rumliegen.

Was ist PWM3? Meinst Du PWM-Mode = 3?

von Michael G. (sparrenburg)


Lesenswert?

Also ich habe das folgendermaßen gelöst:

1) Timer 1 generiert mir ein Reckeck mit einem Duty-Cicle von 50%.
2) Im IRQ des Timer 1 wird der Port-Pin (A) invertiert (dadurch halbe 
Frequenz!)
3) Im IRQ des Timer 1 wird ebenfalls Timer 2 gestartet, welcher das 
gleiche Setupt hat wie Timer 1 (gleich Frequenz,...), das wäre bei dir 
dann anzupassen.
4) Im IRQ des Timer 2 wird dieser gestoppt
5) Im IRQ des Timer 2 wird der entstrechende Port-Pin (B) invertiert.

Das ganze funktioniert sehr gut und sehr genau. Der Cortex läuft mit 
72Mhz und zählt auch zusätzlich die Impulse.

Bei der Umkehr der Zählrichtung werden einfach die Port-Pin's A und B 
getauscht.

Ich kenne die AVR's nicht mehr so genau, aber rechenintensiv ist es 
nicht. Und die Werte könnten über DMA-Register nachgeladen werden (denke 
ich).

Grüße
Michael

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.