Controle STM32 Universal: Sinais IR Personalizados

Criar um controle remoto universal com STM32O que é STM32 e por que usá-lo?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. envolve a combinação de comunicação infravermelha (IR), manipulação de sinais digitais e gerenciamento de protocolos. Este artigo explora desde a teoria do funcionamento do IR até a implementação prática, incluindo decodificação de sinais, armazenamento de códigos e transmissão. Você aprenderá a integrar hardware e software para construir um dispositivo personalizável capaz de controlar múltiplos aparelhos, com exemplos de código, configuração de periféricos e otimizações para alcance e confiabilidade.

Tabela de Conteúdo🔗

Fundamentos da Comunicação Infravermelha🔗

A comunicação IR utiliza pulsos de luz modulados em frequências entre 36-38 kHz para transmitir dados. A modulação permite distinguir o sinal de ruídos ambientais, enquanto protocolos como NEC e RC5 definem a estrutura dos pulsos.

Princípios Básicos

  • Modulação:

Sinais IR são modulados em 38 kHz (padrão para receptores como o TSOP38238) para evitar interferências. Por exemplo, o NEC usa pulsos de 38 kHz 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. de 50%.

  • Estrutura de um Frame:
$$ \text{Frame} = \text{Start Pulse} + \text{Endereço} + \text{Comando} + \text{Repeat Code (opcional)} $$
  • Start Pulse (NEC): 9 ms de HIGH + 4.5 ms de LOW.
  • Bits: Representados por pulsos de 560 µs (0) ou 1680 µs (1).
sequenceDiagram participant Controle participant Receptor Controle->>Receptor: Start Pulse (9ms HIGH) Controle->>Receptor: Endereço (16 bits) Controle->>Receptor: Comando (16 bits) Note over Receptor: Decodifica e executa ação

Por que 38 kHz?

  • Sensibilidade do Receptor: Receptores comerciais são sintonizados para esta frequência.
  • Redução de Interferências: Filtra ruídos de luz ambiente e fontes eletromagnéticas.

Materiais e Componentes Necessários🔗

Componente/FerramentaDescrição
STM32F4xxMicrocontrolador com timer e GPIO.
Módulo IR ReceptorEx: TSOP38238 (38 kHz).
LED IR TransmissorEx: IR333C (940 nm).
BotõesPara seleção de comandos/dispositivos.
Resistor LimitadorCalculado para corrente segura no LED IR.
Protoboard e JumpersMontagem inicial do circuito.
OsciloscópioValidação de sinais PWM e temporização.
Fonte de Alimentação3.3V ou 5V, conforme o circuito.

Configuração do Hardware🔗

Circuito de Transmissão

$$ R = \frac{V_{cc} - V_{led}}{I} = \frac{3.3V - 1.2V}{0.02A} \approx 105\,\Omega \quad (\text{Usar 120Ω ou 150Ω}) $$

Diagrama de Conexões

flowchart TD A[STM32: Pino PWM] --> B[Resistor] B --> C[Transistor (2N2222)] C --> D[LED IR] D --> E[Terra]

Desenvolvimento do Firmware🔗

Recepção com Input Capture

Configure 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. em modo Input CaptureCaptura de entrada e medição de frequência com STM32Captura de entrada e medição de frequência com STM32Aprenda a configurar e usar o Input Capture do STM32 para medir frequências com precisão. Descubra métodos, tratamento de overflow e técnicas avançadas. para medir a duração dos pulsos:

TIM_IC_InitTypeDef sConfigIC = {0};
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // Habilita interrupção

Transmissão com PWM

Gere a portadora de 38 kHz usando 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.:

// Configuração para 38 kHz (prescaler = 0, ARR = 210 @ 80 MHz)
TIM_OC_InitTypeDef sConfigPWM = {0};
sConfigPWM.OCMode = TIM_OCMODE_PWM1;
sConfigPWM.Pulse = 105; // Duty cycle 50%
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigPWM, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);

Protocolos de Sinalização: NEC, RC5 e Outros🔗

Decodificação do Protocolo NEC

1. Aguarda o start pulse (9 ms HIGH + 4.5 ms LOW).

2. Lê 32 bits (endereço + comando + inverso do comando).

3. Valida checksum (byte3 = ~byte2).

Exemplo de Código:

void NEC_Decode(uint32_t data) {
    uint8_t address = (data & 0x0000FF00) >> 8;
    uint8_t command = data & 0x000000FF;
    if ((~(data >> 16) & 0xFF) != command) {
        return; // Erro de checksum
    }
    // Executa ação
}

Transmissão de Sinais Personalizados

Envio de um código NEC via PWMGerando 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.:

void IR_Send_NEC(uint32_t data) {
    // Start pulse
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
    HAL_Delay(9);
    HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
    HAL_Delay(4.5);
    // Envia 32 bits
    for (int i = 31; i >= 0; i--) {
        if ((data >> i) & 0x01) {
            HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
            delay_us(560);
            HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
            delay_us(1680);
        } else {
            HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
            delay_us(560);
            HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
            delay_us(560);
        }
    }
}

Armazenamento de Códigos em Memória Não Volátil🔗

Use a Flash interna do STM32O que é STM32 e por que usá-lo?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. para salvar códigos IR:

HAL_FLASH_Unlock();
FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3);
HAL_FLASH_Program(TYPEPROGRAM_WORD, 0x08060000, nec_code);
HAL_FLASH_Lock();

Testes, Debug e Otimização🔗

Verificação do Sinal PWM

Otimização de Alcance

  • Problema: Baixa corrente no LED IR.

Solução: Aumente a corrente com transistores de alto ganhoCalibração de ADC no STM32: Melhore a precisão de leituras analógicasCalibração de ADC no STM32: Melhore a precisão de leituras analógicasDescubra métodos avançados para calibração de ADC em microcontroladores STM32, combinando teoria e prática para garantir precisão em aplicações críticas. (ex: BC547) ou múltiplos LEDs em série.

Filtro de Software para Ruído

if (pulse_width > 2000 || pulse_width < 300) {
    return; // Ignora pulsos inválidos
}

Considerações Finais e Próximos Passos🔗

Este projeto demonstra a capacidade do STM32O que é STM32 e por que usá-lo?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. em integrar comunicação IR, gerenciamento de protocolos e armazenamento de dados. Para expandir funcionalidades:

1. Adicione um display OLEDUsando displays OLED com STM32 via I2C ou SPIUsando displays OLED com STM32 via I2C ou SPIDescubra como integrar e otimizar displays OLED com STM32 utilizando I2C e SPI, com dicas práticas para hardware, código e troubleshooting. para seleção de dispositivos.

2. Implemente suporte a protocolos avançados como RC6 ou Samsung.

3. Explore comunicação bidirecional usando receptores IR para aprendizado de comandos.

Combinando hardware robusto e firmware eficiente, você pode criar soluções personalizadas para automação residencial, controle industrial e muito mais.

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