Autor Tema: Procesador CNC de Codigo G  (Leído 53777 veces)

0 Usuarios y 5 Visitantes están viendo este tema.

Desconectado Ferenczyg

  • PIC10
  • *
  • Mensajes: 20
Re: Procesador CNC de Codigo G
« Respuesta #15 en: 01 de Julio de 2008, 18:40:47 »
A mi me interesa, yo me apunto. No obstante, lo primero que propongo es centrarnos en un solo objetivo porque si no se va a dispersar el esfuerzo. Es decir, lo primero que habría que hacer es una especificacion de objetivos, o dicho de otro modo, aclarar es lo que se pretende hacer. Me explico:

Si en un conjunto 'completo' CNC descartamos la parte CAD y nos centramos en la parte CAM yo distingo cuatro partes:

1.- generador de codigos G
2.- interprete de codigos G
3.- generador de pulsos de salida (step/dir, on/off de pínola, on/off de refrigerante, on/off de aspiracion) y receptor de señales de entrada (limites, home, e-stop..)
4.- drivers de motores
5.- mecanica

Mi propuesta se basa en que lo me parece mas lógico es dejar 1) en el PC donde vive la parte CAD, y partir de un fichero en formato *.nc -o txt de lineas con GCodes-  almacenado en una SD/MMC. O dicho de otro modo, no creo que debiéramos preocupamos de como se generan los códigos G en el alcance de este proyecto.
Por otro lado, 4) tampoco me parece que debiera estar en el alcance, primero porque 4) se dedica basicamente a controlar potencia, luego porque el mundo PaP y el mundo servo se parecen muy poco, y por ello tambien sus drivers son muy distintos, con lo cual es otra posibilidad de diluir el esfuerzo.
Del mismo modo, para 5) hay tantisimas soluciones, tan dependientes de lo que este al alcance de cada uno, que intentar definir un estándar me parece un poco demasiado complicado.

En resumen (ojo, se que mucho ya se ha comentado, solo intento organizar las cosas en mi cabeza  :-) y ademas eso es lo que yo habia entendido desde un principio y si no es asi corregidme) entiendo que habria que centrar el esfuerzo en un sistema que:

a) lea de una tarjeta SD/MMC un fichero conteniendo códigos G en texto plano. Adicionalmente, de origen o en una version posterior, podria ofrecer soporte de USB y volcar a la tarjeta de la que luego leeria.
b) interprete los códigos G y genere las secuencias de pulsos que se deriven de ellos en un formato step/dir, para motores paso a paso (es decir, sin soporte de encoders de cuadratura para servos, al menos en una version inicial), y para un numero de ejes por definir. En cuanto a ejes, lo mínimo funcional para una fresadora es tres, lo ideal es 4, y el máximo razonable 6. Quien tenga un torno o un sistema de corte de foam puede utilizar solo dos ejes y tan campante. La frecuencia del tren de pulsos no suele ser necesario que supere los 40KHz, pero si que es bueno que si sea mayor de 20KHz por temas de velocidad, de resonancia en los PaPs y por comodidad, para que no sea audible.
c) pueda asociar N señales de salida, a definir, para control de equipamiento accesorio
d) pueda recoger e interpretar M señales de entrada, a definir,  provenientes de la mecánica o el usuario
e) tenga algun tipo de dispositivo de visualizacion (i.e LCD texto HD44780 compatible o grafico T6963C compatible o lo que se decida)
f) tenga algun tipo de dispositivo de entrada de ordenes (teclado 4x4, o botonera, o lo que se decida)

Una vez definido todo esto, el resultado ya nos indicaria bastantes cosas, entre ellas el modelo de PIC a utilizar. Luego quedaria acordar lenguage (voto por CCS), etc.

Opiniones?

Salu2




« Última modificación: 01 de Julio de 2008, 19:02:26 por Ferenczyg »

Desconectado melk

  • PIC10
  • *
  • Mensajes: 20
Re: Procesador CNC de Codigo G
« Respuesta #16 en: 01 de Julio de 2008, 20:57:51 »
Creo que la parte más dificil será realizar las interpolaciones , determinar los valores de aceleración admisibles e implementarlos sin perder la posición y luego enviar los pulsos en la secuencia correcta de modo simultaneo.

