https://github.com/kr4fty/dcmotorcontroller
Closed Loop Position Control for DC Servo Motors. STEP / DIR compatible Driver
https://github.com/kr4fty/dcmotorcontroller
Last synced: about 1 year ago
JSON representation
Closed Loop Position Control for DC Servo Motors. STEP / DIR compatible Driver
- Host: GitHub
- URL: https://github.com/kr4fty/dcmotorcontroller
- Owner: kr4fty
- License: gpl-2.0
- Created: 2017-06-14T01:09:54.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-11-13T21:56:24.000Z (over 8 years ago)
- Last Synced: 2025-03-26T13:21:36.102Z (about 1 year ago)
- Language: Arduino
- Size: 3.11 MB
- Stars: 4
- Watchers: 1
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DCMotorController
Control de lazo cerrado para motores DC utilizando un ATMEGA328p (corazón del
Arduino UNO) y un puente H tipo L293.
- [DCMotorController](#dcmotorcontroller)
- [Descripción](#descripcin)
- [Funcionamiento](#funcionamiento)
- [Parámetros PID](#parmetros-pid)
- [Características:](#caractersticas)
- [Firmware](#firmware)
- [Dependencias](#dependencias)
- [Hardware](#hardware)
- [Esquematico](#esquematico)
- [Video](#video)
- [Motores de corriente continua](#motores-de-corriente-continua)
- [Ventajas de los Motores DC frente a los PaP](#ventajas-de-los-motores-dc-frente-a-los-pap)
- [Desventajas de los Motores DC frente a los PaP](#desventajas-de-los-motores-dc-frente-a-los-pap)
- [Proyectos Similares](#proyectos-similares)
- [Licencia](#licencia)
- [Autor](#autor)
## Descripción
Este es una pequeña implementación de la librería [ArduinoPID](https://github.com/br3ttb/Arduino-PID-Library), 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](https://www.pololu.com/product/1182).
## 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](https://github.com/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](https://github.com/br3ttb/Arduino-PID-Library): Librería principal con la que se realiza el control de lazo
cerrado
* [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt): Encargada de vincular las interrupciones del tipo Pin-change con la respectiva ISR.
* [EncoderPCI](https://github.com/kr4fty/EncoderPCI): Librería encargada de manejar los Encoders
* [DCMotorServoPCI](https://github.com/kr4fty/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
## 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
* [ServoStrap](https://github.com/danithebest91/ServoStrap) por _danithebest91_
* [SuryaProCell-CNC](https://github.com/suryaprocell/SuryaProCell-CNC) por _suryaprocell_
* [DC-Servo-Controller](https://github.com/makerbot/DC-Servo-Controller) por _makerbot_
* [dcservo](https://github.com/misan/dcservo) por _misan_
## 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