Autor Tema: Como conectar LinuxCNC a Arduino  (Leído 15644 veces)

Pablo20061

  • Visitante
Como conectar LinuxCNC a Arduino
« en: 13 Octubre 2013, 01:32 »
Hola,
Estoy intentando conectar LinuxCNC con Arduino para mover una fresadora con drivers Pololu. Hasta el momento he logrado ponerla en marcha con el programa TxapuCNC pero al intentarlo con LinuxCNC me pierdo, se que hay que utilizar cuatro ficheros:  un sketch que se carga en arduino llamado (halintf.pde), y (arduino.py), (arduino-vcp.hal) y (arduino-vcp.xml), estos tres último no termino de entender cómo funcionan, qué tengo que hacer con ellos, etc; en su momento lo explicó con detalle Jbecerra pero mis conocimientos de Linux son más que rudimentarios y no hago otra cosa que dar palos de ciego a la hora de organizar el sistema. Agradecería si alguien tiene la amabilidad de echarme una mano en este berenjenal.   

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:Como conectar LinuxCNC a Arduino
« Respuesta #1 en: 13 Octubre 2013, 11:37 »
Hola.

En breve quiero hacer un montaje donde ira el arduino conectado al linux, intentare explicar paso a paso los procedimientos que vaya haciendo.

Es para intentar unir en un solo experimento el control PID, la comunicacion arduino-cnc y el control en lazo cerrado para actuar sobre un servomotor.

Voy a usar el eje Y del amigo Michel que esta montado sobre patines y movido por un servomotor.

Un pendulo invertido en la mesa del eje que leera su posicion por medio de un vulgar potenciometro para realimentar a traves del arduino el PID que procesara el linux para mantenerlo en equilibrio.

Si tienes la paciencia necesaria podras leerlo en el foro.

Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

Desconectado DEVILHUNTER

  • Aprendiz
  • *
  • Join Date: Ago 2010
  • Mensajes: 572
  • Ubicación: Oviedo/Madrid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #2 en: 13 Octubre 2013, 19:22 »
Hay un HAL de arduino para LinuxCNC, pero los propios creadores no recomiendan usar el arduino para controlar los motores paso a paso por no tener suficiente capacidad de cálculo. Es más para obtener salidas y entradas extra para elementos auxiliares.

¿Vas a leer el potenciómetro con el arduino? La función de lectura analógica era bastante lenta también, ¿crees que será capaz de computarlo con suficiente velocidad?

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:Como conectar LinuxCNC a Arduino
« Respuesta #3 en: 14 Octubre 2013, 10:18 »
Devilhunter, me lo puedes explicar? quien no tiene capacidad, un Arduino? el linuxCNC? por qué?
y que pasa si en vez de usar un arduino usas algo más, digamos, potente? (pej, el mismo arduino, pero pasando del soft y usar el micro como tal- aun que yo personalmente no pienso en ese...ni en "los más conocidos" 8) )
como suele "verlos" el linuxCNC (o como se deberían conectar para que todo vaya "como sobre patines de bolas engrasado") estos "inventos"?
Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

Desconectado DEVILHUNTER

  • Aprendiz
  • *
  • Join Date: Ago 2010
  • Mensajes: 572
  • Ubicación: Oviedo/Madrid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #4 en: 14 Octubre 2013, 11:23 »
El arduino, tio_gil. Según la sección de preguntas comunes, se puede usar para controlar los motores y los encoders, pero recomiendan usar el puerto paralelo por ser más fácil de programar y más rápido:

http://emc2arduino.wordpress.com/faq-2/faq-hal2arduino/

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:Como conectar LinuxCNC a Arduino
« Respuesta #5 en: 14 Octubre 2013, 15:21 »
Pues si que tiene narices... Me da que cada vez los programadores (y lo siento si alguno se da por aludido siendo de esa profesion) no se quiebran los cuernos para hacer FW rápido, pequeño y eficiente.
Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

Desconectado Jbecerra

  • Aprendiz
  • *
  • Join Date: Feb 2011
  • Mensajes: 772
  • Ubicación: Mairena del Alcor, Sevilla.
Re:Como conectar LinuxCNC a Arduino
« Respuesta #6 en: 14 Octubre 2013, 15:21 »
Hola.

En el montaje que quiero hacer se usaría al arduino como convertidor AD, leyendo el valor del potenciometro y enviándolo por usb al linux en digital.

El tiempo que tarde en hacer la conversión y el envió es lo que quiero saber, y si usando la programación que trae su ide me funciona ya habré avanzado algo.

