Guia CNC Brasil - Tudo sobre CNC, Router, Laser, Torno e 3D Print

ELETRÔNICA / ELÉTRICA => Eletrônica Básica => Microcontroladores => Tópico iniciado por: Preston em 27 de Setembro de 2010, 13:42

Título: AJUDA! Programação para Plotter de 2 eixos usando L298 e PIC16F877A
Enviado por: Preston em 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á