Autor Tema: Proyecto: Torno CNC controlado por Arduino  (Leído 262601 veces)

Desconectado forane

  • Oficial 1ª
  • **
  • Join Date: Nov 2009
  • Mensajes: 2981
  • Ubicación: Sevilla
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #90 en: 17 Junio 2012, 22:36 »
En mi caso los drivers también son optoacoplados pero no he notado ninguna pérdida de pasos. Mis motores están configurados a 1000 pasos/rev.

Forane, ¿a qué frecuencias se produce esa pérdida de pasos? Lo digo por hacer alguna prueba.

Un saludo
Pues la verdad es que no sé a qué frecuencias pierde pasos. No tengo a mano la dirección de enlace con el artículo que achaca la pérdida de pasos al doble optoacoplamiento y a la lentitud de los optoacopladores que emplean en la placa. Para abrir boca, podrías mirar esta dirección y buscar en Google  KL-DB25:
http://www.buildyourtools.com/phpBB3/viewtopic.php?f=8&t=1094

Pepe.
Optimum 320X630; Enco Unimat 3; Elewer 9X20; fresadora Warco 6X26"; Limadora Atlas 7"; Sierra Rockwell-Delta 14"; Minifresadora horizontal Mygy  Etc.

Desconectado jcosch

  • Aprendiz
  • *
  • Join Date: Nov 2009
  • Mensajes: 86
  • Ubicación: Igualada (Barcelona)
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #91 en: 18 Junio 2012, 01:01 »
Pacol, te agradezco tu respuesta, parece mentira que una placa, aparentemente, tan sencilla y barata de tan buenos resultados, ya se cual tengo que comprar, por cierto gracias también a forane por sus comentarios.
torno Opti 240x500g, BF20cnc, sierra cinta Femi, soldador de hilo Lincoln, soldador TIG, cortador de plasma, taladro de columna Opti B23 Pro y maq.manuales varias(fresadora, taladros,sierra disco...)

pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #92 en: 18 Junio 2012, 07:49 »
Este es un proyecto que yo "casi" he comenzado varias veces. En mi caso he llegado un poco tarde al Arduino y al lenguaje C. Pertenezco a la "generación del 8080 y del Z80 (del que tengo un sistema de desarrollo). Cuando aparecieron los PIC's me quedé con el 16F877A y con él sigo. Programo principalmente en PicBasic Pro y directamente en assembler cuando no quiero que pierda el tiempo. Así que pacol: ¿Podrías incluir un diagrama de flujo de lo que has hecho?, y otra: ¿El lenguaje que has empleado con el Arduino maneja cálculos en como flotante?
Me he leído tu trabajo y me parece muy bueno. Muchas gracias por exponerlo.
Un saludo:
Dédalo

@Dédalo
Yo también provengo del Z80  ;), desarrollé en mis tiempos un juego para Spectrum (te acuerdas .brinda), que buenos tiempos...
Lo he programado en C++ y el PIC maneja sin problemas coma flotante. Otra cosa es la cantidad de datos a manejar, evidentemente hay que mantenerlos al mínimo, es un PIC de 8 bits/16Mhz. Al final todo consiste en hacer pruebas para las rutinas más críticas y ver donde está el límite en los tiempos de ejecución. Para darte una idea el hardware actual funciona con PWM a 1500 Hz y su límite lo estimo a 3 Khz, por encima de ello el PIC ya va a tener problemas. La idea es programar PWM a un frecuencia y generar una interrupción por cada pulso  :) Dentro de esa rutina de interrupción se tienen que realizar bastantes cálculos: rampas aceleración/deceleración, límites de movimiento, etc...
Después del verano aparecerá el Arduino Due a 96 Mhz/32 bits con lo que todo esto ya no tendrá ninguna importancia, pero como siempre ocurre se le "apretará" más  ::)

Lo del diagrama de flujo no lo había pensado pero no hay ningún problema, lo haré y lo colgaré aquí. De todas formas dime de que parte del programa quieres ese diagrama.

@forane

Efectivamente en el link hablan de la pérdida de pasos que achacan a la breakout pero no dicen ni palabra de cómo tienen configurados los drivers. Gracias por el link, seguiré investigando. Aumentaré los micropasos/velocidad lineal hasta que falle.
En el futuro usaré una placa mejor por si las moscas.

Edito  :-[:
La frecuencia máxima de pulsos al motor usada en el proyecto es de 5Khz que corresponde a 600 mm/min en el eje Z. El límite para el PIC debe estar en torno a 7 u 8 Khz.
« última modificación: 18 Junio 2012, 11:05 por pacol »

Desconectado tio_gil

  • Global Moderator
  • Oficial 1ª
  • ****
  • Join Date: Sep 2009
  • Mensajes: 3099
  • Ubicación: Madrid - España
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #93 en: 18 Junio 2012, 09:31 »
Pues otro que viene de aquella época, pero de la competencia del Z80: los 6502 de Rockwell y los 6800 de Motorola. Si, buenos tiempos... cuando se aprovechaba cada bit del byte dándole al coco para aprovechar cada microsegundo de ejecución (ay los programadores de hoy en día, que mal acostumbrados están !! )

Normalmente las coma flotante es un verdadero "quebradero de cabeza". Al final siempre se arregla  "a lo bruto" (más velocidad y/o pasar de 8 a 32 bits).
Si se puede trabajar con enteros, mejor (mutiplicadores y divisores de enteros suelen traer). Si ya te trae un bloque de coma flotante, el micro no es es de los "trivales".

Respecto a los optos, "suele" haber algún modelo de alta velocidad sobre el mismo encapsulado. Es cuestión de "rebuscar" (Onsemi, Avago, Vishay, Toshiba). Particularmente los que más me gustán son los de Avago (antigua HP)

A ver si tengo un rato para leer el post detenidamente (muy detenidamente), para hacer preguntitas. Estoy deseoso de ver ese diagrama de flujo. 8)



Torno Optimun D240x500 modificado, Fresa BF20L Vario modificada, mucha otra herramienta... y pocas ganas de trabajar !!

Desconectado Vider

  • Aprendiz
  • *
  • Join Date: Sep 2009
  • Mensajes: 1795
  • Ubicación: Madriles
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #94 en: 18 Junio 2012, 09:45 »
Yo los optoacopladores que uso son los CNY74-4 ó CNY74-2 (4 o 2 optos por chip), los suelen tener en cualquier tienda de electronica,

http://www.micropik.com/PDF/CNY74.pdf

Siempre me han ido bien, pero tampoco les he metido frecuencias muy altas,

Sds
Bridgeport Series I convertirda a CNC, Colchester Chipmaster 5x20, Sierra cinta S121G y muy poco tiempo para usarlos ...

pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #95 en: 18 Junio 2012, 11:24 »
Gracias por el enlace Vider

Según los datos del datasheet del CNY74 el período mínimo para estos optos está en torno a 30 microsec para corrientes de 15 mA lo que corresponde a una frecuencia máxima teórica de 66 Khz lo que los sitúa muy alejados del fallo a las frecuencias manejadas por nuestros drivers.

Esto es lo que yo (que no soy un experto) interpreto del datasheet.

Saludos

Dédalo

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #96 en: 18 Junio 2012, 12:01 »
Mi idea, un poco forzada porque tengo el disco del encoder es colocar uno en el husilloa del cabezal, 180 ranuras, y decodificar en cuadratura para la detección de giro. Por supuesto esto maneja una interrupción y lo demás hacerlo mientras llega el siguiente pulso. Hay que tener en cuenta que no se manejan velocidades elevadas para roscar. El 16F877A lo tengo a 20 MHz.

Cita de: pacol
Lo del diagrama de flujo no lo había pensado pero no hay ningún problema, lo haré y lo colgaré aquí. De todas formas dime de que parte del programa quieres ese diagrama.
Con que me digas de forma somera, es un decir, o por un diagrama de flujo cómo integras los pasos del motor del husillo de roscar entre los pulsos del encoder del cabezal.
Gracias
Dédalo



pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #97 en: 18 Junio 2012, 18:01 »
@Dédalo:

Bueno pues paso a describirte someramente el algoritmo de roscado (aún así ha salido tocho  8)).

En mi caso uso dos encoders: uno de 1 paso / rev para sincronizar el inicio del roscado (HRindex)
y otro de 25 pasos/rev para sincronizar el avance de roscado (HR). Con 25 pulsos/rev es suficiente. Si aumentas mucho los pulsos/rev tal vez tengas problemas para atender la rutina adecuadamente.

Es necesario que la velocidad del husillo sea siempre la misma al inicio de cada ciclo
de roscado, luego mientras se va realizando el roscado la velocidad del husillo puede variar ampliamente y el algoritmo la corregirá. Esto debe ser así debido a que el motor arranca en rampa desde cero y el inicio del roscado debe de realizarse en el mismo punto. Si la velocidad del husillo es distinta al anterior ciclo la herramienta no entrará en el mismo punto. Esto no es ningún problema, la aplicación espera un par de segundos antes de iniciar el movimiento para permitir una velocidad estable.

