

O maior inimigo do conhecimento não é a ignorância, mas sim a ilusão de que conhecemos. (Stephen Hawking)

CONTROLE PWM
PWM que significa Modulação de largura de Pulso (Pulse Width Modulation), é um dos assuntos bastante interessantes a serem abordados devido a sua alta aplicação em vários projetos, e para se ter uma ideia digo-lhes que um projeto que fiz recentemente, que consistia na construção de um robô que se equilibrava sobre duas rodas (baseado na ideia do Segway), necessitou deste mesmo assunto quando precisava controlar a velocidade de rotação dos motores conforme as variações angulares do meu robô. Bom, esse foi um projeto mais complicado, no entanto a aplicação do PWM pode ser bastante interessante e simples quando a inserimos, por exemplo, no controle da luminosidade de um LED sem que haja a ação de um componente externo como um potenciômetro ou um sensor LDR. Enfim, depois de tanta conversa vamos entender o que faz o PWM. Este método consiste basicamente em gerar uma variação de tensão conforme a DDP aplicada em pontos (gerada por uma bateria, por exemplo) e assim limitar a velocidade de um motor ou a luminosidade de um LED, por exemplo. Então imagine, se eu tenho um motor que possui uma velocidade máxima de rotação de 70 RPM, o que eu posso fazer normalmente é liga-lo a uma tensão (a especificada no motor) e fazer com que ele gire o eixo nesta velocidade, correto? Bom, mas com o PWM eu posso gerar uma tensão abaixo da especificada e fazer com que o eixo gire a uma velocidade inferior a 70 RPM. Outra coisa importante é saber que o PWM é um sinal digital e por isso gera uma onda quadrada com momentos de nível baixos e altos. Enquanto ao tempo de mudança de estado (baixo – alto), é totalmente possível mudá-lo, afinal é através disso que vem as variações de tensão. Para entender melhor vamos ilustrar essa situação. Observe essa primeira imagem:
Esta imagem ilustra uma onda de PWM simétrica onde o tempo de nível alto é igual ao tempo de nível baixo. Quando isso acontece, é gerado uma tensão média em relação à DDP aplicada. Por exemplo, se eu aplico uma DDP de 5V (0V Ground) e tenho um sinal PWM simétrico será gerada uma tensão média aproximadamente igual a 2,5V.
Por outro lado pode-se ocorrer o seguinte:
Neste caso temos tempos diferentes, o nível alto permanece por menos tempo enquanto o baixo está ali por um tempo maior. Quando isso ocorre teremos uma tensão que não é a média (2,5V), mas sim uma abaixo da média que nesse caso poderia ser 1,5V ou até mesmo o próprio 0V, por exemplo, considerando que estamos aplicando 5V com 0V Ground.
Mas também temos outra situação:
Que é quando o tempo de nível alto é maior que o tempo de nível baixo. Assim já dá pra entender que o que acontece aqui é o oposto do exemplo acima pois teremos uma tensão acima da média que poderia ser 3,4V ou o próprio 5V.
Então, depois destes exemplos entendemos que com a variação da frequência que o PWM trabalha (que chamamos também de Duty Cycle), ocorre juntamente uma variação da tensão elétrica. É importante ressaltar que esse método é como se fosse um liga-desliga de uma chave gerando tensão média, abaixo ou acima da média. É importante saber também que a nível de código só é possível modificar o tempo de largura de cada pulso, enquanto a frequência não, pois é uma propriedade física de um objeto.
Agora que entendemos um pouco sobre PWM, vamos abordar esse assunto dentro do microcontrolador. No PIC, o PWM é modificado pelo TIMER2, ou seja, o trabalho do PWM é feito por interrupções dentro do PIC, um liga-desliga mesmo, literalmente.
As demais coisas nós abordaremos nas configurações do nosso código. Vamos abrir nosso compilador e vamos selecionar o PIC 18F2550 mas não vamos fazer as configurações de sempre para sairmos da mesma coisa e entendermos que o mesmo trabalho pode ser feito com outras configurações. Siga as seguintes configurações:
1 – Selecione uma frequência de 8MHz
2 – Para essa frequência devemos selecionar um clock que esteja nessa faixa, portanto selecione a penúltima opção.
1 – Desabilite o MasterClear
2 – E como não vamos trabalhar com o PLL, vamos desabilitá-lo.
1 – Essa opção é a que nos dá acesso as configurações do PWM
2 – Nesse campo selecionamos qual pino vamos usar para saída dos pulsos do PWM. Esse microcontrolador possui dois pinos e para ele vamos selecionar o CCP1
3 – Marcamos a opção de trabalho que é a PWM
4 – Definimos a frequência do PWM. Vamos selecionar uma frequência de 1000 Hz.
5 – Duty Cycle é ciclo de trabalho do nosso PWM, através dele podemos regular a tensão de saída do PWM pois este regula o tempo de mudança de um nível para outro.
6 – Na aba Code você verá que o Duty Cycle é totalmente configurável.
Pronto, PWM configurado. Simples, não é?
No nosso código, como exemplo, vamos mostrar o efeito que o Duty Cycle produz modificando as ondas quadradas e o tempo de um nível para o outro, mas antes vamos ver como fica as ligações elétricas dentro do ISIS 7.
O osciloscópio você encontra facilmente da opção Virtual Instruments Mode que já comentamos em aulas anteriores. A ligação desse painel será feita no pino CCP1 conforme nossas configurações dentro do compilador.
Dentro do nosso código vamos inserir uma variável contadora logo acima das configurações automáticas do PIC Wizard.
int i;
Agora nas configurações nós vamos recortar a linha correspondente ao Duty Cycle. Essa aqui:
set_pwm1_duty(10);
Agora vamos inserir nosso While(). Dentro do While vai ficar o seguinte:
While(TRUE)
{
for(i=10; i<=100; i=i+10)
{
set_pwm1_duty(i);
delay_ms(100);
}
}
O que nós queremos mostrar são as variações que a onda quadrada irá sofrer e essas variações serão mostradas no osciloscópio.
Compile o código, carregue-o no ISIS e veja a onda quadrada sofrendo as alterações. Com isso estamos gerando variações de tensão e essas tensões estão saindo diretamente desse mesmo pino em que está ligado o painel. Bons estudos pessoal!



