Skip to content

Closed Loop Position Control for DC Servo Motors. STEP / DIR compatible Driver

License

Notifications You must be signed in to change notification settings

kr4fty/DCMotorController

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DCMotorController

Control de lazo cerrado para motores DC utilizando un ATMEGA328p (corazón del Arduino UNO) y un puente H tipo L293.

Descripción

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.

Funcionamiento

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.

Parámetros PID

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

Características:

  • 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

Firmware

Dependencias

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

Hardware

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

Esquematico



Circuito

Video

YouTube

Motores de corriente continua

Ventajas de los Motores DC frente a los PaP

  • 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)

Desventajas de los Motores DC frente a los PaP

  • 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)

Proyectos Similares

Licencia

GPLv2

Autor

Tapia Favio

Feedback

Por favor agradecería que me envies cualquier duda y/o comentario para mejorar el proyecto, gracias.

Mail: technicc (at) gmail.com

About

Closed Loop Position Control for DC Servo Motors. STEP / DIR compatible Driver

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages