7. Introducción al uso del temporizador TIM

1. Introducción a los registros relevantes del temporizador TIM

  • La composición de la unidad de captura de entrada
    Inserte la descripción de la imagen aquí
    Registro de estado 1 (TIM1_SR1)
    Inserte la descripción de la imagen aquí
    Si ocurre un evento de rechazo de carga, el bit de bandera CCxIF correspondiente en el registro de estado 1 (TIM1_SR1) se establecerá en "1", lo que indica que el valor de recuento se ha capturado en el registro de captura / comparación (TIM1_CCRx).
    Inserte la descripción de la imagen aquí
    Si el indicador CCxIF en el registro de estado 1 (TIM1_SR1) se establece en "1" y se produce otro evento de captura, el CCxOF en el registro de estado 2 (TIM1_SR2) se establecerá en 1, para indicar que se ha producido un evento de captura repetido.
    Inserte la descripción de la imagen aquí

2. Introducción al modo de captura de entrada

En el modo de captura de entrada, cuando se detecta el flanco correspondiente en la señal ICi, el valor actual del contador se bloquea en el registro de captura / comparación
(TIM1_CCRx). Cuando ocurre un evento de captura, se establece la bandera CCiIF correspondiente (registro TIM1_SR).
Si se establece el bit CCiIE del registro TIM1_IER, es decir, se habilita la interrupción, se generará una solicitud de interrupción. Si el
indicador CCiIF ya está alto cuando ocurre un evento de captura , el indicador de captura repetida CCiOF (registro TIM1_SR2) se establece en 1. Escribir CCiIF = 0
o leer los datos capturados almacenados en el registro TIM1_CCRiL puede borrar CCiIF. Escriba CCiOF = 0 para borrar CCiOF.
El siguiente ejemplo muestra cómo capturar el valor del contador en el registro TIM1_CCR1 en el flanco ascendente de la entrada TI1. Los pasos son los siguientes:

  1. Seleccione un terminal de entrada válido: Por ejemplo, TIM1_CCR1 está conectado a la entrada TI1, por lo que
    CC1S = 01 está escrito en el registro TIM1_CCR1 . En este momento, el canal se configura como una entrada y el registro TIM1_CCR1 pasa a ser de solo lectura.
  2. Según las características de la señal de entrada TIi
    , el tiempo de filtrado del filtro de entrada correspondiente se puede configurar configurando el bit ICiF en el registro TIM1_CCMRi . Suponiendo que la señal de entrada tiembla dentro de un máximo de 5 ciclos de reloj, debemos configurar el
    ancho de banda del filtro para que sea más largo que 5 ciclos de reloj; por lo tanto, podemos muestrear 8 veces continuamente para confirmar la verdadera transición de borde en TI1, es decir,
    en TIMi_CCMR1 Escriba IC1F = 0011 en el registro En este momento, la señal será
    válida sólo si se muestrean continuamente 8 señales TI1 idénticas (la frecuencia de muestreo es f MASTER).
  3. Seleccione el flanco de conversión efectivo del canal TI1 y escriba CC1P = 0 (flanco ascendente) en el registro TIM1_CCER1.
  4. Configure el preescalador de entrada. En este ejemplo, queremos que la captura ocurra en cada momento de transición de nivel válido, por lo que el
    preescalador está deshabilitado (escriba IC1PS = 00 en el registro TIM1_CCMR1).
  5. Configure CC1E = 1 en el registro TIM1_CCER1 para permitir que el valor del contador de captura se capture en el registro de captura.
  6. Si es necesario, habilite las solicitudes de interrupción relacionadas estableciendo el bit CC1IE en el registro TIM1_IER.
    Cuando ocurre una captura de entrada:
    ● Cuando ocurre una transición de nivel válida, el valor del contador se transfiere al registro TIM1_CCR1.
    ● La bandera CC1IF está activada (bandera de interrupción). Cuando se han producido al menos 2 capturas consecutivas y no se ha borrado
    CC1IF , CC1OF también se establece en 1.
    ● Si se establece el bit CC1IE, se generará una interrupción.
    Para hacer frente al desbordamiento de captura (bit CC1OF), se recomienda leer los datos antes de leer la bandera de recaptura. Esto es para evitar perder la
    información de recaptura que se puede generar después de que se lea la bandera de desbordamiento de captura y antes de que se descarguen los datos. leer.
1) Medición de la señal de entrada PWM

Este modo es un caso especial del modo de captura de entrada, excepto por las siguientes diferencias, el funcionamiento es el mismo que el modo de captura de entrada:
● Dos señales ICI se asignan a la misma entrada TIi.
● Los flancos válidos de las dos señales ICi tienen polaridades opuestas.
● Una de las señales TIiFP se utiliza como señal de entrada de disparo y el controlador del modo de disparo está configurado para restablecer el modo de disparo.

2) Ejemplo de medición de período de la señal PWM

