STM8 Timer 1


Timer-Pin als Eingang

Der Timer 1 besitzt 4 Eingänge (TI1.. TI4) welche über das jeweilige CCiS[1:0] Bitfeld für die physikalischen Pins TIM1_CHi freigeschaltet werden können. Durch die CCiS[1:0] Bits wird darüber hinaus das weitere Routing des Eingangssignals über die Pfade (hier als Beispiel für Kanal 1) TI1FP1, TI2FP1 und TRC festgelegt.

Der Input Capture Modus

Für die Konfiguration eines Timerkanals als „Capture“ Kanal sind folgende Einstellungen nötig:

CCiS - Capture Compare Selection (Capture/Eingang oder Compare/Ausgang)

Im TIM1_CCMRi Register kann über die beiden CCiS[1:0] Bits eingestellt werden ob der entsprechende Timer-Pin TIM1_CHi (Physikalischer Pin) als Eingang oder Ausgang genutzt wird. Die Tabelle wurde in „Absatz 5. Die Timer Modi“ gerade beschrieben.

Durch die Bits wird auch festgelegt von welchem intern gerouteten Signal (Ti1FP1, Ti2FP2 oder TRC) das „Capture“ Signal abgeleitet wird. Im Übrigen sind die CCiS[1:0] Pins nur beschreibbar wenn der Kanal über CC1E = 0 in TIM1_CCER1 deaktiviert ist.

CCiE - Capture/Compare Input Enable (Capture Freigabe für einen Kanal “i”)

In den Registern TIM1_CCER1 / TIM1_CCER2 befinden sich die CCiE Bits, die für jeden Kanal getrennt das „Capture“ Signal freischalten. Ist das korrespondierende CCiE Bit = 0, so ist der Capture Kanal gesperrt und entsprechend CCiE Bit = 1 , freigegeben.

CCiP – Capture/Compare Input Polarity (Capture Signal Eingangspolarität)

Auf welche Flanke die „Capture“ Funktion anspricht kann mit den CCiP Bits in den beiden TIM1_CCER1 / TIM1_CCER2 Registern (jeweils zwei Kanäle pro Register) konfiguriert werden. Ist das kanalspezifische CCiP Bit = 0 so ist die steigende Flanke aktiv, andernfalls CCiP = 1 die fallende Flanke.

ICiF - Input Capture Filter (Capture Signal Eingangsfilter)

Über das Bitfeld ICiF[3:0] im TIM1_CCMRi Register kann eine digitale Filterung des Eingangsignales vorgenommen werden. Dabei wird mit einer einstellbaren Kombination aus Abtastfrequenz und Anzahl von Samples gearbeitet.

Ist der Eingang durch das CCiE Bit = 1 freigeschaltet so wird das Signal über einen nachfolgenden Event-Teiler als Capture-Auslöser verwendet. Die Werte für die einzelnen Kombinationen finden sich in nachfolgender Tabelle:

Capture Filter Einstellung
ICiF[3..0] Abtastfrequenz Abtastwerte Beschreibung
0x0000b FMaster N = 1 kein Effekt
0x0001b FMaster N = 2 Der Eingang wird mit 1/2 x fMaster abgetastet
0x0010b FMaster N = 4 Der Eingang wird mit 1/4 x fMaster abgetastet
0x0011b FMaster N = 8 Der Eingang wird mit 1/8 x fMaster abgetastet
0x0100b FMaster/2 N = 6 Der Eingang wird mit 1/6 x fMaster/2 abgetastet
0x0101b FMaster/2 N = 8 Der Eingang wird mit 1/8 x fMaster/2 abgetastet
0x0110b FMaster/4 N = 6 Der Eingang wird mit 1/6 x fMaster/4 abgetastet
0x0111b FMaster/4 N = 8 Der Eingang wird mit 1/8 x fMaster/4 abgetastet
0x1000b FMaster/8 N = 6 Der Eingang wird mit 1/6 x fMaster/8 abgetastet
0x1001b FMaster/8 N = 8 Der Eingang wird mit 1/8 x fMaster/8 abgetastet
0x1010b FMaster/16 N = 5 Der Eingang wird mit 1/5 x fMaster/16 abgetastet
0x1011b FMaster/16 N = 6 Der Eingang wird mit 1/6 x fMaster/16 abgetastet
0x1100b FMaster/16 N = 8 Der Eingang wird mit 1/8 x fMaster/16 abgetastet
0x1101b FMaster/32 N = 5 Der Eingang wird mit 1/5 x fMaster/32 abgetastet
0x1110b FMaster/32 N = 6 Der Eingang wird mit 1/6 x fMaster/32 abgetastet