1º En un PC es sencillo realizar la ristra de calculos, pero empleando un micro la cosa se complica. Lo primero es convertir los valores de las instrucciones G-Code a numeros enteros de pasos o a la señal de voltaje correspondiente del servo, para ello habría que hacer para cada eje algo como NºPasos = (PosActualEje-PosDestinoEje)/Precision PaP o Giro en º Servo = (PosActualEje-PosDestinoEje)*Factor conversion
2º Establecer la aceleración máxima a traves del G-Code y la separación de los pulsos, sabiendo aquello de que v=v0+a*t
3º Ir almacenando los pulsos que se envian en alguna especie de buffer mientras se calculan los siguientes, ya que calcularlos todos y guardarlos en algun sitio, si el programa es muy grande, se hace imposible. Tambien es importante tener en cuenta que la diferencia de tiempos entre pulsos no sera constante, y que habrá que enviar los de cada eje con su frecuencia, lo que dista mucho de ser trivial.

Otra cosa, creo que al efectuar los calculos el tiempo necesario es muy variable, asi que, para hacer que el sistema fuese real-time habría que meter tambien algun TMR para controlar el envio de pulsos

Siento no ofrecer inicialmente nada más que posibles pegas... Un saludo a todos y gracias por el foro

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Procesador CNC de Codigo G
« Respuesta #17 en: 02 de Julio de 2008, 04:09:25 »
Fernczyg esa es mi idea también

Yo creo que deberíamos empezar por la estructura y de avanzar con los cálculos.

Esteca55, ¿cuál es tu idea?

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Procesador CNC de Codigo G
« Respuesta #18 en: 02 de Julio de 2008, 04:59:56 »
Melk,

Lo único que creo que ya es fijo es que vamos a usar pap. Como estos motores tienen una velocidad máxima, creo q no se complica tanto (puede que cuando empecemos me de cuenta de lo equivocado que estaba).

La idea es que un micro convierta las instrucciones a pasos y otro controle los pap y los mueva de acuerdo con esos pulsos.

Lo bueno de hacer esto es que el buffer se agranda y se puede conseguir más velocidad.

Lo del TMR creo que es necesario pero no por el real time, sino por la interrupción y que el micro pueda seguir trabajando.

Por cierto, lo del voto por CCS. Yo tengo todo lo relativo al USB en C18 y también una librería para las SD/MMC.
PalitroqueZ tiene un estudio del USB en CCS y la librería. No se si PalitroqueZ se apuntará o no....

Desconectado Ferenczyg

  • PIC10
  • *
  • Mensajes: 20
Re: Procesador CNC de Codigo G
« Respuesta #19 en: 02 de Julio de 2008, 10:27:58 »
Bueno, no creo que haya mucho problema en que se utilicen dos versiones de lenguaje, lo importante es lo que se codifica. Yo tengo hecha la dssrboard 2 que ya me sirve para el 16F788 o el 18F450, y para programar/debug tengo un clon de icd2, o sea que como entorno de desarrollo probablemente tire por ahi.

BTW buscando un poco he visto algo parecido pero para basic stamp :

http://mcglothin.us/RobotScrapbook/CommunityPcbMill2005/BasicStampGCodeInterpreter/

aunque sea basic siempre se puede sacar alguna idea (me lo he mirado, pero poco, no he llegado a descifrarlo)

Yo por lo pronto me bajare el Ubuntu EMC2 linux al VMware de casa a  ver si soy capaz de descubrir las rutinas de motion control dentro del codigo fuente. A lo mejor consigo entender algun cacho de como lo hacen, al menos estan comentadas.

Salu2!

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Procesador CNC de Codigo G
« Respuesta #20 en: 02 de Julio de 2008, 20:46:12 »
Hola todos, perdonen que estuve medio desaparecido, es que desde el lunes estoy en cama por suerte hoy ya me estoy mejorando, pasaba por el foro, y vi mas o meno lo que venían escribiendo pero el cuerpo no me daba para sentarme a escribir jejej.

Me alegro que mas gente se halla sumado!

Entre dos puntos, la distancia es una recta, calcular la pendiente, generar los "triangulos" para los avances de cada motor.... ¿seria algo asi Esteban?

Exactamente Norberto, la base va ser cálculos de triángulos jeje, en realidad segmentos de rectas con diferentes pendientes, luego hacer que el sistema siga esa recta, luego la otra, la siguiente y ....

