PWM no STM32F103C8T6 – Controle de brilho de LED

LED variando brilho com PWM

O que é PWM?

O PWM (Pulse Width Modulation, ou Modulação por Largura de Pulso) é uma técnica utilizada em sistemas eletrônicos e embarcados para o controle da potência média entregue a uma carga por meio de sinais digitais comutados em alta frequência.

Em vez de gerar uma tensão analógica contínua, um circuito eletrônico alterna o sinal entre dois estados lógicos discretos (alto e baixo) em alta frequência, mantendo o período fixo e variando apenas a largura dos pulsos dentro de cada ciclo.

A carga não responde ao valor instantâneo do sinal, mas sim ao valor médio resultante dessa comutação, que depende da razão entre o tempo em nível lógico alto e o período total do sinal.

Essa razão é denominada duty cycle e representa o principal parâmetro de controle do PWM, sendo responsável por definir a quantidade de energia transferida para a carga em cada ciclo.

Devido a essa característica, o PWM é amplamente utilizado em aplicações como controle de brilho de LEDs, controle de velocidade de motores DC, fontes chaveadas e sistemas de controle de potência em geral.

Duty Cycle (ciclo de trabalho)

PWM gráfico

Montagem do circuito

Observação: Neste exemplo o LED foi utilizado sem resistor limitador, pois já há limitação no hardware utilizado. Em aplicações reais, recomenda-se o uso de resistor (ex: 220Ω).

LED conectado STM32 PWM

Configuração no STM32CubeIDE

Passo 1 — Clock do sistema

Configure o clock para 72MHz utilizando o PLL interno.

Clock STM32 72MHz

Passo 2 — Selecionar pino PWM

Configure o pino PA8 como TIM1_CH1.

PA8 PWM

Passo 3 — Configuração do PWM

Configuração PWM

Frequência do PWM:


F_PWM = 72MHz / ((72 + 1) * (999 + 1)) ≈ 986 Hz
        

Ou seja, uma frequência próxima de 1 kHz, que é o objetivo desta configuração.

O PWM é resultado de duas etapas: primeiro o prescaler reduz a frequência do clock, depois o ARR define o período do sinal, resultando na frequência final do PWM.

Entendendo os valores

Código completo (PWM com fade)


#include "main.h"
#include "tim.h"
#include "gpio.h"

TIM_HandleTypeDef htim1;

int main(void)
{
    HAL_Init();
    SystemClock_Config();

    MX_GPIO_Init();
    MX_TIM1_Init();

    // Inicia PWM no canal 1
    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

    while (1)
    {
        // Aumenta brilho
        for (uint16_t i = 0; i < 1000; i++)
        {
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, i);
            HAL_Delay(5); // Ajuste para controlar velocidade
        }

        // Diminui brilho
        for (int i = 999; i >= 0; i--)
        {
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, i);
            HAL_Delay(5); // Ajuste para controlar velocidade
        }
    }
}
        

Como funciona

O timer gera o sinal PWM automaticamente.

HAL_TIM_PWM_Start() inicia o PWM no pino.

__HAL_TIM_SET_COMPARE() altera o duty cycle, controlando o brilho do LED.

Conclusão

O PWM é uma técnica fundamental em sistemas eletrônicos, permitindo o controle eficiente de potência por meio de sinais digitais, sem a necessidade de geração de tensões analógicas contínuas.

Neste artigo, foi apresentado o princípio de funcionamento do PWM, incluindo a forma como a comutação de sinais digitais resulta em uma tensão média equivalente aplicada à carga, além do conceito de duty cycle como principal variável de controle.

Também foi demonstrado como o STM32F103C8T6 utiliza periféricos de temporizador (timers) para gerar sinais PWM em hardware, garantindo precisão, estabilidade e baixa carga de processamento.

Esse princípio é amplamente aplicado em sistemas reais, especialmente em controle de motores, fontes chaveadas, automação e dispositivos de potência.

Com esse conhecimento, o próximo passo é a aplicação do PWM em cargas mais complexas, como motores DC e sistemas de controle dinâmico de velocidade e potência.

Próximo passo: evoluir no STM32

O curso STM32 para Iniciantes foi desenvolvido para ajudar estudantes e profissionais a iniciarem no desenvolvimento de sistemas embarcados utilizando microcontroladores da família STM32.

Você vai aprender GPIO, ADC, PWM, UART, SPI, I2C, CAN, timers e muito mais.

👉 Acesse agora:

Ver curso STM32 para Iniciantes