0% encontró este documento útil (1 voto)
663 vistas37 páginas

4 4 Timers PDF

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
663 vistas37 páginas

4 4 Timers PDF

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Timers

Apuntes de clase V1.0


2019

GFR – 2019 - CC BY-SA 2.0


Índice de Contenidos
1 Introducción ................................................................................................... 4
Contadores y temporizadores .................................................................. 4
Conceptos generales ............................................................................... 4
1.2.1 Input capture ........................................................................................ 4
1.2.2 Output compare ................................................................................... 5
1.2.3 Pulse width modulation (PWM).......................................................... 5
2 Aplicación de los Timers/Counters ................................................................ 6
Medición directa de frecuencia ............................................................... 6
Obtención de la frecuencia partiendo de la medición del período .......... 7
3 Timers en la plataforma STM32 .................................................................... 8
Clasificación de los timers en la plataforma STM32 .............................. 8
Breve descripción de los timers .............................................................. 9
Características generales de los timers ................................................. 10
4 Timers básicos (TIM6 y TIM7) .................................................................... 11
Características principales de los timers TIM6 & TIM7 ...................... 12
Descripción funcional de TIM6 y TIM7 ............................................... 13
4.2.1 Unidad de base de tiempo ................................................................. 13
4.2.2 Descripción de Prescaler ................................................................... 14
Modo de conteo .................................................................................... 15
Fuente de reloj ...................................................................................... 16
5 Timers de propósito general (TIM9 a TIM14) ............................................. 16
Introducción .......................................................................................... 16
Características generales ....................................................................... 16
Descripción funcional de TIM9 a TIM14 ............................................. 18
5.3.1 Unidad de base de tiempo, prescaler y conteo. ................................. 18
5.3.2 Selección de reloj .............................................................................. 18
Canales de captura y comparación ........................................................ 19
Modo captura de entrada (input capture) ............................................. 20
Modo de entrada PWM (solo para TIM9/12) ....................................... 22
Modo de comparación de salida (output compare) ............................... 23
Modo PWM .......................................................................................... 24
Modo edge aligned PWM ..................................................................... 25

2
6 Timers de propósito general (TIM2 a TIM5) ............................................... 26
Características principales .................................................................... 26
Diagrama de bloques ............................................................................ 27
Descripción funcional ........................................................................... 27
6.3.1 Modo de conteo descendente (downcounting) .................................. 27
6.3.2 Modo de alineación central (cuenta ascendente/descendente) .......... 28
Selección de reloj .................................................................................. 29
PWM en modo de alineación central .................................................... 30
Modo Encoder....................................................................................... 31
Entrada del temporizador de la función XOR....................................... 32
7 Temporizadores de control avanzado (TIM1 y TIM8) ................................ 32
Introducción a TIM1 y TIM8 ................................................................ 32
Principales características de TIM1 & TIM8 ....................................... 33
Descripción funcional de TIM1 y TIM8 ............................................... 34
7.3.1 Unidad de base de tiempo ................................................................. 34
Contador de repetición .......................................................................... 34
Canales de captura/comparación........................................................... 36
Salidas complementarias e inserción en tiempo muerto. ...................... 36
8 Bibliografía................................................................................................... 37

3
1 Introducción
Contadores y temporizadores
La mayor parte de las aplicaciones para microcontrolador necesitan contar eventos
o generar retardos de gran precisión. Por software es posible realizar retardos de cierta
precisión y contar eventos, pero la mayor parte del potencial de la CPU se invertiría en
éste cometido, y no dejaría tiempo para realizar otras acciones o complicaría el diseño de
la aplicación.
Los contadores/temporizadores o, en la jerga, “timers”, son periféricos hardware
que cumplen éste propósito, descargando de un trabajo poco grato al microprocesador.
Es tal la importancia de este tipo de dispositivos que los microcontroladores más
avanzados incluyen decenas de ellos o, incluso, un coprocesador dedicado a gestionarlos.
Estos dispositivos permiten, entre otras cosas, medir anchos de pulso de señales,
generar señales digitales, contar impulsos, provocar acciones periódicas, implementar
relojes de tiempo real, generar el ritmo para comunicaciones, generación y medición de
PWM (modulación por ancho de pulso) para control digital directo, etc.
Este capítulo pretende ilustrar el uso de los timers desde el punto de vista de sus
posibles aplicaciones además de exponer las características de un periférico dado. Como
en capítulos previos, es indispensable utilizar referencias de las hojas de datos para
complementar la información sobre estos periféricos.
Antes de comenzar el análisis de los timers en la plataforma STM32 haremos un
breve repaso de conceptos básicos sobre algunas de las metodologías utilizadas por los
timers para medir eventos.

Conceptos generales
1.2.1 Input capture
La metodología “captura de entrada” (input capture) es una técnica para tratar las
señales de entrada en sistemas embebidos. Los sistemas que utilizan captura de entrada
registrarán una marca de tiempo en la memoria cuando se reciba una señal de entrada.
También establecerá una bandera (flag) o evento que indicará que se ha capturado una
entrada. Esto permite que el sistema continúe ejecutándose sin interrupción mientras se
recibe esta entrada y se conserva la capacidad de desencadenar otros eventos.
Hay muchos microcontroladores que proporcionan pines de captura de entrada
dedicados y un contador programable junto con éste. Estos pines generan interrupciones
en el controlador, que luego ejecuta una rutina de servicio de interrupción. Las
interrupciones se pueden programar para que ocurran en el flanco ascendente o
descendente de la señal de entrada, según los requisitos.
Por ejemplo, la entrada input capture es muy utilizada para medir periodos,
frecuencias y ciclos de trabajo de señales periódicas ya que, al capturar la cuenta del timer
en el momento de, por ejemplo, dos flancos ascendentes, se puede con una simple resta
conocer el periodo de la señal de entrada. Si la diferencia se hace entre flancos
ascendentes y descendentes se puede medir el tiempo de actividad de la señal y con el
periodo calculado anteriormente, inferir el ciclo de trabajo.

4
1.2.2 Output compare
La capacidad correspondiente para activar una salida en un momento específico, en
función de una marca de tiempo en la memoria, se denomina comparación de salida u
output compare. Esta función es muy útil cuando se necesita generar una demora
controlada de una salida respecto a una entrada. El registro de comparación se cargará
con la demora requerida (en función a la base de tiempo utilizada) y una vez que la señal
de entrada dispare el timer, la salida conmutará (según como sea configurada) cuando el
contador llegue al valor de comparación prefijado.

1.2.3 Pulse width modulation (PWM)


La modulación por ancho de pulsos (PWM, pulse-width modulation) de una señal
o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal
periódica, ya sea para transmitir información a través de un canal de comunicaciones o
para controlar la cantidad de energía que se envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva
en relación con el período. Expresado matemáticamente:
𝜏
𝐷=
𝑇
Donde:
- D es el ciclo de trabajo (duty cycle)
- τ es el tiempo en que la función es positiva (ancho del pulso)
- T es el período de la función

En la figura 1 se muestra una señal PWM para distintos ciclos de trabajo.

Figura 1: Distintos ciclos de trabajo para una señal PWM.

En la actualidad existen muchos circuitos integrados en los que se implementa la


modulación PWM, además de otros muy particulares para lograr circuitos funcionales
que puedan controlar fuentes conmutadas, controles de motores, controles de elementos

5
termoeléctricos, y algunas otras aplicaciones. Otra funcionalidad interesante de las
señales PWM es la de generar un conversor digital/analógico utilizando la señal PWM en
conjunto con un filtro pasa bajos.
La principal desventaja que presentan los circuitos PWM es la posibilidad de que
haya interferencias en sistemas de gran potencia debido a la conmutación periódica de
niveles de corriente. Estas pueden minimizarse ubicando el controlador cerca de la carga
y realizando un filtrado adecuado en la fuente de alimentación.

2 Aplicación de los Timers/Counters


