Temperatura en Arduino + 2 driver uln2003 y dos motores step motor 28byj-48

Hola a todos, pues antes que nada me presento.
Me llamo Juan Antonio soy de un pueblo de Sevilla y tengo un hobby hacer mis propias maquinas de trabajo para mi tallercito hechas por mi jajajaj. Pero vamos al grano haber si alguien que controle un poco el tema puede orientarme porque en esto soy principiante. El hecho es el siguiente hace unos días por hobby compre unos motores step motor 28byj-48 muy pequeñitos y lentos pero para lo que quiero hacer me sirve muy bien. Ahora el tema es el siguiente los tengo conectado a arduino uso los pines digitales 4,5,6,7 para conectar un driver y 8,9,10,11 para el otro. Después tengo un joystick analógico para controlarlo todo como si fuesen dos ejes independientes eje x conectado a pin analógico 0 y eje z conectado a pin analógico 1. Hasta ahi todo funciona bien o aparentemente bien, eso creo debido a que no se mucho de electrónica solo lo tengo por hobby y tengo conocimientos muy limitados. El problema viene que aun estando los motores parados cogen demasiada temperatura. No han llegado a quemarse pero se calientan bastante. los motores y los driver los alimento con una fuente regulable lm317 a 5.2v y se lo meto a la placa arduino uno por su correspondiente pin vin. HE probado a subir el voltaje y siguen igual he probado desde 12v a 5.2 pero la temperatura sigue igual. también e probado a alimentarlo todo desde el arduino aunque sin éxito.... ¿Alguien puede orientarme un poco sobre el tema de la temperatura de estos motores?.

He de decir que este proyecto lo quiero hacer para una maquina de corte manual pequeña que quiero hacerme.Tengo en mi taller una cnc a medias que también me estoy haciendo para adaptarle un cortador de plasma para trabajar con acero. Para mover estos ejes uso motores nema y los famosos drivers toshiba y aquí no tengo esos problemas con los motores y su temperatura. ...

-------------------------------------------------------------------------------------------

Se me olvido mostraros el codigo que le cargo a arduino, lo pille por la red y lo modifique hasta que conseguì hacer girar los motores cuando lo indicaba con el joystick

// Controlar dos motores step motor 28byj-48 5v dc con sus respectivos drivers con un joystick analogico.


#include <Stepper.h>

int pasos=180;
int pasosPorLectura=13;
int leer;
int rotacion;

Stepper stepper1(pasos, 8,9,10,11); //Declaracion de pines digitales de Arduino para controlar el driver del eje z
Stepper stepper2(pasos, 4,5,6,7); //Declaracion de pines digitales de Arduino para controlar el driver del eje x

int velocidadMotor1;
int velocidadMotor2;

void setup(){
pinMode (A0, INPUT); // Pin analogico de arduino donde va conectado el la señal del eje z del joystick
pinMode (A1, INPUT); // Pin analogico de arduino donde va conectado el la señal del eje x del joystick
stepper1.setSpeed(200);
stepper2.setSpeed(200);
}


void loop(){{
leer=analogRead(A0);
velocidadMotor1=abs(map(leer, 0, 801, -10, 10))*10;
if (velocidadMotor1>10){
rotacion = leer>400?1:-1;
stepper1.setSpeed(velocidadMotor1);
stepper1.step(rotacion*5);
}
}
leer=analogRead(A1);
velocidadMotor2=abs(map(leer, 0, 1023, -10, 10))*10;
if (velocidadMotor2>10){
rotacion = leer>511?1:-1;
stepper2.setSpeed(velocidadMotor2);
stepper2.step(rotacion*5);
}
}
 
Última edición:
Los motores PaP se controlan a tensión variable, es decir que la tensión es proporcional a la velocidad.
El controlador debe proveer al motor en el estado de "Bloqueo" (Detenido) una tensión mínima para retener la posición y que es muy inferior a la de trabajo.
 
Sigo haciendo pruebas y bajado esta vez la tension por debajo de lo establecido la he fijado en 4v dc esta vez y asi parece que no se calientan o por lo menos no es apreciable su calentamiento. Fogonazo supongo que al bajar el voltaje por debajo del minimo que son 5 segun especificaciones he resuelto el problema temporalmente no?

Un saludo
 
Sigo haciendo pruebas y bajado esta vez la tension por debajo de lo establecido la he fijado en 4v dc esta vez y asi parece que no se calientan o por lo menos no es apreciable su calentamiento. Fogonazo supongo que al bajar el voltaje por debajo del minimo que son 5 segun especificaciones he resuelto el problema temporalmente no?

Un saludo

Lo podrías bajar mas todavía.

La solución definitiva sería que con tu Arduino generes además de los pulsos dos PWM, uno para cada motor, y con el Duty Dycle ajustas la tensión de trabajo de acuerdo a la velocidad de rotación.
Si el motor se detiene, reduces el Duty Cycle al mínimo como para evitar calentamiento y desperdicio de energía.
 
