Muitos dispositivos PIC possuem módulos PWM internos na própria pastilha que possibilitam gerar sinais de PWM sem esforço computacional e sem Firmware extra. Entretanto, todos os PICs mais antigos e alguns novos modelos, como o PIC12F675, não trazem o módulo PWM interno em sua pastilha. Este artigo descreve um método para se implementar um controlador PWM em qualquer microcontrolador PIC, da Microchip, até mesmo em modelos que não possuem o módulo de PWM interno construído por hardware. Este artigo foi baseado no Application Note AN654 da Microchip.
Obs. O artigo de nosso colaborador (veja seu perfil) é de 2006)
PWM é a sigla de Pulse Wídth Modulation, ou seja, Modulação por Largura de Pulsos.
Trata-se de um método consagrado para controlar a energia e consequentemente a potência entregue à carga em dispositivos que trabalham em sistemas de Corrente Contínua (DC).
Quanto maior a duração do Tempo Ligado (tempo em que o PWM permanece em On - a partir daqui denominado Ton), maior a energia entregue à carga.
PWMs são, por definição, sistemas de frequência (f) e período (T) constantes e de Largura de Pulso (ciclo ativo) ajustável. Denominando de Toff o tempo em que a carga é mantida desativada, o período total de nosso PWM será:
T = Ton + Toff
Define-se Ciclo Ativo (Duty Cycle D.C. ) por:
D.C.= Ton/(Ton + Toff)
A figura 1 ilustra a forma de onda típica de um sistema PWM digital.
A solução proposta foi testada e desenvolvida num microcontrolador PIC12F675 (sem módulo PWM interno) e baseia-se em Firmware.
Este foi escrito totalmente em Linguagem Assembly, uma vez que a intenção inicial de utilizar Linguagem C revelou-se incapaz de proporcionar a velocidade necessária de processamento para gerar o PWM e ler os dois botões (UP e Down) sem causar efeitos de ”flicker" na onda retangular gerada.
Sobre a velocidade de processamento, é importante frisar que a opção feita foi a de usar o oscilador RC interno do PIC12F675, cuja frequência de clock é fixa e igual a 4 MHz.
Como os Microcontroladores PIC dividem internamente o clock por 4, temos um clock efetivo interno de valor 1 MHZ, o que nos dá um Ciclo de Máquina de duração 1 us (um microssegundo).
Com este ciclo de máquina, a opção foi de uma solução de software otimizada para a arquitetura do PIC, segundo o Aplicattion Note da Mícrochip, o que proporcionou um desempenho bastante positivo no PWM.
O sistema utiliza-se da interrupção do TMRO (Timer-Zero) cujo prescaler foi ajustado para 1:2, ou seja, a cada 2 us temos uma interrupção de timer 0 e o fluxo do programa será desviado para o endereço 0x04 (endereço do vetor de interrupção do PIC12F675).
Na rotina de interrupção temos a estrutura de software da seguinte forma:
MOVF pwmdesired , W
ADDWF PCL,F
bsf LED
bsf LED
bsf LED
bsf LED
bsf LED
bsf LED
O registrador pwmdesired armazena o valor desejado de Ton. A seguir, este valor é movido para o W e somado ao PCL que produz um salto relativo para a instrução que mantém o PWM pelo tempo correto na saída do microcontrolador.
O uso de interrupção do Timer 0 possibilita independência para leitura dos botões UP e DOWN sem prejudicar a geração da onda do PWM. O botão UP incrementa o ciclo ativo e o botão DOWN decrementa.
O PWM inicializa sempre em zero, ou seja, ao reestabelecer a energia começa sempre desativado.
Outro detalhe é o uso dos resistores de pull-up internos ao Microcontrolador PIC em questão, o que dispensou o uso externo. Também não foi utilizado nenhum oscilador de clock externo ao chip, nem cristal de quartzo, tendo-se optado pelo uso do oscilador RC interno, o que reduziu a quantidade de componentes externos.
Também é importante abordar algumas considerações sobre o estágio de potência. A escolha foi por um transistor MOS de Efeito de Campo (MOSFET) da International Rectifier, o IRLZ44N. A letra ”L" no prefixo IRLZ indica que seu gate é adequado para controles lógicos e que o mesmo pode ser saturado com tensões de 5 V o que não ocorre com os tipos IRF ou IRFZ.
Nestes, um valor tão baixo de tensão pode não levá-lo à saturação, fazendo o MOSFET operar na região linear, o que poderia provocar um considerável aquecimento do componente, de acordo com o datasheet do transistor IRLZ44.
Operando na condição de Corte e Saturação, o aquecimento é mínimo e não ocorre perda de energia por dissipação de potência na junção Dreno - Source.
Assim, o transistor pode manipular correntes altíssimas (de até 47 A segundo o datasheet do fabricante), exibindo (quando saturado) uma resistência DRENO-SOURCE ( Rds ) de apenas Rds = 0,022 Ω. A tensão máxima admissível entre D e S é de 55 volts.
A escolha do resistor de Gate do MOSFET também é importante: a capacitância interna entre G e S é elevada (da ordem de 1700 pF ) e um resistor de valor elevado formaria com esta um RC com constante de tempo considerável, prejudicando o disparo rápido para corte e saturação deste transistor.
Por outro lado, o menor valor de resistor admissível pelo PIC é de 200 Ω, pois os Microcontroladores PIC são especificados para uma corrente máxima de saída de 25 mA em 5 Volts de alimentação, segundo o datasheet do microcontrolador PIC12F6xx. O Valor escolhido foi de 200 Ω.
Também é necessário acrescentar um diodo zener entre o gate do MOSFET e a porta de saída do PIC, para evitar que spikes rápidos de tensão venham a atingir o microcontrolador, o que provocaria a queima do mesmo.
O diodo zener (1N4733A) foi inserido entre um resistor de 22 Ω e outro de 180 Ω associados em série.
O Código-fonte para gravar o PWM no PIC12F675 pode ser baixado diretamente no site da Microchip.
Ao efetuar a gravação o leitor deve configurar os fuse-bits da seguinte maneira:
watchdog_timer = ON
powerup_timer = ON
brownoutdetector = ON
Code_protect = ON
oscillator = INTRC_GP4 (o pino P4 usado Como I/O digital)
masterclear_reset = OFF
Esta Configuração de fusíveis de gravação é automaticamente carregada quando o código .HEX também for carregado, pois já foi definida no cabeçalho do programa através da diretiva _CONFIG 314C
Caso o leitor queira adaptar este mesmo firmware para outro microcontrolador da Mícrochip (por exemplo,, para 0 PIC16F84) basta mudar duas linhas: trocar a linha CBLOCK 0x0Z0 por CBLOCK 0x0C; e trocar o arquivo de #include <p12F675.inc> por #include <p1684.inc>. O compilador utilizado para gerar o .HEX deste programa foi o MPLAB, que pode ser obtido gratuitamente no site da Microchip.
Conclusão
Este software é capaz de produzir na saída de qualquer Microcontrolador um PWM de ciclo ativo variável digitalmente através de dois botões, com 255 passos de ajuste (256 steps, incluindo 0 Valor 0).
O consumo de memória do processador é inferior a 200 words (Cerca de 20% da capacidade de um PIC12F675). A frequência do PWM gerado gira em torno de 2,2 kHz.
O período medido é de aproximadamente 450 us. O uso de um MOSFET lógico de potência (IRLZ44) da International Rectiñer garante que elevadas correntes podem ser controladas, o que torna este dispositivo ideal para controle de 1lminosidade de lâmpadas e de velocidade de motores DC.
Referências
Ropcke, OIe.AN654,ApIicattion Note da Microchip (www.microchíp.com)
Zanco,Wagner. Microcontroladores PIC, Ed. Érica, 3 Edição
Souza, David José. Desbravando o PIC, 6 Edição, Ed. Érica
Pereira, Fabio. Microcontroladores PIC Técnicas Avançadas, Ed. Érica.
Fambrini, Francisco.Apostila sobre Linguagem Assembly, INTEP, edição do Autor
International Rectifien Datasheet do transistor IRLZ44
Microch¡p, Datasheet do microcontrolador PlCI2F6xx
(Publicado originalmente em 2006)