acionando um motor cc com pwm%5b%5d

Upload: henrique-miranda

Post on 06-Apr-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    1/7

    [www.denteazul.com.br]

    1

    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:

    Nesse caso foi utilizado um transistor TIP 31 como driver de corrente e um diodo de

    roda livre que como j foi explicado, evita a entrada de corrente no pino do PIC quando

    uma carga indutiva desligada.

    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.

    T1OSI/CCP216

    RC2/CCP117

    C3/SCK/SCL18

    RB7/PGD40

    RB6/PGC39

    RB538

    RB437

    RB3/PGM36

    RB235

    RB134

    RB0/INT33

    RC5/SDO24

    C4/SDI/SDA23

    1OSO/T1CKI 15

    +88.8

    Q1TIP31

    VSS

    VCC

    D1

    DIODE

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    2/7

    [www.denteazul.com.br]

    2

    Essa forma de ativao limitada, pois apenas permite ligar e desligar o motor, nopermitindo 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:

    Tenso

    Tempo

    Grficos da onda PWM com diferentes valores de Duty cicle

    Tempo

    Tempo

    Tempo

    Tempo

    Tempo

    100%

    80%

    50%

    25%

    0%

    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

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    3/7

    [www.denteazul.com.br]

    3

    e 7 so a entrada de sinal para aplicaes com mudana de direo, as ligaes demotor nos pinos 11 e 14 so para montagem apenas com controle de velocidade.

    Esquema eltrico da ponte H:

    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 PINO 2 PINO 7

    Direita High Low

    Esquerda Low High

    Parado High high

    +88.8

    Q1

    TIP32

    Q2TIP32

    Q3TIP31

    Q4

    TIP31

    VCC

    GND

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    4/7

    [www.denteazul.com.br]

    4

    Desta forma possvel mudar a direo da tenso qual a bobina do motor estsubmetida. 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.

    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 #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

    Frequncia 1.22KHZ 4.88KHZ 19.53KHZ 78.12KHZ 156.3KHZ 208.3KHZ

    Prescaler 16 4 1 1 1 1

    resoluo 10 bits 10 bits 10 bits 8 bits 7 bits 6 bits

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    5/7

    [www.denteazul.com.br]

    5

    #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 PWMsetup_comparator(NC_NC_NC_NC);setup_vref(FALSE);

    while(1){SETUP_CCP1(CCP_PWM);//inicializa o mdulo CCP para utilizao como

    PWMset_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

    RA0/AN02

    RA1/AN13

    RA2/AN2/VREF-/CVREF4

    RA4/T0CKI/C1OUT6

    RA5/AN4/SS/C2OUT7

    RE0/AN5/RD8

    RE1/AN6/WR9

    RE2/AN7/CS10

    OSC1/CLKIN13OSC2/CLKOUT

    14

    RC1/T1OSI/CCP216

    RC2/CCP117

    RC3/SCK/SCL18

    RD0/PSP019

    RD1/PSP120

    RB7/PGD40

    RB6/PGC39

    RB538

    RB437

    RB3/PGM36

    RB235

    RB134RB0/INT 33

    RD7/PSP730

    RD6/PSP629

    RD5/PSP528

    RD4/PSP427

    RD3/PSP322

    RD2/PSP221

    RC7/RX/DT26

    RC6/TX/CK25

    RC5/SDO24

    RC4/SDI/SDA23

    RA3/AN3/VREF+5

    RC0/T1OSO/T1CKI15

    MCLR/Vpp/THV1

    U1

    PIC16F877A

    R1

    1k

    VCC

    X1CRYSTAL

    C1

    1nF

    C2

    1nF

    VSS

    Q1TIP31

    +88.8

    VCC

    GND

    D1

    DIODE

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    6/7

    [www.denteazul.com.br]

    6

    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 #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 PWMsetup_comparator(NC_NC_NC_NC);

  • 8/2/2019 Acionando Um Motor Cc Com PWM%5Bwww.denteazul.com.Br%5D

    7/7

    [www.denteazul.com.br]

    7

    setup_vref(FALSE);while(1){

    output_high(PIN_C3);//habilita o CI L293//motor gira em uma direooutput_high(PIN_C1);output_low(PIN_C2);delay_ms(3000);//aguarda 3 segundos

    //motor muda o sentido de rotaooutput_low(PIN_C1);output_high(PIN_C2);delay_ms(3000);

    }

    }Simulao no Proteus

    RA0/AN02

    RA1/AN13

    RA2/AN2/VREF-/CVREF4

    RA4/T0CKI/C1OUT6

    RA5/AN4/SS/C2OUT7

    RE0/AN5/RD8

    RE1/AN6/WR9

    RE2/AN7/CS10

    OSC1/CLKIN13

    OSC2/CLKOUT14

    RC1/T1OSI/CCP216

    RC2/CCP117

    RC3/SCK/SCL18

    RD0/PSP019

    RD1/PSP120

    RB7/PGD40

    RB6/PGC39

    RB538

    RB437

    RB3/PGM36

    RB235

    RB134

    RB0/INT33

    RD7/PSP730

    RD6/PSP629

    RD5/PSP528

    RD4/PSP427

    RD3/PSP322

    RD2/PSP221

    RC7/RX/DT26

    RC6/TX/CK25

    RC5/SDO24

    RC4/SDI/SDA23

    RA3/AN3/VREF+5

    RC0/T1OSO/T1CKI15

    MCLR/Vpp/THV1

    U1

    PIC16F877A

    R1

    1k

    VCC

    X1CRYSTAL

    C1

    1nF

    C2

    1nF

    VSS

    IN12

    OUT13

    OUT26

    OUT311

    OUT414

    IN27

    IN310

    IN415

    EN11

    EN29

    VS

    8

    VSS

    16

    GND GND

    U2

    L293D

    +88.8

    D1

    DIODE

    D2

    DIODE

    D3

    DIODE

    D4

    DIODE

    GND

    VCC

    VCC

    GND

    SW1

    SW-SPDT-MOM