4 4 Timers PDF
4 4 Timers PDF
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.
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.
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𝑝 (𝑓𝑚𝑎𝑥 − 𝑓𝑚𝑖𝑛)
𝑂𝑉𝑅𝐹
𝑇𝑟 = = 𝑂𝑉𝑅𝐹 × 𝑇𝑐𝑙𝑘 × 𝑃𝑆
𝑓𝑐𝑙𝑘/𝑃𝑆
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.
𝑇𝑥
𝑁 = 𝑇𝑥 × 𝑓𝑟 =
𝑇𝑟
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𝑞
𝑓𝑟 =
(𝑇𝑚𝑎𝑥 − 𝑇𝑚𝑖𝑛)
𝑇𝑥 × 𝑓𝑐𝑙𝑘
𝑃𝑈𝐿𝑆𝐸𝑆 =
𝑃𝑆
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 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.
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.
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.
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)
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.
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.
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.
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)
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.
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)
17
timer posee múltiples entradas internas (ITR) y una asociada al canal 1 de entrada
TI1F_ED.
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 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.
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:
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.
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.
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.
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.
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.
26
Diagrama de bloques
27
Figura 19: Diagrama de tiempo del contador, clock interno dividido por 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.
29
PWM en modo de alineación central
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.
31
Figura 24: Ejemplo de operación de contador en modo encoder
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
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.
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.
36
Figura 29: Salida complementaria con inserción de tiempo muerto.
8 Bibliografía
37









