Forum: Mikrocontroller und Digitale Elektronik STM32F746G PWM Timer Periode lässt sich nicht ändern TIM2->CCR1=100;


von Henrik G. (Firma: Student) (kaltesblondes)


Angehängte Dateien:

Lesenswert?

Guten Tag,
Vorweg die DACs des Kontrollers sind bereits verbaut im Gesamtprojekt.
Ich habe zum Testen des System einen extra Code geschrieben bzw.
abgeschrieben.
Quelle:
https://deepbluembedded.com/stm32-change-pwm-duty-cycle-with-dma-for-sine-wave-generation/

Ich möchte einen Sinus generieren und dessen Frequenz über TIM4 ändern.
Dabei ging ich davon aus das TIM4->CCR1=neueFrequenz dies übernimmt.
Allerdings kann ich am Ozi keine Änderung feststellen!
Mit TIM4->ARR=neuerTeiler; funktioniert.
Programmablauf:
Über den USERBUTTON1 wird ein Interrupt ausgelöst welcher die Periode
erhöhen soll.
Ansonsten wird der SINUS über DMA der von TIMER4 gesteuert wird und
TIMER2 der das PWM Signal generiert erzeugt.

Code im Anhang.

von N. M. (mani)


Lesenswert?

Machst du für jeden Timer einen eigenen Thread auf oder in wie fern 
unterscheidet sich das Problem von
Beitrag "STM32F746G PWM Timer Periode lässt sich nicht ändern TIM4->CCR1=100;"

von Henrik G. (Firma: Student) (kaltesblondes)


Lesenswert?

Die User waren zurecht unzufrieden mit meiner Formatierung etc. daher 
habe ich den Thread neu aufgesetzt und versuche den anderen zu löschen 
was irgendwie nicht funktioniert.

von Kevin M. (arduinolover)


Lesenswert?

Hast du wenigstens die Erklärung zu deiner Frage zur Kenntnis genommen 
:D

von Henrik G. (Firma: Student) (kaltesblondes)


Lesenswert?

Ja und nein ich schaue gerade nach dem CC.
Sehe ich das richtig das ARR ist der Periode und nicht das CCR?

von Kevin M. (arduinolover)


Lesenswert?

Das CC Register stellt das Tastverhältnis, während man über das ARR und 
den PSC die Frequenz einstellen kann.

von Henrik G. (Firma: Student) (kaltesblondes)


Lesenswert?

Ich danke mal für den Tipp habe mich nochmal bissel eingelesen in das 
Thema:
Also der Fehler ist
TIM4->CCR ändern nicht was ich wollte.
ES ist
TIM4->ARR

Aber Jetzt:

Die Frequenz des Sinus wird in eine Drehzahl gewandelt.
Folgendes Problem:

Wenn ich beim Initialisieren des Timer TIM4

htim4.Init.Period = 999;
Einstelle und es Laufen lasse bekomme ich genau mein Berechnendes 
Ergebnis.

Stelle ich nun irgendwo im Code mit
TIM4->ARR=999;
die Frequenz um stimmt das Ergebnis nicht mehr.

von Klaus W. (mfgkw)


Lesenswert?

Weil ARR und Timerfrequenz zusammen die Frequenz des PWM ergeben, und 
CCR/ARR das Tastverhältnis ergibt.

Wenn du die PWM-Frequenz mit ARR verstellst, änderst du auch das 
Tastverhältnis gleichzeitig.

Also entweder die Frequenz über die Timer-Frequenz ändern, oder (falls 
über ARR) dann auch CDR anpassen.

von Kevin M. (arduinolover)


Lesenswert?

Klaus W. schrieb:
> Weil ARR und Timerfrequenz zusammen die Frequenz des PWM ergeben, und
> CCR/ARR das Tastverhältnis ergibt.

Ist hier aber irrelevant, er braucht keinen Timer mit PWM oder OC.

Henrik G. schrieb:
> Stelle ich nun irgendwo im Code mit
> TIM4->ARR=999;

Das sollte keinen Unterschied machen, hast du das richtige Trigger Event 
gewählt? Das sollte Update sein.

von Henrik G. (Firma: Student) (kaltesblondes)


Lesenswert?

Kevin M. schrieb:
> Klaus W. schrieb:
>> Weil ARR und Timerfrequenz zusammen die Frequenz des PWM ergeben, und
>> CCR/ARR das Tastverhältnis ergibt.
>
> Ist hier aber irrelevant, er braucht keinen Timer mit PWM oder OC.
>
> Henrik G. schrieb:
>> Stelle ich nun irgendwo im Code mit
>> TIM4->ARR=999;
>
> Das sollte keinen Unterschied machen, hast du das richtige Trigger Event
> gewählt? Das sollte Update sein.

Hat geklappt!
Vielen dank!

von Henrik G. (Firma: Student) (kaltesblondes)


Lesenswert?

Ich habe die Lösung gefunden vielen lieben Danke an alle! Und danke für 
die Geduld mit mir!
Grüße
Kühlesblondes

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.