Por ejemplo, puede medir el período (registro TIM1_CCR1) y el ciclo de trabajo (registro TIM1_CCR2) de la entrada de señal PWM en TI1 de la siguiente manera. (Depende de la frecuencia de f MASTER y del valor del prescaler)

  1. Seleccione la entrada válida de TIM1_CCR1: configure CC1S = 01 en el registro TIM1_CCMR1 (seleccione TI1).
  2. Seleccione la polaridad válida de TI1FP1 (utilizada para capturar datos en TIM1_CCR1 y borrar el contador): configure CC1P = 0 (
    válido en flanco ascendente ).
  3. Seleccione la entrada válida de TIM1_CCR2: configure CC2S = 10 en el registro TIM1_CCMR2 (seleccione TI1FP2).
  4. Seleccione la polaridad válida de TI1FP2 (captura de datos en TIM1_CCR2): configure CC2P = 1 (flanco descendente válido).
  5. Seleccione una señal de entrada de disparo válida: configure TS = 101 en el registro TIM1_SMCR (seleccione TI1FP1).
  6. Configure el controlador del modo de disparo para restablecer el modo de disparo: establezca SMS = 100 en TIM1_SMCR.
  7. Habilitar captura: configure CC1E = 1 y CC2E = 1 en el registro TIM1_CCER1.
    Inserte la descripción de la imagen aquí

3. El proceso general de inicialización de la medición de captura de entrada

  1. Configure el canal de entrada específico, los dos bits CCxS [1: 0] del registro del modo de captura / comparación (TIM1_CCMRx)
    Inserte la descripción de la imagen aquí
  2. Establezca la frecuencia de muestreo de la señal y el filtro, es decir, ICxF [3: 0] bits del registro del modo de captura / comparación (TIM1_CCMRx)
    Inserte la descripción de la imagen aquí
  3. Establezca la polaridad del borde de la señal, que es para configurar el bit CCxP del registro de habilitación de captura / comparación (TIM1_CCERx)
    Inserte la descripción de la imagen aquí
  4. Establezca el factor de asignación previa de la señal, que son los bits IC1PSC [1: 0] del registro del modo de captura / comparación (TIM1_CCMRx)
    Inserte la descripción de la imagen aquí
  5. Habilite la función de captura, que consiste en configurar el bit CCxE del registro de habilitación de captura / comparación (TIM1_CCERx)
    Inserte la descripción de la imagen aquí

4. Código de referencia

Dos métodos de inicialización:

/****************************************************************/
//TIM1功能初始化函数my_init(),无形参,无返回值
/****************************************************************/
void my_init(void)
{
   //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  TIM1_CCMR1|=0x01;
  //2.配置信号边沿极性为TI1F或TI2F的低电平或下降沿“CC1P=1”
   TIM1_CCER1&=0xFD;    //上升沿
   
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  TIM1_CCMR2|=0x02;
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  TIM1_CCER1|=0x20; 
   
   
  //5.配置采样率为主时钟频率,无滤波器“IC1F[3:0]=0000”
  TIM1_CCMR1&=0x0F;
  //6.配置输入/捕获1通道预分频器因子为8分频“IC1PSC[1:0]=11”
  TIM1_CCMR1|=0x0C;
  //7.使能TIM1_CH1输入捕获功能“CC1E=1”
  TIM1_CCER1|=0x01;
  //8.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;

}

/****************************************************************/
//TIM1功能初始化函数TIM1_init(),无形参,无返回值
/****************************************************************/
void TIM1_init(void)
{
  //1.CC1通道被配置为输入,IC1映射在TI1FP1上“CC1S[1:0]=01”
  // 0x000000001 : CC1通道被配置为输入,IC1映射在TI1FP1上;
  TIM1_CCMR1|=0x01;
  
  //2.配置TI1FP1信号边沿极性为上升沿“CC1P=0”
  // 0x11111101 : 捕获发生在TI1F或TI2F的上升沿;
  TIM1_CCER1&=0xFD;
  
  //3.CC2通道被配置为输入,IC2映射在TI1FP2上“CC2S[1:0]=10”
  // 0x00000010 : CC2通道被配置为输入,IC1映射在TI2FP2上;
  TIM1_CCMR2|=0x02;
  
  //4.配置TI1FP2信号边沿极性为下降沿“CC2P=1”
  // 0x00100000 : 1:捕获发生在TI1F或TI2F的下降沿
  TIM1_CCER1|=0x20; 
  
  //5.配置触发输入信号为TI1FP1,“TS[2:0]=101”
  // 0x01010000 : 选择用于选择同步计数器的触发输入,滤波后的定时器输入1(TI1FP1)
  TIM1_SMCR|=0x50;
  
  //6.配置触发模式为复位触发,“SMS[2:0]=100”
  // 0x00000100 : 复位模式 – 在选中的触发输入(TRGI)的上升沿时重新初始化计数器,并且产生一个更新寄存器的信号
  TIM1_SMCR|=0x04;
  
  //7.使能TIM1计数器功能“CEN=1”
  TIM1_CR1|=0x01;
  
  //没有设置在外部触发寄存器(TIM1_ETR)中的采样频率
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44751294/article/details/110685476
Recomendado
Clasificación