Medición directa de frecuencia
La medición de la frecuencia de una señal puede realizarse contando la cantidad de
ciclos (flancos positivos o negativos) de la misma durante un período de tiempo conocido.
Si fx es la frecuencia bajo medición y Tr es el intervalo de tiempo conocido,
obtenido a partir de una señal periódica de referencia, entonces el número de ciclos de fx
contados en Tr es:
𝑁 = 𝑓𝑥 × 𝑇𝑟

Puesto que la señal bajo medida y la de referencia son asincrónicas existe una
indeterminación de 1 cuenta en el valor obtenido de N, es decir el resultado es N ± 1
cuenta. Cuanto más grande sea N para una frecuencia fx dada mayor será la resolución
con que se efectúe la medida. Para frecuencias bajas Tr deberá ser grande para que se
obtenga una buena resolución. Esto conspira con la intención de obtener mediciones de
frecuencia instantáneas y no sus promedios.
Por ejemplo, si se quiere medir una frecuencia de 50Hz con una resolución de
0.01Hz se deberá utilizar un intervalo de medición de 100 segundos.
Otra cuestión relevante es la expresión de la resolución de una señal en un sistema
digital. Generalmente, la resolución en sistemas digitales se expresa en un número de bits.
Como los sistemas digitales que utilizamos son binarios la base del sistema es 2, por lo
tanto, la resolución en términos absolutos de una variable se podrá obtener dividiendo los
valores extremos de la variable en cuestión por 2p, donde p es el número de bits.
Entonces, si los valores extremos de frecuencia a medir son fmáx y fmín y la
resolución que se desea es de p bits, el intervalo de medición deberá ser de:

(𝑓𝑚𝑎𝑥 − 𝑓𝑚𝑖𝑛) 2𝑝
𝑓𝑟 = → 𝑇𝑟 =
2𝑝 (𝑓𝑚𝑎𝑥 − 𝑓𝑚𝑖𝑛)

Este método de medición de frecuencia puede implementarse con cualquier


microcontrolador que posea al menos dos temporizadores/contadores (uno de ellos con
un canal de entrada externo). Con el primer Timer/Counter programado para que cuente
hasta un valor de overflow (OVRF) se genera una interrupción temporizada con período
de repetición de:

𝑂𝑉𝑅𝐹
𝑇𝑟 = = 𝑂𝑉𝑅𝐹 × 𝑇𝑐𝑙𝑘 × 𝑃𝑆
𝑓𝑐𝑙𝑘/𝑃𝑆

6
Donde PS es el factor de preescalado con que se divide la frecuencia de clock (fclk)
que ingresa al timer. Este factor puede seleccionarse y depende del modelo y tipo de
temporizador utilizado.
Con el segundo Timer/Counter y seleccionando una fuente de cuenta externa (señal
que se desea medir) se cuentan los pulsos ingresados (PULSES) durante el intervalo de
tiempo que transcurre entre dos interrupciones Tr del primer temporizador. Entonces:

𝑃𝑈𝐿𝑆𝐸𝑆 = 𝑓𝑥 × 𝑇𝑟 = 𝑓𝑥 × 𝑂𝑉𝑅𝐹 × 𝑃𝑆

Si puede configurarse Tr de manera que adopte un valor que sea una potencia de
10, es decir que valga 10n, donde n es un número entero, entonces la cuenta acumulada
en PULSES durante el periodo Tr dividido por 10n dará el valor de fx en Hz.

Obtención de la frecuencia partiendo de la medición del período


Ya vimos que la medición de frecuencias bajas implica la utilización de grandes
intervalos de conteo. Es preferible en estos casos medir el período de la señal y luego
calcular su frecuencia. El período de una señal puede medirse por la cantidad de ciclos de
una señal de referencia conocida que entra a un contador durante dicho período.
Si Tx es el período de la señal bajo medición y Tr es el período de la señal de
referencia fr, entonces el número de ciclos de fr contados en el tiempo Tx es:

𝑇𝑥
𝑁 = 𝑇𝑥 × 𝑓𝑟 =
𝑇𝑟

Si los valores extremos de período a medir son Tmáx y Tmín y la resolución que se
desea es de q bits, entonces la frecuencia de referencia deberá ser de:

2𝑞
𝑓𝑟 =
(𝑇𝑚𝑎𝑥 − 𝑇𝑚𝑖𝑛)

El período Tx puede medirse con un microcontrolador utilizando el modo de captura


de entrada (Input Capture). Cada transición (positiva o negativa, según como se
configure) de Tx que ingresa por el puerto de captura de entrada genera una interrupción.
Si se cuentan los ciclos de fr ingresados al contador durante el período de tiempo que
transcurre entre dos interrupciones (Tx), el número de ciclos será:

𝑇𝑥 × 𝑓𝑐𝑙𝑘
𝑃𝑈𝐿𝑆𝐸𝑆 =
𝑃𝑆

Si puede configurarse fclk / PS de manera que adopte un valor que sea una potencia
de 10, es decir que valga 10n Hz donde n es un número entero, entonces la cuenta
acumulada en PULSES durante Tx dividida por 10n dará el valor de Tx en segundos.
Dado que se quiere obtener la frecuencia a partir de la medida de Tx, entonces:
1
𝑓𝑥 =
𝑇𝑥

7
Si se quiere determinar la frecuencia con una resolución de p bits ¿cuál debe ser la
resolución en la medida del período? Si derivamos la expresión anterior:
−1
𝑑𝑓𝑥 = 2 𝑑𝑇𝑥 = −(𝑓𝑥)2 𝑑𝑇𝑥
𝑇𝑥

O sea que:
1 1
(𝑓𝑚𝑎𝑥 − 𝑓𝑚𝑖𝑛) ( − )
2 𝑓𝑚𝑎𝑥 𝑓𝑚𝑖𝑛
= 𝑓𝑚𝑎𝑥
2𝑝 2𝑞

De donde se deduce que:


𝑓𝑚𝑎𝑥
ln ( )
𝑓𝑚𝑖𝑛
𝑞 ≥𝑝+
ln 2

Pongamos un ejemplo. Si se desea medir una frecuencia de 10kHz dentro de un


margen de variación de ±1kHz y se desea determinar la frecuencia con una resolución de
12 bits a base de medir el período. ¿Qué resolución hace falta en la medida del período?

Aplicando la ecuación vista anteriormente:

q ≥ 12 + ln(11/9)/ln2 = 12.29 bits ≈ 13 bits

3 Timers en la plataforma STM32


Los micros STM32 tienen varios timers diseñados para diferentes aplicaciones. Sin
embargo, a diferencia de la mayoría de los micros de 8 bits que poseen dos/tres timers
con funcionalidades limitadas, los temporizadores de STM32s son muy elaborados y
complejos. Esto explica por qué las documentaciones relacionadas con los módulos de
los timers toman aproximadamente el 25% de cualquier manual de referencia de STM32.
Antes de comenzar a explorar los temporizadores, debemos señalar que no se
podrán cubrir absolutamente todos los aspectos de todos los módulos de timers, ya que
son extensos y necesitan muchas explicaciones, algo que está más allá del alcance de este
curso. Ésta es la razón por la que en este apunte exploraremos los conceptos básicos de
los módulos de temporizador suficientes para poner en funcionamiento los timers de la
plataforma STM32.

Clasificación de los timers en la plataforma STM32


Los temporizadores en un microcontrolador STM32 se pueden clasificar de la
siguiente manera:
 Temporizadores avanzados (AT)
 Temporizadores de uso general (GP)
 Temporizadores básicos (BT)

De estos tres tipos de temporizadores, los dos primeros son comunes a todos los
microcontroladores y el tercero está disponible solo en variantes más grandes de las

8
familias. El número de temporizadores de una clase dada también varía con la capacidad
o el tamaño del micro STM32. Por ejemplo, STM32F103C8T6 tiene un temporizador
avanzado, mientras que STM32F446RE tiene dos temporizadores avanzados. En el
proceso de desarrollo, la plataforma STM32CubeMX se puede usar para determinar qué
temporizadores están disponibles en un micro STM32 determinado. En el caso particular
de nuestro microcontrolador STM32F446RE nos encontraremos con 2 timers básicos, 2
timers avanzados y 10 timers de propósitos generales. En la Tabla 1 se observa una lista
con las características de los timers.

