Control de lazo cerrado para motores DC utilizando un ATMEGA328p (corazón del Arduino UNO) y un puente H tipo L293.
Este es una pequeña implementación de la librería ArduinoPID, para el control de motores de corriente continua, DC, que cuenten con un encoder acoplado a su eje.
Cuenta con soporte para uno o dos motores, dependiendo de como este configurado dentro de motor.h.
La idea principal del proyecto es la de utilizar MOTORES DC/Servos en proyectos de construcción de CNC en lugar de los tradicionales Motores Paso a Paso (PaP).
El sistema es compatible a nivel de pins de control, con los driver para motores PaP, STEP y DIR, como por ejemplo el Pololu A4988.
Un Arduino cargado con GRBL, por ejemplo, envía un pulso a través del pin STEP. Cada pulso que recibe el driver le dice al motor que tiene que avanzar un micropaso.
Luego por medio del pin DIR obtenemos la dirección de avance, si queremos ir en el sentido de las agujas del reloj, o al contrario.
De esta forma, cada vez que el driver recibe un pulso en el pin STEP, el circuito comprueba el estado del pin DIR, y alimenta las bobinas del motor en el orden adecuado.
El proceso de sintonizado del PID se hizo de forma experimental, prueba/error, tratando de tener tanto el overshoot como el tiempo de establecimiento los mas chicos posibles. Se llego a la conclusión que para el par de motores utilizados, los parámetros que mejor se ajustaban fueron los siguientes:
-
Setpoint > 50:
Kp = 10 // Agresive Kp
Ki = 1 // Agresive Ki
Kd = 0.01 // Agresive Kd -
Setpoint =< 50:
Kp = 5 // Conservative Kp
Ki = 0.1 // Conservative Ki
Kd = 0.001 // Conservative Kd
Dependiendo del tipo de Motor/Servo utilizados, estos parámetros deberán ser cambiados. Esto ultimo se realizara modificando los prarametros AGGKp,AGGKi, AGGKd, CONSKp, CONSKi y CONSKd, dentro de motor.h
- El conjunto Driver-Servo/Motor remplaza al conjunto Driver-Motor/PaP
- El corazón del sistema es un chip ATMEGA328p
- Se puede controlar uno o dos motores simultáneamente
- El Driver tiene cuatro señales de control: DIR, STEP, ENABLE y RESET
- Cada motor puede ser controlado de forma independiente por medio de DIR y STEP
- El sistema de control esta basado en un sistema PID
- El PWM trabaja a una frecuencia de 31.25KHz, imperceptible al oído humano
- Cuenta con un salida por puerto serie para depuración
- Tanto las señales de entrada de los STEPs como las de los encoders, utilizan interrupciones del tipo PIN CHANGE (PCI)
- El diseño del PCB fue realizado en KiCAD
- La etapa de potencia de los motores fue realizada con un puente H del tipo L293D
El proyecto depende de cuatro librerías:
- ArduinoPID: Librería principal con la que se realiza el control de lazo cerrado
- EnableInterrupt: Encargada de vincular las interrupciones del tipo Pin-change con la respectiva ISR.
- EncoderPCI: Librería encargada de manejar los Encoders
- DCMotorServoPCI: Es la librería en si, que realiza la gestión y el control del motor dc
Pins utilizados:
Motor 1 | |
---|---|
Arduino Pin | Descripción |
10 | pwmX, chip enable 1 del L293D |
6 | in1X, salida hacia el pin 2, IN1, del L293D |
5 | in2X, salida hacia el pin 7, IN2, del L293D |
A2 | inAX, entrada A desde el encoder |
A3 | inBX, entrada B desde el encoder |
2 | stepX, entrada STEP proveniente del otro Arduino cargado con GRBL |
12 | dirX, entrada DIR proveniente del otro Arduino cargado con GRBL |
Motor 2 | |
---|---|
Arduino Pin | Descripción |
11 | pwmY, chip enable 2 del L293D |
8 | in1Y, salida hacia el pin 10, IN3, del L293D |
9 | in2Y, salida hacia el pin 15, IN4, del L293D |
A0 | inAY, entrada A desde el encoder |
A1 | inBY, entrada B desde el encoder |
3 | stepY, entrada STEP |
13 | dirY, entrada DIR |
Global | |
---|---|
Arduino Pin | Descripción |
A5 | entrada ENABLE |
Rst | Reset del driver |
- Poseen gran velocidad de giro
- Alta aceleración/Par inicial
- Son silenciosos
- Movimiento suave y sin saltos
- Control medianamente sencilla
- Electrónica mas sencilla
- Utiliza realimentación para el control del sistema
- Debido a este ultimo, tiene alta precisión en posición (depende fuertemente del encoder acoplado)
- La potencia de funcionamiento pico sólo se desarrolla a altas velocidades
- Debido a sus altas velocidades estos pueden calentarse mas rápidamente (podría necesitar un sistemas de ventilación)
- Inercia mas elevada (depende de la velocidad y la carga acoplada al eje)
- ServoStrap por danithebest91
- SuryaProCell-CNC por suryaprocell
- DC-Servo-Controller por makerbot
- dcservo por misan
GPLv2
Tapia Favio
Por favor agradecería que me envies cualquier duda y/o comentario para mejorar el proyecto, gracias.
Mail: technicc (at) gmail.com