Un menú, que yo creo que es totalmente necesario, es el de elegir el centro de coordenadas y que el micro recalcule todos los puntos del sistema.

Modificación:

PD.: ¿Qué lenguaje de programación queréis usar? Por mi el C-CCS con la librería de PalitroqueZ (sólo con su permiso) de las MMC y SD. Si no el C18 que trae librerías para las tarjetas.

Si tal cual, un menú es necesario, para configurar los parámetros de la maquina, la idea es que sea algo genérico y que se configure como los soft de CNC mas comunes, por ende los parámetros principales a poder configurar, serian los pasos por unidad de cada ese, la velocidad maquina de cada eje, que va a ser la de los movimientos rápidos (G0), y rampa de aceleraron de los ejes.

Respecto al lenguaje, nunca use CCS, la idea mia es usar C18, ya que además cuento con un ICD2 para debuggear desde el MPLAB, pero me puedo adaptar a otra cosa, no hay tanto problema.

Lo que si, como te dijo Norverto, eso del centro de coordenadas, lo que se hace es trabajar con coordenadas virtuales, digamos vos siempre partís del cero, desde ahi empieza a correr tu maquina, entonces lo que se hace es poner la maquina donde vos queres que este el cero, y ahi le decis que es el cero de coordenadas  virtual para correr el G, no hace falta recalcular nada, empieza a correr el g desde ahi, obviamente eso se aria desde el menú como vos decis. SI quieren díganme y les explico mejor como funciona esto.

A obviamente tenemos que agregar en control manual, justamente para posicionar la maquina donde queremos que sea el cero, en el mach por ejemplo se hace con las flechitas del teclado, así que paríamos hacerlo con la botonera que penamos ponerle al proyecto, yo había pensado en un teclado matricial de 4 x 4.

Qué os parece hacer la estructura del compañero cucaracha http://webs.ono.com/cucaracha/fresadora3D.htm

Me gusta por seguir con la idea de hacer una CNC barata con medios accesibles y sencilla (aunque parezca de bricomania)

Me parece una muy buena estructura esa, la idea mía es que se pueda aplicar a cualquier estructura y se sea independiente de que driver usemos, asi que motor mi cualquier cosa esta bien jejeje

Lo de usar una pantallita me parece que es importante, no para ver los gráficos del mecanizado, sino para ver el programa que se ha enviado, y cuando este esté ejecutándose se vea la línea de código sombreada. Me inclinaría más por usar una pantalla más grande a la de un celular, mínimo 128x64 si es el doble mucho mejor. También se tiene que tener la posibilidad de modificar y/o corregir el código enviado en el mismo control, para esto es importante tener un teclado.

........

También hay que tener un puerto de expansión para las señales del PLC, algunas pueden ser:

Entradas:

Xhome, Yhome, Zhome
Stop de emergencia

Salidas

Pin de M3_M4 del husillo
Pin M5 parada del husillo
Bombda de agua.

Un G0 que pueda llegar por ejm a 4000mm/min, con opción de modificarlo estaría bien para empezar.
También hay que programar aceleración y desaceleración.
....

Tal cual amigo Renatox_, la pantalla seria para eso, y creo que si o si es necesaria, yo había pensado en comprar algo asi, voy a evr que consigo cuando valla a las casas de electrónica. De todas formas eso no es lo que mas me preocupa cualquier pantalla esta bien por ahora, lo primordial y lo que mas me preocupa van a ser los cálculos y si vamos a ser capas de procesar esta información.

Esta perfecto lo de la mención e la entradas para los finales de carrera, los home que es para los cero de la maquina para quienes no lo saben, y para la parada de emergencia, como asi también las salidas para el husillo y porque no como vos decís la bomba de agua, mi idea es ponerle dos o tres salidas de tipo rele como mi interfaz para CNC por puerto paralelo.

Sigo en otro porque ya esta muy largo...
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Procesador CNC de Codigo G
« Respuesta #21 en: 03 de Julio de 2008, 00:21:06 »
Os cuelgo dos amplificadores de corriente. Los transistores aguantan 100A y 100V.

El mosfet es el BUK9575 cuesta como 1€ y el resto que lleva es un 1n4007 y un par de resistencias de 0.25W

Los bipolares son el MJD122 (es smd) cuesta como 0,25€ y lleva 4 resistencias de 0.25W

Os pongo los dos para que decidáis si lo hacemos smd o no

Tene en cuanta que lo que importa es la potencia que pueden disipar, no vas a poder manejar 100A a 100V, si mal no vi en la hoja de datos podría manejar una potencia de 99W, de formas es mas que suficiente.


A mi me interesa, yo me apunto. No obstante, lo primero que propongo es centrarnos en un solo objetivo porque si no se va a dispersar el esfuerzo. Es decir, lo primero que habría que hacer es una especificación de objetivos, o dicho de otro modo, aclarar es lo que se pretende hacer. Me explico:

Si en un conjunto 'completo' CNC descartamos la parte CAD y nos centramos en la parte CAM yo distingo cuatro partes:

1.- generador de codigos G
2.- interprete de codigos G
3.- generador de pulsos de salida (step/dir, on/off de pínola, on/off de refrigerante, on/off de aspiracion) y receptor de señales de entrada (limites, home, e-stop..)
4.- drivers de motores
5.- mecanica

Mi propuesta se basa en que lo me parece mas lógico es dejar 1) en el PC donde vive la parte CAD, y partir de un fichero en formato *.nc -o txt de lineas con GCodes-  almacenado en una SD/MMC. O dicho de otro modo, no creo que debiéramos preocupamos de como se generan los códigos G en el alcance de este proyecto.
Por otro lado, 4) tampoco me parece que debiera estar en el alcance, primero porque 4) se dedica basicamente a controlar potencia, luego porque el mundo PaP y el mundo servo se parecen muy poco, y por ello tambien sus drivers son muy distintos, con lo cual es otra posibilidad de diluir el esfuerzo.
Del mismo modo, para 5) hay tantisimas soluciones, tan dependientes de lo que este al alcance de cada uno, que intentar definir un estándar me parece un poco demasiado complicado.

Coincido plenamente con este planteamiento!

b) interprete los códigos G y genere las secuencias de pulsos que se deriven de ellos en un formato step/dir, para motores paso a paso (es decir, sin soporte de encoders de cuadratura para servos, al menos en una version inicial), y para un numero de ejes por definir.

Creo que generar toda la secuencia de pasos de una no va a ser posible, no va a dar la memoria del micro, eso va a ser demasiado extenso, recordemos que como dijo electrotacto los códigos g suelen ser bastante extensos.

Che que al G hay que ir tratándolo, no línea por línea, eso aria lenta la cosa pero si mientras se ejecuta una linea ir leyendo y calculando la segunda en una de esas. Por ejemplo les cuento como dato que el turboCNC que corre en MSdos hace algo así, me di cuento una vez que corrí un G desde un disco de 3 1/4, ya que luego de abrir el G y al  darle  RUN, cada tanto encendía el led de la disketera y se escuchaba que esta comenzaba a trabajar, es mas en un oportunidad lo probé en una PC muy vieja y se ve que la lectora estaba algo dañada, como tardaba en leer, el programa detenía la maquina hasta que leía una parte del diskete y luego seguía, o sea que no cargaba todo el G, les estoy hablando de una 486 con 8 mega de ram!.

Coincido con esto:

3º Ir almacenando los pulsos que se envian en alguna especie de buffer mientras se calculan los siguientes, ya que calcularlos todos y guardarlos en algun sitio, si el programa es muy grande, se hace imposible. Tambien es importante tener en cuenta que la diferencia de tiempos entre pulsos no sera constante, y que habrá que enviar los de cada eje con su frecuencia, lo que dista mucho de ser trivial.


Por ultimo:

Lo único que creo que ya es fijo es que vamos a usar pap. Como estos motores tienen una velocidad máxima, creo q no se complica tanto (puede que cuando empecemos me de cuenta de lo equivocado que estaba).

La idea es que un micro convierta las instrucciones a pasos y otro controle los pap y los mueva de acuerdo con esos pulsos.

Lo bueno de hacer esto es que el buffer se agranda y se puede conseguir más velocidad.

Eso es verdad, en lo que creo que vamos a diferir un poco es que vos vas a usar un driver convencional, sin control de corriente, la idea mía es aplicarlo a un driver con control de corriente, seguramente use alguno de los de mi web, la idea de esto es porque cuando termine mi nueva máquina, para probar va a ser muy censillo, desconecto la interfaz de la pc, conecto esta placa y listo, ya estoy controlando la máquina.

A lo que me refería es que con los driver con control de corriente al menos voy a tener 3 o 4 veces mas velocidad en los motores, con lo cual voy a necesitar mas velocidad de procesamiento, pero para empezar eso no es problema, lo primero es que ande bien, aunque sea despacio.

Obviamente la de desligar a la etapa del procesamiento la del control de las bobinas del motor es lo mejor, como vos decís ahí se gana en velocidad.

Es mas, yo estoy pensado en utilizar dos micros para procesar el G, asi se puede con uno leer el g, y hacer el calculo del movimiento, para los ejes, y después se lo pasa al otro que genera los pulsos teniendo en cuenta la aceleración velocidad y demás, y mientras ese produce eso el otro va haciendo los cálculos para las siguientes líneas de G.

Es mas, lo que mas me resulta complicado va  a ser como poder generar supongamos para 3 códigos g tres trene de pulsos de distinta frecuencia, y con rampas de aceleración distintas, hasta pensé poner un micro para eso por eje de esa manera al independizarse es mas fácil, ahi el problema seria el sincronismo de los movimientos.

Pasa como querer construir con un solo microcontrolador un driver para tres ejes, que trabajen de la forma convencional con paso y dirección. Esto no es recomendable, ya que de ese modo la forma de trabajo es hacer un paso por cada pulso presente en la señal de paso en la dirección que indica el estado de la señal justamente de dirección. Es algo simple, pero con un solo micro no se podrían detectar dos pasos que vienen al mismo tiempo para dos ejes distintos, perderíamos uno de los dos pasos, además los pulsos de los programas suele ser de 1 microsegundo de ancho, yo uso ese valor en el mach, entonces la mejo forma es tratarlos por interrupción, pero no podemos tener dos interrupciones al mismo tiempo. Por eso ahí lo mejor es trabajar con un micro independiente por cada eje.

Me gusta el dicho, divide y vencerás jejeje

Saludos

MODIFICADO: reformule el último párrafo.
« Última modificación: 03 de Julio de 2008, 08:27:53 por ESTECA55 »
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Procesador CNC de Codigo G
« Respuesta #22 en: 03 de Julio de 2008, 04:20:17 »
Me alegro de que estés mejor!!! :mrgreen:


Eso es verdad, en lo que creo que vamos a diferir un poco es que vos vas a usar un driver convencional, sin control de corriente, la idea mía es aplicarlo a un driver con control de corriente, seguramente use alguno de los de mi web, la idea de esto es porque cuando termine mi nueva máquina, para probar va a ser muy censillo, desconecto la interfaz de la pc, conecto esta placa y listo, ya estoy controlando la máquina.

A lo que me refería es que con los driver con control de corriente al menos voy a tener 3 o 4 veces mas velocidad en los motores, con lo cual voy a necesitar mas velocidad de procesamiento, pero para empezar eso no es problema, lo primero es que ande bien, aunque sea despacio.

¿Porqué se gana en velocidad? Se supone que una etapa con transistores amplificando totalmente sobredimensionados van a dar toda la corriente que puedan en cada momento, y eso será la que necesite el motor, ¿no?

Obviamente la de desligar a la etapa del procesamiento la del control de las bobinas del motor es lo mejor, como vos decís ahí se gana en velocidad.

Es mas, yo estoy pensado en utilizar dos micros para procesar el G, asi se puede con uno leer el g, y hacer el calculo del movimiento, para los ejes, y después se lo pasa al otro que genera los pulsos teniendo en cuenta la aceleración velocidad y demás, y mientras ese produce eso el otro va haciendo los cálculos para las siguientes líneas de G.

Es mas, lo que mas me resulta complicado va  a ser como poder generar supongamos para 3 códigos g tres trene de pulsos de distinta frecuencia, y con rampas de aceleración distintas, hasta pensé poner un micro para eso por eje de esa manera al independizarse es mas fácil, ahi el problema seria el sincronismo de los movimientos.

Yo también había pensado en usar un micro para transmisión de datos, otro de decodificador y por último otro para los drivers...

Se puede mirar lo de poner un pic por eje...

Pasa como queres hacer un drive con un solo pic para tres ejes, yomo uso paso y dirección, eso no puedo usarlo, ya que la mejor forma de tratar eso es por interrupción, uso la interrupción de cambio de flanco, pero que pasa si los dos ejes se mueven al mismo tiempo, el pic no puede detectar dos cosas al mismo tiempo, perderíamos pasos, por ejemplo en el mach los pulsos de paso son de 1 microsegundo.

No entiendo este párrafo :(

Respecto al lenguaje, nunca use CCS, la idea mia es usar C18, ya que además cuento con un ICD2 para debuggear desde el MPLAB, pero me puedo adaptar a otra cosa, no hay tanto problema.

Vale, usamos el C18 (si el maestro es el que maneja mejor hacerle caso....)

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Procesador CNC de Codigo G
« Respuesta #23 en: 03 de Julio de 2008, 08:17:09 »
Hola Slalen,

Si queres entender mejor como funciona lo del control de corriente te recomiendo que pases por el siguiente link, veas y escuches el video, ahi trate de explicar del mejor modo como es esto del control de corriente:

Motor PAP a 3000 RPM con driver con control de corriente

El control de corriente es lo que se usa en todos los sistemas profesionales, o sea cualquier buen driver comercial es asi, es increíble la mejora que se logra, muy notable, obviamente no vas a poder trabajar a 3000 RPM como en el video ese, eso es en vacio, pero si tranquilamente trabajar a 500 o 600 RPM, cuando con un driver convencional, ni en vacio se llegra a las 600 RPM.

Que bueno que compartimos lo de usar Dos micros para procesar datos, tamos pensando mas o menos igual jeje

Vale, usamos el C18 (si el maestro es el que maneja mejor hacerle caso....)

Para.. ningún maestro ee, es mas siempre trabaje con ASM, hace poco que esoy incursionando en el C, y bueno lo único que vi fue algo de C18, nada mas, por eso en una de esas largarme con otro compilador no es tanto problema.

No entiendo este párrafo :(

Yo tampoco, jaja, ahi lo reformule, lo modifique, se ve que ya me estaban haciendo efecto las pastillas por la gripe anoche jejejeje

Saludos

Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Procesador CNC de Codigo G
« Respuesta #24 en: 03 de Julio de 2008, 10:54:07 »
Yo tampoco, jaja, ahi lo reformule, lo modifique, se ve que ya me estaban haciendo efecto las pastillas por la gripe anoche jejejeje

Ahora todo encaja!!!!!

No me había parado a pensar esa posibilidad.... Ok, pues entonces un PI16f84 por eje :mrgreen:

Desconectado Ferenczyg

  • PIC10
  • *
  • Mensajes: 20
Re: Procesador CNC de Codigo G
« Respuesta #25 en: 03 de Julio de 2008, 20:00:14 »
Holas

Respecto a si procesar de una pasada todo el conjunto de Gcodes, no creo haber dicho eso (o al menos no era la intencion), es mas, la logica indica que la tarjeta SD solo almacenaria el fichero con los Gcodes y de ahi se irian leyendo. No obstante, dado el tamaño de una tarjeta SD de las baratas (las de 32 MB cuestan como 10 euros) que otras opciones nos proporcionaría tener todo ese espacio? Es mas, vale la pena definir una tarjeta SD de un tamaño minimo (digamos 256 ó 512 MB) y hacer un preprocesado de todo el gcode, escritura a dicha tarjeta, y luego unicamente lectura y envio a los puertos? creeis que habria alguna ventaja en cuanto a velocidad, disminucion de necesidades de memoria del pic, etc.?

Btw, para arduino/reprap ya ha habido alguien que ha hecho un interprete de Gcodes:

http://reprap.org/bin/view/Main/Arduino_GCode_Interpreter

Nos acorta eso el camino de algun modo?

Salu2!


Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Procesador CNC de Codigo G
« Respuesta #26 en: 04 de Julio de 2008, 03:33:05 »
Hola compañeros del foro, veo que este proyecto ha sido bien acogido que bien espero que podamos avanzar bastante, al parecer llegar a un concenso para usar un mismo hardware no va a ser posible, pero si habrán algunos módulos y códigos de programa que podrán ser usados por todos.

Recuerden que este hilo trata la parte del control numérico de un CNC es decir, ve la interpolación, la lógica del PLC y la comunicación con los drivers. Detalles de como construir un driver pap o servos pienso que no deben ser tratados aquí, hacer un cnc básico es largo y no debemos perder el rumbo.

Las señales de interfaz con el driver es bastante parecido tanto para un pap como un servo, setp_dir_enable lo básico, y half/full y ALM como opciones al tipo de driver.

Veo que ya están proponiendo el hardware a usar, como usb memoria sd, número de pics, eso está bien, pero ahora debemos atacar el problema en lo principal, es decir la interpolación y como enviar el setp_dir a los tres drivers.

Todas las trayectorias de mecanizado pueden ser realizadas con estos dos bloques básicos:

G0_G1
G2_G3

Que les parece si desarrollamos estos bloques matemáticamente, y resolver algunas dudas como:

* podrá procesarse en tiempo real?
* Necesitará memria para almacenar los datos interpolados? será necesario almacenar también los tiempos?
* Si necesitamos memoria, que velocidad de escritura debe tener?
* Cómo enviar los datos interpolados como pulsos y dirección.
* La velocidad máxima de mecanizado.

Al responder estas preguntas y otras más, podemos definir el hardware con mayor presición.

Hay mienbros enchufados en esto como Esteca, Stalen, Ferenczyg, etc que bien.

saludos.

Pdta: Ya pues IvanCarlos colabora  :)
control de movimiento

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Procesador CNC de Codigo G
« Respuesta #27 en: 04 de Julio de 2008, 04:07:31 »
Empezando a ver el Primer bloque G0_G1



Esto puede ser representado por la sgte. línea de código G:

G1 X60 Y80 Z100 F400

Estuve haciendo los cálculos, tomando al eje X:

Resolución = 0.001mm = 1 paso   (por ejm)

Fórmulas Básicas:
Nºpasos = (Xf-Xi)/RES
T(A->B)=(Xf-Xi)*60/F         (seg)
T(1p)=(RES*60)/F          (tiempo de un pulso seg)

Nºpasos=(60-0)/0.001=60 000
T(A->B)=(60-0)*60/400=9seg
T(1p)=0.001*60/400=0.15mseg=150useg

Supongamos:

G0 en F=1000mm/min => T(1p)=60useg
G0 en F=8000mm/min => T(1p)=7.5useg

Sigamos con los cálculos, yo continuo después.

saludos.
control de movimiento

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: Procesador CNC de Codigo G
« Respuesta #28 en: 04 de Julio de 2008, 13:26:51 »
Yo puedo contar  mi experiencia con un aparatejo de estos questoy liado.

Empece con un pic18 usb , pero se quedo algo chico para este proposito , mas que nada  cambie por comodidad ya que todo se puede con uno de estos.
Con un pic33f da gusto , mas bits en los timmer + ram + mips etc .

prove varios metodos con la ayuda de nuestro amigo Manolo Nocturno , al final use para ir de paseo con los motores 2 timmers de 16 bits + otro para  marcar la velocidad aceleracion y desaceleracion .

va fino fino , aunque la aceleracion y desacel se queda corto con los saltos del contador y aunque es algo brusca la curva va bien  , se podria solucionar con una tabla o algo asi , al final ya lo refinare .

Muestra de parte del codigo en el sitio importante  , la acel + desacel + comandos la he sacado para no liar .


Código: C
  1. /*******************************  X  ***********************************/
  2. void __attribute__((__interrupt__))  _T5Interrupt(void) {
  3. /***********************************************************************/
  4. _T5IF = 0;    
  5.  
  6. if(Tics_X != 0){
  7.     SPED_X=0; asm("nop"); SPED_X=1;
  8.     Tics_X--;
  9.  
  10. }else T5CONbits.TON=0;   // fin
  11.  
  12. }
  13.  
  14. /*******************************  Y ************************************/
  15. void __attribute__((__interrupt__))  _T7Interrupt(void) {
  16. /***********************************************************************/
  17. _T7IF = 0;
  18.  
  19. if(Tics_Y != 0){
  20.     SPED_Y=0; asm("nop"); SPED_Y=1;
  21.     Tics_Y--;
  22. }else T7CONbits.TON=0;   // fin
  23.  
  24. }
  25.  
  26.  
  27. /*********** Velocidad y aceleracion desaceleracion ********************/
  28.  void __attribute__((__interrupt__ ))  _T2Interrupt(void) {
  29. /***********************************************************************/
  30.  
  31. _T2IF = 0;
  32.  
  33. // da los pulsos por un pin a los timers x y , configurados con entrada externa .
  34.  
  35. MOTOR_VELOCIDAD_CK=0; asm("nop");  MOTOR_VELOCIDAD_CK=1;
  36. }
  37.  
  38.  
  39. #define precision 0x1ff
  40.  
  41. /***********************************************************************************/
  42. void  goto_xy(unsigned int x,unsigned int y){
  43. /***********************************************************************************/  
  44.  
  45.  float tx,ty;
  46.  float temp1,temp;
  47.  
  48.  unsigned int Tck_Velocidad ;
  49.  
  50.  Cancela=0;
  51.  
  52.  Posicion_Hasta_X = x;
  53.  Posicion_Hasta_Y = y;
  54.  
  55.     if( x > Posicion_X ){
  56.        DIR_X = Avanza;
  57.        tx = x-Posicion_X;
  58.      } else if( x < Posicion_X ){
  59.        DIR_X = Retrasa;
  60.        tx = Posicion_X-x;
  61.      }
  62.  
  63.  
  64.     if( y > Posicion_Y ){
  65.        DIR_Y = Avanza;
  66.        ty = y-Posicion_Y;      
  67.      } else  if( y < Posicion_Y ){
  68.        DIR_Y = Retrasa;
  69.        ty = Posicion_Y-y;
  70.      }
  71.  
  72.  
  73.  
  74.      Tics_X = tx;
  75.      Tics_Y = ty;
  76.  
  77.      temp1=precision;
  78.  
  79.     Tics_Hasta_X=precision;
  80.     Tics_Hasta_Y=precision;
  81.      
  82.    
  83.  
  84.     if( tx != ty ){
  85.         if (tx > ty){    
  86.             Max_Tics = tx;  Desacelera_X=1;    
  87.             temp= (((tx ) / (ty)));
  88.             Tics_Hasta_Y = (temp )* precision;        
  89.         } else {    
  90.             Max_Tics = ty; Desacelera_X=0;  
  91.             temp= (((ty ) / (tx )));
  92.             Tics_Hasta_X =(temp )* precision;
  93.         }
  94.      }else {
  95.            Max_Tics=tx;  Desacelera_X=1;  
  96.      }
  97.  
  98.  
  99. TMR4=0;  TMR5=0; TMR6=0; TMR7=0; TMR2=0;
  100.  
  101. /*********  Carga timmer X *********/
  102.  
  103. asm("mov #_Tics_Hasta_X ,w0");
  104. asm("mov [w0++] ,w1"); // Alta
  105. asm("mov [w0] ,w2");   // Baja
  106. asm("mov w2 , PR5");   // Alta
  107. asm("mov w1 , PR4");   // Blta    
  108.  
  109. /*********  Carga timmer Y *********/
  110.  
  111. asm("mov #_Tics_Hasta_Y ,w0");
  112. asm("mov [w0++] ,w1"); // Alta
  113. asm("mov [w0] ,w2");   // Baja
  114. asm("mov w2 , PR7");   // alta
  115. asm("mov w1 , PR6");   // Baja
  116.  
  117.  
  118. T4CONbits.TON=1;
  119. if(Tics_X != 0)T5CONbits.TON=1;
  120. T6CONbits.TON=1;
  121. if(Tics_Y != 0)T7CONbits.TON=1;
  122.  
  123. T2CONbits.TON=1;   // a moverse
  124.    
  125. }


La precision es el valor fijo a poner al timmer que hara mas pasos , si los 2 recorren la misma distancia el valor sera el mismo en cada uno .
No son necesarios los 40MIPS A 12MIPS funciona tambien muy bien .
LOs comandos los envio por el puerto paralelo usando otra interrupcion y hay comunicacion simultania de su posicion en cada momento con el programa PC.
Es vastante rapido ya que se envian 8 bits para escritura y 4 para lectura de golpe , aunque con un pic24F + usb seria comodo tambien .


Pues nada , un poco por encima por si puede ayudar en ideas y si necesitais el codigo completo lo cuelgo .









Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Procesador CNC de Codigo G
« Respuesta #29 en: 07 de Julio de 2008, 18:27:19 »
Esteca, tu vídeo me ha convencido..... Felicidades por él....

Sispic, es muy interesante tu proyecto; se puede saber que va a ser????

Renatox_ a ver si me puedo poner a echar un unos cálculos


 

anything