Ir ao conteúdo

Posts recomendados

Postado

😃          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

 

 

 

  • Membro VIP
Postado

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.

Postado

@.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. 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!