Tabla 1: Clasificación de los tipos de timers y sus características generales.


Breve descripción de los timers
Los temporizadores de propósito general (GP) tienen todas las características de un
módulo de timer típico. Son prácticamente iguales a los se ven en la mayoría de los
microcontroladores de 8 bits. Se pueden usar para cualquier propósito relacionado con la
temporización o el conteo y, por eso, se nombran como tales. La generación de PWM, la
opción de input capture, la generación de base de tiempo y la comparación de la salida
(output compare) son los usos básicos de un temporizador GP. Normalmente, en un micro
STM32 se encontrará más timers GP que otras clases de timers. El estudio de los
temporizadores de GP aclara la mayoría de los conceptos básicos.
Los temporizadores básicos (BT) son temporizadores que no tienen canales de E/S
para la captura de entrada/generación de PWM, por lo que se usan estrictamente para
propósitos de generación de base de tiempo. Los temporizadores básicos están
disponibles solo en micros STM32 de gran capacidad y son los más sencillos de todos los
temporizadores, por esta razón serán los primeros que estudiaremos en detalle.
Los temporizadores avanzados (AT) son casi iguales a los temporizadores GP, pero
además tienen la capacidad de generar señales PWM complementarias, así como generar
cortes y tiempos muertos para dichas señales. Estas características las hacen adecuadas
para aplicaciones relacionadas con el control de motores, inversores, fuentes conmutadas
(SMPS) y otras tareas relacionadas con la electrónica de potencia. En la mayoría de los
micros STM32, hay al menos un temporizador de este tipo. En STM32s más grandes,
como es nuestro caso, puede haber dos.

9
Cada temporizador en un micro STM32 es independiente de los demás y, por lo
tanto, no comparten ningún recurso común. Las únicas cosas que son comunes son los
tipos de registros, la convención de nomenclatura y sus principios operativos. Con solo
unas pocas excepciones, los módulos de temporizador son más o menos compatibles entre
las distintas familias de STM32. No se encontrarán diferencias significativas cuando
migre de la serie STM32F1xx a la serie STM32F4xx. Esta apreciación no es cierta para
otro hardware interno como los puertos GPIO, ADC, etc.
En la Tabla 2 se muestran la disponibilidad de timers para las distintas familias
STM32. En nuestro caso, el microcontrolador STM32F446RE pertenece a la familia F4
correspondiente a la 5ta columna de la tabla.

Tabla 2: Clasificación de los timer para las distintas familias STM32.

Características generales de los timers


Normalmente, la mayoría de los temporizadores STM32 consisten en un contador
de recarga automática de 16 bits y un prescaler de 16 bits y, aunque existen timers de
32bits, utilizaremos los de 16 para explicar los conceptos fundamentales.
El prescaler es responsable de dividir la señal entrante de una fuente de reloj según
nuestra necesidad. El contador de recarga automática, como lo indica su nombre, sirve
para cargar automáticamente el valor de cuenta una vez que el contador se ha desbordado
(overflow). En algunos de los microcontroladores de 8 bits más viejos, necesitábamos
volver a cargar el temporizador después de cada interrupción o después de cada
desbordamiento. Esto no es necesario en STM32s ya que se maneja automáticamente.

A diferencia de la mayoría de los otros microcontroladores en los que los


temporizadores suelen contar de forma incremental, los temporizadores STM32 pueden

10
contar hacia arriba, hacia abajo o alineados en el centro (ver columna counter type en la
Tabla 1). Sin embargo, en la mayoría de las aplicaciones, contar de forma ascendente es
preferible frente a los otros métodos.

Los timers de la plataforma STM32 tienen múltiples configuraciones, lo que nos


permitirá utilizarlo en alguna de las siguientes formas (según el tipo de timer):

 Captura de entrada (input capture)


 Output compare o PWM
 Modo de pulso único
Los temporizadores pueden obtener su fuente de reloj desde:

 Reloj interno
 Fuentes de reloj externo
 Modo externo 1 (pines TI1 y TI2)
 Modo externo 2 (pin ETR)
 Disparo interno (ITRx) (permitiendo colocar timers en cascada)

La generación de interrupciones/DMA ocurren cuando ocurren en algunos de los


siguientes eventos:
 Actualización
o Desbordamiento (overflow)
o Inicialización del contador
o Otros
 Evento de disparo
o Inicio del conteo
o Parada de conteo
o Inicio o parada por disparo (interno/externo)
o Otros
 Captura de entrada (input capture)
 Comparación de salida (output compare)
 Otros

De toda esta información podemos inferir la versatilidad de los temporizadores


STM32, aunque al principio no son muy fáciles de manejar. Esta es la razón por la que,
en contra de la mayoría de los manuales, estudiaremos los temporizadores yendo desde
los más simples (basic timers) hasta los más complejos (advanced timers) aclarando de
forma incremental cuales son las características adicionales que se irán incorporando.
Más adelante, haremos mención a los otros timers que componen el sistema STM32 como
son el systick y los timers asociados a los watchdog.

4 Timers básicos (TIM6 y TIM7)

Los temporizadores básicos de la plataforma STM32 se llaman TIM6 y TIM7 y


consisten básicamente en un contador de recarga automática de 16 bits controlado por un
prescaler programable y un registro de carga automática. Todo esto se puede ver en el

11
diagrama simplificado de la Figura 2. Estos timers se pueden usar como temporizadores
genéricos para la generación de base de tiempo, pero también se pueden usar
específicamente para disparar el convertidor de digital a analógico (DAC). De hecho, los
temporizadores están conectados internamente al DAC y son capaces de conducirlo a
través de su salida de disparo. Como se ha mencionado anteriormente de forma general,
ambos temporizadores son completamente independientes y no comparten ningún
recurso.

Características principales de los timers TIM6 & TIM7


Las características básicas del temporizador (TIM6 y TIM7) son:
 Contador ascendente de 16 bits con recarga automática
 Prescaler programable de 16 bits que se utiliza para dividir la frecuencia del
reloj en cualquier factor entre 1 y 65536 (incluso “sobre la marcha”)
 Circuito de sincronización para disparar el DAC
 Generación de interrupción o DMA en el evento de actualización:
desbordamiento de contador (counter overflow)

Unidad de base de tiempo

Figura 2: Estructura básica de los timers básicos TIM6 y TIM7.

Describiremos la Figura 2 en detalle pues este esquema se repetirá en todos los


timers independientemente de su complejidad. El bloque CNT counter es el lugar donde
se realizará la cuenta. El mismo tiene un tamaño de 16 bits y está implementado en
hardware, es decir, no es un registro. El signo + nos indica que la cuenta es únicamente
ascendente. La señal CK_CNT es el clock del contador, o sea, la señal de entrada para la
cual el contador incrementará su valor en una cuenta. Siguiendo la línea de clock, nos

12
encontramos con el registro del prescaler. En este registro podremos cargar un valor de
16bits (0 a 65535) para que se divida (disminuya la velocidad) la señal de reloj
proveniente del bloque de control por un valor de entre 1 a 65536. En este caso, la única
señal de reloj disponible para este timer que es ingresada en el bloque de control es la
señal de reloj proveniente del RCC (CK_INT).
El registro de recarga automática (ARR - auto-reload register) es una parte muy
importante del sistema del timer. Una vez que el bloque contador alcanza el valor
almacenado en el registro ARR, el contador generará un evento de actualización y
comenzará a contar desde 0x00 nuevamente. En la Figura 2 se muestra un esquema de
cuenta ascendente del timer. Una vez alcanzado el valor “period” cargado en el ARR se
produce un evento de actualización que da comienzo a la nueva cuenta.

Figura 3: Esquema de cuenta ascendente del contador y el evento de actualización