Siempre queda tiempo para programarlo a mas bajo nivel, pero no es ese ahora mi problema.

También habría montajes mucho mas rápido para analizar el comportamiento del PID en un péndulo invertido, como por ejemplo usar un encoder directamente y leerlo por el puerto paralelo o poner un supermicro de los modernos que viene ya hasta con un linux pasando del arduino.

Es tan solo otro experimento mas para intentar comprender cada uno de los conceptos del PID e intentando usar los elementos mas asequibles.

He pensado (probablemente equivocado) en lo siguiente.

-A mas de 25 fotogramas por segundo el ojo humano falla y lo que falta se lo inventa.
-Casi cualquier humano es capaz de mantener una escoba invertida sobre la palma de mano en equilibrio.
-Como el humano utiliza la vision para mantener el equilibrio de la escoba, seria suficiente realimentar el PID a mas de 25 veces por segundo y a eso quizás pueda llegar el arduino usando su entorno ide.

Y despues de todo, no seria el primero que no me funciona, ni el segundo, ni el tercero,... Pero soy joven y puedo aprender ;)

Pablo, perdona pero te estamos vampirizando el post.


« última modificación: 14 Octubre 2013, 15:23 por Jbecerra »
Torno chino 280 -700, Fresadora BF-20. Ceneados.Con Linuxcnc.

Desconectado dedalo1111

  • Aprendiz
  • *
  • Join Date: Jul 2010
  • Mensajes: 918
  • Ubicación: Madrid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #7 en: 14 Octubre 2013, 19:03 »
Hola, no te falta razón Tio Gil... el tema es que Arduino son plataformas "educativas" para acercar la informática a todo el mundo, lo que permite poner al alcance muchas cosas de otras formas imposible... pero obviamente, 16Mhz dá para lo que dá si encima lleva más capas que una cebolla.

Os cuento un poco como llevo yo este tema de conectar LinuxCNC a un controlador externo....

El tema es que necesitas leer los encoders (si los hay, caso de servos) y enviar la orden motor con una cadencia "exacta" de 1ms. Dispones de solo ese tiempo para hacer la tarea, si lo has de emplear en "interpretar código"... te pasas de tiempo a nada que no esté super-optimizado tu código y/o el Bus no sea rápido.

Esto hace que los requisitos ya se metan en niveles "serios" y las soluciones no pueden ser tan simples como en un proyecto "educacional".

.................

Como estos días he estado cotilleando por el mundo de las impresoras 3D, hay una aproximación que me ha parecido mucho más modular. Date un vistazo a RAMPS, lo que hacen con Arduino es embeber un pequeño intérprete de GCode (Marlin por ejemplo) y el generador de trayectorias... por apenas 15€ tienes una breakboard en eBay. El sistema lo completan unos pequeños drivers PaP (<2A), pero puedes usar los que te gusten (son pines)

Para conectar eso solo tendrías que enviar desde LinuxCNC los GCODE G0 G1 "tal cual" al Arduino por el USB y tirando... eso sí, la aceleración y demás LinuxCNC deja de tener el control y pasa a Marlín.

Un saludo y espero te sirva de ayuda.
Fresadora Wabeco F1200E CNC, Torno Warco WM-180, Sierra FEMI 780XL, cortadora porex FDC4

Desconectado juanpefrutos

  • Aprendiz
  • *
  • Join Date: Ene 2011
  • Mensajes: 275
  • Ubicación: Valladolid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #8 en: 14 Octubre 2013, 21:04 »
¿Alguien se ha planteado utilizar el arduino due para estos menesteres?. Lo digo desde la mas profunda de las ignoracias, pero considerando que funciona a 84MHz frente a los 16MHz del arduino "normal" supongo que mayor capacidad para acometer tareas si tendra. Otro problema puede estar en la necesidad de adaptar los niveles de tensión puesto que trabaja a 3,3V lo cual supondría una placa intermedia.
Saludos
Torno chester 920 +fresadora BF 28 Vario+ taladro de mano Bosch + martillo + alicate + sierra de mano

Pablo20061

  • Visitante
Re:Como conectar LinuxCNC a Arduino
« Respuesta #9 en: 15 Octubre 2013, 00:34 »
Gracias Jbecerra, esperaré impaciente; aunque me temo que tu proyecto anda por unos niveles poco asequibles para mí espero que me proporcione pistas.
He estado probando el Emc2arduino y las librerías digitalwritefast pero no me terminan de encajar las piezas. Subo el Emc2arduino al arduino UNO pero luego hay algunos pasos en los comentarios de los ficheros que no entiendo:
4. Edite el archivo custom.hal incluido, ajuste a sus necesidades.
5. Copie este archivo custom.hal incluidos en dicha carpeta "my-mill"/i].
En mi caso el archivo custom.hal solo tiene dos líneas y no veo qué ajustes puedo hacer ahí.
Por otra parte el arduino conecta con el puerto /ttyACMO  pero el "EMC2 Stepconf" no aparece dicho puerto (lo intento con /ttyUSB0 y sudo ln -s /dev/ttyACM0 /dev/ttyUSB0 en la terminal pero parece que no es la solución).
Gracias de nuevo.
 

Pablo20061

  • Visitante
Re:Como conectar LinuxCNC a Arduino
« Respuesta #10 en: 15 Octubre 2013, 00:52 »
Gracias dedalo, RAMPS y REPRAP está en mis intereses cercano, ya lo he estado estudiando, pero quería explorar y comprender antes esta otra alternativa.
Dices enviar desde LinuxCNC GCODE G0 G1 "tal cual" al arduino, ¿éso como se hace? (perdona mi ignorancia), en linuxCNC, como comentaba, no me aparece el puerto ttyACMO con el que conecta arduino.

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:Como conectar LinuxCNC a Arduino
« Respuesta #11 en: 15 Octubre 2013, 08:51 »
Dedalo1111: Guardaré los link para echarles un vistazo con paciencia, que es lo que me fata estos días.

Juanpefrutos: es más o menos a eso lo que me refería. Que la gente dice: ah!no me llega con 16MHz (o la que quieras poner), pues más !!. Ah! que no me llega la memoria, pues más (típico en los PC's) !! Oiga OP-TI-MI-CE... o haga las cosas como hay que hacerlas (Juanpe, que no te estoy echando la bulla, es que son de las cosas que me encienden). Como dice Dedalo1111, son plataformas educativas.
Ya lo he dicho otras veces: quieres estrujar a lo bestia? usa la plataforma hardware Arduino (que está muy bien y sale muy barata) y usa el micro tal cual.
En lo que trabajo, hace ya años, se les ocurrió sacar un entorno de desarrollo "para los que no saben programar". Iba bien, pero la gente empezó a usarla para lo que no es (es decir, estrujar) y al final hubo que quitarla, porque daba más problemas que otra cosa (es decir, el soporte que había que dar era enorme y la rentabilidad poca y ya se sabe como funcionan los americanos)

Siento el rollo (y salirnos del hilo un pelo)

P.S.: Por lo que veo, el micro va a 16Mhz y si el micro es de 1MIPS/MHz (creo no equivocarme de PN), eso da 16MIPS, es decir 16 millones de instrucciones por segundo = 16000 instrucciones por milisegundo). Si vas "a pelo" controlando el micro (no hablo de asembler), un 1ms da para mucho. Si hay una capa por encima (pej, en un PC, el sistema operativo), esto cae en picado. Un micro (con un solo core), por muuuuuuuy rápido que vaya, ejecuta una instrucción detrás de otra, no en paralelo.
Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

Desconectado jordi3sk97

  • Aprendiz
  • *
  • Join Date: Jun 2010
  • Mensajes: 882
  • Ubicación: Cerca de Barcelona
Re:Como conectar LinuxCNC a Arduino
« Respuesta #12 en: 15 Octubre 2013, 09:30 »
../..
En el montaje que quiero hacer se usaría al arduino como convertidor AD, leyendo el valor del
potenciometro y enviándolo por usb al linux en digital.

Y algo así no seria mucho mejor que leer un potenciometro ?

http://www.renishaw.es/es/nuevo-chip-de-encoder-magnetico-de-12-bits-am4096--10829

Estás seguro de la linealidad de un potenciometro para esto ?

Desconectado fleming

  • Aprendiz
  • *
  • Join Date: Dic 2009
  • Mensajes: 737
  • Ubicación: BCN-A Coruña (cuando puedo)
Re:Como conectar LinuxCNC a Arduino
« Respuesta #13 en: 15 Octubre 2013, 09:58 »
Buenas,
Ayer escribí un post pero debí cerrar antes de mandarlo... venía a decir algo así:
Pues si que tiene narices... Me da que cada vez los programadores (y lo siento si alguno se da por aludido siendo de esa profesión) no se quiebran los cuernos para hacer FW rápido, pequeño y eficiente.
Noi escupas "para arriba" que tu también eres programador!!!
Por lo que he entendido del post de wordpress, lo que hace es consultar y actualizar todas las entradas y salidas del arduino, por eso no es apropiado para controlar motores, no está optimizado para este menester (es como si a Usain bolt le haces correr los 100m lisos con un saco de 25 kilos ala espalda...), faltaría desarrollar un firmware para el arduino (y si me apuras para el ATMEGA en Assembler) específico para mover tres o 4 ejes.
En las reprap, el soft manda comando Gcode por el puerto serie a 115200 y las impresoras se mueven realmente rápido (más que cualquier CNC que he visto), así que el cuello de botella no estaría ahí.
La RAMPS no es más que un Breakout Board, para poder conectar el Arduino y los drivers, los stepstick y su clones que están basados en el A4988de allegro micro, que dan hasta dos amperios... pero si le pides 1A... empiezan a calentarse de lo lindo (hay que meterle disipador y ventilación forzada)


Dices enviar desde LinuxCNC GCODE G0 G1 "tal cual" al arduino, ¿éso como se hace? (perdona mi ignorancia), en linuxCNC, como comentaba, no me aparece el puerto ttyACMO con el que conecta arduino.

Si cargas en el Arduino el firmaware adecuado, lo único que tienes que hacer es mandar los comandos GCODE por el puerto serie, Putty, hyperterminal o con un pulsador morser (si eres capaz de hacerlos a 115200bps jejejeje), en el arduino lo que está cargado es un interprete GCODE, que traducirá en movimientos en lo motores pap.
Firmwares:
-GRBL: Está desarrollado para máquinas CNC, aqui la lista de GCODES soportados
-Marlin y Sprinter: basado en el anterior, si te fijas han implementado muchos comandos para impresoras 3D (por ejemplo los comandos M y N), pero verás que sigue habiendo muchos GCODES para CNC...

Perdón por el chorreo de links y dar tanto la barrila, pero es que veo tan evidente que se podría hacer una CNC basada en arduino+firmaware de reprap... que me da pena que nadie se ponga a ello... Ya me gustaría a mi tener tiempo para ponerme (me pondré, pero dentro de mucho). El único inconveniente es que los softwares de referencia, no tienen implementado la posibilidad de mandar los comandos Gcode's a otro intérprete... bueno, la realidad es que tanto Mach3 como EMC2 son dos intérpretes de GCODE basados en pc para controlar directamente los drivers... El arduino hace exactamente eso... y con velocidades de 200mm/s (yo mi impresora la he puesto a 300mm/s) que para una CNC casera es más que suficiente... es más en ese escenario el cuello de botella estaría en el harware (fresadora, motores, drivers), más que en el software.

Perdón por el offtopic, que esto daría para otro hilo, que aunque es arduino y CNC... mi comenario es más sobre el firm de reprap, y no sobre como conectar el arduino al linuxCNC
« última modificación: 15 Octubre 2013, 10:02 por fleming »

Desconectado dedalo1111

  • Aprendiz
  • *
  • Join Date: Jul 2010
  • Mensajes: 918
  • Ubicación: Madrid
Re:Como conectar LinuxCNC a Arduino
« Respuesta #14 en: 15 Octubre 2013, 10:25 »
Jejejeje, Tio Gil programa... pero le tiran más los voltios  :P :P

Yo cuando empecé a ver como se lo habían montado es RepRap pensé lo mismo "ostia, esto es una CNC básica"... pero remarco lo de básica, entre las mejoras de Marlin es que "ahora" controla la aceleración (cosa básica en LinuxCNC) y el planificador de trayectorias es 2D (xy) y ni de lejos hables de Kinemática, movimientos coordinados en 4 ejes, cambios de herramientas o compensaciones.

Lo que me gustó con diferencia, es la división de "funciones" entre la consola de trabajo, el driver y el firmware... puedes intercambiar "con pocos cambios" entre unos proyectos u otro si algo mejor.

Hay otra aproximación por ahí "rulando" que es embeber el LinuxCNC en otras placas más potentes (Olimex).... pero eso es otro post como bien dices.

............

Pablo, mira este enlace que pusieron a HAL2Arduino esa sería una forma simple de empezar (que se puede mejorar), solo que tu programa no necesita "cocinar" las coordenadas de 6 ejes, sino directamente enviar en formato GCode al puerto serie como dice Flemming.

Salu2
Fresadora Wabeco F1200E CNC, Torno Warco WM-180, Sierra FEMI 780XL, cortadora porex FDC4