PIC do Zero

Programação em C para Microcontroladores PIC

Aula 16 – PWM (Pulse Width Modulation)

Nesta aula vamos estudar PWM, uma técnica muito utilizada para controlar potência, brilho de LEDs, velocidade de motores e sinais proporcionais em sistemas embarcados e industriais.

1. O que é PWM?

PWM significa Pulse Width Modulation, ou Modulação por Largura de Pulso. Em vez de variar a tensão diretamente, o PIC liga e desliga rapidamente uma saída digital.

Saída digital comum:
0V ou 5V

Saída PWM:
liga e desliga rapidamente, criando um valor médio

2. Conceito de Duty Cycle

Duty Cycle é a porcentagem de tempo em que o sinal permanece ligado dentro de um ciclo.

Duty CycleResultado
0%Saída sempre desligada
25%Pouca potência
50%Metade da potência
75%Alta potência
100%Saída sempre ligada
Duty Cycle 25%:
ON  ┌─┐   ┌─┐   ┌─┐
OFF ┘ └───┘ └───┘ └───

Duty Cycle 50%:
ON  ┌──┐  ┌──┐  ┌──┐
OFF ┘  └──┘  └──┘  └──

Duty Cycle 75%:
ON  ┌───┐ ┌───┐ ┌───┐
OFF ┘   └─┘   └─┘   └─

3. PWM não é tensão analógica real

O PWM continua sendo um sinal digital. O que muda é o valor médio percebido pela carga. Um LED, por exemplo, aparenta ficar mais fraco ou mais forte conforme o duty cycle.

4. Aplicações do PWM

  • Controle de brilho de LEDs.
  • Controle de velocidade de motores DC.
  • Controle de potência em resistências.
  • Controle proporcional de válvulas.
  • Geração de sinais analógicos com filtro RC.
  • Fontes chaveadas e conversores DC-DC.

5. PWM no PIC

Muitos PICs possuem módulos CCP, que podem trabalhar em modo PWM. CCP significa Capture, Compare and PWM.

CCP1 → geralmente associado ao pino RC2
CCP2 → segundo canal PWM, quando disponível

6. Registradores envolvidos

RegistradorFunção
CCP1CONConfigura o módulo CCP1 em modo PWM
PR2Define o período do PWM
T2CONConfigura e liga o Timer2
CCPR1LDefine parte do duty cycle

7. Relação entre PWM e Timer2

O PWM do PIC normalmente utiliza o Timer2 como base de tempo. Por isso, a Aula 13 sobre temporizadores é fundamental para entender PWM.

PWM depende de:
Clock do PIC
Timer2
PR2
Prescaler
Duty Cycle

8. Configurando CCP1 em modo PWM

Para usar PWM no CCP1, configuramos o registrador CCP1CON.

CCP1CON = 0b00001100; // CCP1 em modo PWM

9. Configurando o Timer2

T2CON = 0b00000100; // Liga Timer2 com prescaler 1:1

10. Definindo o período com PR2

O registrador PR2 define o período do PWM.

PR2 = 255;

11. Definindo o Duty Cycle

O duty cycle pode ser ajustado alterando o valor de CCPR1L.

CCPR1L = 128; // Aproximadamente 50%

12. Código básico de PWM no PIC

#include <xc.h>

void main()
{
    TRISCbits.TRISC2 = 0; // RC2 como saída PWM

    PR2 = 255;
    CCP1CON = 0b00001100; // Modo PWM
    CCPR1L = 128;         // Duty em torno de 50%

    T2CON = 0b00000100;   // Liga Timer2

    while(1)
    {
        // PWM gerado automaticamente pelo hardware
    }
}

13. Controle de brilho de LED

Se ligarmos um LED ao pino PWM, podemos controlar seu brilho variando o duty cycle.

CCPR1L = 0;    // LED apagado
CCPR1L = 64;   // brilho baixo
CCPR1L = 128;  // brilho médio
CCPR1L = 255;  // brilho máximo

14. Integração ADC + PWM

Podemos usar um potenciômetro no ADC para controlar o duty cycle do PWM. Esse é um exemplo clássico de controle proporcional.

valor_adc = ler_adc();      // 0 até 1023
CCPR1L = valor_adc / 4;     // converte para 0 até 255

15. Exemplo: potenciômetro controlando brilho do LED

#include <xc.h>

unsigned int ler_adc()
{
    GO_nDONE = 1;
    while(GO_nDONE);
    return ((ADRESH << 8) + ADRESL);
}

void main()
{
    unsigned int valor_adc;

    TRISAbits.TRISA0 = 1; // AN0 entrada analógica
    TRISCbits.TRISC2 = 0; // RC2 saída PWM

    ADCON1 = 0x80;
    ADCON0 = 0x41;

    PR2 = 255;
    CCP1CON = 0b00001100;
    T2CON = 0b00000100;

    while(1)
    {
        valor_adc = ler_adc();
        CCPR1L = valor_adc / 4;
    }
}

16. Controle de motor DC

Para controlar motor com PWM, o PIC não deve ser ligado diretamente ao motor. É necessário usar um transistor, MOSFET, driver ou ponte H.

PIC PWM → Driver/MOSFET → Motor

17. Cuidados importantes

  • Não ligue motor diretamente no pino do PIC.
  • Use transistor, MOSFET ou driver apropriado.
  • Use diodo de proteção em cargas indutivas.
  • Escolha frequência PWM adequada para a aplicação.
  • Verifique o datasheet do PIC utilizado.

18. Aplicações industriais

O PWM é usado em controle de motores, inversores, controle de potência, controle de iluminação, válvulas proporcionais, aquecimento e automação de processos.

19. Exercícios

Exercício 1: O que significa PWM?

Pulse Width Modulation
Modulação por Largura de Pulso

Exercício 2: O que significa duty cycle de 50%?

A saída fica ligada metade do tempo e desligada metade do tempo.

Exercício 3: Qual timer normalmente é usado pelo PWM do PIC?

Timer2

Exercício 4: Por que não devemos ligar um motor diretamente no PIC?

Porque o pino do PIC não suporta a corrente exigida pelo motor.

20. Laboratório prático

Monte um potenciômetro no AN0 e um LED no pino RC2/CCP1. O objetivo é controlar o brilho do LED conforme a posição do potenciômetro.

Potenciômetro → AN0
PWM CCP1/RC2 → Resistor 330Ω → LED → GND

21. Resumo da Aula

  • PWM controla potência por largura de pulso.
  • Duty cycle define o tempo ligado do sinal.
  • Timer2 é a base do PWM em muitos PICs.
  • CCP1 pode gerar PWM por hardware.
  • ADC pode controlar o duty cycle.
  • PWM é muito usado em automação e controle.

Próxima Aula – Aula 17

Na próxima aula vamos estudar Comunicação Serial UART, utilizada para comunicação entre PIC, computador, módulos RS-232, RS-485, Bluetooth, GSM e outros dispositivos.