Bajo este esquema, podemos calcular el tiempo en el que el timer produce un evento de
actualización como:
(PSC + 1)(ARR + 1)
𝑇𝑒𝑣𝑒𝑛𝑡 =
CK_PSC
Esto es el clock que ingresa al prescaler (CK_PSC) dividido el valor cargado en el
registro del prescaler (PSC) más una unidad, dividido por el valor de comparación
cargado en el registro de precarga automática (ARR). Si al evento de actualización se le
asocia una interrupción del timer, se puede utilizar esta misma fórmula para calcular el
periodo de dicha interrupción.
El esquema de funcionamiento mencionado anteriormente es, en realidad, un poco
más complejo. La complejidad se encuentra asociada a la necesidad de resolver los
estados no contemplados en la descripción simplista mencionada anteriormente. Por
ejemplo, ¿qué sucede con la cuenta y los eventos de actualización cuando el programa
modifica la escala del prescaler o el valor de comparación del ARR mientras el timer ya
está realizando una cuenta? Veamos entonces una descripción un poco más realista o
detalla de cada una de las partes integrantes del sistema de estos timers incluyendo
diagramas de estado que permitan determinar que sucede en cada caso.
Descripción funcional de TIM6 y TIM7
4.2.1 Unidad de base de tiempo
Como se mencionó anteriormente, el bloque principal del temporizador
programable es un contador ascendente de 16 bits con su correspondiente registro de
recarga automática. El reloj de contador se puede dividir por un valor cargado en el

13
prescaler y el software puede escribir o leer el contador, el registro de recarga automática
y el registro de prescaler. Esto es cierto incluso cuando el contador se está en ejecución.
La unidad de base de tiempo incluye entonces:
 Registro de contador (TIMx_CNT)
 Registro de prescaler (TIMx_PSC)
 Registro de recarga automática (TIMx_ARR)
A su vez, existe un registro de precarga adicional. Cuando se accede por programa
(lectura/escritura) al registro de recarga automática, en realidad se está accediendo al
registro de precargado. El contenido del registro de precarga se transfiere al registro
correspondiente “fantasma o sombra” (shadow) de forma permanente o en cada evento
de actualización UEV. El evento de actualización se envía cuando el contador alcanza el
valor de desbordamiento, aunque también puede ser generado por software. La
generación del evento de actualización se describirá en detalle para cada tipo de
configuración. El motivo de la existencia de este mecanismo de registro “fantasma” es el
de asegurar la cuenta actual, conservando el valor de comparación hasta el próximo
evento de actualización.
El contador está cronometrado por la salida CK_CNT del prescaler, que se habilita
solo cuando el bit de habilitación del contador (CEN) está configurado. Hay que tener en
cuenta que la señal de habilitación del contador real CNT_EN se establece 1 ciclo de reloj
después de CEN por lo que, el primer periodo de cuenta posee un ciclo de reloj adicional.

4.2.2 Descripción de Prescaler


Como ya fue introducido anteriormente, el prescaler puede dividir la frecuencia del
reloj que le ingresa en cualquier factor entre 1 y 65536. Se basa en un contador de 16 bits
controlado a través de un registro de 16 bits (TIMx_PSC). Este valor se puede cambiar
sobre la marcha ya que el valor del registro de control TIMx_PSC está en un búfer (de
igual forma que el registro de recarga automática). La nueva relación de escala se tiene
en cuenta en el próximo evento de actualización.
La Figura 4 muestra un ejemplo del comportamiento del contador cuando se cambia
la relación del prescaler sobre la marcha. A saber, en la figura 4 el valor de cuenta está
fijado en 0xFC o sea 252. Cuando el contador llega a la cuenta 0xF9 (momento aleatorio
pero anterior al valor de comparación) el registro del prescaler se escribe y pasa de 0
(clock directo) a 1 (clock dividido a la mitad). De esta forma, el clock CK_PSC se ve
ahora dividido en un factor de 2 como se observa en la línea CK_CNT. Al llegar al valor
de comparación, el contador vuelve al valor inicial 0x00 y comienza la nueva cuenta con
la nueva escala de tiempo generándose un evento de actualización (UEV).

14
Figura 4: Ejemplo de cambio de valor de prescaler de x1 a x2
Modo de conteo
Como se mencionó, el contador cuenta desde 0 hasta el valor de recarga automática
(contenido del registro ARR) de forma ascendente, luego se reinicia desde 0 y genera un
evento de desbordamiento de contador.
Se puede generar un evento de actualización en cada desbordamiento del contador
o el mismo puede ser deshabilitado por software. Deshabilitarlo evita actualizar los
registros ocultos mientras se escriben nuevos valores en los registros de precarga. De esta
manera, no se produce ningún evento de actualización hasta que el evento es nuevamente
habilitado.
Cuando ocurre un evento de actualización, todos los registros se actualizan y el
indicador de interrupción por actualización (UIF) se establece. Además:
 El búfer del prescaler se vuelve a cargar con el valor de precarga (contenido
del registro TIMx_PSC)
 El registro de recarga automática (ARR) se actualiza con el valor de precarga
(contenido en el registro fantasma) (TIMx_ARR)
La siguiente figura muestra un ejemplo del comportamiento del contador cuando el
registro de recarga automática (TIMx_ARR) vale 0x36. (Más ejemplos pueden
encontrarse en la página 631 del manual de referencia)

Figura 5: Diagrama de temporización del contador, reloj interno dividido por 1

15
Fuente de reloj
El reloj del contador lo proporciona la fuente del reloj interno (CK_INT). El CEN
y los bits UG son bits de control reales y solo pueden ser cambiados por software (excepto
el UG que permanece borrado automáticamente). Tan pronto como el bit CEN se escribe
en 1, el prescaler se sincroniza con el reloj interno CK_INT.
La Figura 6 muestra el comportamiento del circuito de control y del contador
ascendente en modo normal, sin prescaler.

Figura 6: Circuito de control en modo normal, reloj interno dividido por 1.

5 Timers de propósito general (TIM9 a TIM14)

Avanzando en cuanto a complejidad, nos interesan ahora los timers del 9 al 14. Si
bien son timers de propósitos generales (GP), a diferencia del timer 2 al 5, éstos no
generan interrupciones de DMA y solo cuentan de forma ascendente como se observó en
la Tabla 1. Adicionalmente, respecto a los timers básicos ya vistos (6 y 7), estos timers
poseen entradas adicionales de reloj para hacer capturas de cuentas y otras tareas que
veremos a continuación. A su vez, haremos una diferenciación entre los timers
TIM10/11/13/14 (más simples) respecto a los timers TIM9/12 que poseen características
adicionales de disparo.
Introducción
De igual forma a lo visto en los timers básicos, los timers de propósito general TIM9
a TIM14 consisten en un contador de recarga automática de 16 bits controlado por un
prescaler programable. A diferencia de los timers básicos, se pueden usar para una mayor
variedad de propósitos, incluida la medición de la duración de las señales de entrada
(input capture) o la generación de formas de onda de salida (output compare, PWM).
La duración de los pulsos y los períodos de la onda de salida se pueden modular
desde unos pocos microsegundos hasta varios milisegundos utilizando el prescaler del
temporizador y los prescalers de controlador de reloj RCC. Al igual que todos los times,
los temporizadores TIM9 a TIM14 son completamente independientes y no comparten
ningún recurso. Además, se pueden sincronizar juntos como se describirá más adelante.
Características generales
Las características de los temporizadores de propósito general TIM9 a TIM14
incluyen:

16
 16-bits de recarga automática (cuenta ascendente)
 El prescaler programable de 16 bits se utiliza para dividir la frecuencia del reloj
de contador por cualquier factor entre 1 y 65536 (incluso "sobre la marcha")
 Hasta 2 canales independientes (solo 1 para los TIM10/11/13/14) para:
o Captura de entrada (input capture)
o Comparación de salida (output compare)
o Generación de PWM (alineación al flanco)
o Salida en modo de un pulso.
 Circuito de sincronización para controlar el temporizador con señales externas e
interconectar varios temporizadores juntos. (solo en los TIM9/12).
 Generación de interrupción en los siguientes eventos:
o Actualización: desbordamiento del contador, inicialización del contador
(por software en todos y en los TIM9/12 puede ser por disparo interno).
o Evento de activación (inicio de contador, parada, inicialización o conteo
por activación interna) (solo en los TIM9/12).
o Captura de entrada (input capture)
o Comparación de salida (output compare)

