Forum: Mikrocontroller und Digitale Elektronik STM32 Verwirrung o.O (Timer->CCRx)


von Kathirn (Gast)


Angehängte Dateien:

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 :)

von Little B. (lil-b)


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?

von timertick_t (Gast)


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);

von Kathrin (Gast)


Angehängte Dateien:

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.

von Kathrin (Gast)


Lesenswert?

Weiß keiner mehr dazu was sagen?

von holger (Gast)


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.

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.