No se fogo, tengo unos de 12V de ese tipo y no le pasa nada conectándolo directo, el que si se calienta horrible era el NEMA23, en ese seguí tu consejo de alimentarlo por cortes, igual se calienta pero no llega a quemarse ni nada, aunque el controlador da un zumbido como de aire, supongo el laminado vibrando por el campo fluctuante a alta frecuencia.

Bueno, a lo que iba, un consejo, coloca un Zener en la salida de los diodos de corte del ULN en lugar de conectarlo directo a Vcc, eso ayuda a descargar la bobina e invertir los polos más rápido lo que permite incrementar la velocidad de rotación, solo procura que el voltaje no se eleve demasiado, creo que el driver soportaba hasta 50V, yo solo usé un Zener de 12V 1W para mi motor de 12V (es del mismo tipo pero al emplear más voltaje usa menos corriente que los de 5V) conectado entre la salida y Vcc, así llegaba a 24V el ULN y duplicaba la frecuencia de la rotación sin que se quedara atorado el motor, pero solo lo usé en pruebas sin carga por lo que la velocidad máxima no te la puedo decir, pero con lo lento que son estas cositas cualquier ayuda sirve :D
 
Asi es como lo he estado probando provisionalmente :unsure: pero quieoro buscarme una caja de una fuente atx desmontada que tengo que tener por hay para meterlo todo dentro :D
arduino y driver uln 2003.gif
Nuyel oí voy a probar lo que dices de los diodo zener. Anoche hice la mecanización de un eje oi si no me entra la flojera quiero resanar las soldaduras, pintarlo con el compresor y acoplarle el motor y su correa y automatizarlo. Y ver como trabajan los motorcitos estos tan pequeños :LOL:
cnc1.gif
Por otro lado yo los nema los controlo con una placa de cnc 4 axis que compre por ebay de bajo costo es esta:
cnc.jpg
con los famosos drivers toshiba y no tengo problemas al desplazar los carro, ni de temperatura ni de ningún tipo, para el desplazamiento uso 2 barras de acero macizas de 16mm con sus respectivos rodamientos lineales.
1 carro cnc grande.gif
Este es un eje de la "mami" que lleva en proyecto ya casi 6 meses aunque la podría haber terminado ya pero voy comprando las cosas poco a poco :D.
 
Bueno pues he estado ahora probando lo que dijo Nuyel y con dos motores funciona bien con sus respectivos diodos zener pero cuando añado un tercero este ultimo a pesar de tener también su respectivo diodo. se sigue calentando y gira demasiado lento en comparación con los otros dos. No se si puede ser un problema en el código o algo pero este tercero no va como debería.... pongo el código haber si alguien puede decir algo al respecto.

// Controlar dos motores step motor 28byj-48 5v dc con sus respectivos drivers con un joystick analogico.


#include <Stepper.h>

int pasos=180;
int pasosPorLectura=13;
int leer;
int rotacion;

Stepper stepper1(pasos, 8,9,10,11); //Declaracion de pines digitales de Arduino para controlar el driver del eje z
Stepper stepper2(pasos, 4,5,6,7); //Declaracion de pines digitales de Arduino para controlar el driver del eje x
Stepper stepper3(pasos, 2,3,12,13); //Declaracion de pines digitales de Arduino para controlar el driver del eje y


int velocidadMotor1;
int velocidadMotor2;
int velocidadMotor3;

void setup(){
pinMode (A0, INPUT); // Pin analogico de arduino donde va conectado el la señal del eje z del joystick
pinMode (A1, INPUT); // Pin analogico de arduino donde va conectado el la señal del eje x del joystick
pinMode (A2, INPUT); // Pin analogico de arduino donde va conectado el la señal del eje y del joystick
stepper1.setSpeed(200);
stepper2.setSpeed(200);
stepper3.setSpeed(200);
}


void loop(){
leer=analogRead(A0);
velocidadMotor1=abs(map(leer, 0, 801, -10, 10))*10;
if (velocidadMotor1>10){
rotacion = leer>400?1:-1;
stepper1.setSpeed(velocidadMotor1);
stepper1.step(rotacion*5);
}
leer=analogRead(A1);
velocidadMotor2=abs(map(leer, 0, 1023, -10, 10))*10;
if (velocidadMotor2>10){
rotacion = leer>511?1:-1;
stepper2.setSpeed(velocidadMotor2);
stepper2.step(rotacion*5);
}
leer=analogRead(A2);
velocidadMotor3=abs(map(leer, 0, 1023, -10, 10))*10;
if (velocidadMotor3>10){
rotacion = leer>511?1:-1;
stepper3.setSpeed(velocidadMotor2);
stepper3.step(rotacion*5);
}
}
 
Atrás
Arriba