Ir ao conteúdo
  • Cadastre-se

Problemas com um programa de controle de motores


Posts recomendados

Olá, sou completamente novo na área e essa e minha primeira programação completamente original, poderiam me afirmar se há erros muito graves, e o que eu poderia fazer para consertar, já que na simulação no Proteus sempre ocorrem problemas.

 

 

 //Definicoes de Sistema
#define B1       RA0_bit
#define B2       RA1_bit
#define B3       RA2_bit
#define B4       RA3_bit
#define B5       RA4_bit
#define B6       RA5_bit

#define MotorCarEsq  RB0_bit
#define MotorCarDir  RB1_bit

#define MotorEstEsq  RB2_bit
#define MotorEstDir  RB3_bit

#define PrimEntrPasso RC0_bit
#define SeguEntrPasso RC1_bit
#define TercEntrPasso RC2_bit
#define QuarEntrPasso RC3_bit

#define FimCurso1     RD0_bit
#define FimCurso2     RD1_bit
#define FimCurso3     RD2_bit
#define FimCurso4     RD3_bit

void motorcarrinho();
void motorestrutura();
void motorpasso();


 //Inicializacao dos Pinos
void main() {
     //PINOS A
     PORTA = 0;
     TRISA = 0b11111111;

     //PINOS B
     PORTB = 0;
     TRISB = 0b00000000;

     //PINOS C
     PORTC = 0;
     TRISB = 0b00000000;

     //PINOS D
     PORTD = 0;
     TRISD = 0b11110000;
     //A/D
     ADCON1 = 0;
      
      //Voids do programa
      while(1)
      {
      void motorcarrinho();
      void motorestrutura();
      void motorpasso();
      }
      


}

//Controle do motor do carrinho

void motorcarrinho()
  {
    if (B1 == 1 && FimCurso1 == 0)
    {
      MotorCarEsq = 1;
      MotorCarDir = 0;
      MotorEstEsq = 0;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
         MotorCarEsq = 0;
    }
    if (B2 == 1 && FimCurso2 == 0)
    {
      MotorCarDir = 1;
      MotorCarEsq = 0;
      MotorEstEsq = 0;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
         MotorCarDir = 0;
    }
  }
//Controle do motor da estrutura
void motorestrutura()
  {
    if (B3 == 1 && FimCurso3 == 0)
    {
      MotorCarDir = 0;
      MotorCarEsq = 0;
      MotorEstEsq = 1;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
      MotorEstEsq = 0;
    }
    if (B4 == 1 && FimCurso4 == 0)
    {
      MotorCarDir = 0;
      MotorCarEsq = 0;
      MotorEstEsq = 0;
      MotorEstDir = 1;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
      MotorEstDir = 0;
    }
  }

adicionado 15 minutos depois

Só modificando, eu resolvi ainda colocar um motor de passo usando o clock interno do PIC, aliás estou utilizando o PIC 16f887a.

 //Definicoes de Sistema
#define B1       RA0_bit
#define B2       RA1_bit
#define B3       RA2_bit
#define B4       RA3_bit
#define B5       RA4_bit
#define B6       RA5_bit

#define MotorCarEsq  RB0_bit
#define MotorCarDir  RB1_bit

#define MotorEstEsq  RB2_bit
#define MotorEstDir  RB3_bit

#define PrimEntrPasso RC0_bit
#define SeguEntrPasso RC1_bit
#define TercEntrPasso RC2_bit
#define QuarEntrPasso RC3_bit

#define FimCurso1     RD0_bit
#define FimCurso2     RD1_bit
#define FimCurso3     RD2_bit
#define FimCurso4     RD3_bit

#define delay (clock = 4000000)


void motorcarrinho();
void motorestrutura();
void motorpasso();


 //Inicializacao dos Pinos
void main() {
     //PINOS A
     PORTA = 0;
     TRISA = 0b11111111;

     //PINOS B
     PORTB = 0;
     TRISB = 0b00000000;

     //PINOS C
     PORTC = 0;
     TRISB = 0b00000000;

     //PINOS D
     PORTD = 0;
     TRISD = 0b11110000;
     //A/D
     ADCON1 = 0;
      
      //Voids do programa
      while(1)
      {
      void motorcarrinho();
      void motorestrutura();
      void motorpasso();
      }

}

//Controle do motor do carrinho

void motorcarrinho()
  {
    if (B1 == 1 && FimCurso1 == 0)
    {
      MotorCarEsq = 1;
      MotorCarDir = 0;
      MotorEstEsq = 0;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
         MotorCarEsq = 0;
    }
    if (B2 == 1 && FimCurso2 == 0)
    {
      MotorCarDir = 1;
      MotorCarEsq = 0;
      MotorEstEsq = 0;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
         MotorCarDir = 0;
    }
  }
//Controle do motor da estrutura
void motorestrutura()
  {
    if (B3 == 1 && FimCurso3 == 0)
    {
      MotorCarDir = 0;
      MotorCarEsq = 0;
      MotorEstEsq = 1;
      MotorEstDir = 0;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
      MotorEstEsq = 0;
    }
    if (B4 == 1 && FimCurso4 == 0)
    {
      MotorCarDir = 0;
      MotorCarEsq = 0;
      MotorEstEsq = 0;
      MotorEstDir = 1;
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    else
    {
      MotorEstDir = 0;
    }
  }
void motorpasso()
  {
    if (B5 == 1)
    {
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 1;
      
      delay_ms (100);
      
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 1;
      QuarEntrPasso = 0;
      
      delay_ms (100);
      
      PrimEntrPasso = 0;
      SeguEntrPasso = 1;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
      
      delay_ms (100);
      
      PrimEntrPasso = 1;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
      
    }
    else
    {
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
    if (B6 == 1)
    {
      PrimEntrPasso = 1;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
      
      delay_ms (100);
      
      PrimEntrPasso = 0;
      SeguEntrPasso = 1;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
      
      delay_ms (100);
      
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 1;
      QuarEntrPasso = 0;
      
      delay_ms (100);
      
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 1;
      
    }
    else
    {
      PrimEntrPasso = 0;
      SeguEntrPasso = 0;
      TercEntrPasso = 0;
      QuarEntrPasso = 0;
    }
  }
    

Link para o comentário
Compartilhar em outros sites

Está funcionando no real, mas no Proteus não está?

 

Se for o caso você tem que ir atrás do datasheet e ir configurando cada porta para ser digital e não analogicas e coisa do tipo quando a porta pode ser configurada com mais de uma possibilidade(analogia ou digital)... Tem lá umas configurações que não to vendo no teu código além de TRIS e PORT... tem outras funções também... se não definir o proteus, ainda mas os mais recentes dão problema mesmo...

 

Se não está funcionando nos dois casos, só descreve o que está acontecendo... o que deveria ocorrer e não ocorre que erro estranho está tendo?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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