Arduino desde cero – Artículo IV

Hola a todos de nuevo.

En el artículo de hoy, estudiaremos como controlar mediante PWM (pulse-width modulation, modulación por ancho de pulso) que incorporan algunos pines de la Arduino UNO, para controlar la velocidad de un motor o la luminosidad de un diodo led.

La Arduino uno no incorpora un DAC (convertidor digital – analógico), si bien se puede controlar por ejemplo un motor mediante el ancho de pulso de una señal “cuadrada” de 490 hercios.

Los pines que incorpora la Arduino UNO para tal fin son los siguientes: 3, 5, 6, 9, 10 y 11. En los ejemplos que siguen a continuación, utilizo el pin tres como salida. La sentencia del programa que escribe en dicho pin es la siguiente:

analogWrite(MOTOR, i);

El valor de “i” puede estar comprendido entre cero y 255. A mayor valor, mayor tensión de corriente continua.

Tenemos que para un valor de 0, tenemos cero voltios de salida. Para un valor de 255, tendremos cinco voltios en la salida. Nos quedan los valores intermedios.

Mediante un osciloscopio colocado en el pin tres de la placa, obtenemos lo siguiente:

Para un valor de 64 tendremos:

Para un valor de 127 tendremos:

Podemos observar que la onda es perfectamente cuadrada. El tiempo que la salida esta a cinco voltios es el mismo que el tiempo en el que esta a cero voltios. Se dice que tiene un ciclo de trabajo del 50%.

Por último se mostrará la salida para un valor mas alto (192). Vemos que la señal es menos cuadrada. El ciclo de trabajo es en este caso superior al 50%.

Podemos apreciar que la frecuencia es siempre la misma, si bien se modifican los tiempos del estado alto y del estado bajo. Repito que esto puede servir para un motor de escobillas de corriente continua pero no para reducir la tensión de alimentación de una radio (por ejemplo).

Veamos el esquema del circuito:

Vcc es de nueve voltios, que puede ser de una fuente de alimentación externa o bien de por ejemplo una pila de las de nueve voltios. Os advierto que la corriente máxima que consume el motor ronda los 100 miliamperios.

C1 y D1 están presentes en el circuito para proteger al resto del circuito de las chispas generadas por las escobillas de este y también por si se produce tensión opuesta por parte del motor (la cortocircuita el diodo).

El transistor Q1 dependerá de la corriente que consuma el motor. En este caso se ha elegido un transistor BD139, que soporta hasta 1.5 amperios para una disipación máxima de potencia de ocho vatios (se supone que con un radiador apropiado). En el circuito del artículo con el programa propuesto, no es necesario.

La resistencia R1 limita la corriente máxima de la salida del pin, que en ningún caso debe de ser superior a 40 miliamperios, ya que podría estropearse nuestra placa de Arduino.

A continuación, vamos a crear un programa que varíe la tensión del motor desde cero hasta cinco voltios y que después haga lo contrario. El programa es el siguiente:

//PINES DE SALIDA ANALOGICOS
const int MOTOR = 9;
const int ANALOGOUT = 3;
 
//Esta parte solo se ejecuta una vez.
void setup()
{
  pinMode(MOTOR, OUTPUT);
  pinMode(ANALOGOUT, OUTPUT);
}
 
//Este parte se ejecuta siempre.
void loop()
{
  //Subimos desde cero la tensión del motor hasta el máximo.
  for (int i = 0; i<=255; i++)
  {
    analogWrite(MOTOR, i);
    delay(100);
  }
 
  //Bajamos hasta cero la tensión del motor.
  for (int i = 255; i>=0; i--)
  {
    analogWrite(MOTOR, i);
    delay(100);
  }
}

El programa es sencillo y se explica por si solo. No le voy a dedicar mas tiempo a explicarlo porque no lo veo necesario. En cualquier caso, si tenéis alguna duda podéis dejar un comentario al respecto, que para eso están.

Nada mas, hasta el siguiente artículo.

Artículos que te podrían interesar:

Comparte:
Sobre Jose Mari 35 Artículos
Ingeniero Técnico en Electrónica Industrial. Interesado con todo lo que tenga que ver con la electrónica, tecnología en general e informática. Entusiasta de GNU/Linux. @300baudios

Sé el primero en comentar

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*