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?
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.
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.
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).
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.
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.