Você está na página 1de 7

MICROCONTROLADORES PIC CONTROLE PWM COM PIC

PWM POR SOFTWARE COM PIC16F84


Este exemplo prtico mostra a construo de circuito para controle PWM (Pulse Width
Modulation), utilizando um PIC16F84 com manipulao dos pulsos via software.
Um controle PWM permite variar a velocidade de um motor DC, por exemplo, atravs de
pulsos. O tempo deste pulso determinar a velocidade do motor. Quanto maior for a
durao de T1 e menor a durao de T2, maior ser a velocidade. Quanto menor a durao
de T1 e maior a durao de T2, menor ser a velocidade. Vale salientar que os pulsos tm
sempre o valor mximo da tenso aplicada (menos as quedas no circuito), proporcionando
assim alto torque, mesmo em baixas velocidades. Veja a figura abaixo.

Sendo assim, vemos que este mtodo de controle o ideal para aplicaes de motores CC
para a trao de pequenos robs, braos mecnicos e outros tipos de automatismos.

CIRCUITO PRTICO

O circuito da figura acima poder ser montado em um pront-o-board , placa padro ou outro
mtodo que achar melhor. A idia deste circuito ser apenas um teste. No preciso dizer
que aps a montagem do mesmo, seja qual for ela, voc deve rever atentamente todas as
ligaes, 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
no tem muito com o que se preocupar, a no ser com o que esta perdendo: "o prazer
inestimvel 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 botes BT1 e BT2 permitem o controle da velocidade. Ao se pressionar BT1 o motor
aumentar de velocidade at seu limite mximo. BT2 permite reduzir esta velocidade. Os
tempos mnimos e mximos para T1 e T2 neste circuito PWM esto entre 10ms a 70ms,
aproximadamente.
A alimentao para o circuito deve ser separada. O microcontrolador precisa de 5 volts. Para
o motor, a alimentao deve estar de acordo com o tipo utilizado. Lembrando que um
circuito PWM podem gerar interferncias muito fortes e os microcontroladores so sensveis
a estas interferncias. Separar a alimentao ajudar a impedir os efeitos destas
interferncias.

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. Atravs do set de instrues detalhado na segunda parte
da teoria tambm oferecida neste site, voc poder estudar e compreender melhor o
funcionamento do programa. O cdigo fonte foi ricamente comentado, para demonstrar o
seu funcionamento. Eu no vou "pegar na sua mo" para gui-lo. Estudar preciso e o
"caminho das pedras" j foi dado!
Cdigo fonte PWM_CTRL.ASM
;**************************************************************
;* Controle PWM para motores DC
;*

;* Marcio Jose Soares - 01/10/2002


;**************************************************************
;
;**************************************************************
;definies do programa
;**************************************************************
radix dec
;padrao->valores decimal
include <P16F84A.INC> ;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

;endereo de reset
;endereo de interrupes
;endereo 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 mximo para PWM
;valor mnimo para PWM

;
;**************************************************************
;variaveis do programa
;**************************************************************
org PICRAM
T1
res 1 ;varivel para tempo
T2
res 1 ;varivel para tempo
_TMAX res 1 ;varivel para trabalhar tempo mximo
_TMIN res 1 ;varivel para trabalhar tempo mnimo
;
;**************************************************************
;area do reset
;**************************************************************
org PICRES
goto inicio

;reset
;desvia do endereco 0x04 - interrupo

;
;**************************************************************
;area das interrupes
;**************************************************************
org

PICINT

retfie

;toda interrupo aponta para este endereo


;retorno de interrupo

;
;**************************************************************
;inicio do programa
;**************************************************************
inicio:
movlw 0x00
movwf INTCON
clrf
clrf

PORTA
PORTB

;ajuste para os bits INTCON


;desabilita ints
;limpa portas

bsf

STATUS,RP0

;seleciona banco 1 para options e tris

movlw 0x06
movwf TRISA

;ajusta os bits em A como sada


;exceto RA1 e RA2, entrada para chave

movlw 0x00
movwf TRISB

;ajusta os bits em B como sada


;no usados

bcf

STATUS,RP0

;volta ao banco 0... (padro 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

;
;**************************************************************
;subrotina para incrementar velocidade
;**************************************************************
TC1:
nop
nop
nop

;perde 3 ciclos
;

movf _TMIN,W
andlw 0xFF
xorlw MAX

;carrega com valor mnimo 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 mnimo = mximo


;incrementa velocidade
;velocidade no mximo, no 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 mnimo 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 mnimo, no 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 temporizao do PWM
;**************************************************************
TMIN:
movf _TMIN,W
movwf T1
goto car_1

;carrega W com _TMIN


;carrega T1 com W
;inicia temporizao

TMAX:
movf _TMAX,W
movwf T1
goto car_1

;carrega W com _TMAX


;carrega T1 com W
;inicia temporizao

;
;**************************************************************
;subrotina para temporizao do PWM
;**************************************************************
car_1:
movlw 0xff

;carrega W com 255

movwf T2
dec_1:
decfsz T2,1
goto
dec_1
decfsz T1,1
goto car_1
retlw 0x00

;carrega T2 com 255


;decrementa T2
;255 x T1 vezes
;decrementa T1
;volta a carregar T2
;retorna

;
;**************************************************************
;fim do programa
;**************************************************************
end

CONCLUSO
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 fora 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 cermico
2 33pF cermico

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 padro para a montagem, fios para ligao, etc

Você também pode gostar