La idea básica es medir la posición de la herramienta cuando se genera un pulso HR respecto a donde debería estar teóricamente. Si vas por detrás tienes que acelerar la herramienta y si vas por delante pues decelerar.

Para hacer bien las cosas los cambios en la velocidad de un motor paso a paso deben realizarse mediante una rampa (una lineal es fácil de implementar)
 
El otro parámetro es el número de pulsos HR que deben realizarse para alcanzar la posición teórica.

Algo de código en C:

//--------------------------------------------------------------------
//los períodos están en microsec

  unsigned long Tm=micros()-Tmold; //tiempo en microsec entre dos pulsos HR
  Tmold=Tm;

  //pulsos HR de horizonte de regulación, Tact es el período actual de pulsos PWM
  unsigned long PulsosHRHorizonte=2500UL/Tact;  //constante empírica
  if (!PulsosHRHorizonte)
   PulsosHRHorizonte++;
  //------------------------------------
 
  //donde deberíamos estar ahora, posición teórica (en pulsos)
  float AvancePteo=AvancePsincro*gPulsosSincroHR; //avance teórico por pulso HR x pulsos HR realizados

  //donde deberemos estar en PulsosHorz pulsos (en pulsos)
  float AvancePteonext=AvancePteo+(AvancePsincro*PulsosHRHorizonte);

  //pulsos enviados al motor desde el punto inicial de referencia
  long AvancePreal=gPulsosSincroT;

  //diferencia entre la posición actual y la siguiente posición teórica (en pulsos)
  float OffsetPAvance=AvancePteonext-AvancePreal;

  gPrecisionSincro=AvancePreal-AvancePteo;   //desviación actual real-teórica (en pulsos)

  //con esta velocidad lineal alcanzaremos la posición teórica calculada en PulsosHRHorizonte pulsos
  //cálculo del nuevo periodo PWM a aplicar
  Tmeta=(float)(Tm*PulsosHRHorizonte)/OffsetPAvance;
//--------------------------------------------------------------------

Ahora ya tenemos el nuevo período que alcanzaremos tras una rampa en aceleración o deceleración.

El cálculo exacto de la rampa exige coma flotante pero se puede hacer de una forma aproximada mediante enteros.

En el código fuente tienes todos los detalles. De todas formas si necesitas alguna otra aclaración
pregunta libremente  :)

El cálculo de las rampas de los motores lo he tomado de este documento de Atmel:

http://www.atmel.com/Images/doc8017.pdf

Aquí hay un link muy interesante sobre el mismo tema:

http://eetimes.com/design/embedded/4006438/Generate-stepper-motor-speed-profiles-in-real-time

Un saludo

Paco
« última modificación: 19 Junio 2012, 07:38 por pacol »

Dédalo

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #98 en: 19 Junio 2012, 06:51 »
Muchas gracias por la información aportada, voy a ver si la digiero un poco.
Dédalo

pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #99 en: 19 Junio 2012, 20:10 »
Retomando el tema de las breakouts  :)

Hoy mismo me ha llegado esta desde cnc4you:

http://www.ebay.co.uk/itm/Breakout-board-CNC-Stepper-Motor-5-Axis-Spindle-Relay-/110897191760?pt=UK_BOI_Industrial_Automation_Control_ET&hash=item19d1fcdb50

Manual de usuario:

http://cnc4you.co.uk/resources/Breakout%20board%20HG07.PDF

Totalmente optoacoplada y usa optoacopladores sumamente rápidos. Todavía no la he probado pero tiene muy buena pinta. Es otra opción  :)

Un saludo
« última modificación: 19 Junio 2012, 20:12 por pacol »

pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #100 en: 24 Junio 2012, 19:27 »
Este fin de semana he realizado dos modificaciones en el hardware del torno:
-He cambiado el motor del eje Z del torno por uno de 4 Nm de CNC4YOU
-He cambiado la tarjeta breakout KL-DB25 por la de CNC4YOU (link en el post anterior)... y no hay color  8)

Este motor es MUCHO mejor que el anterior (uno chinorris normalito) y no genera vibraciones en ninguna velocidad, a diferencia del anterior que parecía una carraca.