ICiPSC - Input Capture Presc aler (Capture Signal Vorteiler)

Das mit den bisher beschriebenen Einstellungen geroutete und gefilterte Signal kann zusätzlich noch mit einem Vorteiler in der Frequenz reduziert werden. Dazu muß das Bitfeld ICiPSC[1:0] nach folgendem Schema gesetzt werden:

Input Capture Prescaler
ICiPS[1..0] Teiler Ausgangssignal Funktion
0x00b 1 jeder Event Zähler-Capture bei jedem Eingangsevent
0x01b 2 jeder zweite Event  
0x10b 4 jeder vierte Event  
0x11b 8 jeder achte Event  

Bei einer aktiven Signalflanke an diesem Eingangs des Kanals wird der aktuelle Stand des Timer 1 Counters in das für den jeweiligen Kanal vorgesehene TIM1_CCRiH / TIM1_CCRiL Registerpaar geladen.

Die „Capture“-Funktion läßt sich als „Zeitmesser“ einsetzen wenn der Counter mit einer exakten Frequenz getaktet wird und nach einem gemeinsamen Start mit dem zu messenden Signal, durch die abschliessende Signalflanke gestoppt wird. Das Ergebniss befindet sich dann im entsprechenden TIM1_CCRiH / TIM1_CCRiL Registerpaar.

Die PWM Input Messung

Durch die Kombination von zwei Timerkanälen (z.B. Kanal 1 & 2 bzw. 3 & 4) im Input Capture Modus besteht die Möglichkeit ein PWM Signal hinsichtlich dessen „Periodendauer“ und „Puls/Pause Verhältnis“ (Duty Cycle) zu messen. Die Auflösung dieser Messung hängt von der verwendeten Zählerfrequenz ab.

Das zu messende Signal (z.B. am TIM1_CH1 Eingang) wird auf die beiden Timer-Kanäle 1 und 2 über die Signale TI1FP1 (Kanal 1) und TI1FP2 (Kanal 2) aufgeteilt, wobei der Kanal 1 auf positive und der Kanal 2 auf negative Flanken reagiert. TI1FP1 wird nun als Trigger Signal konfiguriert und der Clock/Trigger Modus des Kanal 1 wird als „Trigger Reset Modus“ gesetzt.

Mit den weiteren Einstellungen die im „STM8 Referenz Manual V12“ beschrieben sind läßt sich danach die Periodendauer im TIM1_CCR1 und der Duty Cycle im TIM1_CCR2 Register auslesen.

Encoder Interface Modus

Die beiden Timer Eingänge TI1 (vom Pin TIM1_CH1) und TI2 (vom Pin TIM1_CH2) können als Interface zu einem Dreh-Encoder benutzt werden. Wie unter Paragraf 5 im Bild dargestellt sind die Signale TI1FP1 und TI2FP2 die internen Signale der TI1 und TI2 Eingänge nach den jeweiligen Eingangsfiltern und den Flankendetektoren.

Aktivierung der Timer Eingänge

Die beiden CC1S[1..0] Bits im TIM1_CCMR1 Registern schaltet den physikalischen Pins TIM1_CH1 als Eingang und in diesem speziellen Fall mit dem Wert 0x01b wird das Eingangssignal TI1 über das interne Signal TI1FP1 an die Encoderlogik weitergeleitet. Äquivalent gilt für CC2S[1:0] im TIM1_CCMR2 Register der gleiche Wert 0x01b für die Aktivierung des TIM1_CH2 Pins als Eingang und die Weiterleitung des TI2 Signals über TI1FP2.

Der Encoder kann sowohl von einem Motor (Positionsbestimmung) als auch manuell angetrieben werden (Inkrementalgeber für GUI). Die Dreh-Encoder liefern zwei digitale Signale die um 90° phasenversetzt arbeiten und damit sowohl Zählpulse als auch die Drehrichtung liefern.

Im Encoder Modus werden die an TI1 und TI2 angeschlossenen Signale dazu benutzt den Timer je nach Drehrichtung zu inkrementieren oder zu dekrementieren. Der Maximalwert des Zählers kann über das TIM1_ARR Registerpaar begrenzt werden. Der Minimalwert ist „Null“.

Aktivierung des Encoder Modus

Die Aktivierung eines der drei Encoder Modi erfolgt über das SMS[2:0] Bitfeld im TIM1_SMCR Register. Nachfolgend die Einträge für die Encoder Modi im TIM1_SMCR Register.

SMS[2:0] Modus Aktiver Eingang
Wert Passiver
Eingang
TI1FP1 TI2FP2

Steigende Flanke

Fallende Flanke

Steigende Flanke

Fallende Flanke

001 Encoder
Mode 1

TI1FP1 = High

Keine Änderung

Keine Änderung

Inkrement

Dekrement

TI1FP1 = Low

Keine Änderung

Keine Änderung

Dekrement

Increment

010 Encoder
Mode 2

TI2FP2 = High

Dekrement

Inkrement

Keine Änderung

Keine Änderung

TI2FP2 = Low

Inkrement

Dekrement

Keine Änderung

Keine Änderung

011 Encoder
Mode 3

TI1FP1 = High

High

High

Inkrement

Dekrement

TI1FP1 = Low

Low

Low

Dekrement

Inkrement

TI2FP2 = High

Dekrement

Inkrement

High

High

TI2FP2 = Low

Inkrement

Dekrement

Low

Low

Die Polarität der in dieser Liste aufgeführten Signale kann bei Bedarf mit den Polaritäts-Bits CC1P bzw. CC2P im TIM1_CCER1 Register invertiert werden.

Encoder Modus 2 (TI1 als Zählpuls)

Für den Encoder Modus 2 muß das Bitfeld SMS[2:0] im TIM1_SMCR Register der Wert 0x010b hinterlegt werden. Wie in der obigen Tabelle aufgeführt hat in diesem Modus das TI2FP2 Signal bei einer Änderung keinen Einfluß auf den Zählerstand, je nach anliegendem Logikpegel aber auf die Zählrichtung.

Eine steigende Flanke an TI1 führt bei einem „Low“ Pegel an TI2 zu einem Inkrementieren des Zählers bei einem „High“ Pegel allerdings zu einem Dekrementieren. Umgekehrt verhält es sich bei einer fallenden Flanke an TI1. Die auftretenden Flanken an TI2 haben weder einen Einfluß auf den Zählerstand noch auf die Zählrichtung.

Encoder Modus 3 (TI1 und TI2 als Zählpuls)

Mit dem Wert 0x011b im Bitfeld SMS[2:0] wird der Encoder Modus 3 aktiviert. In dieser Einstellung führen sowohl die Signalflanken an TI1 als auch an TI2 zu einer Änderung des Zählerstandes.

Wie dargestellt wird der Zählerstand durch beide Flanken der beiden Eingänge TI1 und TI2 verändert. Die Zählrichtung ergibt sich aus dem statischen Pegel am jeweils anderen Eingang, wobei sich die beiden Eingänge komplementär verhalten.

Copyright Notiz

Dieses Dokument sowie dessen Inhalte, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2020) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.