Me he encontrado recientemente en la necesidad de conseguir una tensión de salida variable a través de las salidas analógicas de arduino. Según la documentación oficial, tenemos una serie de puertos que nos permiten una serie PWM (pulse width modulation, en este enlace lo ha explicado genialmente Luis Llamas), o sea, una señal que permite un salida de tensión pulsante entre 0 y 5 a intervalos configurables.

Siempre podríamos usar las salidas analógicas para dar voltaje de salida (o las digitales) pero entonces tendríamos que usar un divisor de tensión y la salida sería poco configurable a no ser que usáramos un potenciómetro para variar el voltaje pero con una salida constante de 5V esto es un rendimiento muuuy bajo. Perderíamos mucha energía en calor disipado en las resistencias. Por esto las salidas PWM son geniales.

Como podéis leer en el enlace al post de Luis Llamas, es fácilmente configurable una salida PWM. Cogemos uno de los pines marcados como tal en la placa:

ArduinoLeonardoFront_2

y con este sencillo código:


const int analogOut = 11; // Pin analogico que usamos de salida
byte anchoPulso = 0; // variable que determina el ancho del pulso PWM
void setup() {
}
void loop() {
analogWrite(analogOut, anchoPulso);
delay(100);
}

tenéis una salida en el pin11 que en este caso será prácticamente 0V porque le he dado al pulso un ancho de 0.

La frecuencia más habitual de salida del PWM es de 490Hz aunque recomiendo que miréis la documentación arriba enlazada para detalles sobre algunos pines de determinadas placas: por ejemplo, en mi Leonardo, en el pin 11, la salida es a 980Hz. Esto será importante más adelante.

Sin embargo, aunque en la mayoría de los casos será suficiente, yo tuve ciertos problemas con este tipo de salida ya que en mi aplicación (comunicación con CANBUS) estas frecuencias pulsantes interfieren con el propio protocolo así que, necesito hacer una salida de voltaje variable más o menos constante a partir de este pulso.

FILTROS DE PASO BAJO

Los filtros de paso bajo son unos pequeños montajes que nos permiten filtrar señales de determinadas frecuencias. Sin entrar demasiado en la parte teórica del filtro (si os parece interesante dejad un comentario y preparo un post), su diseño básico es como sigue:

filtro_paso_bajo

Aunque se hacen filtros con mejor rendimiento con amplificadores (filtros activos), para mis propósitos es suficiente. Lo bueno de estos filtros es que pueden usarse como CIRCUITOS INTEGRADORES que nos permiten pasar una señal cuadrada a su integral: una triangular (aproximadamente) que será lo que me interesa. Si no queréis liaros con la matemática del filtro, yo siempre empiezo con 10uF y voy buscando la resistencia que me hace falta para que mi salida sea adecuada. Con el programa (gratuito) LTSpice, podemos hacer una simulación de cómo va cambiando la salida del filtro en función de algún parámetro, por ejemplo, la resistencia del filtro. Es importante conocer la carga que se va a alimentar para poder decidir el tipo de filtro que vamos a implementar.

filtro_paso_bajo_02

Hacer una simulación entre valores es tan sencillo como poner a uno de los elementos el valor {x} (es importante el uso de los paréntesis) y pulsar el botón Spice directive (Menú Edit -> Spice directive), e incluir algo parecido a esto:

.step param x list 1, 100, 10000

A través de este comando, realizará la simulación sustituyendo x por 3 valores: 1, 100 y 10000. Si queremos una simulación entre más valores, quizá sea más cómodo emplear el siguiente comando:

.step param x 1, 100, 20

Así, simulará con x entre 1 y 100 a incrementos de 20. Ojo con pasarse con el número de simulaciones o será eterno.

Me da una resultado de tensión en la carga tal que así:

filtro_paso_bajo_03

Algo horrible:

  • Para una R baja (1 ohm) en la línea verde, el condensador se carga y descarga muy rápido
  • Para una R de 100 ohm, tengo demasiadas diferencias entre el valor máximo y mínimo.
  • Para una R de 10000 ohm, la corriente será muy estable pero tardará en cargar plenamente unos cuantos milisegundos y no pasará de 0,5V.

Esta es la parte de diseño. Se trata de jugar con nuestras combinaciones RC para generar la salida que nos interesa. Como resumen:

  • Más R para un mismo C supone más tiempo de carga (más milisegundos en tener una tensión de salida estable), menos tensión disponible en la carga y menos rizado en la V de salida.
  • Más C para una R dada supone más tiempo de carga y menos rizado pero la V disponible a la salida (su valor eficaz) apenas variará.
  • El valor de V de salida puede ser controlado variando el porcentaje del ancho del pulso de la salida PWM del arduino (o para pruebas rápidas, con un potenciómetro en lugar de una resistencia fija en el filtro, a costa de perder eficiencia en la transformación).

Nota: un bonito tutorial en inglés de los filtros pasivos de paso bajo

Anuncios