7
MICROCONTROLADORES PIC – CONTROLE PWM COM PIC PWM POR SOFTWARE COM PIC16F84 Este exemplo prático mostra a constr!"o #e circito para controle PWM $ Pulse Width Modulation %& tili'an#o m PIC16F84 com manipla!"o #os plsos (ia software ) *m controle PWM permite (ariar a (eloci#a#e #e m motor +C& por exemplo& atra(,s plsos) O -tempo. #este plso #eterminará a (eloci#a#e #o motor) /anto maior 0o #ra!"o #e T1 e menor a #ra!"o #e T & maior será a (eloci#a#e) /anto menor a # #e T1 e maior a #ra!"o #e T & menor será a (eloci#a#e) 2ale salientar 3e os p sempre o (alor máximo #a tens"o aplica#a $menos as 3e#as no circito%& proporci assim alto tor3e& mesmo em 5aixas (eloci#a#es) 2e a a 0i7ra a5aixo) Sen#o assim& (emos 3e este m,to#o #e controle , o i#eal para aplica! es #e moto para a tra!"o #e pe3enos ro59s& 5ra!os mec:nicos e otros tipos #e atomatismos CIRC*ITO PR;TICO

Microcontroladores Pic 16f84 Pwm

Embed Size (px)

DESCRIPTION

controle pwm com pic

Citation preview

MICROCONTROLADORES PIC CONTROLE PWM COM PIC

PWM POR SOFTWARE COM PIC16F84Este exemplo prtico mostra a construo de circuito para controle PWM (Pulse Width Modulation), utilizando um PIC16F84 com manipulao dos pulsos viasoftware.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 paraa trao de pequenos robs,braos mecnicos e outros tipos de automatismos.

CIRCUITO PRTICO

O circuito da figura acima poder ser montado em umpront-o-board, placa padro ou outro mtodo que achar melhor. A idia deste circuito ser apenas umteste. 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 como 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 umradiador 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 PROGRAMAO programa foi desenvolvido utilizandoa 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 dosetde 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 ;inclue arquivo __CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC ;configura bitsPICRESequ0x00 ;endereo de resetPICINT equ 0x04 ;endereo de interrupesPICRAM equ0x0C;endereo da RAMMOTORequ0 ;i/o do motorCHV1 equ 1 ;i/o da chave para aumentar a velocidade do motorCHV2 equ 2 ;i/o da chave para diminuir a velocidade do motorLED equ 3 ;i/o do LEDMAX equ 0x59 ;valor mximo para PWMMIN equ 0X0C ;valor mnimo para PWM;;**************************************************************;variaveis do programa;************************************************************** org PICRAMT1 res 1 ;varivel para tempoT2 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 ;reset goto inicio ;desvia do endereco 0x04 - interrupo;;**************************************************************;area das interrupes;************************************************************** org PICINT ;toda interrupo aponta para este endereo retfie ;retorno de interrupo;;**************************************************************;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 sada movwf TRISA ;exceto RA1 e RA2, entrada para chave movlw 0x00;ajusta os bits em B como sada movwf TRISB ;no usados bcf STATUS,RP0 ;volta ao banco 0... (padro 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 TeclaPWM: 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 mnimo 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 mnimo = mximo goto TC1_1 ;incrementa velocidade bsf PORTA,LED ;velocidade no mximo, no incrementa mais goto TC3 ;e liga ledTC1_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 mnimo 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 mnimo, no decrementa maisTC2_1: decf _TMIN,F ;incrementa registro incf _TMAX,F ;decrementa registro bcf PORTA,LED ;desliga ledTC3: bcf STATUS,Z ;garante bit Z como 0 return ;retorna ;;**************************************************************;subrotina para temporizao do PWM;**************************************************************TMIN:movf _TMIN,W;carrega W com _TMIN movwf T1 ;carrega T1 com W goto car_1 ;inicia temporizaoTMAX:movf _TMAX,W;carrega W com _TMAX movwf T1 ;carrega T1 com W goto car_1 ;inicia temporizao;;**************************************************************;subrotina para temporizao do PWM;**************************************************************car_1:movlw 0xff;carrega W com 255 movwf T2 ;carrega T2 com 255dec_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

CONCLUSOO 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 PWMSemicondutores1 PIC16F84A/4MHz microcontrolador1 TIP112A transistor NPN darlington1 1N4001 diodo retificador1 Led comumResistores (1/8 Watt, 5%)1 10K Marrom, preto e laranja2 330R Laranja, laranja e marron2 4K7 Amarelo, violeta e vermelho

Capacitores1 100nF cermico2 33pF cermico

Diversos3 - chaves push-botton1 crystal 4MHz1 motor DC 3 a 6V2 suportes para 4 pilhas pequenasPront-o-boardou placa padro para a montagem, fios para ligao, etc