Guia Prático para Interrupções no STM32: Teoria & Aplicação
Domine a Captura de Entrada no STM32 e Meça Frequência
A captura de entrada (Input Capture) em microcontroladores STM32
Famí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. é uma técnica essencial para medição precisa de frequência em aplicações como controle de motores, análise de sensores e sistemas de comunicação. Este artigo combina teoria, configuração prática, exemplos de código e técnicas avançadas para dominar o assunto, incluindo tratamento de overflow, cálculos robustos e otimizações.
Índice🔗
1. Funcionamento do Input Capture no 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.
2. Configuração do Temporizador
Modo encoder em temporizadores do STM32: Controle preciso de motoresExplore a teoria e prática do modo encoder no STM32. Aprenda a configurar e interpretar sinais, otimizando o controle de motores com exemplos reais. para Captura de Entrada
3. Métodos de Cálculo de Frequência
4. Exemplo Prático com Tratamento de Overflow
5. Técnicas Avançadas: Filtro, Resolução e Overflow
6. Solução de Problemas Comuns
Funcionamento do Input Capture no STM32🔗
O Input Capture registra o valor do contador (CNT) do temporizador no instante em que uma borda (subida/descida) é detectada no sinal externo. Isso é possível graças a:
- Canais de captura: Até 4 canais por temporizador (ex: TIM2_CH1).
- Registradores CCR: Armazenam o valor de CNT durante a borda.
- Interrupções: Alertam o sistema quando uma captura ocorre.
Configuração do Temporizador para Captura de Entrada🔗
Passo a Passo:
1. Habilitar 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. via RCC.
2. Configurar GPIO
Configurando 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. como entrada alternada (AF) para o canal 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..
- Prescaler
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.: Ajusta a resolução temporal (ex: 79 para clock de 1 MHz). - Período (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.): Define o valor máximo do contador (ex: 0xFFFF para 16 bits).
- Selecionar borda (subida/descida).
- Ativar filtro digital para redução de ruído.
5. Habilitar interrupções para processamento em tempo real.
Exemplo de Inicialização (CubeMX + HAL
Usando 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.):
TIM_HandleTypeDef htim2;
void MX_TIM2_Init(void) {
htim2.Instance = TIM2;
htim2.Init.Prescaler = 79; // Clock de 80 MHz / 80 = 1 MHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 0xFFFF;
HAL_TIM_IC_Init(&htim2);
TIM_IC_InitTypeDef sConfigIC;
sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
}
Métodos de Cálculo de Frequência🔗
Método 1: Período entre Duas Bordas
1. Capturar CCR1 e CCR2 em bordas consecutivas.
2. Calcular o período:
3. Frequência:
Método 2: Contagem de Pulsos em Janela Fixa
Usar um segundo temporizador para definir uma janela de tempo (ex: 1 segundo) e contar bordas dentro dela.
Exemplo Prático com Tratamento de Overflow🔗
Implementação com Ajuste de Overflow:
volatile uint32_t icValue1 = 0, icValue2 = 0;
volatile uint8_t captureIndex = 0;
volatile uint32_t frequency = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM2) {
if (captureIndex == 0) {
icValue1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
captureIndex = 1;
} else {
icValue2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
// Tratamento de overflow
uint32_t diff;
if (icValue2 > icValue1) {
diff = icValue2 - icValue1;
} else {
diff = (htim->Instance->ARR - icValue1) + icValue2 + 1;
}
frequency = 1000000 / diff; // Para f_timer = 1 MHz
captureIndex = 0;
}
}
}
Técnicas Avançadas: Filtro, Resolução e Overflow🔗
1. Filtro Digital:
Configure ICFilter (ex: 0x4) para ignorar pulsos menores que 4 ciclos de clock.
Mede período e 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. usando dois canais simultaneamente.
3. Slave Mode:
Sincroniza 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. para medições complexas.
4. Tratamento de Overflow:
Ajuste matemático para contas diferenças quando o contador reinicia.
Resolução Máxima:
Para clock de 80 MHz e prescaler
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. = 0:
Solução de Problemas Comuns🔗
| Problema | Causa Provável | Solução |
|---|---|---|
| Leituras inconsistentes | Ruído no sinal | Aumentar filtro digital |
| Frequência zero | Sem bordas detectadas | Verificar polaridade da captura |
| Overflow do contador | Sinal muito lento | Aumentar ARR ou usar temporizador de 32 bits |
| Valores negativos | Ordem de captura invertida | Verificar ordem de CCR1 e CCR2 |
Dica Prática: Use um osciloscópio para validar o sinal de entrada e verifique a configuração do prescaler
Entendendo os temporizadores no STM32Descubra como configurar temporizadores STM32 para gerar PWM, medir intervalos e capturar eventos com exemplos práticos e dicas de troubleshooting./ARR para evitar saturação.
Conclusão🔗
A medição de frequência via Input Capture no 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. é uma técnica versátil e precisa, ideal para aplicações críticas. Combinar a configuração adequada do temporizador, tratamento de overflow e filtragem de ruído garante resultados confiáveis. Os exemplos e métodos apresentados fornecem um caminho claro para implementação em projetos reais, enquanto as técnicas avançadas permitem otimização para cenários complexos.
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
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás