You are on page 1of 7

[www.denteazul.com.

br]

Tutorial didtico: Acionando um motor CC com a funo PWM


Uma das aplicaes para os microcontroladores PIC controlar motores CC, para isso, precisamos de algumas ferramentas de circuito eltrico e de uma nova funo do microcontrolador, a modulao por largura de pulso, ou PWM.

Podemos ativar um motor ou outros tipos de cargas indutivas simplesmente atravs da funo output_high(pino), e a ligao da carga atravs do driver de corrente adequado:
VCC

U1 X1
CRYSTAL 13 14 2 3 4 5 6 7 8 9 10 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26

Q1
TIP31

D1
DIODE

R1
1k

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT

VSS +88.8

Nesse caso foi utilizado RD0/PSP0 19 um transistor TIP 31 como driver de corrente e um diodo de 20 RD1/PSP1 21 RD2/PSP2 roda livre que como j foi explicado, evita a entrada de corrente no pino do PIC quando 22 RD3/PSP3 27 RD4/PSP4 uma carga indutiva desligada. 28 RD5/PSP5
RD6/PSP6 RD7/PSP7 29 30 PIC16F877A O transistor nesse caso deve funcionar em saturao, permitindo que a carga absorva a corrente que precisa da fonte de alimentao e no do pino do PIC.

[www.denteazul.com.br]
Essa forma de ativao limitada, pois apenas permite ligar e desligar o motor, no permitindo a variao de sua velocidade, necessria em grande parte das aplicaes que utilizam motores CC. A funo PWM permite que se aplique diferentes nveis de tenso no motor, simulando uma fonte de alimentao varivel, assim a velocidade do motor varia. Isso possvel atravs da variao entre nvel baixo e alto na onda, sempre mantendo a mesma frequncia, mas alterando a largura dos pulsos positivos, conseguindo valores mdios diferentes para a onda resultante. O tempo que a onda fica em nvel alto chamado Duty cicle. seguir, alguns grficos que exemplificam a onde gerada por um PWM:
Grficos da onda PWM com diferentes valores de Duty cicle

Tenso

100% Tempo

Tempo 80% Tempo 50% Tempo 25% Tempo 0% Tempo

Utilizao do driver de corrente Para o desenvolvimento dos projetos dessa apostila, foi escolhido o driver de corrente L293, que um circuito integrado em ponte H, portanto, permite atravs de PWM o controle da velocidade do motor e tambm permite a inverso da direo de rotao do motor. A seguir, o circuito para montagem do motor no CI L293, note que os pinos 2

[www.denteazul.com.br]
e 7 so a entrada de sinal para aplicaes com mudana de direo, as ligaes de motor nos pinos 11 e 14 so para montagem apenas com controle de velocidade.

Esquema eltrico da ponte H:


VCC

Q1 Q2
TIP32

TIP32

+88.8

Q4

Q3
TIP31

TIP31

GND

A utilizao do CI ponte H L293 para aplicaes com mudana de direo do motor, consiste em controlar as entradas nos pinos 2 e 7, segundo a tabela a seguir: Direo Direita Esquerda Parado PINO 2 High Low High PINO 7 Low High high

[www.denteazul.com.br]
Desta forma possvel mudar a direo da tenso qual a bobina do motor est submetida. Ainda no estamos controlando a velocidade do motor, para isso, alm de setar determinado pino, preciso gerar um PWM na entrada do CI que se encontra em nvel alto. Controle de velocidade O controle de velocidade pode ser feito peli PIC atras do mdulo CCP, capture, compare, PWM, claro, nos dispositivos que possuem este hardware, no caso, o 16F877A possui um mdulo CCP com PWM de resoluo de at 10 bits, ou seja, configurando valores entre 0 e 1023, estamos dizendo ao PIC qual o duty cicle da onda, que proporcional ao nmero escrito. No caso do PWM1 do 16F877A, o que determina a frequncia da onda PWM o timer 2, que deve ser configurado com um prescaler de acordo com a frequncia de onda desejada. Note de acordo com a tabela abaixo, que para determinado valor de frequncia, existem uma resoluo mxima. A resoluo determina a gama de valores que podem ser escritos na funo para determinar o duty cicle, quando maior a resoluo ser possvel obter maior controle sobre a onda. Frequncia Prescaler resoluo 1.22KHZ 16 10 bits 4.88KHZ 4 10 bits 19.53KHZ 1 10 bits 78.12KHZ 1 8 bits 156.3KHZ 1 7 bits 208.3KHZ 1 6 bits

Cdigo do Programa Abaixo ser mostrado um programa que exemplifica o caso mais simples de controle por PWM, com a configurao do timer2, inicializao do mdulo CCP e determinao do duty cicle esttica no Cdigo do Programa: #include <16F877A.h> #device adc=8 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection

[www.denteazul.com.br]
#FUSES NOWRT //Program memory not write protected #use delay(clock=20000000) void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,0,1); //habilita o timer 2, usado para determinar o periodo do PWM setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); while(1) { SETUP_CCP1(CCP_PWM);//inicializa o mdulo CCP para utilizao como PWM set_pwm1_duty (512); //configura o duty cicle do PWM, o nmero de 10 bits representa a porcentagem de nivel alto da onda, no caso, 50%. } } Simulao no Proteus

C1
1nF VSS

U1 X1
CRYSTAL 13 14 2 3 4 5 6 7 VCC 8 9 10 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30

C2
1nF

R1
1k

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877A

VCC

Q1
TIP31

D1
DIODE

+88.8

GND

[www.denteazul.com.br]
Controle de sentido de rotao O controle de sentido de rotao ser feito utilizando o CI L293, que aliado ao controle de velocidade por PWM no pino ativo, permite o controle de velocidade aliado ao controle de direo. A simulao foi feita ligando os pinos de controle do CI aos pinos PWM do PIC, permitindo assim que tambm seja feito controle de velocidade caso seja necessrio, o pino enable deve ser mantido em nvel alto durante a operao do motor, se desligado, a alimentao do motor cortada, assim, ao escrever output_high(PIN_C1); e output_low(PIN_C2); o motor ir girar em um sentido, ao escrever output_high(PIN_C2); e output_low(PIN_C1); o motor ir mudar o sentido de rotao. Na simulao foi colocada uma chave que pode ser aterrada para mostrar que um nvel lgico baixo no pino 1 (enable) desativa o CI. Cdigo do Programa #include <16F877A.h> #device adc=8 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #use delay(clock=20000000) void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,0,1); //habilita o timer 2, usado para determinar o periodo do PWM setup_comparator(NC_NC_NC_NC);

[www.denteazul.com.br]
setup_vref(FALSE); while(1) { output_high(PIN_C3); //habilita o CI L293 //motor gira em uma direo output_high(PIN_C1); output_low(PIN_C2); delay_ms(3000); //aguarda 3 segundos //motor muda o sentido de rotao output_low(PIN_C1); output_high(PIN_C2); delay_ms(3000); } } Simulao no Proteus

C1
1nF VSS

U1 X1
CRYSTAL 13 14 2 3 4 5 6 7 VCC 8 9 10 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 VCC

C2
1nF

R1
1k

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877A

16 2 7 1 IN1 IN2 EN1 VSS

8 VS OUT1 OUT2

U2
3 6

D1
DIODE

D3
DIODE

SW-SPDT-MOM

9 10 15

EN2 IN3 IN4

GND

OUT3 GND OUT4

11 14

GND

D2
DIODE

D4
DIODE

L293D

GND

VCC

SW1

+88.8

You might also like