{"id":3665,"date":"2013-11-19T16:41:52","date_gmt":"2013-11-19T15:41:52","guid":{"rendered":"http:\/\/www.diarioelectronicohoy.com\/blog\/?p=3665"},"modified":"2022-06-25T15:55:28","modified_gmt":"2022-06-25T13:55:28","slug":"motores-bipolares","status":"publish","type":"post","link":"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares","title":{"rendered":"Motores Bipolares."},"content":{"rendered":"<h5 style=\"text-align: center;\">CONTROL CON ARDUINO.<\/h5>\n<h4>PROLOGO.<\/h4>\n<p style=\"text-align: justify;\">Esta documentaci\u00f3n, pretende ser una aproximaci\u00f3n pr\u00e1ctica a las formas de control de motores paso a paso, tambi\u00e9n conocidos en la terminolog\u00eda inglesa como, stepper\u2019s.<\/p>\n<p style=\"text-align: justify;\">En este sitio, puede encontrar un art\u00edculo que trata extensamente sobre los motores paso a paso, donde puede disipar cualquier duda sobre los mismos. En dicho documento, se hace un an\u00e1lisis de los tipos de motores paso a paso, su constituci\u00f3n, su l\u00f3gica y adem\u00e1s se presentan algunos ejemplo de uso con el puerto paralelo del PC. La caracter\u00edstica principal de los motores paso a paso, es el hecho de poder moverlos un paso con cada impulso aplicado. Los pasos necesarios para dar un giro de 360\u00ba, depende de la constituci\u00f3n de cada motor, pueden variar desde 90\u00ba cada paso a 1\u20198 grados por pulso.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/motor_pap\" rel=\"attachment wp-att-3672\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3672\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/motor_pap-268x300.jpg\" alt=\"motor_pap\" width=\"268\" height=\"300\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/motor_pap-268x300.jpg 268w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/motor_pap.jpg 288w\" sizes=\"auto, (max-width: 268px) 100vw, 268px\" \/><\/a>Fig. 1<\/p>\n<p style=\"text-align: justify;\">No basta con decir motor paso a paso o si me apuran motor stepper. Hay que distinguir entre dos tipos de motores paso a paso, motor bipolar y motor unipolar. En esta ocasi\u00f3n, vamos a abordar el tema desde la perspectiva pr\u00e1ctica, en la que se propone, la puesta en servicio de un control para un motor paso a paso bipolar, en otro art\u00edculo abordaremos la descripci\u00f3n de los motores del tipo unipolar. En adelante, especificar\u00e9 al tipo de motor en uso, como motor bipolar o en su caso motor unipolar.<\/p>\n<h4>MOTOR BIPOLAR.<\/h4>\n<p style=\"text-align: justify;\">Para hacer girar un motor paso a paso bipolar, se aplican impulsos en secuencia los devanados, la secuencia de estos impulsos, se aplican externamente con un controlador electr\u00f3nico. Dichos controladores, se dise\u00f1an de manera que el motor se pueda mantener en una posici\u00f3n fija y tambi\u00e9n para que se le pueda hacer girar en ambos sentidos. Los motores bipolares, se pueden hacer avanzar a frecuencias de audio, lo que les permite girar muy velozmente. Este es el motivo por que se suele decir que un motor \u201ccanta\u201d, debido a la frecuencia a la que se produce la conmutaci\u00f3n. Con un controlador apropiado, se les puede hacer arrancar y detenerse en cualquier instante y en una posici\u00f3n determinada. Este es en teor\u00eda, el esquema de un motor bipolar.<\/p>\n<p style=\"text-align: center;\">\u00a0<a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/bipolar1\" rel=\"attachment wp-att-3673\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3673\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/bipolar1.gif\" alt=\"bipolar1\" width=\"170\" height=\"186\" \/><\/a>Fig. 2<\/p>\n<p style=\"text-align: justify;\">Estos motores, tienen varios bobinados que, para producir el avance de un paso, deben ser alimentados en una secuencia adecuada. Al invertir el orden de esta secuencia, se logra que el motor gire en sentido opuesto. El torque de detenci\u00f3n, hace que un motor paso a paso (esto vale para los bipolares y unipolares) se mantenga firmemente en su posici\u00f3n, estando alimentado aun cuando no est\u00e9 girando.<\/p>\n<p>Hay tres caracter\u00edsticas que, son comunes a los motores paso a paso:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Voltaje. Los motores paso a paso tienen una tensi\u00f3n el\u00e9ctrica de trabajo. Este valor viene impreso en su carcasa o por lo menos se especifica en su hoja de datos.<\/li>\n<li style=\"text-align: justify;\">Resistencia el\u00e9ctrica. La resistencia de los bobinados, esta resistencia determinar\u00e1 la corriente que consumir\u00e1 el motor y su valor afecta la curva de torque del motor y su velocidad m\u00e1xima de operaci\u00f3n.<\/li>\n<li style=\"text-align: justify;\">Grados por paso. Generalmente, este es el factor m\u00e1s importante al elegir un motor paso a paso para un uso determinado. Este factor define la cantidad de grados que rotar\u00e1 el eje para cada paso completo. Una operaci\u00f3n de medio-paso o semi-paso (half step) del motor duplicar\u00e1 la cantidad de pasos por revoluci\u00f3n al reducir la cantidad de grados por paso.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Si adquirimos un motor paso a paso, es bastante sencillo conocer las caracter\u00edsticas del motor, sin embargo, lo m\u00e1s com\u00fan es que nos encontremos ante un motor de desguace. C\u00f3mo distinguir ante qu\u00e9 tipo de motor nos encontramos, el procedimiento es bastante sencillo, el primer paso es mirar en el cuerpo del motor si permanece alguna leyenda que nos pueda servir de orientaci\u00f3n como, el fabricante, modelo, la tensi\u00f3n o alguna otra pista que nos indique las caracter\u00edsticas m\u00e1s inmediatas.<\/p>\n<p style=\"text-align: justify;\">Si no dispusiera de dichas indicaciones, nos centraremos en los cables de alimentaci\u00f3n (descartamos los de dos cables que, corresponden a motores de corriente continua), generalmente presentan cuatro, cinco o seis cables de salida. Nos referiremos a los de cuatro cables, estos, para controlarlos necesitan de ciertos trucos, debido a que requieren del cambio de direcci\u00f3n del flujo de corriente a trav\u00e9s de las bobinas en la secuencia apropiada para lograr avanzar un paso en su movimiento.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/bobinas_motor1\" rel=\"attachment wp-att-3674\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3674\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/bobinas_motor1-300x225.jpg\" alt=\"bobinas_motor1\" width=\"300\" height=\"225\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/bobinas_motor1-300x225.jpg 300w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/bobinas_motor1.jpg 420w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Fig. 3<\/p>\n<p style=\"text-align: justify;\">Estos motores, podemos obtenerlos al desguazar una vieja impresora, los podemos encontrar en la vieja unidad de disquete y son relativamente f\u00e1ciles de controlar, son de im\u00e1n permanente. Existen dos tipos de motores paso a paso: unipolares y bipolares. En los unipolares la corriente circula siempre en el mismo sentido en cada bobina, en los bipolares, la corriente sigue una secuencia alterna que cambia el sentido de la intensidad.<\/p>\n<p style=\"text-align: justify;\">Los cuatro cables se corresponden a los cuatro terminales, dos de cada devanado, aunque internamente pueden contener varios pares de bobinas, como se aprecia en la imagen anterior. Los motores paso a paso, difieren de los motores de CC, en la relaci\u00f3n entre velocidad y torque o \u201cpar motor\u201d. Su mayor capacidad de torque se produce a baja velocidad.<\/p>\n<p style=\"text-align: justify;\">Los motores bipolares requieren circuitos de control y de potencia m\u00e1s complejos que los unipolares. Estos circuitos de control, se suelen implementar con un circuito integrado que, soluciona dicha complejidad con un solo componente. Cuando se requieren mayores potencias, se deben agregar algunos componentes, como transistores y diodos para las contracorrientes, aunque esto no es del todo necesario en los peque\u00f1os motores.<\/p>\n<p style=\"text-align: justify;\">La configuraci\u00f3n de los motores bipolares requiere que las bobinas reciban corriente en ambos sentidos y no solamente un encendido-apagado como en los unipolares. Esto hace necesario el uso de un Puente H con una secuencia sobre cada uno de los devanados.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/tabla1-5\" rel=\"attachment wp-att-3675\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3675\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/tabla1-1.gif\" alt=\"tabla1\" width=\"93\" height=\"194\" \/><\/a>Fig. 4<\/p>\n<p style=\"text-align: justify;\">Al avanzar un paso de la secuencia al paso siguiente, hace mover el estator del motor un paso. Si vamos hacia adelante en la secuencia, el motor se mueve hacia adelante un paso y si lo hacemos al rev\u00e9s, el motor se mueve un paso atr\u00e1s. El c\u00f3digo que sigue, muestra la secuencia de activaci\u00f3n de las bobinas 1a-1b y 2a-2b.<\/p>\n<h3>Motor Bipolar.<\/h3>\n<h6 style=\"text-align: justify;\"><strong>Utilizaremos un motor de cuatro hilos. Dos para la bobina A y dos para el B. C\u00f3digo sin librer\u00eda.<\/strong><\/h6>\n<pre class=\"\">\/* Motor paso a paso bipolar\r\n* ---------------------------\r\n*\r\n* (cleft) 2005 DojoDave for K3\r\n* http:\/\/www.0j0.org | http:\/\/arduino.berlios.de\r\n*\r\n* @author: David Cuartielles\r\n* @date: 20 Oct. 2005\r\n* \r\n* Es un motor paso a paso bipolar con cuatro cables:\r\n* - azul3 y naranja5 : bobina 1\r\n* - rojo4 y amarillo6: bobina 2\r\n* Sin usar la librer\u00eda de Arduino.\r\n*\r\n* Adaptado a mis necesidades.\r\n* \r\n*\/\r\n\r\nint motorPin1 = 3; \u00a0 \u00a0 \u00a0 \/\/ pines del Motor\r\nint motorPin2 = 5;\r\nint motorPin3 = 4;\r\nint motorPin4 = 6;\r\nint delayTime = 1; \u00a0 \u00a0 \u00a0 \/\/ Delay que determina la velocidad de giro\r\n\r\nvoid setup() { \r\npinMode(motorPin1, OUTPUT); \/\/ Configuraci\u00f3n de los PINes como salida digital\r\npinMode(motorPin2, OUTPUT);\r\npinMode(motorPin3, OUTPUT);\r\npinMode(motorPin4, OUTPUT);\r\n\r\n}\r\n\r\nvoid loop() { \r\ndigitalWrite(motorPin1, HIGH); \/\/ Los pines se activan en secuencia\r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW);\r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW);\r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, HIGH);\r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\n}<\/pre>\n<h4>RECONOCIENDO EL MOTOR.<\/h4>\n<p style=\"text-align: justify;\">Los motores paso a paso, tambi\u00e9n tienen un n\u00famero determinado de pasos, necesarios para girar una vuelta completa. Por ejemplo, el motor que estoy usando tiene 96 pasos por revoluci\u00f3n. En su etiqueta dice: STP-42H100 3\u201975 grados\/paso, 4\u20196V y 0\u201955A. No obstante, si prueba a girar su motor y observa que se salta alg\u00fan paso o se mueve con dificultad, deber\u00e1 probar de poner un m\u00faltiplo de 4, piense que tiene 360 grados y un m\u00ednimo de 4 polos (esto ser\u00edan 90\u00ba por paso, claramente muy poco), si quiere un movimiento limpio de 3\u00ba aproximadamente, ser\u00edan 360\/3 = 120 pasos, ahora, guardamos los 120 pasos y ya usaremos este valor en la variable adecuada del programa.<\/p>\n<p style=\"text-align: justify;\">Aprovechando el Escudo que realic\u00e9 en otra pr\u00e1ctica, ahora m\u00e1s acabado, como puede verse en la imagen de abajo. Se pueden ver detallados los cuatro pines dispuestos para el uso de un motor bipolar, la entrada de tensi\u00f3n exterior con un jack adecuado junto al selector de tensi\u00f3n, dispuesto por un puente en amarillo y naturalmente dos conexiones independientes para aplicar a dos motores de corriente continua o en su caso a un motor bipolar con cables separados.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/escudo_l293d1_1-2\" target=\"_blank\" rel=\"attachment noopener wp-att-5624\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-5624\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2013\/11\/escudo_l293d1_1-300x174.jpg\" alt=\"\" width=\"300\" height=\"174\" srcset=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2013\/11\/escudo_l293d1_1-300x174.jpg 300w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2013\/11\/escudo_l293d1_1-768x445.jpg 768w, https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2013\/11\/escudo_l293d1_1.jpg 803w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Fig. 5\u00a0\u00a0<em>Uso de la librer\u00eda Stepper.h<\/em><\/p>\n<p style=\"text-align: justify;\">El software Arduino viene con la biblioteca &lt;Stepper.h&gt; que hace que sea f\u00e1cil de controlar un el motor paso a paso bipolar. Un problema con esta configuraci\u00f3n b\u00e1sica es que requiere cuatro cables para su control. Un Arduino s\u00f3lo tiene doce pines digitales disponibles, as\u00ed que, pronto nos quedaremos sin salidas. Ser\u00eda agradable poder utilizar s\u00f3lo dos cables para manejar un motor.<\/p>\n<p style=\"text-align: justify;\">Ahora, se muestra un c\u00f3digo que utiliza dicha librer\u00eda de Arduino. Con esta librer\u00eda, se generaliza el uso de los motores bipolares.<\/p>\n<h3><strong>Motor Stepper DC con librer\u00eda &lt;Stepper.h&gt;<\/strong><\/h3>\n<h6><strong>Cuatro hilos para las bobinas y un potenci\u00f3metro para cambiar la velocidad.<\/strong><\/h6>\n<pre class=\"\">\/*\r\n* motor_dc_stepper.pde\r\n* \r\n*\/\r\n\r\n#include &lt;Stepper.h&gt;\r\n\r\nint pot[10]; \u00a0 \/\/ nada que ver con el potenciometro\r\n\r\n\/\/ cambiar este numero por los pasos de su motor\r\n#define STEPS 196 \u00a0 \/\/ los pasos del motor\r\n\r\n\/\/ crea una instancia de clase stepper, especificando\r\n\/\/ el numero de steps del motor y los pines usados \r\nStepper stepper(STEPS, 3, 4, 5, 6); \/\/ poner pines entre (2-12)\r\n\r\n\/\/ the previous reading from the analog input\r\nint previous = 0;\r\n\r\nvoid setup() { \/\/ set the speed of the motor \r\n\u00a0 stepper.setSpeed(200);\r\n\u00a0 Serial.begin(9600);\r\n}\r\n\r\nvoid loop()\u00a0{ \r\n\/\/ promedio de los \u00faltimos valores para suprimir el desorden\r\nlong sum = 0;\r\nfor (int i= 0; i&lt;9; i ++)\r\n\u00a0{\r\n\u00a0pot[i]= pot[i+1];\r\n\u00a0sum = sum + pot[i];\r\n\u00a0}\r\n\u00a0\/\/ get the sensor value\r\n\u00a0pot[9] = (long)analogRead(2)\/4; \/\/ el potenciometro en pin 2\r\n\u00a0sum = sum+(pot[9]\/.64);\u00a0 \/\/ \r\n\u00a0long diff = sum\/10+pot[9] ;\u00a0 \/\/ sum \/ 100; \r\n\r\n\u00a0long val = previous - diff;\r\n\r\n\u00a0stepper.step(val); \r\n\u00a0\/\/ remember the previous value of the sensor\r\n\u00a0previous = diff;\r\n}<\/pre>\n<p style=\"text-align: justify;\">En este ejemplo, se puede apreciar que, las variables responsables de valores que dependen del PWM, se declaran como long, esto tiene sentido por el valor que puede alcanzar este par\u00e1metro. En Internet se pueden encontrar muchos c\u00f3digos para controlar los motores bipolares y es bueno conocer los distintos tipos de controlarlos, de modo que, en cada caso, el t\u00e9cnico debe aplicar el c\u00f3digo que mejor se adapte a sus necesidades, modificando los par\u00e1metros que necesite.<\/p>\n<h4>EL M\u00c9TODO DE DOS CABLES.<\/h4>\n<p style=\"text-align: justify;\">Sabemos que el comportamiento de un transistor en configuraci\u00f3n de colecto abierto se puede considerar como un inversor. Este tipo de circuito es muy \u00fatil para manejar cosas, como luces o motores, en el que simplemente se convierte algo encendido a apagado, con la necesidad de proporcionar m\u00e1s corriente que puede dar el micro controlador. Cuando est\u00e1 en \u201con\u201d, se conecta la salida a tierra y puede pasar una corriente relativamente grande a trav\u00e9s del transistor. Cuando se trata de \u201coff \u201c, la resistencia de puesta a alto (pullup) pone a alto la salida.<\/p>\n<p style=\"text-align: justify;\">He mencionado que el transistor NPN es tambi\u00e9n un inversor, lo que significa que la salida es la inversa a la entrada. Si usted le da un 1, le entregar\u00e1 un 0 y si le da un 0, se obtendr\u00e1 un 1, siempre la inversa. Pueden utilizarse transistores universales NPN como, por ejemplo BC549\/C (BD139, TIP31, etc.).<\/p>\n<p style=\"text-align: justify;\">Volviendo a la secuencia, si nos fijamos en la secuencia de pasos, se puede notar algo interesante. Entre los pines 1a y 1b de la tabla anterior, nunca son iguales, siempre est\u00e1n en contraposici\u00f3n.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/2a_2b\" rel=\"attachment wp-att-3677\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-3678 alignnone\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/1a_1b.gif\" alt=\"1a_1b\" width=\"41\" height=\"168\" \/><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3677 alignnone\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/2a_2b.gif\" alt=\"2a_2b\" width=\"41\" height=\"169\" \/><\/a> <a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/1a_1b\" rel=\"attachment wp-att-3678\"><br \/>\n<\/a>Fig. 6<\/p>\n<p style=\"text-align: justify;\">Lo mismo ocurre con el par 2a y 2b. Por lo tanto, si utilizamos a la salida del inversor un transistor, podemos eliminar los pasos innecesarios de una entrada a cada lado.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/inversor\" rel=\"attachment wp-att-3680\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3680\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/inversor.gif\" alt=\"inversor\" width=\"292\" height=\"239\" \/><\/a>Fig. 7<\/p>\n<p style=\"text-align: justify;\">\u00a0De modo que, si utilizamos las dos salidas de Arduino como entradas del L293 y los dos transistores inversores, con sus salidas, dispondremos de las cuatro entradas necesarias para el L293, podemos eliminar pasos innecesarios de la secuencia, una entrada a cada lado. El circuito que se muestra en el siguiente esquema, presenta la aplicaci\u00f3n de dos inversores que atacan las entradas del L293, reduciendo de esta forma las cuatro se\u00f1ales necesarios a s\u00f3lo dos salidas de Arduino.<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/www.diarioelectronicohoy.com\/blog\/motores-bipolares\/esquemabipolar\" target=\"_blank\" rel=\"attachment noopener wp-att-3681 noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3681\" src=\"https:\/\/www.diarioelectronicohoy.com\/blog\/imagenes\/2016\/11\/esquemabipolar-300x270.gif\" alt=\"esquemabipolar\" width=\"300\" height=\"270\" \/><\/a>Fig. 8<\/p>\n<p style=\"text-align: justify;\">El esquema puede parecer muy complejo, sin embargo, si se toma un momento y sigue cada conexi\u00f3n, pronto comprender\u00e1 que resulta l\u00f3gico y sencillo. Los dos transistores NPN est\u00e1n conectados como el circuito propuesto en el sitio web de Arduino. Adem\u00e1s, utiliza los pines activados. As\u00ed que el circuito necesita cuatro pines, no hay manera de usar menos.<\/p>\n<p style=\"text-align: justify;\">Por lo tanto en un boceto de Arduino, la l\u00ednea para configurar de forma normal el motor bipolar se ver\u00eda as\u00ed:<\/p>\n<p>\u00a0 Stepper stepper(STEPS, 3, 5, 4, 6);<\/p>\n<p style=\"text-align: justify;\">Pero con el sistema descrito de dos hilos, hay que cambiar la l\u00ednea de configuraci\u00f3n de la forma siguiente:<\/p>\n<p>\u00a0 Stepper stepper(STEPS, 3, 5);<\/p>\n<p style=\"text-align: justify;\">Como se ve, el c\u00f3digo utiliza el comando de puerto directo para reducir el tiempo de procesador. Y crear una funci\u00f3n que se llama en el bucle principal para cada uno los pasos. De esta manera el c\u00f3digo puede hacer otra cosa cuando el motor est\u00e1 en marcha.<\/p>\n<p style=\"text-align: justify;\">Y eso es todo lo que tiene que cambiar, el c\u00f3digo funciona de la misma forma. Sin embargo hemos ahorrado dos salidas del Arduino. Concretando, utilizaremos dos l\u00ednea PWM (2, 7), m\u00e1s dos de control (3, 5), en lugar de cuatro m\u00e1s dos de control, esto nos permitir\u00e1 disponer de m\u00e1s pines E\/S, esto es muy importante.<\/p>\n<p style=\"text-align: justify;\">El c\u00f3digo que sigue, se ha probado y adaptado a las prestaciones que se describen en este documento. Dicho c\u00f3digo, permite utilizar un menor n\u00famero de pines del Arduino, as\u00ed como, puede controlar dos motores de corriente continua, sin embargo, si no se dispone de los transistores que tienen el cometido de inversores, se deber\u00e1 utilizar otro c\u00f3digo, como el que se describe m\u00e1s adelante.<\/p>\n<h3><strong>Motor bipolar con 2 hilos.<\/strong><\/h3>\n<h6><strong>Este c\u00f3digo al utilizar el inversor nos facilita la conexi\u00f3n mediante s\u00f3lo dos hilos para las bobinas.<\/strong><\/h6>\n<pre class=\"\">\u00a0\/* \r\n\u00a0 \u00a0bipolar2hilos.pde\r\nStepper Motor Bipolar Controller con L293\r\nby Kevin Filteau 2010-05-29\r\n*\/\r\n\r\n\/\/ Motor controller pins.\r\n#define pinMotorCtrlA 3 \r\n#define pinMotorCtrlB 5 \r\n#define pinMotorEnA 2 \r\n#define pinMotorEnB 7 \r\n\r\n\/\/ Direction constants.\r\n#define GOLEFT 0\r\n#define GORIGHT 1\r\n\r\n\/\/ Estado Motor y posici\u00f3n.\r\nboolean motorRunning = false;\r\nint motorMax = 700;\r\nint motorPos = 0;\r\n\r\n\/\/ Configuraci\u00f3n del motor.\r\nvoid motorSetup() {\r\npinMode(pinMotorCtrlA, OUTPUT);\r\npinMode(pinMotorCtrlB, OUTPUT);\r\npinMode(pinMotorEnA, OUTPUT);\r\npinMode(pinMotorEnB, OUTPUT);\r\n\/\/ Todo a LOW.\r\ndigitalWrite(pinMotorCtrlA, LOW);\r\ndigitalWrite(pinMotorCtrlB, LOW);\r\ndigitalWrite(pinMotorEnA, LOW);\r\ndigitalWrite(pinMotorEnB, LOW);\r\n}\r\n\r\n\/\/ Libera el motor.\r\nvoid motorFree() {\r\n\u00a0digitalWrite(pinMotorEnA, LOW);\r\n\u00a0digitalWrite(pinMotorEnB, LOW);\r\n}\r\n\r\n\/\/ Hace girar el motor un paso en la direcci\u00f3n especificada.\r\n\/\/ Pines 7532 ----\r\n\/\/ Binary 0000 0000\r\nvoid motorSpin(boolean dir) {\r\n\r\nstatic int pos = 0; \/\/ Starting step pos.\r\nint stepsSeq[] = {0xC0,0x30,0x40,0x20}; \/\/ Registry value.\r\nint st;\r\n\r\n\/\/ Timing\r\nstatic unsigned long previousMillis;\r\nlong interval = 3;\r\n\r\nif(millis() - previousMillis &gt; interval) {\r\npreviousMillis = millis();\r\n\r\n\u00a0\u00a0st = stepsSeq[pos];\r\n\u00a0 \u00a0 if( dir == GOLEFT ) {\r\n\u00a0 \u00a0 pos++; if(pos&gt;3) pos=0;\r\n\u00a0 \u00a0 motorPos++;\r\n\u00a0 \u00a0 } else {\r\n\u00a0 \u00a0 pos--; if(pos&lt;0) pos=3;\r\n\u00a0 \u00a0 motorPos--;\r\n\u00a0 }\r\n\u00a0 \u00a0 PORTD &amp;= 0xF;\r\n\u00a0 \u00a0 PORTD |= st;\r\n}\r\n}\r\n\r\nvoid setup() { \/\/ main functions.\r\nmotorSetup();\r\n}\r\n\r\nvoid loop() {\r\n\u00a0motorSpin(GOLEFT);\r\n\u00a0\/\/ motorSpin(GORIGHT);\r\n}<\/pre>\n<p style=\"text-align: justify;\">Este c\u00f3digo b\u00e1sicamente es como el del caso anterior, la diferencia radica en que, utiliza dos salidas de Arduino y mediante dos transistores invierte dichas se\u00f1ales a las entradas del L293, como se ha descrito.<\/p>\n<h3>OTRO EJEMPLO.<\/h3>\n<p style=\"text-align: justify;\">En este caso, se presenta un c\u00f3digo, que no utiliza la librer\u00eda Stepper.h. En este ejemplo, he incorporado un potenci\u00f3metro mediante el cual se puede variar la velocidad, consigo una velocidad continua sin saltarme ning\u00fan paso, cosa frecuente hasta lograr las condiciones adecuadas.<\/p>\n<h3><strong>Bipolar Stepper.<\/strong><\/h3>\n<h6><strong>En este ejemplo nos servimos de dos pulsadores para cambiar la direcci\u00f3n de giro.<\/strong><\/h6>\n<pre class=\"\">\u00a0\/* \r\n\u00a0 \u00a0 bipolar4.pde \r\n\r\nControl de motor bipolar, con cuatro salidas, dispone de un pulsador para \r\ncambiar la direccion de giro. Con un pot se var\u00eda la velocidad de giro. \r\nUn LED nos indica el cambio de direcci\u00f3n. \r\nAutor: V. Garca 15.05.2011\r\n\r\ncompilado con Arduino v.13: 2992 bytes\r\n*\/\r\n\r\nint motorPin1 = 3; \/\/Digital pin 4\r\nint motorPin2 = 5; \/\/Digital pin 5\r\nint motorPin3 = 4; \/\/Digital pin 6\r\nint motorPin4 = 6; \/\/Digital pin 7\r\nint pinE1 = 2;\r\nint pinE2 = 7;\r\nint switchPin = 12; \/\/ pin del switch\r\nint switchState = 0; \/\/ estado del switch\r\nint analogPin0=0; \/\/ pin del pot\r\nint val=0;\r\nint delayTime = 0;\r\n\r\nint outPin = 13; \/\/ indicador estado.\r\nint estado = 0; \u00a0\/\/ estado actual del pin de salida \r\nint previo = 0; \u00a0\/\/ lectura anterior del pinX de entrada\r\nint reading; \u00a0 \u00a0 \/\/ lectura actual del pin de entrada\r\n\r\nlong time = 0; \u00a0 \/\/ la ultima vez que el pin de salida fue basculado\r\nlong debounce = 500; \/\/ el tiempo de rebote, aumenta si la salida parpadea \r\n\r\nvoid setup() {\r\npinMode(motorPin1, OUTPUT);\r\npinMode(motorPin2, OUTPUT);\r\npinMode(motorPin3, OUTPUT);\r\npinMode(motorPin4, OUTPUT);\r\n\r\ndigitalWrite(pinE1, HIGH);\r\ndigitalWrite(pinE2, HIGH); \r\n\r\npinMode(analogPin0, INPUT); \/\/ get input from variable Resister.\r\npinMode(outPin, OUTPUT); \r\npinMode(switchPin, INPUT); \/\/ set the switch pin to be an input \r\ndigitalWrite(switchPin, HIGH); \/\/ activa RPA\r\nSerial.begin(9600); \/\/ activa comunicaciones serie, para depurar \r\n}\r\n\r\nvoid loop() {\r\nint val=analogRead(analogPin0)\/16; \/\/ El pot se conecta al pin0 analog.\r\nval=map(val,0,1023,0,500); \/\/ set delayTime value between 0-500 \r\ndelayTime=val;\r\n\r\nswitchState = digitalRead(switchPin); \r\n\r\n\/\/ si la entrada va de BAJO a ALTO y esperamos bastante tiempo ning\u00fan \r\n\/\/ ruido afectar\u00e1 al circuito, el pin de salida bascula y recuerda desde cuando\r\n\u00a0if (switchState == HIGH &amp;&amp; previo == LOW &amp;&amp; millis()+100 - time &gt; debounce) {\r\n\u00a0 if (estado == HIGH) {\r\n\u00a0 \u00a0 estado = LOW;\r\n\u00a0 \u00a0 time = millis(); \r\n\u00a0 } \r\n\u00a0 else {\r\n\u00a0 estado = HIGH;\r\n\u00a0 time = millis(); \r\n\u00a0 }\r\n\u00a0} \r\n\u00a0digitalWrite(outPin, estado); \r\n\u00a0previo = switchState; \r\n\u00a0 if (estado == LOW) \r\n\u00a0 \u00a0 avanza(); \r\n\u00a0 \u00a0 else \r\n\u00a0 \u00a0 retrocede(); \u00a0 \r\n}\r\n\r\nvoid avanza(){\r\ndigitalWrite(motorPin1, HIGH); \r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW); \r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW); \r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, HIGH);\r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\n}\r\n\r\nvoid retrocede(){\r\ndigitalWrite(motorPin1, HIGH); \r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW);\r\ndigitalWrite(motorPin2, LOW);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, HIGH);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, LOW);\r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, HIGH);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\ndigitalWrite(motorPin1, HIGH); \r\ndigitalWrite(motorPin2, HIGH);\r\ndigitalWrite(motorPin3, LOW);\r\ndigitalWrite(motorPin4, LOW);\r\ndelay(delayTime);\r\n}<\/pre>\n<p style=\"text-align: justify;\">N\u00f3tese que dentro del bucle (loop), se lee el estado del potenci\u00f3metro y se utiliza el mapa tipo, para modificar los PWM y suavizar el cambio de velocidad. As\u00ed mismo, he intercalado la lectura del estado del pulsador que, nos permite cambiar la direcci\u00f3n de giro, incluso respetando la velocidad anterior sin necesidad de poner a cero, naturalmente esto tiene mucho que ver con la inercia del motor que se utilice. El c\u00f3digo empleado, recomendado por los fabricantes, es decir, paso completo que activa dos bobinas al tiempo, esto infiere un alto par motor o torque.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>CONTROL CON ARDUINO. PROLOGO. Esta documentaci\u00f3n, pretende ser una aproximaci\u00f3n pr\u00e1ctica a las formas de control de motores paso a paso, tambi\u00e9n conocidos en la terminolog\u00eda inglesa como, stepper\u2019s. En este sitio, puede encontrar un art\u00edculo que trata extensamente sobre los motores paso a paso, donde puede disipar cualquier duda sobre los mismos. En dicho [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":3674,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[22,15,292],"tags":[293],"class_list":["post-3665","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-microcontroladores","category-motores-bipolares","tag-motores-motores-bipolares-motores-pap"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/comments?post=3665"}],"version-history":[{"count":15,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3665\/revisions"}],"predecessor-version":[{"id":5626,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/posts\/3665\/revisions\/5626"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media\/3674"}],"wp:attachment":[{"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/media?parent=3665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/categories?post=3665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diarioelectronicohoy.com\/blog\/wp-json\/wp\/v2\/tags?post=3665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}