Autor Tópico: AJUDA! Programação para Plotter de 2 eixos usando L298 e PIC16F877A  (Lida 2243 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline Preston

  • Novato
  • *
  • Posts: 2
  • Sexo: Masculino
  • GUIA-CNC
AJUDA! Programação para Plotter de 2 eixos usando L298 e PIC16F877A
« Online: 27 de Setembro de 2010, 13:42 »
EDIT - Esqueci de falar, que a programação na verdade, são só os eixos X e Y. Agora estamos usando dois PICS, um para controlar cada eixo.

Olá, sou novo no fórum, e ele me foi recomendado pelo meu professor. Estou postando aqui para pedir ajuda, pois estamos com problemas na programação do nosso projeto de feira: um Plotter (Você envia as coordenadas de um desenho para o computador, e através de uma porta paralela que se comunica com a placa, ele faz o desenho para você). Estamos usando o driver L298 e dois PIC16F877A com motores unipolares. O programa é o seguinte:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <16F877A.h>
#fuses nowdt,hs,put,noprotect,nodebug,brownout,nolvp,nocpd,nowrt,reserved
#use delay(clock=20000000)

#use  fast_io(a)
#use  fast_io(b)
#use  fast_io(c)
#use  fast_io(d)
#use  fast_io(e)

#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09

void main()
{

set_tris_a(0b11111111);
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b00000000);

   char values[] = {58,40,57,17,53,36,54,18};
   int passo1 = 0, passo2 = 0, passo3 = 0;
   unsigned char xold=0, yold=0, zold=0;

   
   while(true){

   if(input(PIN_A0))xold=0;
   if(input(PIN_A2))yold=0;
   if(input(PIN_A4))zold=0;

     
//****************** EIXO X ****************************************************

     if((!input(PIN_A0))&&(xold==0))
     {     
         if(input(PIN_A1))
    {
           (passo1<8 )?(passo1++):(passo1=0);
            output_b(values[passo1]);         
         }     
         else{
            (passo1>0)?(passo1--):(passo1=7);
            output_b(values[passo1]);
                     
         }           
         if(!input(PIN_A0))xold=1;
      }
     
       
     
//***************** EIXO Y *****************************************************     
     
         if((!input(PIN_A2))&&(xold==0))
     {     
         if(input(PIN_A3))
    {
           (passo2<8 )?(passo2++):(passo2=0);
            output_c(values[passo2]);         
         }     
         else{
            (passo2>0)?(passo2--):(passo2=7);
            output_c(values[passo2]);
                     
         }           
         if(!input(PIN_A2))xold=1;
      }
     
//***************** EIXO Z *****************************************************

 if((!input(PIN_A4))&&(zold==0))
{     
         if(input(PIN_A5))
         {
            (passo3<8 ) ?(passo3++):(passo3=0);
            output_d(values[passo3]);   
                   
         }     
     
         else{
            (passo3>0)?(passo3--):(passo3=7);
            output_d(values[passo3]);
                     
         }           
         if(!input(PIN_A4))zold=1;
     }
   }
}


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Consultando o Datasheet, verificamos que os valores para Meio-Passo são os citados no início (58, 36, etc...), mas não estamos conseguindo fazer funcionar corretamente.
Também estamos em dúvida com qual programa usar para controlar os motores (TurboCNC ou Mach3), e também precisamos de um programa que funcione para transformar arquivos dwf em G-Code.
Qualquer ajuda será extremamente bem-vinda.
Obrigado desde já
« Última modificação: 29 de Setembro de 2010, 15:08 por Preston »

 

/** * */