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
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
<P16F84A.INC> ;inclue
arquivo
__CONFIG _CP_OFF
& _PWRTE_OFF & _WDT_OFF &
_XT_OSC ;configura bits
PICRES equ 0x00
;endereço de reset
PICINT
equ
0x04 ;endereço de
interrupções
PICRAM
equ 0x0C ;endereço
da RAM
MOTOR equ 0
;i/o do
motor
CHV1
equ
1
;i/o da chave para aumentar a
velocidade do motor
CHV2
equ
2
;i/o da chave para diminuir a
velocidade do motor
LED
equ
3
;i/o do LED
MAX
equ
0x59 ;valor máximo para PWM
MIN
equ
0X0C ;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
;**************************************************************
org
PICRES
;reset
goto
inicio
;desvia do endereco 0x04 - interrupção
;
;**************************************************************
;area das interrupções
;**************************************************************
org
PICINT
;toda interrupção aponta para este endereço
retfie
;retorno de interrupção
;
;**************************************************************
;inicio do programa
;**************************************************************
inicio:
movlw
0x00 ;ajuste
para os bits INTCON
movwf
INTCON
;desabilita ints
clrf
PORTA
;limpa
portas
clrf PORTB
bsf
STATUS,RP0 ;seleciona
banco 1 para options e tris
movlw
0x06 ;ajusta
os bits em A como saída
movwf TRISA
;exceto
RA1 e RA2, entrada para chave
movlw
0x00 ;ajusta
os bits em B como saída
movwf TRISB
;não
usados
bcf
STATUS,RP0
;volta ao banco 0... (padrão do reset)
movlw
MAX
;move
valor para _TMAX ->70ms
movwf _TMAX
movlw
MIN
;move
valor para _TMIN ->10ms
movwf
_TMIN
;
;**************************************************************
;loop principalo do programa
;**************************************************************
loop:
call TECLA
;verifica
Tecla
PWM:
bsf
PORTA,MOTOR
;liga pulso
call TMIN
;aguarda
bcf
PORTA,MOTOR
;desliga pulso
call TMAX
;aguarda
goto
loop
;
;**************************************************************
;subrotina para testar tecla
;**************************************************************
TECLA:
nop
;perde 3
ciclos
nop
nop
btfss PORTA,CHV2
;testa
chave 2
goto TC2
;pressionada
nop
;perde 3
ciclos
nop
nop
btfss PORTA,CHV1
;testa
chave 1
goto TC1
;pressionada
goto TC3
;nenhuma chave pressionada
;
;**************************************************************
;subrotina para incrementar velocidade
;**************************************************************
TC1:
nop
;perde 3
ciclos
nop
;
nop
movf
_TMIN,W
;carrega com valor mínimo atual
andlw 0xFF
;faz and
com W
xorlw MAX
;faz xor
com W, se = , bit Z em STATUS = 1
btfss
STATUS,Z
;testa resultado, zero valor mínimo = máximo
goto TC1_1
;incrementa velocidade
bsf
PORTA,LED
;velocidade no máximo, não incrementa mais
goto TC3
;e liga
led
TC1_1:
incf
_TMIN,F
;incrementa
registro
decf
_TMAX,F
;decrementa registro
goto TC3
;volta
;**************************************************************
;subrotina para decrementar velocidade
;**************************************************************
TC2:
nop
;perde 3
ciclos
nop
nop
movf
_TMIN,W
;carrega com valor mínimo atual
andlw 0xFF
;faz and
com W
xorlw MIN
;faz xor
com W, se = , bit Z em STATUS = 1
btfss
STATUS,Z
;testa se resultado zero
goto TC2_1
;decrementa velocidade
goto TC3
;velocidade no mínimo, não decrementa mais
TC2_1:
decf
_TMIN,F
;incrementa registro
incf
_TMAX,F
;decrementa registro
bcf
PORTA,LED
;desliga led
TC3:
bcf
STATUS,Z
;garante bit Z como 0
return
;retorna
;
;**************************************************************
;subrotina para temporização do PWM
;**************************************************************
TMIN:
movf
_TMIN,W ;carrega
W com _TMIN
movwf T1
;carrega
T1 com W
goto
car_1
;inicia
temporização
TMAX:
movf
_TMAX,W ;carrega
W com _TMAX
movwf T1
;carrega
T1 com W
goto car_1
;inicia
temporização
;
;**************************************************************
;subrotina para temporização do PWM
;**************************************************************
car_1:
movlw
0xff ;carrega
W com 255
movwf T2
;carrega
T2 com 255
dec_1:
decfsz
T2,1
;decrementa T2
goto
dec_1
;255 x T1 vezes
decfsz
T1,1
;decrementa T1
goto
car_1
;volta a
carregar T2
retlw 0x00
;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 –
PIC16F84A/4MHz – microcontrolador
1 –
TIP112A – transistor NPN darlington
1 –
1N4001 – diodo retificador
1 –
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.
|