PWM com PIC
Page 1 of 5
MICROCONTROLADORES PIC – PRÁTICA - PARTE 1 CONTROLE PWM COM PIC
PWM POR SOFTWARE COM PIC16F84 Este exemplo prático mostra a construção de circuito para controle PWM (Pulse Width Modulation), utilizando um PIC16F84 com manipulação dos pulsos via software. Um controle PWM permite variar a velocidade de um motor DC, por exemplo, através de pulsos. O “tempo” deste pulso determinará a velocidade do motor. Quanto maior for a duração de T1 e menor a duração de T2, maior será a velocidade. Quanto menor a duração de T1 e maior a duração de T2, menor será a velocidade. Vale salientar que os pulsos têm sempre o valor máximo da tensão aplicada (menos as quedas no circuito), proporcionando assim alto torque, mesmo em baixas velocidades. Veja a figura abaixo.
Sendo assim, vemos que este método de controle é o ideal para aplicações de motores CC para a tração de pequenos robôs, braços mecânicos e outros tipos de automatismos.
CIRCUITO PRÁTICO
http://arnerobotics.com/eletronica/Microcontrolador_PIC_pratica_1.htm
3/11/2009
PWM com PIC
Page 2 of 5
O circuito da figura acima poderá ser montado em um pront-o-board , placa padrão ou outro método que achar melhor. A idéia deste circuito é ser apenas um teste. Não preciso dizer que após a montagem do mesmo, seja qual for ela, você deve rever atentamente todas as ligações, evitando assim danos aos componentes, principalmente ao PIC, caso algo tenha sido ligado erro. No mundo "real" as coisas queimam!. Se você é adepto dos simuladores não tem muito com o que se preocupar, a não ser com o que esta perdendo: "o prazer inestimável de ter feito uma montagem e vê-la funcionando!!!". O transistor pode esquentar um pouco, dependendo do motor utilizado. O uso de um radiador de calor pode ajudar. Os botões BT1 e BT2 permitem o controle da velocidade. Ao se pressionar BT1 o motor aumentará de velocidade até seu limite máximo. BT2 permite reduzir esta velocidade. Os tempos mínimos e máximos para T1 e T2 neste circuito PWM estão entre 10ms a 70ms, aproximadamente. A alimentação para o circuito deve ser separada. O microcontrolador precisa de 5 volts. Para o motor, a alimentação deve estar de acordo com o tipo utilizado. Lembrando que um circuito PWM podem gerar interferências muito fortes e os microcontroladores são sensíveis a estas interferências. Separar a alimentação ajudará a impedir os efeitos destas interferências.
O PROGRAMA O programa foi desenvolvido utilizando a Linguagem Assembly Microchip e compilado no MPASM Microchip (http://www.microchip.com). Para grava-lo você poderá utilizar o projeto do gravador PROGPICII, presente neste site ou qualquer outro que você disponha, desde que para microcontroladores PIC. Através do set de instruções detalhado na segunda parte da teoria também oferecida neste site, você poderá estudar e compreender melhor o funcionamento do programa. O código fonte foi ricamente comentado, para demonstrar o seu funcionamento. Eu não vou "pegar na sua mão" para guiá-lo. Estudar é preciso e o "caminho das pedras" já foi dado! Código fonte – PWM_CTRL.ASM ;************************************************************** ;* Controle PWM para motores DC ;* ;* Marcio Jose Soares - 01/10/2002 ;************************************************************** ; ;************************************************************** ;definições do programa ;************************************************************** radix dec ;padrao->valores decimal include
;inclue arquivo __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC ;configura bits PICRES PICINT PICRAM MOTOR CHV1 CHV2 LED MAX MIN
equ equ equ equ equ equ equ equ equ
0x00 0x04 0x0C 0 1 2 3 0x59 0X0C
;endereço de reset ;endereço de interrupções ;endereço da RAM ;i/o do motor ;i/o da chave para aumentar a velocidade do motor ;i/o da chave para diminuir a velocidade do motor ;i/o do LED ;valor máximo para PWM ;valor mínimo para PWM
; ;************************************************************** ;variaveis do programa ;************************************************************** org PICRAM T1 res 1 ;variável para tempo T2 res 1 ;variável para tempo _TMAX res 1 ;variável para trabalhar tempo máximo _TMIN res 1 ;variável para trabalhar tempo mínimo ; ;************************************************************** ;area do reset ;**************************************************************
http://arnerobotics.com/eletronica/Microcontrolador_PIC_pratica_1.htm
3/11/2009
PWM com PIC
org PICRES goto inicio
Page 3 of 5
;reset ;desvia do endereco 0x04 - interrupção
; ;************************************************************** ;area das interrupções ;************************************************************** org
PICINT
retfie
;toda interrupção aponta para este endereço ;retorno de interrupção
; ;************************************************************** ;inicio do programa ;************************************************************** inicio: movlw 0x00 movwf INTCON
;ajuste para os bits INTCON ;desabilita ints
clrf clrf
PORTA PORTB
;limpa portas
bsf
STATUS,RP0
;seleciona banco 1 para options e tris
movlw 0x06 movwf TRISA
;ajusta os bits em A como saída ;exceto RA1 e RA2, entrada para chave
movlw 0x00 movwf TRISB
;ajusta os bits em B como saída ;não usados
bcf
STATUS,RP0
;volta ao banco 0... (padrão do reset)
movlw movwf
MAX _TMAX
;move valor para _TMAX ->70ms
movlw movwf
MIN _TMIN
;move valor para _TMIN ->10ms
; ;************************************************************** ;loop principalo do programa ;************************************************************** loop: call
TECLA
;verifica Tecla
PWM: bsf call bcf call goto
PORTA,MOTOR TMIN PORTA,MOTOR TMAX loop
;liga pulso ;aguarda ;desliga pulso ;aguarda
; ;************************************************************** ;subrotina para testar tecla ;************************************************************** TECLA: nop nop nop
;perde 3 ciclos
btfss PORTA,CHV2 goto TC2
;testa chave 2 ;pressionada
nop nop nop
;perde 3 ciclos
btfss PORTA,CHV1 goto TC1
;testa chave 1 ;pressionada
goto
;nenhuma chave pressionada
TC3
;
http://arnerobotics.com/eletronica/Microcontrolador_PIC_pratica_1.htm
3/11/2009
PWM com PIC
Page 4 of 5
;************************************************************** ;subrotina para incrementar velocidade ;************************************************************** TC1: nop nop nop
;perde 3 ciclos ;
movf _TMIN,W andlw 0xFF xorlw MAX
;carrega com valor mínimo atual ;faz and com W ;faz xor com W, se = , bit Z em STATUS = 1
btfss STATUS,Z goto TC1_1 bsf PORTA,LED goto TC3
;testa resultado, zero valor mínimo = máximo ;incrementa velocidade ;velocidade no máximo, não incrementa mais ;e liga led
TC1_1: incf _TMIN,F decf _TMAX,F goto TC3
;incrementa registro ;decrementa registro ;volta
;************************************************************** ;subrotina para decrementar velocidade ;************************************************************** TC2: nop nop nop
;perde 3 ciclos
movf _TMIN,W andlw 0xFF xorlw MIN
;carrega com valor mínimo atual ;faz and com W ;faz xor com W, se = , bit Z em STATUS = 1
btfss STATUS,Z goto TC2_1 goto TC3
;testa se resultado zero ;decrementa velocidade ;velocidade no mínimo, não decrementa mais
TC2_1: decf _TMIN,F incf _TMAX,F bcf PORTA,LED TC3: bcf STATUS,Z return
;incrementa registro ;decrementa registro ;desliga led ;garante bit Z como 0 ;retorna
; ;************************************************************** ;subrotina para temporização do PWM ;************************************************************** TMIN: movf _TMIN,W movwf T1 goto car_1
;carrega W com _TMIN ;carrega T1 com W ;inicia temporização
TMAX: movf _TMAX,W movwf T1 goto car_1
;carrega W com _TMAX ;carrega T1 com W ;inicia temporização
; ;************************************************************** ;subrotina para temporização do PWM ;************************************************************** car_1: movlw 0xff movwf T2 dec_1: decfsz T2,1 goto dec_1 decfsz T1,1
;carrega W com 255 ;carrega T2 com 255 ;decrementa T2 ;255 x T1 vezes ;decrementa T1
http://arnerobotics.com/eletronica/Microcontrolador_PIC_pratica_1.htm
3/11/2009
PWM com PIC
goto retlw
car_1 0x00
Page 5 of 5
;volta a carregar T2 ;retorna
; ;************************************************************** ;fim do programa ;************************************************************** end
CONCLUSÃO O microcontrolador PIC16F84 apesar de “pequeno” demonstra grandes possibilidades. O controle de cargas com PWM é só uma delas. Muito se pode conseguir fazer com um microcontrolador PIC. Tudo depende apenas da sua criatividade e força de vontade.
Material para o circuito PWM Semicondutores 1 1 1 1
– – – –
PIC16F84A/4MHz – microcontrolador TIP112A – transistor NPN darlington 1N4001 – diodo retificador Led comum
Resistores (1/8 Watt, 5%) 1 – 10K – Marrom, preto e laranja 2 – 330R – Laranja, laranja e marron 2 – 4K7 – Amarelo, violeta e vermelho
Capacitores 1 – 100nF – cerâmico 2 – 33pF – cerâmico
Diversos 3 - chaves “push-botton” 1 – crystal 4MHz 1 – motor DC 3 a 6V 2 – suportes para 4 pilhas pequenas Pront-o-board ou placa padrão para a montagem, fios para ligação, etc
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor.
http://arnerobotics.com/eletronica/Microcontrolador_PIC_pratica_1.htm
3/11/2009