segunda-feira, 21 de julho de 2014

Módulo PWM do PIC16F886

As funções utilizadas no modulo pwm serão descritas abaixo:

    setup_timer_2(mode, period, postscale):

Esta função configura o timer 2 para gerar o período do pwm.

Mode(prescaler): é o divisor do clock do processador, podendo assumir os valores:
  • T2_DISABLED
  • T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16

Period(PR2):Diferente do timer0 este é o valor de contagem máximo para ocorrer o overflow do timer, assim a contagem ocorre de 0 até PR2. Sendo um valor de 8 bits, decimal de 0 a 255.

Postscale: é um número de 1 à 16 que determina quantos overflows de temporizador deve ocorrer antes de uma interrupção: (1 significa uma vez, 2 significa duas vezes, uma assim por diante).(Não utilizado no calculo do periodo do pwm).

Para tanto a equação abaixo é utilizada para calcular o período da frequência do pwm.


    setup_ccp1(CCP_PWM):

Esta função configura o pino ccp1 como saída do pwm. Ver no datasheet a qual pino se refere.

    set_pwm1_duty (value):

Escreve o valor de 10 bits para o PWM para definir o duty cycle. Para tanto a equação abaixo define o valor do duty cycle.(Value deve ser um valor long).

CÓDIGO TESTADO:

#include <16f886.h>         // identifica microcontrolador alvo


#use delay (clock=8000000) // colocar internal ao inves de clock para oscilador interno
#fuses INTRC, NOWDT, NOPROTECT, NOBROWNOUT,PUT


void main()       // função principal
  {
    setup_oscillator(OSC_8MHZ);//somente chip com oscilador OSCCON   
   
    setup_timer_2(T2_DIV_BY_16, 124, 1);//aqui é configurado o periodo do pwm
    setup_ccp1(CCP_PWM);//porta ccp1 configurada como pwm
    set_pwm1_duty(100L);//duty cycle configurado para 20%, o L após o 100 é para   
                                 //definir o valor como Long
    
  while(1)         // para repetir bloco. Laço infinito.
    {
      
    }
  }

A partir do código acima, pode ser feito o calculo do periodo do pwm do mesmo, como é mostrado abaixo:

Seguindo, pode ser calculado o duty cycle do código acima, como mostra abaixo:


Atenção para o fato de que não há nada dentro do laço while, ou seja, sua rotina principal está sendo executada livremente enquanto o trecho acima gera o sinal de pwm.

Assim a forma de onda adquirida do pino ccp1 é mostrada na figura 1 abaixo:




Nenhum comentário:

Postar um comentário