viernes, 23 de mayo de 2014

Control sencillo PWM Arduino (Explicado)


La modulación por ancho de pulsos de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una sinusoide o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. Expresado matemáticamente:




D = \frac{\tau}{T}
D es el ciclo de trabajo
\tau es el tiempo en que la función es positiva (ancho del pulso)
T es el período de la función


Bien suficiente de teoría para poder comprender como funciona esto y sobre todo para darnos una idea de sus aplicaciones practicas pasemos a una explicación aun mas sencilla.

Hay ocasiones en que deseamos tener un control analógico donde la variación que se controla sea gradual, similar a un control de volumen por ejemplo  y el principal objetivo es precisamente ese, que el control sea gradual y no pase de estar en apagado a estar a tope, cuando se esta trabajando con microcontroladores ya sea un PIC, un ATMEL o Arduino, nosotros contamos con salidas que pueden tener únicamente 2 valores correspondientes a 0 y 1 lógico en valores respectivos de voltaje ausente y presente, es entonces cuando requerimos de la técnica de PWM que en esencia consiste únicamente en cambiar rápidamente de 1 a 0 durante su ejecución y cuyo control consiste en indicar cuanto tiempo se estará en 1 y cuanto tiempo se estará en 0 para calcular esto se tiene la sencilla formula D = \frac{\tau}{T}  donde  \tau es el tiempo que la función estará a 1 (voltaje) y T es el periodo de la función es decir un intervalo finito de tiempo de una señal, por ejemplo podríamos decir que nuestro periodo T es de de 1000ms y que nuestro \tau es de 200ms tendríamos que D=200ms/1000ms con un resultado D=.2 es decir se tendría un ciclo de trabajo de 20% por lo que si tenemos un motor en el pin de salida este estará 200ms en 5v y 800ms en 0v por consecuente el motor giraría a 20% de su velocidad máxima, como podemos ver esto resulta en algo sencillo donde solo tendríamos que variar el valor de \tau para cambiar el porcentaje de la velocidad de nuestro motor.


Bien ahora el codigo del programa y no hay mejor aprendizaje que la practica asi que a montarlo y probemoslo.


//**************************//
//    PWM ARDUINO SIMPLE    //
//**************************//

int motor=3;     //Declara Pin del motor


void setup()
{
  Serial.begin(9600); //Inicia la comunicacion serial
}

void loop() // la funcion loop se ejectua infinitamente mientras el microcontrolador tenga energia

{           
   if (Serial.available()){  // comprobamos si se recibio alguna instruccion por el puerto serial
  
      char a = Serial.read();  // la variable "a" sera donde guardemos el dato recibido por el puerto serie
      
      if (a>='0' && a<='9'){   //comprobamos que el valor este entre los comandos validos
   
        int velocidad = map(a,'0','9',0,255);  //Escalamos el valor ingresado a rango de PWM

        analogWrite(motor,velocidad);  //Asignamos el valor al pwm del motor

        Serial.print("El motor esta gira a velocidad: "); // imprimimos un mensaje en el monitor serial y la velocidad actual
        Serial.println(a);
      }
  }

}



Espero les aya sido de utilidad.



No hay comentarios: