Go Down

Topic: Control PID Arduino de Motor paso a paso con Encoder (Read 2513 times) previous topic - next topic

lamartinada

Buenas, estoy estudiando la manera de retroalimentar el motor paso a paso de mi CNC mediante encoder incremental con Arduino como controlador.

En primer lugar, arduino puede contar el número de pulsos recibidos del encoder a través de un pin, he pensado en contar cada pulso mediante interrupciones, es decir, cuando cambia el pin de dirección del motor, comenzar a contar hasta que vuelva a cambiar la dirección. Entonces, verificar la posición del encoder y enviar los pulsos y la señal de dirección necesarios para que el motor se posicione de forma correcta.

El problema que se me plantea es la velocidad de muestreo que debo tomar para no perder pulsos en el contador, ya que no quiero que eso ocurra bajo ningún concepto, al igual que dudo en si debo colocar un buffer para ir almacenando valores o algo similar.

Alguien puede darme alguna idea de como implementar este sistema mediante encoder incremental absoluto y arduino?? Pienso que sería interesante añadir circuitería al encoder para aumentar la resolución de este, ya que mi motor, gracias al driver, tiene una resolución de 1600 pasos por revolución (1/8 * 200), aunque eso podría cuestionarse una vez funcione el código sin micropasos.

Muchas gracias por adelantado. Espero que podais ayudarme.

fm

Por qué quieres usar un encoder óptico. En principio, los motores paso a paso se diseñaron para evitar tener circuiteria de retro alimentación. Me explico, por qué vas a enviarle a motor paso a paso 20 pulsos y contar 20? Siempre puedes conocer su posición, calcular velocidades y aceleraciones sin tener que utilizar nada.

Si al final decider usar un encoder, por interrupción, tampoco necesitas ninguna frecuencia de muestreo. Simplemente recibirás una interrupción por pulso.
   

lamartinada

Te cuento fm, tengo una máquina CNC (controlada numericamente por PC). Bien, mediante un software adecuado, el PC envia información a través del puerto paralelo al motor paso a paso en cuestión. Cuando mecanizas algunos materiales tales como aluminio, madera y demás, en ocasiones la fuerza que ejerce la herramienta de corte sobre el material hace perder pasos al motor, por lo tanto, para conservar las dimensiones de la pieza es muy aconsejable tener un control sobre su posición, así aseguras que el resultado final es lo más similar posible al diseño inicial. Mi idea es usar arduino para contar los pulsos del encoder anclado al motor y a su vez contar los pulsos enviados al motor, comparar ambos y enviar los pulsos necesarios, desde arduino, para posicionar el motor. El problema, se me hace muy cuesta arriba la programación...

Agradezco cualquier comentario al respecto. Muchas gracias

fm

Mi CNC la controlo directamente con mi vinciDuino y al PC vía USB.
La pérdida de pasos suele ser debida a: exceso de velocidad cuando intenta ejercer más par del que es capaz de entregar el motor y ejercer más par del debido.

La mía no pierde pasos, también es cierto que no mecanizó metales duros.
   

Go Up