PWM– PIC 18F


Prof. Ilton L Barbacena

        2012.2
PWM – Pulse Width Modulation




• É o recurso mais usado dos módulos CCPs;
• Pode-se obter uma tensão analógica a partir
  de um sinal digital (DAC), naturalmente com
  utilização de filtros na saída;
                                            2 /99
PWM
                                          A tensão média será:




   Onde:
      V(t) = Vpulsos para   0<= t <=tp
      V(t) = 0       para   tp < t <= T




• A tensão média é diretamente proporcional ao
  duty cycle ou ciclo ativo.
                                                                 3 /99
PWM
• Para se obter um conversor digital analógico a partir do
  pino CCPx, basta implementar um sinal PWM e adicionar
  em sua saída um filtro passa baixa com frequência de
  corte menor que a própria frequência do PWM.
    – Supor um filtro RC, onde fcorte = 1 / (2*pi*R*C);
    – Neste caso, deve-se adotar sempre:


•   Quando não é necessária obter uma tensão média
    contínua, a implementação do filtro é descartada;
•   No caso de resistores de aquecimento ou motores DC o
    filtro é dispensável, uma vez que estes componentes já
    atuam como filtros, desde que a frequência do PWM não
    seja muito baixa.
                                                             4 /99
PWM - DAC




            5 /99
PWM com filtro RC




1 – Escolhe p/ gerar pulsos   2- Tensão de pico (5V)
3 – duty = 10%                4 – freq. Do PWM
                                                       6 /99
PWM com filtro RC




        Duty = 10%                                                       Duty = 70%

Veja alguns exemplos em:
http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf
http://aquaticus.info/pwm-sine-wave
http://www.wpi.edu/Pubs/E-project/Available/E-project-042711-190851/unrestricted/PWM_Techniques_final.pdf


                                                                                                            7 /99
PWM com filtro RC




  Filtro RC com 2 polos                  Sinal de entrada pwm
                                         de 19kHz e duty de 70%


Veja o resultado da simulação com um sinal PWM aplicado em
utilizando um filtro RC com 2 estágios, para geração de um sinal
senoidal.
                                                                  8 /99
PWM com filtro LC




                                                Sinal de entrada pwm
  Filtro LC com 2 polos                         de 19kHz e duty de 80%


• Veja o resultado da simulação com um sinal PWM aplicado em utilizando um
  filtro LC com 2 estágios, para geração de um sinal senoidal.
• Em não havendo necessidade de obter tensão média contínua, utiliza-se o
  PWM sem filtros (aquecimento e acionamento de motores), desde que a
  frequência do PWM não seja muito baixa.
                                                                         9 /99
Diagrama simplificado
            do PWM no PIC 18F




O registrador de duty cycle possui 10 bits: 8 em CCPxL e 2 em CCPxCON
                                                                        10 /99
PWM no PIC 18F




                 11 /99
Timer2 no PIC 18F




                                             Timer 2
                                             Contador de 8 Bits




       Calculadora timer2: http://pictimer.picbingo.com/
http://www.best-microcontroller-projects.com/pic-timer-2.html
                                                                  12 /99
Timer2 no PIC 18F
• Timer2 é um contador de 8 bits;
• Usa somente o clock interno ou o cristal;
• Possui um prescaler (1, 4, 16 e 16) e um postscaler
  (1,2,3,..,15, 16), ambos configuráveis;
• A saída do Timer2 pode ser associada ao modo MSSP
  (Master Synchronous Serial Port Module) e PWM;
• TMR2 é um registrador contador de leitura e gravação de 8
  bits;
• PR2 é um registrador de leitura e gravação de 8 bits e sempre
  inicializado a 0xFFh no Reset.
• O registrador contador TMR2 do Timer2 incrementa de 0 até
  o valor gravado em PR2 (8 bits);
• Quando PR2=0xFF ou 255, ocorre a contagem máxima;
• Observar que o postscaler de timer 2 não afeta o PWM;

                                                                  13 /99
Timer2 no PIC 18F




•   Fout - A frequência de saída após a divisão /overflow / .
•   Tout - O tempo de ciclo após a divisão.
•   Fclk é a frequência do cristal. Não se deve usar oscilador externo.
•   Contagem - Um valor numérico para ser colocado                        para   obter   a
    frequência desejada - fout.
•   (PR2 - TMR2) - O número de vezes que o contador irá contar.
                                                                                             14 /99
Exemplo de Timer2 no PIC 18F


Exemplo: Cálculo de uma interrupção a cada 1s com TIMER2 (1Hz)


Assumiremos os seguintes parâmetros:
Cristal=8MHz, Prescaler 1:1, Postscaler 1:16, TMR2=0 e PR2=255

    Count = clock / (4*prescaler*(PR2-TMR2) * Postscaler * Fout)

    Count = 8M / (4*1*(255-0)*16*1)
    Count = 488

    Para se obter uma interrupção a cada 1s dever utilizar uma variável
    global Count, iniciando com zero, e o tempo de 1s vai ocorrer quando
    o valor atingir 488.

                                                                           15 /99
Exemplo de Timer2 no PIC 18F




http://pictimer.picbingo.com/   488 x 2048000nS = 1s   16 /99
PWM no PIC 18F
• Nesta família existem 2 canais PWM (CCP1 e CCP2) / 2 pinos de saída;
• Resolução máxima de 10 bits, logo o duty cycle pode variar de 0 a 1023;
• O ciclo ativo do sinal é definido pelo valor armazenado em CCPRxL (8 bits) e
  CCPxCON (bit DCxB1 e bit DCxB2);
• O período do PWM é controlado diretamente pelo Timer 2, através do
  registrador PR2;
 •   O contador do timer2, TMR2, começa de zero e vai incrementando até quando
     TMR2 = PR2, voltando para zero novamente. Neste momento quando o timer2 é
     ressetado, o postscaler é incrementado. Quando o postscaler, contador de estouros,
     atingir o valor programado, é gerado uma interrupção associado a timer2;
 •   O postscaler varia de 1 a 16;
 •   O período e a frequência PWM é dado por:
                      Tpwm = (PR2 + 1) * 4 * Tosc * (Prescaler do TMR2)       (1)
                              PWMfreq = 1 / Tpwm
     No PIC não se define duty cycle, mas o tempo de pulso em nível alto, que é
     dado por:

                                                                              (2)
                                                                                      17 /99
PWM no PIC 18F
• A largura do pulso é ajustada em 10 bits: 8 bits do registrador
  CCPxL e 2 bits do registrador CCPxCON (os bits 5 e 4);
• O duty depende exclisivamente dos 10 bits (8 em CCPxL e 2 em
  CCPxCON);
• Veja que PR2 (8 bits), que controla o Tpwm, é multiplicado por 4
  para poder igualar-se aos 10 bits. Com isso, se PR2 for ajustado
  para um valor menor que 255, será necessário um valor menor
  que 10 bits, para atingir um PWM com 100% de duty;
• Observar que o postscaler de timer 2 não afeta o PWM;
• A resolução ou a quantidade máxima de bits para o PWM é dado
  por:


                                     Em bits       (3)

                                                                 18 /99
Exemplo de PWM no PIC 18F
• Supor um PWM de 20KHz, com um clock de 8MHz e prescaler do
  timer 2 de 1:1;



    De (1)                                                (4)




                                                          (5)




    Em (5), para fpwm = 10KHz , p=1 e clock=8MHz , teremos PR2 = 99 Hz



                                                                         19 /99
PWM no PIC 18F
• A resolução do sinal PWM é inversamente proporcional à
  frequência do sinal, ou seja, quanto maior a freq. PWM, menor
  será sua resolução;
• Com isso, para obter um sinal PWM com frequência maior, é
  necessário gravar o registrador PR2 com um valor menor.
• A resolução de 10 bits somente se consegue quando se grava em
  PR2 com o valor 0xFF. Para obter-se frequências maiores, é
  necessário diminuir este valor, diminuindo assim os o número de
  passos no ciclo ativo;


    Exemplos:
         http://www.todopic.com.ar/foros/index.php?topic=30740.0;wap2
    Atividade:
      gerar um PWM de 3KHz (fpwm = 3KHz) com duty variável de 20% a 80%.

                                                                           20 /99
Exemplo de PWM no PIC 18F
• Supor um PWM de 20KHz, com um clock de 8MHz, configurar os
  registradores;

   Calculadora de PWM para PIC:
          http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html




    Neste caso, é somente transcrever para o programa no PIC;

                                                                                           21 /99
Resolução de PWM no PIC 18F
• A resolução do sinal PWM é inversamente proporcional à
  frequência do sinal, ou seja, quanto maior a freq. PWM, menor
  será sua resolução;
• Com isso, para obter um sinal PWM com frequência maior, é
  necessário carregar o registrador PR2 com um valor menor.
• A resolução de 10 bits somente se consegue quando se carrega
  PR2 com o valor 0xFF. Para obter-se frequências maiores, é
  necessário diminuir este valor, diminuindo assim os o número de
  passos no ciclo ativo;




     Dados extraídos do manual do PIC18F4520 na pag. 147
                                                                22 /99
Atividade para PWM no PIC 18F
• Gerar um PWM de 20KHz, com um clock de 8MHz. Variar o duty
  proporcionalmente ao valor de tensão analógica presente em
  um potenciômetro conectado a uma entrada analógica;
• Mostra mudança no duty com as mudanças na posição do
  potenciômetro no LCD;
• Implementar o programa no simulador Proteus;
• Detalhar todas as considerações feitas na elaboração do
  programa;
• Entrega no dia 30/10 .
• Pode usar a calculadora, mas tem que explicar os resultados;
• Colocar identificações nos arquivos fontes e escrever no LCD o
  seu nome e data, no inicio do programa;

                                                               23 /99

Pwm pic 18 f

  • 1.
    PWM– PIC 18F Prof.Ilton L Barbacena 2012.2
  • 2.
    PWM – PulseWidth Modulation • É o recurso mais usado dos módulos CCPs; • Pode-se obter uma tensão analógica a partir de um sinal digital (DAC), naturalmente com utilização de filtros na saída; 2 /99
  • 3.
    PWM A tensão média será: Onde: V(t) = Vpulsos para 0<= t <=tp V(t) = 0 para tp < t <= T • A tensão média é diretamente proporcional ao duty cycle ou ciclo ativo. 3 /99
  • 4.
    PWM • Para seobter um conversor digital analógico a partir do pino CCPx, basta implementar um sinal PWM e adicionar em sua saída um filtro passa baixa com frequência de corte menor que a própria frequência do PWM. – Supor um filtro RC, onde fcorte = 1 / (2*pi*R*C); – Neste caso, deve-se adotar sempre: • Quando não é necessária obter uma tensão média contínua, a implementação do filtro é descartada; • No caso de resistores de aquecimento ou motores DC o filtro é dispensável, uma vez que estes componentes já atuam como filtros, desde que a frequência do PWM não seja muito baixa. 4 /99
  • 5.
  • 6.
    PWM com filtroRC 1 – Escolhe p/ gerar pulsos 2- Tensão de pico (5V) 3 – duty = 10% 4 – freq. Do PWM 6 /99
  • 7.
    PWM com filtroRC Duty = 10% Duty = 70% Veja alguns exemplos em: http://ww1.microchip.com/downloads/en/AppNotes/00655a.pdf http://aquaticus.info/pwm-sine-wave http://www.wpi.edu/Pubs/E-project/Available/E-project-042711-190851/unrestricted/PWM_Techniques_final.pdf 7 /99
  • 8.
    PWM com filtroRC Filtro RC com 2 polos Sinal de entrada pwm de 19kHz e duty de 70% Veja o resultado da simulação com um sinal PWM aplicado em utilizando um filtro RC com 2 estágios, para geração de um sinal senoidal. 8 /99
  • 9.
    PWM com filtroLC Sinal de entrada pwm Filtro LC com 2 polos de 19kHz e duty de 80% • Veja o resultado da simulação com um sinal PWM aplicado em utilizando um filtro LC com 2 estágios, para geração de um sinal senoidal. • Em não havendo necessidade de obter tensão média contínua, utiliza-se o PWM sem filtros (aquecimento e acionamento de motores), desde que a frequência do PWM não seja muito baixa. 9 /99
  • 10.
    Diagrama simplificado do PWM no PIC 18F O registrador de duty cycle possui 10 bits: 8 em CCPxL e 2 em CCPxCON 10 /99
  • 11.
    PWM no PIC18F 11 /99
  • 12.
    Timer2 no PIC18F Timer 2 Contador de 8 Bits Calculadora timer2: http://pictimer.picbingo.com/ http://www.best-microcontroller-projects.com/pic-timer-2.html 12 /99
  • 13.
    Timer2 no PIC18F • Timer2 é um contador de 8 bits; • Usa somente o clock interno ou o cristal; • Possui um prescaler (1, 4, 16 e 16) e um postscaler (1,2,3,..,15, 16), ambos configuráveis; • A saída do Timer2 pode ser associada ao modo MSSP (Master Synchronous Serial Port Module) e PWM; • TMR2 é um registrador contador de leitura e gravação de 8 bits; • PR2 é um registrador de leitura e gravação de 8 bits e sempre inicializado a 0xFFh no Reset. • O registrador contador TMR2 do Timer2 incrementa de 0 até o valor gravado em PR2 (8 bits); • Quando PR2=0xFF ou 255, ocorre a contagem máxima; • Observar que o postscaler de timer 2 não afeta o PWM; 13 /99
  • 14.
    Timer2 no PIC18F • Fout - A frequência de saída após a divisão /overflow / . • Tout - O tempo de ciclo após a divisão. • Fclk é a frequência do cristal. Não se deve usar oscilador externo. • Contagem - Um valor numérico para ser colocado para obter a frequência desejada - fout. • (PR2 - TMR2) - O número de vezes que o contador irá contar. 14 /99
  • 15.
    Exemplo de Timer2no PIC 18F Exemplo: Cálculo de uma interrupção a cada 1s com TIMER2 (1Hz) Assumiremos os seguintes parâmetros: Cristal=8MHz, Prescaler 1:1, Postscaler 1:16, TMR2=0 e PR2=255 Count = clock / (4*prescaler*(PR2-TMR2) * Postscaler * Fout) Count = 8M / (4*1*(255-0)*16*1) Count = 488 Para se obter uma interrupção a cada 1s dever utilizar uma variável global Count, iniciando com zero, e o tempo de 1s vai ocorrer quando o valor atingir 488. 15 /99
  • 16.
    Exemplo de Timer2no PIC 18F http://pictimer.picbingo.com/ 488 x 2048000nS = 1s 16 /99
  • 17.
    PWM no PIC18F • Nesta família existem 2 canais PWM (CCP1 e CCP2) / 2 pinos de saída; • Resolução máxima de 10 bits, logo o duty cycle pode variar de 0 a 1023; • O ciclo ativo do sinal é definido pelo valor armazenado em CCPRxL (8 bits) e CCPxCON (bit DCxB1 e bit DCxB2); • O período do PWM é controlado diretamente pelo Timer 2, através do registrador PR2; • O contador do timer2, TMR2, começa de zero e vai incrementando até quando TMR2 = PR2, voltando para zero novamente. Neste momento quando o timer2 é ressetado, o postscaler é incrementado. Quando o postscaler, contador de estouros, atingir o valor programado, é gerado uma interrupção associado a timer2; • O postscaler varia de 1 a 16; • O período e a frequência PWM é dado por: Tpwm = (PR2 + 1) * 4 * Tosc * (Prescaler do TMR2) (1) PWMfreq = 1 / Tpwm No PIC não se define duty cycle, mas o tempo de pulso em nível alto, que é dado por: (2) 17 /99
  • 18.
    PWM no PIC18F • A largura do pulso é ajustada em 10 bits: 8 bits do registrador CCPxL e 2 bits do registrador CCPxCON (os bits 5 e 4); • O duty depende exclisivamente dos 10 bits (8 em CCPxL e 2 em CCPxCON); • Veja que PR2 (8 bits), que controla o Tpwm, é multiplicado por 4 para poder igualar-se aos 10 bits. Com isso, se PR2 for ajustado para um valor menor que 255, será necessário um valor menor que 10 bits, para atingir um PWM com 100% de duty; • Observar que o postscaler de timer 2 não afeta o PWM; • A resolução ou a quantidade máxima de bits para o PWM é dado por: Em bits (3) 18 /99
  • 19.
    Exemplo de PWMno PIC 18F • Supor um PWM de 20KHz, com um clock de 8MHz e prescaler do timer 2 de 1:1; De (1) (4) (5) Em (5), para fpwm = 10KHz , p=1 e clock=8MHz , teremos PR2 = 99 Hz 19 /99
  • 20.
    PWM no PIC18F • A resolução do sinal PWM é inversamente proporcional à frequência do sinal, ou seja, quanto maior a freq. PWM, menor será sua resolução; • Com isso, para obter um sinal PWM com frequência maior, é necessário gravar o registrador PR2 com um valor menor. • A resolução de 10 bits somente se consegue quando se grava em PR2 com o valor 0xFF. Para obter-se frequências maiores, é necessário diminuir este valor, diminuindo assim os o número de passos no ciclo ativo; Exemplos: http://www.todopic.com.ar/foros/index.php?topic=30740.0;wap2 Atividade: gerar um PWM de 3KHz (fpwm = 3KHz) com duty variável de 20% a 80%. 20 /99
  • 21.
    Exemplo de PWMno PIC 18F • Supor um PWM de 20KHz, com um clock de 8MHz, configurar os registradores; Calculadora de PWM para PIC: http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html Neste caso, é somente transcrever para o programa no PIC; 21 /99
  • 22.
    Resolução de PWMno PIC 18F • A resolução do sinal PWM é inversamente proporcional à frequência do sinal, ou seja, quanto maior a freq. PWM, menor será sua resolução; • Com isso, para obter um sinal PWM com frequência maior, é necessário carregar o registrador PR2 com um valor menor. • A resolução de 10 bits somente se consegue quando se carrega PR2 com o valor 0xFF. Para obter-se frequências maiores, é necessário diminuir este valor, diminuindo assim os o número de passos no ciclo ativo; Dados extraídos do manual do PIC18F4520 na pag. 147 22 /99
  • 23.
    Atividade para PWMno PIC 18F • Gerar um PWM de 20KHz, com um clock de 8MHz. Variar o duty proporcionalmente ao valor de tensão analógica presente em um potenciômetro conectado a uma entrada analógica; • Mostra mudança no duty com as mudanças na posição do potenciômetro no LCD; • Implementar o programa no simulador Proteus; • Detalhar todas as considerações feitas na elaboração do programa; • Entrega no dia 30/10 . • Pode usar a calculadora, mas tem que explicar os resultados; • Colocar identificações nos arquivos fontes e escrever no LCD o seu nome e data, no inicio do programa; 23 /99