STM8 Timer 1
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.
Für die Konfiguration eines Timerkanals als „Capture“ Kanal sind folgende Einstellungen nötig:
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.
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.
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.
Ü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 |
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.
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.
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.
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“.
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.
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.
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.
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.