Las figuras 7 y 8 muestran un esquema de la estructura básica de los timers GP


TIM10/11/13/14. En la parte izquierda de la figura 7 se observa que, a diferencia de los
timers básicos, estos timers GP poseen una entrada física (TIMxCH1). Esta entrada posee
un filtro de entrada, un detector de flancos y en conjunto con un prescaler se encuentran
conectados a un registro de captura/comparación. Hacia el lado derecho se observa que,
el registro de captura/comparación se encuentra asociado a una salida física del
microcontrolador a través de un circuito controlador de salida.

Unidad de base de tiempo

Figura 7: Estructura básica de los timers GP TIM10/11/13/14.

En el caso de la figura 8, observamos la estructura básica de los timers GP TIM9/12.


A diferencia de lo mencionado para los timers TIM10/11/13/14 estos timers tienen dos
pines físicos de entrada y salida asociados al mismo. Además, la fuente de disparo del

17
timer posee múltiples entradas internas (ITR) y una asociada al canal 1 de entrada
TI1F_ED.

Unidad de base de tiempo

Figura 8: Estructura básica de los timers GP TIM9/12.

Descripción funcional de TIM9 a TIM14


5.3.1 Unidad de base de tiempo, prescaler y conteo.
El bloque principal del temporizador es un contador de 16 bits con su
correspondiente registro de recarga automática de igual forma que en los timer básicos.
La unidad de base de tiempo y el prescaler funcionan exactamente de la misma manera
que lo descripto anteriormente (ver Figura 2).
El método de conteo es igual que en el caso anterior, en el que el contador arranca
desde 0 hasta el valor de recarga automática (contenido del registro ARR) y luego se
reinicia desde 0 generando un evento de desbordamiento de contador.

5.3.2 Selección de reloj


Aquí es donde comienzan a aparecer propiedades adicionales respecto a lo visto
anteriormente. En este caso, el reloj del contador puede ser proporcionado por las
siguientes fuentes:
 Reloj interno (CK_INT) (de igual forma que en los timer básicos)
 Reloj externo en Modo 1 (para TIM9 y TIM12): pin de entrada externa (TIx)
 Entradas de disparo internas (ITRx) (para TIM9 y TIM12): que conectan la
salida de activación desde otro temporizador. (timers en cascada)
5.3.2.1 Reloj interno
Aplica la misma descripción y figuras asociada que en los timers básicos.

18
5.3.2.2 Reloj externo - Modo 1 (TIM9 y TIM12)
En este modo el contador puede contar en cada flanco ascendente o descendente en
una entrada seleccionada y utilizarla como clock del timer. La Figura 9 muestra de
izquierda a derecha como la señal ingresa al timer por el pin externo, luego pasa por el
filtro y el detector de flanco para terminar en el multiplexor de selección de la señal de
disparo. Finalmente se cuenta con el multiplexor que permite seleccionar cuál de los
disparos se convertirá en el clock de ese timer en particular, siendo las opciones las vistas
anteriormente (interno CLK_INT, interno (ITRx) o externo (TIxFPx o TI1_ED))

Figura 9: Estructura básica de la fuentes de reloj externo.


Canales de captura y comparación
Cada canal de captura/comparación se construye alrededor de un registro de captura
o comparación (que incluye su propio registro “fantasma”), una etapa de entrada para la
captura (con filtro digital, multiplexor y prescaler) y una etapa de salida (con comparador
y control de salida). Veamos en detalle cada una de estas tres secciones.
Las figuras 10, 11 y 12 ofrecen una descripción general de un canal de captura y
comparación. La etapa de entrada (Figura XX) muestrea la entrada TIx correspondiente
para generar una señal filtrada TIxF. Luego, un detector de flancos con selección de
polaridad genera una señal (TIxFPx) que puede ser utilizada como entrada de disparo por
el controlador en modo esclavo o como comando de captura. A su vez, esta señal puede
dividirse por un prescaler antes de ingresar al registro de captura (ICxPS).

Figura 10: Canal de captura / comparación (ejemplo: etapa de entrada del canal 1)

19
Los bloques del circuito principal de captura/comparación se componen de un
registro de precarga y un registro de fantasma. La escritura y lectura por software escribe
y lee accediendo siempre al registro de precarga (acción completamente transparente para
el usuario). En el modo de captura, las capturas se realizan realmente en el registro
fantasma, que se copia en el registro de precarga. En el modo de comparación, el
contenido del registro de precarga se copia en el registro fantasma que se compara con el
contador.

Figura 11: Circuito principal de captura / comparación del canal 1


La etapa de salida genera una forma de onda intermedia que luego se usa como
referencia: OCxRef (alta activa). La polaridad actúa al final de la cadena permitiendo
optar por alguna de las dos posibles según el bit CC1P.

Figura 12: Etapa de salida del canal de captura / comparación.

Modo captura de entrada (input capture)


En el modo de captura de entrada, los registros de captura/comparación se utilizan
para bloquear y almacenar el valor del contador después de una transición detectada por
la señal ICx correspondiente. Cuando se produce una captura, se establece el indicador
CCXIF correspondiente y se puede enviar una interrupción o una solicitud DMA si
estuviesen habilitadas. Si se produce una captura mientras el indicador CCxIF ya estaba
alto, entonces se establece el indicador de captura (flag CCxOF del registro TIMx_SR).
El software puede borrar el indicador CCxIF escribiéndolo en "0" o de forma
automática leyendo los datos capturados almacenados en el registro TIMx_CCRx.

20
CCxOF se borra solo cuando se lo escribe en ‘0’.El siguiente ejemplo muestra cómo
capturar el valor del contador en TIMx_CCR1 cuando aumenta la entrada de TI1. Para
ello se utiliza el siguiente procedimiento:

 Seleccionar la entrada activa: TIMx_CCR1 debe estar vinculado a la entrada


TI1. Una vez definido como entrada el registro TIMx_CCR1 se vuelve de
solo lectura.
 Programar la duración del filtro de entrada que necesita con respecto a la
señal que conecta al temporizador. Imaginemos que, al alternar, la señal de
entrada no es estable durante 5 ciclos internos de reloj. Debemos programar
una duración de filtro más larga que estos 5 ciclos de reloj. Podemos validar
una transición en TI1 cuando se han detectado 8 muestras consecutivas con
el nuevo nivel.
 Seleccionar el flanco de la transición activa en el canal TI1.
 Programar el prescaler de entrada.
 Activar la captura del contador en el registro de captura.
 Si es necesario, habilitar la solicitud de interrupción y/o la solicitud DMA
relacionada.
Cuando se produzca una captura de entrada:
 El registro TIMx_CCR1 guardará el valor del contador en la transición
activa.
 Se establece el indicador CC1IF (indicador de interrupción). CC1OF
también se establece si se produjeron al menos dos capturas consecutivas
mientras que el flag no se borró (o sea, no se leyó la captura actual).
 Se genera una interrupción o un evento DMA dependiendo si se encuentra
activada.
Para manejar la sobrecaptura (captura de más de un flanco) se recomienda leer los datos
antes de la bandera de sobrecaptura. Esto es para evitar perder una sobrecaptura que
podría ocurrir después de leer la bandera y antes de leer los datos. Vayamos ahora un
ejemplo más concreto separando el siguiente proceso en valores del 1 - 5.
1) En la figura 13 se muestra un timer/counter y una señal de entrada asignada a la
señal TI1. Aclaremos que, en el proceso de configuración del programa mediante
la plataforma STMcube-Mx, dicho pin ha sido configurado como entrada y se ha
asignado al timer correspondiente.

Figura 13: Etapa de salida del canal de captura / comparación.

