Delays Precisos em STM32: Técnicas com Temporizadores
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 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 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 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ó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 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 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:
Tipo | Bits | Características | Aplicações Típicas |
---|---|---|---|
Básico (TIM) | 16 | Sem saídas PWM complementares | Delays, temporização simples |
GP (Geral) | 16/32 | Múltiplos canais PWM, suporte a encoder | Controle de motores, medição |
Avançado | 16/32 | Dead-time insertion, burst mode | Inversores, sistemas de potência |
Exemplos de Uso:
- Um TIM2 (GP) pode gerar 4 sinais PWM
Gerando 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. para controlar um motor brushless.
- Temporizadores
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. de 32 bits são ideais para medições de longa duração com alta precisão.
Arquitetura e Funcionamento Interno🔗
A estrutura interna de um timerUsando 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:
Componentes-Chave:
1. PrescalerUsando 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:
2. Counter: Incrementa/decrementa com base no clock ajustado.
3. Auto-Reload RegisterUsando 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 precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados.:
Modos de Operação🔗
Os temporizadores STM32Usando 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
- Up/Down Counter: Incrementa até o ARR
Gerando 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. (overflow) ou decrementa até zero (underflow), gerando interrupções.
- Aplicações: Delays precisos
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados., base de tempo para tarefas periódicas.
Modo PWM
- Gera sinais com ciclo de trabalho
Gerando 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. ajustável.
- Equação do Duty Cycle
Gerando 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.:
- 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
- Verifique se o clock do timer
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. está habilitado em
RCC->APB1ENR
ouRCC->APB2ENR
. - Confira se
HAL_TIM_Base_Init()
foi chamado antes deHAL_TIM_Base_Start_IT()
.
- Garanta que o valor de
CCR
não excedaARR
.Gerando 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.
- Verifique a polaridade do sinal (
TIM_OCPOLARITY_HIGH/LOW
).
3. Interrupções Não Ocorrem:
- Habilite a interrupção no NVIC
Interrupções no STM32: Conceitos básicos e implementaçãoDescubra como configurar interrupções no STM32 com NVIC e EXTI. Aprenda com exemplos práticos a melhorar a resposta em tempo real de sistemas embarcados.:
HAL_NVIC_EnableIRQ(TIMx_IRQn)
. - Implemente o callback correto (ex:
HAL_TIM_PeriodElapsedCallback()
).
Dicas de Otimização
- Use DMA
Configurando 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. para atualizar CCR/ARR sem CPU, ideal para sequências complexas de PWM
Gerando 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..
- Aproveite o burst mode em timers
Usando temporizadores para criar delays precisosDescubra como configurar temporizadores STM32 para criar delays precisos com polling, interrupções e DMA, otimizando energia em sistemas embarcados. avançados para atualizar múltiplos parâmetros simultaneamente.
Considerações Finais🔗
Dominar os temporizadoresUsando 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:
- Consulte o Reference Manual do seu modelo específico de STM32
O que é STM32 e por que usá-lo?Descubra os principais benefícios, arquitetura ARM Cortex-M e aplicações práticas dos microcontroladores STM32. Comece a inovar agora..
- Experimente modos híbridos (ex: PWM
Gerando 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. + DMA + Interrupção).
- Utilize ferramentas de debug como STM32CubeMonitor para visualizar sinais em tempo real.
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🔗
- STM32 Documentation: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html#documentation
- STM32 Official Website: www.st.com/en/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus.html
- STM32 Step-by-Step Guide: wiki.st.com/stm32mcu/wiki/STM32StepByStep:Getting_started_with_STM32_:_STM32_step_by_step
- STM32 Tutorials: embedded-lab.com/blog/stm32-tutorials/
- STM32CubeMX User Manual: www.st.com/resource/en/user_manual/dm00104712-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf