STM32 Verwirrung o.O (Timer->CCRx)

Gast #4184968
Lesenswert?

Heyhey,

also ich habe ein Problem mit den mehrkanaligen Timern der STMs.

Ich möchte gerne mit 1 Timer 4 Takte ausgeben und dafür das Ereignis 
ToggleOnMatch nutzen.

Nun zu meinem Verständnis des Timers:
Also der Timer zählt über den durch Prescaler etc. bestimmten Takt hoch 
bis der Counter dem AutoReload-Register entspricht, danach erfolgt ein 
Reset. Die einzelnen Channel toggeln sobald der Counter dem 
CaptureCompare-Register entspricht. Das hieße ich kann in diesem Fall 
meinen Offset (Abstand der jeweiligen Flanken der einzelnen Pulse) über 
das CaptureCompare-Register einstellen, die Frequenz der Pulse 
allerdings nur global (für alle Channel) über den Eingangstakt bzw das 
AutoReload-Register?!

Ist das soweit ok? Jetzt kommts nämlich...

Und zwar habe ich in einer STM-Application-Note den angefügten 
Ausschnitt gefunden. Darin wird exakt über das CaptureCompare-Register 
der Takt des Ausgangssignals eingestellt. Wo ist meint Problem 
(Praktisch umgesetzt bestätigt sich meine o.g. Beschreibung meiner 
Vorstellung) :/

Kann mir jemand helfen???

Vielen Dank :)
Angehängte Dateien:
#4185174
Lesenswert?

Kannst du deine Quelle angeben? Was in dieser Application note 
geschrieben wird, ist mir nicht schlüssig.

Fakt ist, dass ein Hardware Timer immer eine Frequenz für alle 
zugeordneten CC-Module generiert. Diese Frequenz mit dem CCR-Register zu 
halbieren ist mir neu. Vieleicht passiert hier was in software, z.B. mit 
interrupts?
Gast #4185187
Lesenswert?

Autor: Kathirn (Gast) schrieb:
>die Frequenz der Pulse allerdings nur global (für alle Channel) über den 
>Eingangstakt bzw das AutoReload-Register?!
Nee, die Aussage stimmt nicht.
Ich habe vor ein paar Tagen so etwas ähnliches gemacht wie das, an dem 
du gerade dran sitzt.
Je näher der Wert in dem CC Register am eigentlichen Timer-Register (bzw 
0xFFFF -> 0x0000 Überlauf) ist (bei mir stand glaube ich 0x0000), umso 
schneller wird die Gleichheit erreicht und der Ausgang schaltet um. Hat 
mit dem Eingangstakt erstmal nix zu tun.
1
    Tim2Handle.Init.Prescaler = 0;
2
    Tim2Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
3

4
    // FREQUENCY
5
    // 0x20E0 = 9.980kHz
6
    // 0xA400 = 2.000kHz
7
    Tim2Handle.Init.Period = FREQUENCY_2000HZ;
8
    
9
    Tim2Handle.Init.RepetitionCounter = 0x10000;// todo: test necessary?
10
    HAL_TIM_Base_Init(&Tim2Handle);
Gast #4185220
Lesenswert?

Little B. schrieb:
> Kannst du deine Quelle angeben? Was in dieser Application note
> geschrieben wird, ist mir nicht schlüssig.

Hier natürlich auch die Quelle als Anhang.

Little B. schrieb:
> Fakt ist, dass ein Hardware Timer immer eine Frequenz für alle
> zugeordneten CC-Module generiert. Diese Frequenz mit dem CCR-Register zu
> halbieren ist mir neu. Vieleicht passiert hier was in software, z.B. mit
> interrupts?

Ich kann dem AN leider nicht viel mehr als das Gepostete entnehmen und 
die angesprochende STM32F10xxx firmware library ist obsolete bzw konnte 
ich nicht mehr finden.

timertick_t schrieb:
> Je näher der Wert in dem CC Register am eigentlichen Timer-Register (bzw
> 0xFFFF -> 0x0000 Überlauf) ist (bei mir stand glaube ich 0x0000), umso
> schneller wird die Gleichheit erreicht und der Ausgang schaltet um. Hat
> mit dem Eingangstakt erstmal nix zu tun.

Ich verstehe leider nicht exakt was du meinst, aber ich meine das 
Erzeugen MEHRERER verschiedener Takte mit EINEM Timer.
Angehängte Dateien:
Gast #4187069
Lesenswert?

>Weiß keiner mehr dazu was sagen?

Das was du suchst findest du in dem Beispiel OcToggle
in der StandardPeripheral Library.

Das arbeitet mit Interrupts. Wenn der Comparewert
erreicht ist toggelt der Pin, er springt in den Interrupt und addiert
einen Offset zum zuletzt eingestellten Comparewert.
So werden die Frequenzen erzeugt.

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