Ir ao conteúdo
  • Cadastre-se

PIC Pic/ MIkro/Controle de um Motor via PWM/ quatro tempo e dois tempos.


Posts recomendados

😃          Olá, a todos os membros! Preciso controlar um motor via potenciômetro e botão, mas o problema não esta sendo isso.

         Estou tentando desenvolver um programa para uma maquina de solda e ao pressionar um botão,  gero o pwm e tenho o controle do mesmo,

        porém, ao solta-lo ele se desliga. 

           A maquina tem três funções: case 1, case 2, case 3. Quando entro no case 1, seleciono o motor quatro tempos, ou seja, ao  pressionar

        o mesmo botão do paragrafo a cima, eu entro nessa função e se solta-lo ele continua ligado. Tendo um novo  pressionamento, o mesmo se desliga.   Tive algumas ideias, porém, não consegui obter o controle do duty dele, ou seja, somente conseguia liga-lo e desliga-lo.

       Peço desculpas pela a minha ignorância e falta de conhecimento ainda na área, espero ter uma ajuda. 

        Segue á baixo o programa( esta  ainda precisando de uma melhora, mas já é um começo):

 

  Meu nome é tales

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não vi o seu problema mas acho que é porquê não vi seu programa. Tenta publicá-lo bem como o esquema. Dica publique diretamente na caixa de texto 'code' clicando no botão '< >' acima.

Mas você quer substituir o pot pelos botões no controle do pwm?

 

E espero que não tenha queimado a importantíssima etapa do pisca led.

Link para o comentário
Compartilhar em outros sites

@.if      Segue o programa a baixo. 

 

 

#define t2 portb.rb0      // mapea t2, rb0

#define t1 portb.rb2      // mapea t1, rb2

#define l4 portb.rb4      // mapea L4, rb4

#define l5 portb.rb5      // mapea l5, rb5

 

 

 

#define b1 portb.rb1    // mapea b1 como entrada digital

#define l1 portc.rc4    // mapea L1 como  saida

#define l2 portc.rc5    // mapea L2 como  saida

#define l3 portc.rc6    // mapea L3 como  saida

 

         //             variaveis globais

 

      int pwm2 = 0;

      int pwm1 = 0;               // variavel para o pwm

      unsigned int motor_speed;   // varial controle de velocidade

      char x1=0,x2=0,controle=0;  //variaveis aux botao

      int cont=0;                 // varial aux botao

      char x3 = 0;                // varial aux botao

      char x4 = 0;

      char x5 = 1;

      char x6 = 0;

       //             funcão principal

 

      void main()

   {

 

   //OPTION_REG = 0x80;

   //GIE_bit = 0x01;      //Habilita a interrupção global

   //PEIE_bit = 0x00;     //Desabilita a interrupção por periféricos

   // INTE_bit = 0x01;     //Habilita a interrupção externa

   //INTEDG_bit = 0x00;   //Configura a interrupção por borda de descida

 

 

  trisa0_bit =1;        // define ra0 como entrada

  trisb1_bit = 1;       // define rb1 como entrada

  trisb2_bit = 1;       // define rb2 como entrada

  trisc4_bit = 0;       // define rc4 como saida

  trisb4_bit = 0;       // define rb4 como saida

  trisb5_bit = 0;       // define rb5 como saida

  trisc5_bit = 0;        // define rc5 como saida

  trisc6_bit = 0;       // define rc6 como saida

  trisc3_bit = 0;       // define rc3 como saida

  rc3_bit = 1;          // incia-se rc3 em nivel alto

  rb4_bit = 0;           // incia-se rb4.rb5, em nivel baixo

  rb5_bit = 0;

  rb1_bit = 1;           // incia-se rb1 em nivel alto

  rb2_bit = 1;           // incia-se rb2 em nivel alto

  rc7_bit= 0;

  trisc7_bit= 0;

  trisb6_bit = 0;

  rb6_bit = 0;

 

            //   configuração adc, pwm, e entrada analogica ra0

 

 

   ADCON0 = 1;       // habilita o conversor

   ADCON1 = 0;       // declara ra0 como entrada analocica

   ADC_Init();

 

 

         // incia-se

 

   PWM2_Init(1000);  // pwm em 1kh

   PWM2_Start();     // starta o pwm

   ULPWUIE_bit = 0x00;

   ANSEL =  1;       // registrador entradas analogicas

   ANSELH = 0X00;    // coloca como entrada e saidas p portb

 

   C1ON_bit = 0;      // desabilita os comparadores

   C2ON_bit = 0;

 

 

 

              // loop infinito

 

  while(1)

  {

    cont++;delay_ms(1);  // incremento

    if((b1==0)&&(x1==0)){controle++;x1=1;x4;cont=0;}

    if((b1==1)&&(x1==1)&&(cont>100))x1=0;

 

    if(controle==0)

    {l1=0;l2=0;l3=0;}

 

    if(controle==1) {

 

       l1=1;

 

 

       }

       if((t1==0))       // botao rb2  pressionado? execute:

 

       {

 

 

             x4 = 1;       // varial aux do botao rb0

             rc7_bit =1 ;

             l1 = 1;

             delay_ms(100);

             l1 = 0;

             delay_ms(100);

            }

 

            if(( t2==0)&&( x4==1))   // essa função é somente para ter uma ideia, pode ser desconsiderada. Após esse isso for verdadeiro, ele terá que acionar o pwm e ficar ligado até um proximo acionamento. Lembrando que terá que ter o controle do duty

           

            {

           

             // eu queria colocar o controle do motor( quatro tempo) aqui.

             // ao entrar no case 1,  eu seleciono com o botão t1( tecla confirma)

             // e após isso, eu  pressiono t2 e meu motor fica direto até ter

             // um novo toque no mesmo.

           

           

           

           

            }

 

              // botao rb0 pressionar? execute:

                // loop

 

          }

 

 

       if(controle==2){l1=0;l2=1;l3=0;}

       if(controle==3){l1=0;l2=0;l3=1;}

       if(controle==4)controle=0;

      

      

      

      

      

 

 

        //    Aqui esta o controle do motor: ao  pressionar o motor, ele liga

        //    e ao solta-lo, ele desliga e tenho o controle do duty.

       

       

       

       

     if((t2==0)&&(x2==0))

       {

         l4=1;l5=1; x2=1; x3 = 1;

 

         }

 

      if((t2==1)&&(x2==1))

 

        {

           l4=0;l5=0;x2=0; x3 = 0;

 

        }

 

        if((pwm2 ==0)&&(x3==1))

        {

 

         motor_speed = ADC_Read(0);

        PWM2_Set_Duty(motor_speed >> 2);

 

          delay_ms(50) ;

 

 

        }

 

        if((pwm2 ==0)&&(x3==0))

         {

 

             motor_speed = 0x00;

             PWM2_Set_Duty(motor_speed = 0);

 

 

 

        }

 

 

 

 

}

}

          O problema é que o motor ( case 1), terá que ficar direto até eu pressionar o botão novamente, entretanto, até consegui fazer, mas eu não tenho controle ao movimentar o potenciometro. Caso alguém queira me ajudar, verás que após rb1 for pressionado ele andará em três bits no portc e então parando no case (1) rc4, eu tenho que dar um start  com o rb2, e após isso, tenho que fazer a função do quatro tempo. 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!