# Duda para comenzar una interface de una CNC



## juanma2468 (Mar 4, 2017)

Hola gente, queria consultar esta duda que se me presento al momento de querer hacer mi propia interface y driver para mi futura CNC. La mayoria de las interfaces que he visto trabajan por puerto paralelo, que es lo que voy a utilizar y la utilizare junto con el software Mach 3. Ahora bien, la mayoria de las interfaces trabajan con drivers para motores PAP para manejar los ejes, pero buscando información y viendo varios videos de como funcionan, he llegado a la conclución de que es mejor trabajar la CNC con motores DC para aumentar la velocidad, cosa que los motores PAP no tienen. Hasta aquí ya tengo definido que la interface va a usar el puerto paralelo y que los motores van a ser motores DC con encoders absolutos para mover los ejes. La salida del driver manejará al motor con PWM, eso está claro. El progama Mach 3 por cada eje emite 2 tipos de señales, una la de dirección (indica para que lado tiene que girar el motor) y la de pasos (esta señal depende de la cantidad de pasos/vuelta de cada motor/encoder, lo que se me complica es la forma de encarar con un micro el tema de los pasos que va a emitir el programa mach 3 con los encoders y la salida PWM. O sea, se cuando los pasos comienzan y por ende el PWM va a ser el minimo y de ahi irá en aumento, pero el tema es como se cuando van a terminar los pasos para poder ir reduciendo el PWM para que el motor no se pase de la posición original en que debe detenerse. Adjunto una imagen de un driver de este tipo para que vean.

Pido me den alguna idea de como determinar cuando comienza y cuando termina la señal de pasos. Desde ya muchas gracias.


----------



## papirrin (Mar 4, 2017)

No hay manera de determinar eso que quieres o sería muuuuuy complicado.
Existen motores PAP de "alta" velocidad $$$...


----------



## juanma2468 (Mar 4, 2017)

Pues de hecho existen, como se puede ver en la imagen que adjunte, no creo que sean tan complicados. Creo que la clave debe estar en los pulsos de salida. Imagino que tanto al comienzo como al final de la trayectoria los pulsos deben ser mas anchos imagino, para asi poder cumplir con las rampas de aceleración y desaceleración  que el programa mach3 te permite configurar. Pero no estoy seguro de ello, es lo que intuyo


----------



## papirrin (Mar 4, 2017)

Quizás no me explique bien, yo no dije que no existieran, lo que no se puede determinar es la solución a tu problema... 
A grandes rasgos tendrías que almacenar en un buffer todo el proceso que será como si lo hiciera un motor PAP (ojo con eso) después el microcontroladir tendrá que calcular de acuerdo al peso presión y etc La velocidad y los fines de carrera. Cosa que una PC hace sin problemas.
Como dije y sostengo hasta ahora... muy complicado!
Ese aparato que pusiste no lo hace una persona...lo hace una compañía con cientos de personas...
Eso es lo que opino.


----------



## juanma2468 (Mar 4, 2017)

Pero el programa mach3 ya realiza ese calculo de trayectorias y tiene entradas para finales de carrera mecánicos que determinan las máximas dimensiones de trabajo de la CNC . De todas formas me falto aclarar que mi CNC va a ser de 2 ejes X e Y ya que el Z no lo voy a usar dado que utilizo un láser de 5.5W por lo que no van a sufrir esfuerzos los ejes más que la de poder moverse ellos mismos


----------



## papirrin (Mar 4, 2017)

Yo mejor intentaría buscar motores de alta velocidad... o quizás ni eso necesitas... Los motores PAP normales sin peso son bastante rápidos y con algún engranaje puedes duplicar la velocidad...


----------



## locodelafonola (Mar 4, 2017)

Hola 





juanma2468 dijo:


> Pero el programa mach3 ya realiza ese calculo de trayectorias y tiene entradas para finales de carrera mecánicos que determinan las máximas dimensiones de trabajo de la CNC . De todas formas me falto aclarar que mi CNC va a ser de 2 ejes X e Y ya que el Z no lo voy a usar dado que utilizo un láser de 5.5W por lo que no van a sufrir esfuerzos los ejes más que la de poder moverse ellos mismos


Y desde ya perdon por meter "la cuchara" ., amigo ....... hay un pequeñisimo detalle ., muy pequeño ., y casi insignificante​ Estas habando de aumentar la velocidad de los motores ., pero el detalle .,  es la velocidad de comando del soft MACH3 ., por mas que tengas velocidad del motor ., si el soft no la tiene ., los motores iran lentos​ Los motores pap ., pueden ir mas rapido (muchisimo mas) ., pero el soft no lo permite (los motores usados hasta ahora)​ Talvez tendrias que fijarte en ese detalle ., si puede ir mas rapido (ordenes)​


----------



## juanma2468 (Mar 4, 2017)

Pues el soft con 1Gb de ram y el procesador que tiene puede correr sin problemas a la minima frecuencia de 25000Hz, y suponiendo unos 2000 pasos por vuelta de motor me da que puede dar mas de 10 vueltas por segundo lo cual creo es una velocidad aceptable en comparación con un pap y varillas roscadas.

De todas formas, estaría interesado en intentar armar un driver para estos motores ya que por la red no encontré ningún esquema ni como plantear el problema, y me gustaría poder desarrollarlo y postearlo aquí para que pueda estar al alcance de quien guste, los driver de pap están mas que estudiados y desarrollados, por eso también quisiera encarar algo diferente a lo que ya esta [emoji6]


----------



## papirrin (Mar 4, 2017)

No se refiere a la capacidad del procesador... normalmente y digo normalmente los programas no se rigen por el tiempo del procesador sino del RTC del computador... Estos RTC no tienen mucha resolucion. De cualquier manera quizás el programa (no el hardware del PC) sólo este diseñado para la máxima velocidad de un PAP...
No creo que usar varillas roscadas sea buena idea si quieres velocidad... seria mejor bandas dentadas... 
El detalle no está en si pueden ir más rápido los PAP en comparación del DC, sino que el MACH3 no está diseñado para eso... seria mas fácil y práctico buscar otro software para los DC


----------



## juanma2468 (Mar 4, 2017)

Y que software me puedes recomendar para los motores dc con salida por puerto paralelo? Lo ideal seria que ya entregara la salida pwm directamente, luego con un filtro pasa bajos obtengo una continua que sensaría con un micro y en función de ese valor de continua aumento o disminusco el ciclo del pwm que manejaría al motor.
Por cierto yo voy a usar correas dentadas no varillas.


----------



## locodelafonola (Mar 5, 2017)

hola





juanma2468 dijo:


> Pues el soft con 1Gb de ram y el procesador que tiene puede correr sin problemas a la minima frecuencia de 25000Hz, y suponiendo unos 2000 pasos por vuelta de motor me da que puede dar mas de 10 vueltas por segundo lo cual creo es una velocidad aceptable en comparación con un pap y varillas roscadas.
> 
> De todas formas, estaría interesado en intentar armar un driver para estos motores ya que por la red no encontré ningún esquema ni como plantear el problema, y me gustaría poder desarrollarlo y postearlo aquí para que pueda estar al alcance de quien guste, los driver de pap están mas que estudiados y desarrollados, por eso también quisiera encarar algo diferente a lo que ya esta [emoji6]


 ¿¿¿¿ que tiene que ver la velocidad de la maquina ., con la velocidad de proseso  ?????​ ¿¿¿¿ Alguna vez viste un torno de control numerico ???? ., a menos que intervengas en el programa .,la velocidad de proceso es inamovible ., (se hace lento .,  para evitar errores de direccionamiento)​ Ese driver que mostras ., sospecho que es para otro tipo de soft ., no MACH 3​


----------



## juanma2468 (Mar 5, 2017)

locodelafonola dijo:
			
		

> ¿¿¿¿ que tiene que ver la velocidad de la maquina ., con la velocidad de proseso  ?????


Y cito textualmente del Manual en castellano del programa Mach3, página 36, subindice 5.2.2 "Definiendo las frecuencia de la maquina"


			
				Manual en castellano del programa Mach3 dijo:
			
		

> El  controlador  Mach3  puede  trabajar  a  una frecuencia  de  25.000  Hz  (pulsos  por  segundo),  35.000  Hz  o 45.000 Hz dependiendo de la velocidad de su procesador y otros programas cargados mientras se ejecuta Mach3.
> La frecuencia que necesita depende de la máxima tasa de pulsos que necesita para controlar cualquier eje y su tope de velocidad. 25.000 Hz probablemente será apropiada un sistema de motores paso a paso. Con un controlador de 10 micro pasos como el Gecko 201, obtendrá alrededor de 750 RPM para un motor paso a paso estándar de 1,8º. Una alta tasa de pulsos son necesarios para controlar servo motores que tienen un codificador de alta resolución en el motor. Mas detalles pueden obtenerse en la sección afinación del motor.
> Computadoras con un reloj de 1 Ghz de velocidad casi seguro que ejecutará a 35.000 Hz si puede seleccionar esta cuando necesite altísimas tasas de pasos (e.g. si tiene una varilla roscada de paso muy fino).
> La versión de demostración solo se ejecutará a 25.000 Hz. Además si Mach3 es forzado a cerrarse entonces en el reinicio automáticamente se configurará para operar a 25.000 Hz. La frecuencia real en el sistema que se está ejecutando es mostrada sobre la pantalla “Diagnostics”.





			
				locodelafonola dijo:
			
		

> ¿¿¿¿ Alguna vez viste un torno de control numerico ????


No personalmente, pero si vi muchas por youtube 

----------------------- Actualización --------------------------------
Fuente: http://www.flashcutcnc.com/cnc-controls
Cito:


> Stepper vs Servo Stepper motor control is the most cost-effective way to control a  machine tool. The accuracy is exceptional, and the price is very  reasonable. All of our stepper systems are micro-stepping, giving you  great smoothness and accuracy.  The only limitation is that the maximum  speeds for rapid moves and cutting moves are not as high as for servo  control.
> Servo control uses feedback from an encoder to constantly monitor the  machine tool's exact position. Using the feedback signals, the control  system can achieve very high speeds and perfect accuracy, even under  very strenuous conditions.


Traducción:


> Motores PAP vs Servo Motores (motores DC)
> El control de motor paso a paso es la forma más rentable de controlar una herramienta de una máquina. La precisión es excepcional, y el precio es muy razonable. Todos nuestros sistemas paso a paso son micro-pasos, dándole gran suavidad y exactitud. La  única limitación es que las velocidades máximas para movimientos  rápidos y movimientos de corte no son tan altas como para el servo  control.
> El servo control utiliza  la retroalimentación de un codificador para monitorear constantemente la  posición exacta de la herramienta de la máquina. Utilizando las  señales de retroalimentación, el sistema de control puede alcanzar  velocidades muy altas y una precisión perfecta, incluso en condiciones  muy agotadoras.




Por otro lado también leí que cuando los motores PAP se calientan aveces pueden perder pasos, con lo cual arruina el trabajo que estas haciendo, en cambio los servo motores nunca pierden pasos. Hay muchas más ventajas en los servos motores que en los PAP, por supuesto que los sistemas de servo motor son más costosos, pero en mi caso serán de piesas recicladas, por lo que no es un problema.


Googleando un poquito nomas, encontre un soft que permite trabajar con motores PAP y servo motores
http://tallerdedalo.es/web/MundoCNC/Software
El unico problema es que es para linux y yo cuento con windows, pero si no encuentro ninguno para windows instalaré el linux.


----------



## papirrin (Mar 5, 2017)

a mi me parece muy extraño esto:


> Computadoras con un reloj de 1 Ghz de velocidad casi seguro que ejecutará a 35.000 Hz si puede seleccionar esta cuando necesite altísimas tasas de pasos (e.g. si tiene una varilla roscada de paso muy fino).



los timers de la mayoria de los compiladores  se generan con el RTC(reloj de tiempo real), porque hacer un reloj con la velocidad del procesos del cPU dependeria de muchos factores (multitask y etc) y no serial real, es como hacer un reloj con un PIC que no son nada precisos, en cambio un modulo RTC si lo es... ademas que no esta contemplando la velocidad del puerto en su especulacion.

pero claro depende de como ese diseñado el Mach3 y es probable que sea correcto  lo que afirma y la verdad no me interesa investigarlo.

y Por curiosidad... que vas a hacer con el laser que necesitas bastante velocidad?


----------



## juanma2468 (Mar 5, 2017)

Quiere la mayor velocidad solo para no morirme de angustia esperando, por otro lado el uso va a ser variado, desde cortes, pcb, grabados, etc


----------



## papirrin (Mar 5, 2017)

> Quiere la mayor velocidad solo para no morirme de angustia esperando, por otro lado el uso va a ser variado, desde cortes, pcb, grabados, etc


creo que te estas ahogando en un vaso de agua... ni las maquinas industriales son tan veloces al hacer cortes, grabados y etc, todo depende de la capacidad del laser o lo que sea para realizar el trabajo, no de la capacidad de movimiento de los motores.


----------



## juanma2468 (Mar 5, 2017)

Todo va de la mano. Mi laser no es muy potente, por lo que para cortes se puede optar por o bien pasar lento o bien pasar varias veces por el mismo lugar a mayor velocidad. De todas formas la velocidad me interesa mas que nada en grabados que no requiere tanta precisión ni tanta potencia.
Pero si cuento con una cnc rápida puedo trabajarla lenta o rápida a mi gusto, en cambio si ya es lenta de ahí no salgo



A esto es a lo que me gustaría llegar de ser posible o lo más cercano posible.





Tambien he visto que se pueden hacer placas pintando las pcbs con pintura y que el laser queme la pintura como en esta cnc.


----------



## papirrin (Mar 5, 2017)

en el primer video se ve claro que es un PAP, y con banda dentada (no varilla roscada) eso acelera mucho la velocidad.

el segundo video se puede suponer que es lo mismo pero se ve acelerado el video.

el tercer y cuarto video podria suponer que lo que se mueve no es el cabezal, sino el lente laser.

sigo pensando que una forma barata y confiable es como el primer video.


----------



## locodelafonola (Mar 6, 2017)

Hola





papirrin dijo:


> en el primer video se ve claro que es un PAP, y con banda dentada (no varilla roscada) eso acelera mucho la velocidad.
> 
> el segundo video se puede suponer que es lo mismo pero se ve acelerado el video.
> 
> ...


 En el primer y segundo video ., son motores PAP (como son las CNC comunes)​ Y sip tienen sistema de correa dentada muy comun ahora​ El tercer y cuarto video ., usan GALVOS SCANER ., como los equipos de proyeccion de figuras laser​ Y por lo que veo ., parecen ser de 30K (30.000 puntos por segundo) de exploracion​ Yo creo que con 15K( mas comunes y baratos ) se optiene algo bastante bueno​ La contra son los espejos (carisimos ., tanto o mas que una CNC completa) ., y que pasado cierto tiempo de uso hay que cambiarlos​ O sea ., que como la mesa no se mueve (placa en forma estatica)., tampoco es necesaria mucha velocidad a la cabeza " quemadora"​ Tampoco es bueno que lleve mucha velocidad ., porque el laser no "quema" o evapora el cobre​ Pero si tu idea es esa ., tampoco tiene mucho sentido ., aumentar la velocidad ., siguen siendo logicos (y deseables .,  los pap)​


----------



## sergioxmc (Mar 6, 2017)

Hace ya muchos años hice algo así. 
Hice una aplicación en alto nivel, visual basic, cogía las coordenadas de un archivo hpgl, exportado desde AutoCAD. 
También fabriqué unas placa microcontroladora, con un 8951 si no recuerdo mal. 
Simplemente, a través de un protocolo de comunicación inventado por mi, el micro leía la posición actual, solicitaba al pc la siguiente coordenada, la trabajaba a analógica y mandaba las señales a 2 amplificadores que actuaba sobre los motores de continua. Esos motores movían unos encoders y el micro volvía a calcular la nueva posición y a pedir al pc una nueva coordenada.


----------



## juanma2468 (Mar 19, 2017)

Recien hoy pude hacer las pruebas que quería para ratificar mi hipótesis. Como bien suponía, los pulsos que entrega el mach3 al comienzo y al final, son más espaciado que en el medio, por lo que hace un driver que pueda controlar el motor dc con encoder no lo veo tan imposible. Como bien ya he mencionado, el programa mach3 trabaja desde los 25khz y en mi caso hasta los 100khz. Usando la frecuencia de 25khz y velocidad media baja y aceleracion media baja pude observar que la frecuencia de la señal (pulsos) era de unos 2khz, luego aumente un poco los parametros antes mencionado y la frecuencia de la señal se fue a unos 4khz. Por último subí los valores al máximo y observe que la frecuencia de la señal era de unos 12,5khz, o sea la mitad de los 25khz. Lo otro que observe es el ancho de los pulsos, rondan en promedio los 2,7 useg independientemente de la frecuencia de salida. Dejo fotos de lo observado con el osciloscopio. En cuanto tenga novedades del driver las informaré por aquí.


----------



## juanma2468 (Abr 3, 2017)

Hola, despues de un tiempo, he realizado una pequeña interfase basada en la interfase de esteca55, utilizando el puerto paralelo, con algunas pequeñas modificaciones realizadas a mi gusto. Dejo adjunto el esquematico y PCB hecho en Eagle al igual que unas fotos de la placa ya montada, para que vean como queda, a quien le interese. Dentro de poco cuando tenga listo los drivers para motores DC los estaré subiendo aquí mismo. Saludos.


----------



## juanma2468 (Abr 13, 2017)

*Diseño de un driver para motores DC con encoder incremental para cnc*​ 
  La idea de hacer un diseño de un driver, para motores DC con encoder incremental, para emplearse en CNC, surge de la necesidad de que en la web no se cuenta con ninguno en forma de open-hardware y open-source. Los driver que hoy día se encuentran en la web, son todos para motores PaP. Es por ello que encaré este proyecto, por un lado a modo de reto personal, por otro lado como una necesidad para realizar mi CNC con motores DC y por último porque no hay nada en la web para poder hacer uno en la casa, lo que hay solo lo venden.

  Pues bien, comenzaremos con el diseño de la rutina para detectar si el motor está girando a la izquierda o hacia la derecha, en función de las señales provenientes del encoder incremental. Veremos primero como son estas señales para entender como saber el sentido de giro del motor.

​
  Como podemos ver la señal A está 90° adelantada a la señal B o la señal B está 90° atrasada con respecto a la A, dependiendo de cómo uno quiera verlo.
  Hay 3 formas de trabajar este tipo de encoders, en modo X1, X2 o X4.




 Cuando se necesita más resolución, es posible para el contador contar los flancos ascendentes y descendentes del tren de pulsos de un canal, lo cual duplica (X2) el número de pulsos contados para una rotación o milímetro de movimiento. Contando ambos flancos, para ambos canales, dará resolución X4, brindando la mayor resolución posible al encoder.
  En mi caso, voy a utilizar la mayor resolución posible que brinda el encoder, o sea el modo X4. Para ello voy a utilizar las interrupciones por cambio de estado de un puerto de un PIC, en concreto el PIC16F684. La mejor forma de encarar es realizar una máquina de estados para resolver el problema de identificar si la secuencia es de incremento o de decremento.

​

​El diagrama de estados en función de la tabla de estados es el siguiente:



A continuación expongo el código desarrollado para dicha máquina de estados utilizado para leer los pulsos del encoder en modo X4.


```
signed int32 Pul_act
  int Estado_anterior,Estado_actual;
  
  #INT_RA
  void  RA_isr(void) 
  {   
     Estado_actual = input_a() & 3;
     switch (Estado_anterior)
     {
        case 1:
        {
           if (Estado_actual == 3)
              Pul_act++;
           else
              Pul_act--;
        }break;
        case 3:
        {
           if (Estado_actual == 2)
              Pul_act++;
           else
              Pul_act--;
        }break;
        case 2:
        {
           if (Estado_actual == 0)
              Pul_act++;
           else
              Pul_act--;
        }break;
        case 0:
        {
           if (Estado_actual == 1)
              Pul_act++;
           else
              Pul_act--;
        }break;
     }
     Estado_anterior = Estado_actual;
  }
```


A medida que siga avanzando, iré subiendo las diferentes partes del driver.​


----------



## seaarg (Abr 13, 2017)

Juanma

Te aconsejo que le des una mirada a esto: http://ww1.microchip.com/downloads/en/AppNotes/00696a.pdf

Yo estuve haciendo un driver basado en pic con comunicacion serial a un master controller. Basicamente cada driver era:

- Micro, bien chico, no recuerdo ahora si use 12F675 o 16F628, probablemente este ultimo.
- Un flip flop 74LS74 asociado a unos capacitores para filtrar posible ruido de encoder.
- Electronica de potencia para el motor DC

Con esto logre mover los motores DC + encoder optico (rueda con rayas) de una impresora EPSON.

Lo interesante de la application note es como usa los timers del micro en modo externo para contar los ticks.

En mi driver (que lo hice funcionar pero no lo termine) podias hacer girar con precision X pasos para cualquier lado, liberar, enclavar, etc.

Habia un par de trucos:

- En la electronica de potencia (puente H), tenia 1 señal de enable, si la desactivo no hay corriente al motor
- Si enable estaba activada, la señal de pwm funcionaba asi: 1=hacia la derecha; 0=hacia la izquierda
- Entonces, si queria enclavar el motor, ponia un pwm 50% de duty.
- Si queria girar hacia un lado, ponia un pwm con duty proporcional a la velocidad. 50% era el punto medio y 0-50 es para un lado, 50-100 es para el otro.

En el software, tenia ordenes que venian por una red RS-232 como "motor A muevase X cantidad de pasos en tal direccion" entonces el soft calculaba rampa de aceleracion-meseta-frenado.

El frenado (o desaceleracion) es importante porque si no lo haces no hay forma que la inercia no te gane y hagas "pasos" de mas.

Lo mas complejo para el caso de CNC o plotter es cuando tenes un movimiento coordinado de dos ejes a la vez. No es tan controlable como un stepper pero desde el protocolo serial se le podia enviar a los motores un comando que involucra un solo paso, obviando aceleracion meseta y frenado.

En ese caso, se comportan como steppers pero repito, se pone bien complejo de controlar corriente, pwm, etc. Tene en cuenta los movimientos combinados en tu diseño.

Una forma de solucionarlo es que el soft haga una rampa creciente de corriente hasta que se detecte que cambio un tick en el encoder. Y ahi lo frenas.

Espero que la descripcion te sirva


----------



## juanma2468 (Abr 13, 2017)

Gracias por tu consejo, lo tendré muy en cuenta. En cuanto a la nota de aplicación luego la veré. La forma en que voy a hacer la comunicación es a través del puerto paralelo, por lo que solo recibo los pulsos del programa Mach3, que a priori no se cuantos van a ser, por lo que se me habia ocurrido hacer un lazo de control con un PID levantando los parametros del motor para poder obtener la función transferencia y asi seguir los pasos como si fuera una referencia, lo que no se es como se va a comportar con movimientos combinados de X e Y. Tenia pensado hacer un sistema de tipo 1 para tener error cero a la posición, la velocidad no me importaría demasiado en principio, y la idea es usar un láser por lo que los ejes no harían fuerza mas que para moverse ellos mismos, aun así requiero sensar su corriente?


PD: La nota de aplicación esa ya la tengo. [emoji6]


----------

