Prévia do material em texto
1. O controle de potência é importante, pois permite alterar o funcionamento da carga acionada.
Qual é a principal vantagem oferecida pela modulação por largura de pulso (PWM) utilizada pelos sistemas microcontrolados?
Permite regular a tensão utilizando os mesmo níveis lógicos.
· Os sistemas digitais trabalham com níveis lógicos bem definidos: alto e baixo. O PWM permite que esse tipo de sistema possa interagir de forma mais dinâmica com uma carga que permite diferentes níveis de intensidade. A frequência, nesse caso, pode ser alterada enquanto o ciclo de trabalho é alterado para modificar a amplitude média. Apesar disso, o PWM tem suas limitações e, entre outros problemas, o chaveamento em frequências elevadas pode criar ruídos pelo circuito, além de não ter a mesma precisão de outras técnicas lineares de controle.
2. O segredo de um bom microcontrolador está em proporcionar grande flexibilidade, além do poder de processamento com custos, tamanho, consumo e preços mais reduzidos. Assim, é prática comum o compartilhamento de funções entre diferentes módulos com mecanismos de operação similares ou complementares.
Para produzir um sinal de PWM simples, um microcontrolador deve dispor principalmente de:
temporizadores.
· Temporizadores para controlar o ciclo de trabalho e a frequência do sinal, junto do controle de alguma saída digital, são os requisitos fundamentais para produzir um PWM. Apesar de possível, não há necessidade de sinalizar as mudanças do ciclo ou qualquer outro evento durante o PWM. Já os módulos de captura e comparação podem estar presentes no microcontrolador e até no mesmo módulo do PWM, o que não é uma regra. Já os somadores são completamente dispensáveis para essa função.
3. Considere um microcontrolador com ciclo de máquina de 4 pulsos rodando com um oscilador de 20MHz e registradores de 8 bits.
Qual será a menor frequência possível para um sinal de PWM caso a contagem do temporizador associado seja escalável em até 64 vezes?
305Hz.
· fpwm = fosc/(pcm . fd . C)
· Fosc = 20MHz
pcm = 4
fd = 64
C = 2^8 = 256
· fpwm = 20MHz/(4 . 64 . 256)
fpwm = 305Hz
4. Considerando o PIC16F877A, que utiliza temporizador Timer 2 de 8 bits e módulo CCP com PWM de 10 bits, operando com clock de 4 MHz, determine qual dos algoritmos a seguir produzirá um PWM com ciclo de trabalho de 30% e frequência de 2kHz?
TRISC2 = 0;
PR2 = 124;
CCPR1L = 37;
CCP1CONbits.CCP1X = 1;
CCP1CONbits.CCP1Y = 0;
T2CONbits.T2CKPS = 0b01;
T2CONbits.TMR2ON = 1;
CCP1CONbits.CCP1M = 0b1111;
5. A partir de um PWM, a depender da carga, a intensidade percebida será similar a de uma tensão constante de valor médio equivalente ao PWM produzido. A partir do código de configuração a seguir, considerando um PIC16F877A, com clock de 20MHz e alimentação de 5V, determine a tensão média esperada na carga e qual a frequência do sinal gerado.
PR2 = 99;
CCPR1L = 70;
CCP1X = 0;
CCP1Y = 0;
TRISC2 = 0;
T2CONbits.T2CKPS = 0b00;
TMR2ON = 1;
CCP1CONbits.CCP1M = 0b1100;
3,5V e 50kHz.
· O Timer está configurado para um prescaler de 1:1 (T2CKPS = 0b00).
· E os registradores que compõem o duty cycle têm um valor em conjunto de: 280 (CCPR1L : CCP1X : CCP1Y).
fpwm = fosc/[(PR2 + 1) . 4 . T2PRE]
fpwm = 20MHz/[(99 + 1) . 4 . 1]
fpwm = 20MHz/400
fpwm = 50kHz
Rpwm = k .fosc/(fpwm . T2PRE)
· Isolando o valor de k:
k = Rpwm . fpwm . T2PRE/fosc
k = 280 . 50kHz . 1/20MHz
k = 0,7
· Tensão média corresponde a:
Vout = k . Vp = 0,7 . 5V = 3,5V
Desafio
Desenvolva um código para variar entre 0 e 100% da tensão de saída com intervalos de 10% a uma frequência de 10kHz.
Separe o código em duas funções: a primeira de configuração inicial do PWM e a segunda para modificar o ciclo de trabalho a partir de um parâmetro de valor inteiro entre 0 e 10 para indicar a velocidade desejada.
Resposta:
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
PR2 = 499
O valor máximo é de 255, logo, a próxima opção será o prescaler de 1:4.
PR2 = 20MHz/(10kHz . 4 . 4) - 1
PR2 = 124
O que está 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 de 10kHz.
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 e 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;
CCP1X = 0;
CCP1Y = 0;
TRISC2 = 0;
T2CONbits.T2CKPS = 0b01;
TMR2ON = 1;
CCP1CONbits.CCP1M = 0b1100;
}
void PWM_DUTY(unsigned int DUTY)
{
DUTY = DUTY * DUTY_INC;
CCP1Y = DUTY & 0b1;
DUTY = DUTY >> 1;
CCP1X = DUTY & 0b1;
CCPR1L = DUTY >> 1;
}