Buscar

DESAFIO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

DESAFIO 
Sinal PWM com microcontrolador
Com a frequência de oscilador de 20MHz, o ciclo de máquina será rápido demais para operar com prescaler de 1.1
PR2 = 20MHz /(10kHz . 4 . 1) -1
PR=499
O valor máximo e de 255, logo, à próxima opção será o precaler de 1:4.
PR2=20MHz/(10kHz . 4 . 4) -1
PR2=124
O que esta dentro dos limites de valor do registrador, e apresentará uma precisão maior que o prescaler configurado para 1:16, cujo valor de PR2 seria de 30,25 e, além do arredondamento, seria um valor baixo demais resultando em intervalos ligeiramente distantes da frequência esperada 10 kHz.
Uma vez determinado o valor do registrador PR2, o qual controla a frequência, deve-se determinar os valores de duty cycle,que deverá variar entre 0 a 100% (k = 1)
Rpwm = 1. 20MHz/(10kHz . 4)
Rpwm = 500
É possível utilizar a mesma fórmula para determinar o incremento de valor a cada 10% de aumento de velocidade:
Rpwm = 0,1 . 20MHz/(10kHz . 4) = 50
Com esses valores em mãos, é possível redigir as duas funções:
#define DUTY_INC 50
Void PWM_CONFIG()
{
 PR2 = 124;
CCPR1L = 0;
CCP1Y = 0;
TRISC2 = 0;
T2CONbits,T2CKPS = 0b01;
TMR2ON = 1;
CCP1CONbits.CCP1M = 0b1100;
 }
Void PWM_DUTY(usigned int DUTY)
[
DUTY = DUTY DUTY_INC;
CCP1Y = DUTY & 0b1;
DUTY DUTY >> 1;
CCP1X = DUTY & 0b1;
CCPR1L = DUTY >> 1;

Continue navegando