Baixe o app para aproveitar ainda mais
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;
Compartilhar