STM32 PWM Polarität

Gast #6906529
Lesenswert?

Hallo,
ich steh grad irgendwie auf dem Schlauch und komme nicht weiter. Ich 
möchte an einem STM32L021 einen PWM Ausgang nutzen. Da ich allerdings 
einen Pegel von 5V benötige, habe ich einen 5V Toleranten Pin genommen 
(PA10, TIM2_CH3), einen externen Pullup Widerstand mit 4,7kOhm dran 
gehängt und den GPIO als OpenDrain konfiguriert. Funktioniert auch. Bis 
auf eine Kleinigkeit: Das mit den Polaritäten klappt einfach nicht.
Ich möchte am Anfang, solange der Timer inaktiv ist, das der Pegel am 
Pin 0V hat. Sobald der Timer startet, soll der Pegel auf die 5V 
springen. Wird der Capture/Compare erreicht, soll der Pin wieder auf 0V 
sein.
Ich hab jetzt schon alle mögliche Kombinationen aus PWM-Mode (OC3M im 
Register CCMR2) und Output Polarität (CC3P im Register CCER) 
durchprobiert, aber keine Konfiguration davon liefert das was ich mir 
vorstelle.
Vermutlich seh ich grad den Wald vor lauter Bäumen nicht...
Jemand eine Idee?
Gast #6906662
Lesenswert?

Rolf schrieb:
> Ich hab jetzt schon alle mögliche Kombinationen aus PWM-Mode (OC3M im
> Register CCMR2) und Output Polarität (CC3P im Register CCER)
> durchprobiert, aber keine Konfiguration davon liefert das was ich mir
> vorstelle.

Zeige mal einen Versuch, der deiner Meinung nach klappen müsste. Am 
besten das ganze Projekt in compilierbarer Form.
#6906725
Lesenswert?

Rolf schrieb:
> Ich möchte am Anfang, solange der Timer inaktiv ist, das der Pegel am
> Pin 0V hat.

Das geht nicht. Spendier einen Inverter, am besten 74HCT.

Ein Pull- muss auf den Pegel ziehen, den der Pin zu Anfang haben soll. 
Solange Reset aktiv ist, ist der Port ein Eingang und der Pull-Up ist 
trotzdem ein Pull-Up. Ausnahme: bei PA13 und PA14 sind zu Anfang ein 
interner Pull-Up bzw. Pull-Down aktiv. Und solange die nicht per 
Programm abgeschaltet werden, ist der Pin nicht 5V-tolerant.
Gast #6906777
Lesenswert?

Rolf schrieb:
> Ich möchte am Anfang, solange der Timer inaktiv ist, das der Pegel am
> Pin 0V hat. Sobald der Timer startet, soll der Pegel auf die 5V
> springen. Wird der Capture/Compare erreicht, soll der Pin wieder auf 0V
> sein.

Was heißt "solange der Timer inaktiv ist"? Wenn damit gemeint ist, 
"bevor die Timer-Register initialisiert und der Zähler gestartet wurde 
(durch Setzen des CEN in TIMx_CR1), dann:
Konfiguration des Pins als "general purpose output", OD usw. und 
Umschalten auf "Alternate Function" erst nach Starten des Timers.
Wenn gemeint ist, ab Initialisierung der Register und Start des Zählers 
bis zum ersten Update-Event:
UG und CCxG in TIMx_EGR sollten das Gewünschte leisten.

Die Logik dahinter: Der Zustand des Ausgangs wird immer nur bei einem 
Update bzw. Compare-Event aktualisiert, also wenn der Zustand sich 
ändern soll, s. 16.3.9:

In PWM mode (1 or 2), TIMx_CNT and TIMx_CCRx are always compared to 
determine
whether TIMx_CCRx ≤ TIMx_CNT or TIMx_CNT ≤ TIMx_CCRx (depending on the 
direction of the counter). However, to comply with the OCREF_CLR 
functionality (...), the OCREF signal is asserted only:
•When the result of the comparison changes, or
•When the output compare mode (OCxM bits in TIMx_CCMRx register) 
switches from the “frozen” configuration (no comparison, OCxM=‘000) to 
one of the PWM modes (OCxM=‘110 or ‘111).
Gast #6906819
Lesenswert?

Rolf schrieb:
> Da ich allerdings
> einen Pegel von 5V benötige, habe ich einen 5V Toleranten Pin genommen

Und was willst du damit erreichen?
5 V tolerant heißt, daß der Anschluß auch mal von außen angelegte 5 Volt 
verträgt, ohne kaputt zu gehen. Es heißt nicht, daß er 5 Volt liefern 
kann.

W.S.

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