En la práctica de hoy aprenderemos a regular la velocidad de un motor de corriente continua a través de un Arduino. En primer lugar, indicar que un motor de corriente continua es una carga que precisa unas corrientes que no puede suministrar Arduino a través de sus salidas con lo que necesitaremos alimentar al motor de forma externa a partir de una batería. El control de corriente de alimentación del motor lo vamos a hacer en primer lugar a través de un transistor NPN, de forma parecida a como lo hicimos en la práctica nº7.1 de electrónica analógica, en aquel caso controlamos el motor a través del emisor de transistor y ahora lo vamos a controlar a través del colector tal como se muestra en la figura. La corriente de base la controlaremos a través de un Arduino para lo cual, conectaremos la base del transistor a una salida PWM del mismo.
Montamos el circuito de la figura en TinkerCad. Como podemos suponer la regulación de velocidad del motor de corriente continua lo hacemos a través de un potenciómetro que conectamos a la entrada A0 de Arduino. Esto ya lo vimos en la prácticas 7.1 y 7.3 de este capítulo.
El programa sería:
VÍDEO DE LA PRÁCTICA
Práctica resuelta. Las explicaciones a las tres prácticas están indicadas en esos rangos de tiempo.
Min 0< Prac11.1 < Min 5:30
Min 5:30 < Prac11.2 < 13:40
Min 13:40 < Prac11.3 < Final
En el montaje anterior únicamente podíamos controlar la velocidad de giro del motor. Puede que en ocasiones nos interese también controlar el sentido de giro además de la velocidad. Si no estuviésemos realizado el control de un motor mediante un microcontrolador como Arduino, podríamos cambiar la velocidad de giro mediante el cambio de polaridad a que sometemos al motor o bien mediante un circuito inversor de giro. Esto lo podemos ver en los circuitos representados más abajo. El circuito (a) presenta un giro de motor horario, el circuito (b) al cambiar la batería presenta un giro de motor antihorario y el circuito (c) es un circuito inversor de giro con una sola batería usando un doble conmutador (DPDT Switch)
Si queremos hacer esto a través de Arduino tenemos que hacerlo a través del circuito integrado L293D. El circuito integrado L293 permite controlar motores DC de pequeña potencia. Para utilizarlo hay que hacer un montaje externo a Arduino, en una placa de pruebas, y alimentar a los motores a través de este circuito integrado.
El CI L293D tiene las siguientes características:
Se pueden controlar hasta 2 motores (en nuestro ejemplo sólo controlaremos uno).
Proporciona 1A a los motores (en total) y permite cambiar el sentido de giro.
Utiliza un puente en H que funciona según se observa en las figuras (internamente utiliza transistores para conmutar) :
Montamos el circuito de la figura en TinkerCad. Este circuito nos permite programar el sentido y la velocidad de giro del motor a través del microcontrolador. Pero como se comenta en el vídeo tiene un pequeño inconveniente, que es pararlo, dejarlo a 0 rpm, habría que ajustar el potenciómetro en el centro exacto y eso no es fácil. Lo solucionaremos en la siguiente práctica.
El control de sentido de giro del motor lo conseguimos a través de las entradas 2 (cable naranja) y 7 (cable amarillo) del integrado L293D, estas entradas se controlan con los valores de las salidas de Arduino 5 y 6 (PWM). Como tenemos dos bits de salida y estos pueden tomar los valores 0 y 1, tenemos cuatro posibilidades de combinación que son las que se muestran en la siguiente tabla:
Determinamos a conveniencia, que el sentido de giro del motor cambiará cuando las salidas de Arduino (entradas del L293D) pasen de 0 a 1 o viceversa, y que el motor no gire en ningún sentido cuando las dos salidas 5 y 6 de Arduino (entradas 2 y 7 del L293D) estén ambas a 0 o 1 (según se establece en la tabla de la derecha). Al ser las salidas 5 y 6, salidas PWM, es decir que pueden tener distintos valores entre 0 y 1, los valores de salida de 5 y 6 tienen que ser invertidos y esto lo conseguiremos en la programación con la función map(), tal como se ve en el código a la derecha y ya en el programa más abajo.
valorInput1=map(valorPot, 0, 1023, 0, 255) -- Entrada 1
valorInput2=map(valorPot, 0,1023, 255, 0) -- Entrada 2
El programa sería:
Como se comentaba anteriormente con el montaje de la práctica anterior tenemos problemas para detener el motor ya que habría que dejar manualmente el potenciómetro en su centro justo y eso no es nada fácil. El anterior sistema funcionaba, si recordáis, con velocidad máxima con sentido de giro antihorario si la rueda del potenciómetro estaba totalmente a la izquierda, con velocidad máxima con sentido de giro horario si la rueda del potenciómetro estaba totalmente a la derecha y si la rueda del potenciómetro estaba en el centro justo el motor estaría parado. Para conseguir parar el motor y a la vez tener control sobre el sentido de giro realizamos el montaje siguiente:
Las diferencias con el montaje de la práctica 11.2 son las siguientes: En primer lugar la habilitación del L293D al no estar conectada a 5 V no está siempre a uno, sino que ahora dependerá del valor de la salida digital PWM 3 (cable morado) de Arduino que será la que controle la velocidad de giro del motor. Y las salidas 2 (cable naranja) y 7 (cable amarillo) del integrado L293D son las que utilizaremos para controlar el sentido se giro del motor. El valor de estas entradas se controlará a través de la entrada digital 7 (cable verde) de Arduino que recibirá la señal a través del interruptor para que gire en uno u otro sentido. De modo que, a efectos prácticos, con el potenciómetro controlaremos la velocidad de giro del motor (totalmente a la izquierda velocidad 0, totalmente a la derecha velocidad máxima) y con el interruptor controlaremos el giro horario o anti horario. Veamos el código del programa: