miércoles, 4 de abril de 2012

Control de motor dc con Arduino

En la pequeña robótica los motores que más se suelen usar son los de corriente continua (dc). Entender el control de estos motores es la base para poder programarlos. Por ahora no vamos a poner el sketch, simplemente vamos a explicar como controlar un motor dc y a nada que se sepa algo de programación con Arduino el programa debería de salir relativamente fácil.


Para controlar un motor de corriente continua hay que usar un puente H. Esto se puede construir pero como puede dar mucho trabajo por lo que en pequeña robótica se suele usar modelos que están en circuitos integrados. El nombre viene dado porque su arquitectura se asemeja a la letra H como se puede ver en la imagen.


Un puente H se construye con 4 interruptores (mecánicos o mediante transistores). Cuando los interruptores S1 y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.
Con la nomenclatura que estamos usando, los interruptores S1 y S2 nunca podrán estar cerrados al mismo tiempo, porque esto cortocircuitaría la fuente de tensión. Lo mismo sucede con S3 y S4.
En vez de interruptores se suelen usar transistores y mediante la configuración en H se puede hacer que el motor dc gire en ambos sentidos.


Hay diferentes circuitos integrados con la arquitectura de un puente H, los más sencillo son los L293D y SN754410. Aunque es recomendable mirar el datasheet suelen dar unos 1200mA y mediante cada circuito integrado se puede controlar 2 motores (600mA cada uno).
En la imagen se puede ver como los pines de un lado (1, 2, 3, 4, 5, 6 y 7) son para controlar un motor y los pines del otro lado (9, 10, 11, 12, 13, 14 y 15) son para controlar un segundo motor. El pin 8 hay que conectarlo a la fuente de alimentación con la que se alimenta el motor y el pin 16 es la alimentación propia del chip. Recuerda que si se usan más de una fuente de alimentación (pila motor y pila chip) tienen que tener las masas comunes (4, 5, 12 y 13) para que tengan la misma referencia.


En la tabla de la imagen se pude ver que el control del motor se hace mediante 3 pines (EN, 1A y 2A). Siguendo las convinaciones de la tabla se puede hacer que el motor:
  • Gire a la derecha.
  • Gire a la izquierda.
  • Se frene el motor.

Control de velocidad


Para hacer que le motor gire a diferentes velocidades debemos utilizar la técnica de modulación por ancho de pulso-PWM. Aquí hay algunos gráficos donde se muestra la relación entre la señal de pulsos (PWM) y el voltaje efectivo:


Cuando el tiempo que el pulso está activo es la mitad del periodo de la señal o el parámetro duty cycle está al 50%, el voltaje efectivo es la mitad del voltaje total de entrada.

Cuando el duty cycle es reducido al 25%, el voltaje efectivo es un cuarto del voltaje total de entrada. Entonces la velocidad del motor disminuye. De esta forma controlando el duty cycle o el tiempo que el pulso está activo (frecuencia), podemos controlar la velocidad del motor de continua.
Una forma de realizar dicho control en Arduino, es utilizando la salida analógica PWM. Hay que recordar que la señal de salida PWM (pines 9,10) es una señal de frecuencia constante (30769 Hz) y que sólo nos permite cambiar el "duty cycle" o el tiempo que el pulso está activo (on) o inactivo (off), utilizando la función analogWrite().
Como se ha comentado hasta ahora se puede controlar tanto el sentido de giro como la velocidad a la gira. Para poder hacer las dos cosas se puede hacer con el A1 y el A2 conectándolos a un pin PWM cada uno de ellos.


La solución de usar 2 pines PWM es correcta aunque puede ser malgastar pines ya que los PWM están más limitados que los digitales. Por eso es posible controlar un motor con un pin digital y un PWM. Para el ejemplo vamos a suponer que el pin 1A está conectado a un PWM de Arduino y el pin 2A a uno digital. Ez giro a izquierda sería el mismo que en el ejemplo de arriba.


Para hacer que gire a la derecha a diferentes velocidades hay que poner el pin digital en alto y mandar un pulso PWM por el otro pin. Hay que tener en cuenta que la velocidad la marca el tiempo que está a cero la señal PWM, osea cuando 1A=0 y 2A=1 girará a la derecha. Pero cuando 1A=1 y 2A=1 no girará.


Aunque en algunos datasheet dice que con esta combinación el motor se frena, se puede usar sin problemas.

No hay comentarios:

Publicar un comentario