21
El clock utilizado para el timer es, por ejemplo, un reloj interno configurado
previamente y dependiente de la fuente HSI en el árbol de reloj. Junto con el
prescaler del timer, se divide la señal de clock logrando que las cuentas del
contador se incrementen cada 1ms como se observa en el esquema de la Figura
13.
2) Al llegar a este punto, la señal de entrada produce el primer flanco ascendente. El
registro de captura guarda el valor actual del timer y se genera un evento de
interrupción.
3) Dentro de la ISR, el programa lee el registro de captura y guarda ese valor en una
variable asignada a tal fin. Además, se deja listo el programa a la espera del
próximo flanco ascendente.
4) Al llegar a este punto, la señal de entrada produce el segundo flanco ascendente.
El registro de captura guarda el valor actual del timer sobrescribiendo el anterior
y se genera nuevamente un evento de interrupción.
5) Dentro de la ISR, el programa lee el registro de captura con el nuevo valor y ésta
vez resta el valor actual de la captura al valor anterior. De esta forma, se obtiene
un número que representa “cuantas veces el contador incrementó su valor en un
periodo de la señal de entrada”. Por lo tanto, calcular el periodo de la señal resulta
de multiplicar la diferencia de las cuentas por el periodo de la señal de reloj del
timer. En nuestro caso, (61 − 54) × 1ms = 7ms o 142,86Hz.

Resulta importante aclara aquí que los 7ms estimados tienen un error de ±1ms
(~15%) debido a la desratización de la base de tiempo. Por lo tanto, se puede inferir
fácilmente que para reducir el error relativo de la medición hay que incrementar la
frecuencia de la base de tiempo respecto a la frecuencia de la señal a medir.
Otra cuestión importante relacionada con el apartado anterior es que, como las
señales de base de tiempo y entrada son asincrónicas, existe la posibilidad de que el
primer flanco ascendente ocurra cuando el timer está apunto de ejecutar su evento de
desbordamiento (overflow). Por esta razón, el programador deberá considerar en su lógica
de cálculo la posibilidad de que ocurra ésta situación y corregir, mediante el flujo del
programa el valor correspondiente.

Modo de entrada PWM (solo para TIM9/12)


Este modo es un caso particular del modo de captura de entrada. El mismo se puede
utilizar para medir la frecuencia y el ciclo de trabajo de una señal PWM y solo es
realizable con estos timers debido a que se necesitan al menos dos registros de captura.
El procedimiento es el mismo excepto:
 Dos señales ICx se asignan en la misma entrada TIx.
 Estas 2 señales ICx están activas en flancos con polaridad opuesta.
 Una de las dos señales TIxFP (según el flanco requerido) se selecciona
como entrada de disparo y el controlador en modo esclavo está configurado
en modo de reinicio.
Por ejemplo, se puede medir el período (en el registro CCR1) y el ciclo de trabajo
(en el registro CCR2) del PWM aplicado en el puerto TI1 mediante el siguiente
procedimiento (según la frecuencia CK_INT y el valor del prescaler):

22
 Seleccionar la entrada activa para TIMx_CCR1 mediante la plataforma
STM-CubeMx.
 Seleccionar la polaridad activa para TI1FP1 (utilizada tanto para la captura
en CCR1 como para borrar el contador) activa en el flanco ascendente.
 Seleccionar la entrada activa para TIMx_CCR2.
 Seleccionar la polaridad activa para TI1FP2 (utilizada para la captura en
CCR2) activa en el borde descendente.
 Seleccionar una entrada de disparo válida: (TI1FP1).
 Configurar el controlador de modo esclavo en modo de restablecimiento.
 Habilitar las capturas.

Figura 14: Etapa de salida del canal de captura / comparación.

El código de la ISR asociada será similar al implementado en el ejemplo anterior.


Ésta configuración no solo permitirá medir el periodo de la señal, sino que también se
podrá medir el ciclo de trabajo.
Modo de comparación de salida (output compare)
Esta función se utiliza para controlar una forma de onda de salida o para indicar
cuándo ha transcurrido un determinado período de tiempo. Cuando se encuentra una
coincidencia entre el registro de captura/comparación y el contador, la función de
comparación de salida hace lo siguiente:
1. Asigna a el pin correspondiente un valor de salida programable que queda
definido por el modo de comparación de salida y la polaridad de salida
elegida. El pin de salida puede mantener su nivel, activarse, desactivarse o
puede conmutar, todo esto, cuando se detecta una igualdad en la
comparación.
2. Establece un indicador en el registro de estado de interrupción.
3. Genera una interrupción si se establece la habilitación de la interrupción
correspondiente.
4. Envía una solicitud DMA si se establece el bit de habilitación
correspondiente.
Los registros de comparación se pueden programar con o sin registros de precarga.
En el modo de comparación de salida, el evento de actualización UEV no tiene efecto en
la salida de OCxREF y OCx. La resolución de tiempo queda determinada por el tiempo

23
de cuenta del contador. El modo de comparación de salida también se puede usar para
emitir un solo pulso (en el modo de pulso único).

Procedimiento de configuración:
1) Seleccionar el reloj del contador (interno, externo, preescaler).
2) Escribir los datos deseados en los registros ARR y CCRx.
3) Establecer si se va a generar una solicitud de interrupción.
4) Seleccionar el modo de salida. Por ejemplo:
- alternar el pin de salida de OCx cuando el contador coincide con el
registro de comparación
- deshabilitar el registro de precarga
- seleccionar alta polaridad activa
- habilitar la salida
5) Habilitar el contador.

El registro CCRx se puede actualizar en cualquier momento mediante el software


para controlar la forma de onda de salida, siempre que el registro de precarga no esté
habilitado (de lo contrario, el registro fantasma CCRx se actualizará solo en el próximo
evento de actualización UEV). Un ejemplo se muestra en la Figura 15.

Figura 15: Etapa de salida del canal de captura / comparación.

Modo PWM
El modo Modulación de ancho de pulso o PWM permite generar una señal con una
frecuencia determinada por el valor del registro ARR y un ciclo de trabajo determinado
por el valor del registro CCRx. A su vez, los timers en modo PWM pueden trabajar en
dos modos distintos dependiendo de cómo se comporta la salida en relación con el nivel
de comparación. También y como veremos en detalle más adelante, el ciclo activo de
PWM puede estar alineado al centro y al borde. La figura 16 muestra estos dos tipos de
alineación. En particular, los timers de propósito general que estamos tratando solo
pueden generar PWM alineado al borde porque el contador solo trabaja en forma
ascendente.

24
Figura 16: Modo edge aligned PWM y modo center aligned PWM.

La polaridad de salida es programable por software (Ver figura 12) la misma puede
ser programada como activo alto o activo bajo. La salida de OCx está habilitada por el bit
CCxE en el registro TIMx_CCER. En el modo PWM (1 o 2), TIMx_CNT y TIMx_CCRx
siempre se comparan para determinar si TIMx_CNT ≤ TIMx_CCRx.

Modo edge aligned PWM


En el siguiente ejemplo, consideramos el modo PWM 1. La señal de referencia
PWM OCxREF es alta siempre que TIMx_CNT <TIMx_CCRx, de lo contrario, se vuelve
baja. Si el valor de comparación en TIMx_CCRx es mayor que el valor de recarga
automática (en TIMx_ARR), OCxREF se mantiene en "1". Si el valor de comparación es
0, OCxRef se mantiene en "0". La Figura 17 muestra la forma de onda PWM alineadas al
borde en un ejemplo donde TIMx_ARR = 8 y CCRx toma valores 4, 8, mayor que 8 y 0.
Tambien se observa el comportamiento del flag de interrupción asociado CCxIF.

Figura 17: Etapa de salida del canal de captura / comparación.

25
6 Timers de propósito general (TIM2 a TIM5)

Los temporizadores de propósito general TIM2 y TIM5 son muy similares a los
vistos anteriormente, por lo tanto, y de igual forma que en el resto de este texto, solo
mencionaremos las diferencias adicionales.
Características principales
Las características del temporizador TIMx de uso general incluyen:
 Contador de recarga automática de 16 bits (TIM3 y TIM4) o de 32 bits