Un poco mosca por las advertencias de forane respecto a la calidad/velocidad de la KL he hecho unas pruebas. Con la KL apenas podía llegar en el eje Z a 700 mm/min (con el motor antiguo y con el nuevo) con la nueva he podido alcanzar ¡ 2400 mm/min ! sin pestañear, esto supone una frecuencia de 20Khz con mi configuración de hardware.

Con el osciloscopio he podido observar como con la KL la señal de pulso se iba deformando conforme iba subiendo la frecuencia hasta que a 5Khz era un autentico churro. En cambio con la nueva los flancos de subida y bajada eran perfectos, bien rectitos  ;D a cualquier frecuencia.

Por lo tanto SÍ hay diferencia entre tarjetas.

Un saludo

Dédalo

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #101 en: 16 Julio 2012, 19:30 »
Cita de: pacol
Con el osciloscopio he podido observar como con la KL la señal de pulso se iba deformando conforme iba subiendo la frecuencia hasta que a 5Khz era un autentico churro. En cambio con la nueva los flancos de subida y bajada eran perfectos, bien rectitos   a cualquier frecuencia.

Eso parece un problema de adaptación de impedancias.

Tengo mi controladora de MPP diréctamente conectada al puerto paralelo: ¿Me aconsejas pues que compre esa breakout CNC4YOU?
Gracias
Dédalo


pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #102 en: 16 Julio 2012, 21:48 »
Hola Dédalo

Respecto a la adaptación de impedancias pues creo que no, tengo acoplados los drivers a la breakout (la KL) de forma directa, sin usar resistencias limitadoras de por medio, tal como recomienda el fabricante. La otra breakout también está acoplada de la misma forma. Las dos funcionan sin problemas a frecuencias medias/bajas, a partir de 5/6 Khz la de CNC2YOU demuestra mucha más calidad en la transmisión de señales. Yo te la recomiendo ya que además la diferencia de precio no es mucha.

Lo de conectar el driver directamente al puerto paralelo en teoría no debería haber ningún problema, en teoría  :D La mayoría de estos drivers van optoacoplados. Yo quemé una placa similar a la KL hace algún tiempo, deconozco el motivo, pero tal vez si hubiese usado una conexión directa mi portatil habría sufrido daños. Además la placa te permite usar las entradas al PC, estas van también optoacopladas.

Lo que sí he tenido es problemas de ruido procedente de los drivers  >:( >:( , y no dependía de la breakout (he probado tres) El problema aparece en las entradas de los inductivos usados como encoders en el husillo principal, la señal queda distorsionada en cuanto los drivers se conectan (el PWM imagino) y dejan las señales inutilizables. Al final he tenido que ir probando con diferentes modelos de drivers hasta que he dado con dos que generan un ruido aceptable y ahora funciona sin problemas.

Un saludo

pacol

  • Visitante
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #103 en: 29 Julio 2012, 13:47 »
Bueno, pues le he dado un avance al proyecto.

Después de ver ver un hilo muy majo sobre roscado cónico http://foro.metalaficion.com/index.php/topic,8925.0.html me dije: voy a intentarlo  8). Pues estoy muy contento, creo que ha salido bastante bien.  Otra cosa es saber si estas roscas tienen alguna utilidad para nosotros (a no ser que realices roscas de barras de perforación petrolera  ;D ;D ;D)

Rosca cónica (cono 1:5 y paso 1.5) sobre latón (la calidad del video no es muy buena, se desenfoca a veces  >:():

Roscado Cónico Métrico paso 1.5 Arduino Semi-CNC.mp4

Rosca terminada  :D





Otra bonita rosca cónica sobre aluminio (cono Morse 2, paso 1.75):



La versión del software es la 1.3.7 . Colgada junto con el simulador en: https://skydrive.live.com/?cid=6AD42DDB4C344A5B&id=6AD42DDB4C344A5B!152&sc=documents

Un saludo veraniego a todos
« última modificación: 31 Julio 2012, 10:45 por pacol »

Desconectado eaionin

  • Oficial 1ª
  • **
  • Join Date: Mar 2010
  • Mensajes: 2036
  • Ubicación: Malaga
Re:Proyecto: Torno CNC controlado por Arduino
« Respuesta #104 en: 29 Julio 2012, 14:10 »
Muy bueno. Ya puedes iniciar la producción en masa de "rompetroncos". Hay varios hilos abiertos en el foro sobre ellos.
Saludos
un tallercito muy lejos y poco tiempo para disfrutarlo