Construcción de un plato giratorio, con un motor paso a paso unipolar de 5 hilos 28BYJ-48. Los platos giratorios se utilizan desde hace mucho tiempo en los escaparates como expositores, sobretodo en tiendas de relojes y joyerías. En mi caso, lo voy a utilizar para grabar algunas escenas de montajes electrónicos. Este plato puede girar en ambos sentidos con gran precisión, y a una velocidad configurable a elegir entre uno de sus 6 preset. El controlador del motor está hecho con un microcontrolador Atmega328P (Arduino). Aprovechando la gran precisión de giro de los motores paso a paso, este plato giratorio se podría utilizar como temporizador cíclico, montando levas en el plato para accionar uno o varios pulsadores.
Motores Paso a Paso
Un motor paso a paso convierte los impulsos eléctricos que recibe en sus bobinas, en movimiento de rotación, y se considera como un motor de corriente continua sin escobillas.
Un motor paso a paso funciona con tensión continua, y puede ser de casi cualquier tamaño y par. Cuando se le aplica energía en alguno de sus bobinados, da un «paso» en lugar de girar constantemente. Cada paso provoca una rotación con un ángulo especificado por el fabricante del motor, ya que depende del número de polos del motor y su demultiplicación interna.
Un motor paso a paso se comporta como un conversor Digital-Analógico (D/A), convirtiendo los impulsos digitales de tensión que recibe en giros analógicos de gran precisión. Estos motores se utilizan en cualquier dispositivo electrónico que requiera mover objetos con gran precisión: impresoras convencionales y 3D, escáner, plotter, fresadoras CNC, grabadores láser, etc.
Stepper motor 28BYJ-48
Model : 28BYJ-48
Rated voltage : 5VDC
Number of Phase : 4
Speed Variation Ratio : 1/64
Stepper Motor 5V 4-Phase 5-Wire & ULN2003 Driver Board
Stride Angle : 5.625° /64
Frequency : 100Hz
DC resistance : 50Ω±7% (25℃)
Idle In-traction Frequency : > 600Hz
Idle Out-traction Frequency : > 1000Hz
In-traction Torque >34.3mN.m (120Hz)
Self-positioning Torque >34.3mN.m
Friction torque : 600-1200 gf.cm
Pull in torque : 300 gf.cm
Insulated resistance >10MΩ (500V)
Insulated electricity power :600VAC/1mA/1s
Insulation grade :A
Rise in Temperature <40K (120Hz)
Noise <35dB (120Hz, No load, 10cm)
Control del plato giratorio
Para controlar los ángulos de giro y velocidad de un motor paso a paso, es necesario saber como mínimo el número de pasos por vuelta del motor, su tensión de alimentación y la frecuencia máxima de funcionamiento.
El motor 28BYJ-48 hace un giro completo cada 64 pasos, pero incluye una reducción de 1/64 . Como resultado tenemos 64×64 = 4096 pasos por vuelta. Como el motor se acopla al plato mediante un piñón y una corona de relación 1/7, los cálculos de giro los tendremos que calcular en función de 4096×7 = 28972 pasos por vuelta.
Al tratarse de un motor de 4 fases, es posible controlarlo en ciclos de 4 pasos. Aunque se pierda un poco de PAR, los fabricantes aconsejan hacer funcionar el motor en modo “Half Step Drive” (medio paso), haciendo los saltos menos bruscos y reduciendo su consumo.
Secuencia de 8 pasos, para mover el motor 28BYJ-48 en Half Step Drive:
Construcción del Plato giratorio
Para la construcción de este plato giratorio he utilizado el motor paso a paso unipolar de 5 hilos 28BYJ-4. Este motor junto con su driver de control, se puede conseguir por Internet por menos de 5 Euros. Al tratarse de un motor unipolar, no es necesario utilizar un driver del tipo Puente H, necesario para controlar los motores bipolares de 4 hilos.
El driver de este motor es muy sencillo, sólo necesita 4 transistores en montaje Open-Collector para suministrar la corriente necesaria a las bobinas del motor. El driver que se incluye con este motor utiliza 4 entradas-salidas del circuito integrado ULN2003, de las 7 que incluye el chip. También lleva 4 indicadores LED para señalizar cuando se está alimentado cada una de las 4 bobinas del motor.
El controlador del motor lo he montado aprovechando el PCB del Shield del programador ISP de Arduino UNO que hice hace unos años.
Sólo es necesario cortar una pista del circuito impreso, y unir 11 pines del ATmega328P con su puntos de conexión correspondiente, como si se tratase de un Arduino UNO.
En el esquema de montaje se muestran todos los puentes que hay que hacer en color rojo, así como los componentes que hay que montar, resaltados en color verde. Para alimentar todo el circuito, he utilizado una pequeña fuente conmutada de 230VAC-5VDC de 500 mA.
Acceso a descargas
Firmware para cargar en Atmega328P:
Caja y engranajes 3D – Thingiverse:
Turntable, with a 28BYJ-48 5-wire unipolar stepper motor
¿Necesitas fabricar un PCB?
Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.
Ahora también puedes encargar trabajos 3D, mecanizados con CNC y fabricación de cajas metálicas o de plástico inyectado.
Muchas gracias. Ahora me ha quedado claro. Únicamente puntualizar, la secuencia de pasos de 1 a 8 es un sentido y si la ejecutas de 8 a 1 es el sentido contrario?. Por lo demás felicitarte por tu excelente trabajo.
Muchas gracias por contestar. Un saludo
Hola José Ramon, excelente trabajo como siempre. Tres preguntas tengo: 1- ¿Cómo se invierte el sentido de giro en motor paso a paso? 2-¿ El tiempo en microsegundos como lo controlas , porque hasta donde se existe la función millis que son milisegundos y tu necesitas microsegundos?.3- ¿Lo que tienes en la tabla de tiempos es tiempo en ON de cada fase? ¿Y cuándo la pones a cero? Muchas gracias
1- ¿Cómo se invierte el sentido de giro en motor paso a paso?
La secuencia de alimentación de las bobinas determinan el sentido del giro.
2-¿ El tiempo en microsegundos como lo controlas , porque hasta donde se existe la función millis que son milisegundos y tu necesitas microsegundos?.
Con delaymicroseconds() >>> https://www.arduino.cc/reference/en/language/functions/time/delaymicroseconds/
3- ¿Lo que tienes en la tabla de tiempos es tiempo en ON de cada fase?
La tabla de tiempos son los microsegundos de pausa entre pasos, en cada paso se genera el valor alto/bajo de las 4 salidas que alimentan las 4 bobinas.
¿Y cuándo la pones a cero?
El estado cero en una bobina tambié se considera como tiempo activo… mira el punto anterior.
El error de tiempo que puedes ver al final del video, un retardo de 790 mSeg por minuto, es el tiempo empleado en las instrucciones al activar las bobinas… son 27 uSeg por paso, que habría que restar en cada valor de la tabla de tiempos:
---------------------------------------------------------------------------------
tablaVelocidad[] >>> uSeg. de retardo entre pasos
Retardo = (Segundos por vuelta / Pasos por vuelta) - tiempo de ejecución
Tiempo por paso, empleado en la ejecución: 27 uSeg.
---------------------------------------------------------------------------------
Velocidad 0 >>> 120" / 28972 = 0,0041419 >>> 4142-27 = 4115 uSeg.
Velocidad 1 >>> 90" / 28972 = 0,0031064 >>> 3106-27 = 3079 uSeg.
Velocidad 2 >>> 60" / 28972 = 0,0020709 >>> 2071-27 = 2044 uSeg.
Velocidad 3 >>> 45" / 28972 = 0,0015532 >>> 1553-27 = 1526 uSeg.
Velocidad 4 >>> 35" / 28972 = 0,0012080 >>> 1208-27 = 1181 uSeg.
Velocidad 5 >>> 30" / 28972 = 0,0010354 >>> 1035-27 = 1008 uSeg.
_________________________________________________________________________________
*/
int tablaVelocidad[] = {4115, 3079, 2044, 1526, 1181, 1008};