(TIM2 y TIM5) que puede contar hacia arriba, abajo o arriba/abajo.
 Un preescaler programable de 16 bits se utiliza para dividir ("sobre la
marcha") la frecuencia del reloj en cualquier factor entre 1 y 65536.
 Hasta 4 canales independientes para:
o Captura de entrada (input capture)
o Comparación de salida (output compare)
o Generación de PWM (modos alineados al centro y al borde)
o Salida en modo de un pulso.
 Circuito de sincronización para controlar el temporizador con señales
externas e interconectar varios temporizadores.
 Interrupción/generación de DMA en los siguientes eventos:
o Actualización: desbordamiento/subdesbordamiento del contador o
inicialización del contador (por software o disparador interno /
externo).
o Evento de activación (inicio, detención o inicialización del
contador o conteo mediante disparo interna o externo).
o Captura de entrada (input capture)
o Comparación de salida (output compare)
 Admite la conexión de encoder incremental (cuadratura) y de un sensor de
hall para propósitos de posicionamiento.
 Entrada de disparo para reloj externo o gestión de corriente ciclo por ciclo.

En la figura 18 se observa el esquema de estos tipos de timers.

26
Diagrama de bloques

Figura 18: Estructura básica 2 de los Timers de propósito general


Descripción funcional
Tanto la unidad de base de tiempo, la funcionalidad del prescaler y el modo de
cuenta ascendente se comportan exactamente igual a los timers vistos anteriormente.
Veremos ahora las diferencias que se presentan con los modos de cuenta descendente y
de alineación central.
6.3.1 Modo de conteo descendente (downcounting)
En el modo de conteo descendente, el contador cuenta desde el valor de recarga
automática (contenido del registro TIMx_ARR) hasta 0, luego se reinicia desde el valor
de recarga automática y genera un evento de desbordamiento del contador.
Se puede generar un evento de actualización en cada desbordamiento del contador,
mediante software o utilizando el controlador en modo esclavo.
De igual forma que en la cuenta ascendente, el evento de actualización de la UEV se
puede deshabilitar por software. Esto es para evitar actualizar los registros ocultos
mientras se escriben nuevos valores en los registros de precarga.
Las siguientes figuras muestran algunos ejemplos del comportamiento del contador para
diferentes frecuencias de reloj cuando TIMx_ARR = 0x36.

27
Figura 19: Diagrama de tiempo del contador, clock interno dividido por 1.

Figura 20: Diagrama de tiempo del contador, evento de actualización

6.3.2 Modo de alineación central (cuenta ascendente/descendente)


En el modo alineación central, el contador cuenta desde 0 hasta el valor de recarga
automática (contenido del registro TIMx_ARR – 1), genera un evento de desbordamiento
del contador, luego cuenta desde el valor de carga automática hasta 1 y genera un evento
de desbordamiento del contador. Luego se reinicia contando desde 0.
El evento de actualización se puede generar en cada desbordamiento del contador
o por software usando el controlador en modo esclavo. En este caso, el contador se
reinicia contando desde 0, así como el contador del preescaler.
La figura 21 muestra un ejemplo del comportamiento del contador para un valor de
prescaler igual a 1.

28
Figura 21: Diagrama de tiempo del contador, evento de actualización

Selección de reloj
En este caso, el reloj del contador puede ser proporcionado por las mismas fuentes
que los timers de propósitos generales:
 Reloj interno (CK_INT)
 Reloj externo en Modo 1: pin de entrada externa (TIx)
 Entradas de disparo internas (ITRx) (para TIM9 y TIM12): que conectan la
salida de activación desde otro temporizador (timers en cascada).
Adicionalmente, en algunos de estos timers podemos encontrar:
 Reloj externo en Modo 2: entrada de activación externa (ETR) disponible
solo en TIM2, TIM3 y TIM4.

Para las primeras tres fuentes de reloj se aplica la misma descripción y figuras
asociada que en los timers básicos y de propósito generales (TIM9 a TIM14) vistos
anteriormente.

6.4.1.1 Reloj externo - Modo 1 (TIM9 y TIM12)


El contador puede contar en cada flanco ascendente o descendente en la entrada de
activación externa ETR. La Figura 22 ofrece una descripción general del bloque de
entrada de activador externo.

Figura 22: Diagrama de reloj externo ETR

29
PWM en modo de alineación central

El modo alineado en el centro se mostró en la figura 16. En este caso, el indicador de


comparación se establece cuando el contador cuenta hacia arriba, cuando cuenta hacia
abajo o ambos cuando cuenta hacia arriba y hacia abajo, según la configuración
establecida.
La Figura 23 muestra algunas formas de onda PWM alineadas en el centro en un ejemplo
donde:
• TIMx_ARR = 8,
• El modo PWM es el modo PWM 1,
• La bandera se establece cuando el contador realiza una cuenta
regresiva correspondiente al modo alineado en el centro.

Figura 23: Diagrama de tiempo de la configuración PWM center aligned

Consejos para usar el modo alineado en el centro:


• No se recomienda escribir en el contador mientras se ejecuta en modo alineado en el
centro, ya que puede producir resultados inesperados. En particular:
- La dirección no se actualiza si escribe un valor en el contador que sea mayor que
el valor de recarga automática (TIMx_CNT> TIMx_ARR). Por ejemplo, si el
contador estaba contando, continúa contando.
- La dirección se actualiza si escribe 0 o escribe el valor TIMx_ARR en el contador,
pero no se genera un evento de actualización UEV.

30
• La forma más segura de usar el modo alineado en el centro es generar una actualización
por software justo antes de iniciar el contador y no escribir el contador mientras se está
ejecutando.
Modo Encoder
El modo encoder, el timer actúa simplemente como un reloj externo con selección de
dirección. Esto significa que el contador solo cuenta continuamente entre 0 y el valor de
recarga automática en el registro TIMx_ARR (0 a ARR o ARR a 0 según la dirección).
Así que se debe configurar TIMx_ARR antes de comenzar a utilizar el encoder. De la
misma manera, las funciones de captura, comparación, preescalado y salida del
disparador continúan funcionando normalmente.
En este modo, el contador se modifica automáticamente siguiendo la velocidad y la
dirección del codificador incremental y su contenido, por lo tanto, siempre representa la
posición del codificador. La dirección de conteo corresponde a la dirección de rotación
del sensor conectado. La tabla 3 resume las posibles combinaciones, asumiendo que TI1
y TI2 no cambian al mismo tiempo.

Tabla 3: Dirección de conteo versus señales de encoder

Un codificador incremental externo se puede conectar directamente a la MCU sin lógica


de interfaz externa. Sin embargo, normalmente se utilizan comparadores para convertir
las salidas diferenciales del codificador en señales digitales. Esto aumenta enormemente
la inmunidad al ruido. La tercera salida del codificador, que indica la posición cero
mecánica, se puede conectar a una entrada de interrupción externa y desencadenar un
reinicio del contador.
La Figura 24 muestra un ejemplo de operación de contador, que muestra la generación de
señales de conteo y el control de dirección. También muestra cómo se compensa la
fluctuación de entrada cuando se seleccionan ambos bordes. Esto puede ocurrir si el
sensor se coloca cerca de uno de los puntos de conmutación.

31
Figura 24: Ejemplo de operación de contador en modo encoder

El timer, cuando se configura en el modo encoder, proporciona información sobre la


posición actual del sensor. Puede obtener información dinámica (velocidad, aceleración,
desaceleración) midiendo el período entre dos eventos del codificador utilizando un
segundo timer configurándolo en el modo de captura. Cuando esté disponible, también es
posible leer su valor a través de una solicitud DMA generada por un reloj en tiempo real.

Entrada del temporizador de la función XOR


El bit TI1S en el registro TIM_CR2 permite que el filtro de entrada del canal 1 se conecte
a la salida de una compuerta XOR como se muestra en la figura 18, combinando los tres
pines de entrada TIMx_CH1 a TIMx_CH3. La salida XOR se puede utilizar con todas las
funciones de entrada del temporizador, como el disparo o la captura de entrada.
Esta característica se usa normalmente para manejar las tres señales de 120°
desplazadas en fase provenientes de los sensores Hall en motores eléctricos. Esto le
permite tener una idea clara de que ocurre en cada uno de los flancos de las tres señales
y tener un valor de captura que se puede usar directamente para la regulación de la
velocidad.

7 Temporizadores de control avanzado (TIM1 y TIM8)


Introducción a TIM1 y TIM8
Finalmente veremos los temporizadores avanzados. Los temporizadores de control
avanzado (TIM1 y TIM8) consisten en un contador de recarga automática de 16 bits
controlado por un preescaler programable.
Puede usarse para una variedad de propósitos, incluida la medición de la duración
del pulso de las señales de entrada (captura de entrada) o la generación de formas de onda
de salida (comparación de salida, PWM, PWM complementario con inserción de tiempo
muerto).
La duración de los pulsos y los períodos de forma de onda se pueden modular desde
unos pocos microsegundos hasta varios milisegundos utilizando el prescaler de
temporizador y los prescalers de controlador de reloj RCC.
Los temporizadores de control avanzado (TIM1 y TIM8) y de propósito general
(TIMx) son completamente independientes y no comparten ningún recurso, sin embargo,
se pueden sincronizar juntos.

32
De igual forma que en los casos anteriores, iremos introduciendo solo las
diferencias con los timers ya vistos.
Principales características de TIM1 & TIM8
Las características del temporizador TIM1 y TIM8 incluyen:
 Contador de recarga automática de 16 bits arriba, abajo, arriba / abajo.
 El prescaler programable de 16 bits permite dividir ("sobre la marcha") la
frecuencia del reloj o por cualquier factor entre 1 y 65536.
 Hasta 4 canales independientes para:
- Captura de entrada
- Comparación de salida
- Generación de PWM (modo alineado al centro y al borde)
- Salida en modo de un pulso.
 Salidas complementarias con tiempo muerto programable.
 Circuito de sincronización para controlar el temporizador con señales externas e
interconectar varios temporizadores juntos.
 Contador de repetición para actualizar los registros del temporizador solo después
de un número dado de ciclos del contador.
 Interrupción en la entrada para poner las señales de salida del temporizador en
estado de restablecimiento o en un estado conocido.
 Interrupción / generación de DMA en los siguientes eventos:
- Actualización: desbordamiento / subdesbordamiento del contador, inicialización
del contador (por software o disparador interno / externo)
- Evento de activación (inicio, detención, inicialización o conteo del contador
mediante activación interna / externa)
- Captura de entrada
- Comparación de salida
- entrada de ruptura
• Admite el encoder incremental (cuadratura) y los circuitos del sensor Hall para
propósitos de posicionamiento
• Entrada de disparador para la gestión de corriente de reloj externo o ciclo por ciclo

En la figura 25 se observa el esquema interno de estos timers avanzados.

33
Figura 25: Esquema interno de los AT
Descripción funcional de TIM1 y TIM8
7.3.1 Unidad de base de tiempo
El bloque principal del temporizador de control avanzado programable es prácticamente
idéntico al de los timers de propósitos generales. La unidad de base de tiempo incluye:
 Contador de registro (TIMx_CNT)
 Registro de prescaler (TIMx_PSC)
 Registro de recarga automática (TIMx_ARR)
Adicionalmente, estos timers incluyen:
 Registro de contador de repetición (TIMx_RCR)
Contador de repetición
En la descripción de la unidad de base de tiempo de los timers de propósitos generales se
describió cómo se genera el evento de actualización (UEV) con respecto a los
desbordamientos / desbordamientos del contador. Sin embargo, en este caso, se genera el
evento solo cuando el contador de repetición ha llegado a cero. Esto puede ser útil cuando
se generan señales PWM. Esto significa que los datos se transfieren desde los registros
de precarga a los registros fantasma cada vez que transcurren (N + 1) desbordamientos o
subdesbordamientos, donde N es el valor en el contador de repetición TIMx_RCR.

34
El contador de repetición se decrementa:
 En cada cuenta de desbordamiento en el modo de conteo ascendente,
 En cada subdesbordamiento de contador en el modo de conteo
descendente,
 En cada desbordamiento del contador y en cada desbordamiento del
contador en el modo alineado en el centro. Aunque esto limita el número
máximo de repeticiones a 128 ciclos de PWM, hace posible actualizar el
ciclo de trabajo dos veces por período de PWM. Cuando se actualizan los
registros de comparación solo una vez por período de PWM en el modo
alineado en el centro, la resolución máxima es 2xTck, debido a la simetría
del patrón.
El contador de repetición es un tipo de recarga automática; la tasa de repetición se
mantiene según lo definido por el valor del registro TIMx_RCR (consultar la Figura 26).
Cuando el evento de actualización es generado por software o por hardware a través
del controlador en modo esclavo, el mismo ocurre inmediatamente cualquiera que sea el
valor del contador de repetición. Entonces, el contador de repetición se vuelve a cargar
con el contenido del registro TIMx_RCR.
En el modo alineado al centro, para valores impares de RCR, el evento de actualización
ocurre ya sea en el desbordamiento o en el subdesbordamiento dependiendo de cuándo se
escribió el registro de RCR y cuándo se inició el contador. Si el RCR se escribió antes de
iniciar el contador, la UEV se produce en el desbordamiento. Si el RCR se escribió
después de iniciar el contador, la UEV se produce en el subdesbordamiento. Por ejemplo,
para RCR = 3, la UEV se genera en cada 4to evento de desbordamiento o
subdesbordamiento, dependiendo de cuándo se escribió RCR.

Figura 26: Ejemplos de tasa de actualización según el modo y la configuración


del registro TIMx_RCR

35
Canales de captura/comparación
El cuarto canal de captura y comparación es semejante a los de propósitos generales
vistos anteriormente (ver figura 27). Sin embargo, la etapa de salida de los canales de
comparación 1 al 3 son más complejos.

Figura 27: Etapa de salida para los canales 1 a 3

En la figura 28 se observa el bloque adicional de generación de tiempo muerto y las


dos salidas complementarias OC1 y OC1N. A continuación, detallaremos más
información al respecto.

Figura 28: Etapa de salida para el canal 4

Salidas complementarias e inserción en tiempo muerto.


Los temporizadores de control avanzado (TIM1 y TIM8) pueden emitir dos señales
complementarias y gestionar los instantes de la desconexión y conexión de las salidas.
Este tiempo entre cada transición se conoce generalmente como tiempo muerto y debe
ajustarlse en función de los dispositivos que haya conectado a las salidas y sus
características. Se puede seleccionar la polaridad de las salidas (salida principal OCx o
OCxN complementaria) de forma independiente para cada salida. Las señales
complementarias OCx y OCxN se activan mediante una combinación de varios bits de
control.
La figura 29 muestra las relaciones entre las señales de salida del generador de
tiempo muerto y la señal de referencia OCxREF.

36
Figura 29: Salida complementaria con inserción de tiempo muerto.

8 Bibliografía

 STM32F446-ARM Nucleo Board User's Manual D.K. Blandford August, 2017.


 STM32F446xx advanced Arm®-based 32-bit MCUs - Reference manual.
 STM32F446xC/E - DocID027107 Rev 6.

37

GFR – 2019 - CC BY-SA 2.0 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Timers 
 
Apuntes de clase V1.0 
2019
2 
 
 
Índice de Contenidos 
 
1 
Introducción ..............................................................................
3 
 
6 
Timers de propósito general (TIM2 a TIM5) ............................................... 26 
 
Características princ
4 
 
1 Introducción 
 Contadores y temporizadores 
La mayor parte de las aplicaciones para microcontrolador necesitan contar
5 
 
1.2.2 Output compare 
La capacidad correspondiente para activar una salida en un momento específico, en 
función de una
6 
 
termoeléctricos, y algunas otras aplicaciones. Otra funcionalidad interesante de las 
señales PWM es la de generar un co
7 
 
Donde PS es el factor de preescalado con que se divide la frecuencia de clock (fclk) 
que ingresa al timer. Este factor
8 
 
Si se quiere determinar la frecuencia con una resolución de p bits ¿cuál debe ser la 
resolución en la medida del períod
9 
 
familias. El número de temporizadores de una clase dada también varía con la capacidad 
o el tamaño del micro STM32. Por
10 
 
Cada temporizador en un micro STM32 es independiente de los demás y, por lo 
tanto, no comparten ningún recurso común.

También podría gustarte