Guia Completo dos Temporizadores STM32: PWM e Captura

Os temporizadores (Timers) são blocos de hardware essenciais nos microcontroladores STM32Famílias de microcontroladores STM32: Uma visão geralFamílias de microcontroladores STM32: Uma visão geralProfundo mergulho nas famílias STM32, explorando arquitetura, aplicações e desempenho. Descubra dicas e casos práticos para projetos embarcados., funcionando como "cronômetros programáveis" para sincronização precisa de eventos. Eles vão além de simples relógios internos, permitindo gerar pulsos PWM para controle de motores, medir intervalos de tempo com microssegundos de precisão, capturar eventos externos e até gerenciar transferências de dados via DMA. Este artigo mergulha na arquitetura, modos de operação, configurações e aplicações práticas, combinando exemplos de código e estratégias para troubleshooting.

Conteúdo🔗

1. Tipos de TemporizadoresUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. no STM32

2. Arquitetura e Funcionamento Interno

3. Modos de OperaçãoConfigurando e usando GPIOs no STM32Configurando e usando GPIOs no STM32Explore neste tutorial os fundamentos e configurações práticas dos GPIOs no STM32, com exemplos de LED, botões e modos alternativos.

4. Configuração Básica com HALUsando o DAC no STM32 para gerar sinais analógicosUsando o DAC no STM32 para gerar sinais analógicosAprenda a configurar e calibrar o DAC do STM32 para gerar sinais analógicos precisos. Descubra técnicas avançadas, exemplos práticos e dicas de otimização.

5. Exemplos Práticos Avançados

6. Modos Avançados: Encoder, DMAConfigurando e usando o ADC no STM32Configurando e usando o ADC no STM32Este tutorial para STM32 ensina a configurar o ADC via registradores e HAL, explicando calibração, DMA, filtragem e resolução de problemas práticos. e Comparação

7. Troubleshooting e Boas Práticas

Tipos de Temporizadores no STM32🔗

Os STM32 possuem três categorias principais de temporizadoresUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados., cada um com características específicas:

TipoBitsCaracterísticasAplicações Típicas
Básico (TIM)16Sem saídas PWM complementaresDelays, temporização simples
GP (Geral)16/32Múltiplos canais PWM, suporte a encoderControle de motores, medição
Avançado16/32Dead-time insertion, burst modeInversores, sistemas de potência

Exemplos de Uso:

Arquitetura e Funcionamento Interno🔗

A estrutura interna de um timerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. inclui componentes críticos para ajustar sua operação:

graph TD A[Clock Source] --> B[Prescaler] B --> C[Counter] C --> D[Auto-Reload Register] D -->|Overflow/Underflow| E[Interrupt/Event]

Componentes-Chave:

1. PrescalerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.: Divide a frequência do clock. Exemplo:

$$ \( f_{\text{efetiva}} = \frac{80\ \text{MHz}}{79+1} = 1\ \text{MHz} \). $$

2. Counter: Incrementa/decrementa com base no clock ajustado.

3. Auto-Reload RegisterUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. (ARR): Define o valor máximo do contador.

Equação do Período do TimerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.:

$$ \[ T_{\text{timer}} = \frac{(\text{ARR} + 1) \times (\text{Prescaler} + 1)}{f_{\text{clk}}} \] $$

Modos de Operação🔗

Os temporizadores STM32Usando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. suportam múltiplos modos de operação, adaptáveis a diferentes cenários:

Modo de Contagem Básica

Modo PWM

$$ \[ \text{Duty Cycle (\%)} = \frac{\text{CCR}}{\text{ARR} + 1} \times 100 \] $$
  • Aplicações: Controle de motores, dimming de LEDs.

Modo Input Capture

  • Registra o valor do contador em eventos externos (ex: bordas de subida).
  • Aplicações: Medição de frequência, largura de pulsos (ex: sensores ultrassônicos).

Modo Output Compare

  • Dispara ações quando o contador atinge um valor específico (CCR).
  • Aplicações: Geração de sinais não periódicos, sincronização de eventos.

Configuração Básica com HAL🔗

Exemplo: Configurando um Timer para PWM

TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void) {
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 7999;       // 80 MHz → 10 kHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 999;           // Período = 100 ms
    HAL_TIM_PWM_Init(&htim2);
    TIM_OC_InitTypeDef sConfigOC = {0};
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 500;             // Duty Cycle de 50%
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}

Exemplo: Medição de Frequência com Input Capture

TIM_HandleTypeDef htim_capture;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
    static uint32_t prev_capture = 0;
    uint32_t curr_capture = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
    float period = (curr_capture - prev_capture) * 1e-6; // Período em segundos (clock de 1 MHz)
    float frequency = 1 / period;
    prev_capture = curr_capture;
}

Exemplos Práticos Avançados🔗

Controle de Motor DC com PWM

// Ajuste dinâmico do duty cycle
void set_motor_speed(uint8_t percent) {
    uint32_t ccr_value = (percent * (htim2.Init.Period + 1)) / 100;
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, ccr_value);
}

Medição de Rotação com Encoder Ótico

TIM_Encoder_InitTypeDef encoder;
encoder.EncoderMode = TIM_ENCODERMODE_TI12; // Decodifica fase A e B
HAL_TIM_Encoder_Init(&htim3, &encoder);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
// Ler posição do encoder
int32_t position = __HAL_TIM_GET_COUNTER(&htim3);

Modos Avançados: Encoder, DMA e Comparação🔗

Atualização de PWM via DMA

// Buffer com valores de duty cycle pré-calculados
uint32_t duty_buffer[] = {300, 600, 900, 1200};
HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_1, duty_buffer, 4);

Modo Output Compare para Sincronização

// Configurar comparação no Canal 2
TIM_OC_InitTypeDef oc_config;
oc_config.OCMode = TIM_OCMODE_ACTIVE;
oc_config.Pulse = 400; // Disparar evento quando contador = 400
HAL_TIM_OC_ConfigChannel(&htim4, &oc_config, TIM_CHANNEL_2);
HAL_TIM_OC_Start(&htim4, TIM_CHANNEL_2);

Troubleshooting e Boas Práticas🔗

Problemas Comuns e Soluções

1. TimerUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. Não Inicia:

2. PWM com Duty CycleGerando sinais PWM com STM32 para controle de motoresGerando sinais PWM com STM32 para controle de motoresAprenda os fundamentos e técnicas avançadas do PWM em sistemas STM32, otimizados para controle preciso de motores DC e servos com códigos de exemplo. Inesperado:

3. Interrupções Não Ocorrem:

Dicas de Otimização

Considerações Finais🔗

Dominar os temporizadoresUsando temporizadores para criar delays precisosUsando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. do STM32 permite criar sistemas embarcados robustos e precisos, desde controles de motores em drones até sistemas de aquisição de dados industriais. Para avançar:

Com prática e exploração, você transformará esses blocos de hardware em aliados poderosos para seus projetos!

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados