jueves, 6 de febrero de 2014

PWM (Pulse-width modulation)



Hablamos de la función PWM como abreviatura de la modulación por ancho de pulsos, algo que se ha convertido en una práctica habitual de los interruptores de potencia modernos, controlando la energía de inercia. Esta acción tiene en cuenta la modificación del proceso de trabajo de una señal de tipo periódico. Puede tener varios objetivos, como tener el control de la energía que se proporciona a una carga o llevar a cabo la transmisión de datos.

La función PWM requiere de un circuito en el cual hay distintas partes bien diferenciadas entre sí. El comparador es lo que se convierte en el nexo, contando con una salida y un total de dos entradas distintas. A la hora de configurarlo tenemos que tener en cuenta que una de las dos entradas se centra en dar espacio a la señal del modulador. Por su lado, la segunda entrada tiene que estar vinculada con un oscilador de tipo de dientes de sierra para que la función se pueda llevar a cabo con éxito. La señal que proporciona el oscilador con dientes es lo que determina la salida de la frecuencia. Es un sistema que ha dado buenas demostraciones de funcionar, convirtiéndose en un recurso muy utilizado en cuanto a la disponibilidad de recursos energéticos.

Tenemos que tener en cuenta distintos factores a la hora de hablar de los usos prácticos de la función PWM. Con el paso de los años y desde que la PWM entrara en vigor, las placas madre contaron con sensores de temperatura, consultables desde la bios del equipo. A partir de ese momento se impuso reducir el ruido de la CPU, haciendo que el ordenador reaccionara de distintas maneras en base al contexto. Si por ejemplo, estamos utilizando el equipo con el objetivo de descargar archivos, como demos de videojuegos, realmente el ordenador no necesita una potencia superior a la mínima. En estos casos la CPU no se calienta, no necesita el ventilador y se debe evitar gastar energía de forma innecesaria.

Cuando montamos un ordenador que deba poder ofrecer un rendimiento de primer nivel, pensamos en incluir la mayor potencia de ventilación, para que en situaciones críticas estos ventiladores puedan funcionar a toda máquina con el objetivo de evitar problemas en el equipo. Pero esta configuración se desaprovecha en momentos como en el ejemplo citado de la descarga de archivos. En estas situaciones no es necesario que el ventilador gire a toda velocidad, sino que se puede mantener en los niveles mínimos. La función PWM es una manera de regularlo. Para perfeccionar esto se le añadió un cable adicional que manda una señal de la velocidad a la que está funcionando el ventilador. La placa base se encarga de regular la velocidad a la que debe ir el ventilador en cada momento. Si el equipo se calienta mucho, le dice con una señal que debe trabajar más. Para ello hay que configurar el ordenador desde la BIOS siempre pensando en obtener los menores índices de ruido.

Para que la función PWM tenga más sentido y sea más completa, existen accesorios que se encargan de llevar esa señal a otros ventiladores que también se puedan beneficiar de ella. El objetivo común es mejorar lo máximo posible el rendimiento de estos equipos.

Interrupciones en Arduino



La mayoría de las placas Arduino tienen dos interrupciones externas.
  • Interrupción externa 0: (Pin digital 2)
  • Interrupción externa 1: (Pin digital 3)

Para usar interrupciones tenemos la función:

void attachInterrupt(interrupción, función, modo)

Dicha función especifica qué función se invoca cuando se produce una interrupción externa, si ya existía una función adjuntada al pin se sustituye por la nueva.

Los parámetros de esta función son:
Interrupción: El número de la interrupción (Es un int y puede ser 0 o 1 esto para asignar el pin a usar).
Función: Es la función que se invocara cuando la interrupción suceda, esta función NO debe tener parámetro, tampoco devolver nada. Comúnmente se le conoce como rutina de interrupción de servicio.
Modo: Esto define el criterio de la interrupción es decir cuando se considerara como interrupción.

Existen 4 constantes predefinidas para poder usarlas como modos.

LOW. Se dispara la interrupción cuando el pin tenga un valor bajo (Cero lógico o LOW).
CHANGE. Se dispara la interrupción cuando el pin se tenga un valor alto (Uno lógico o HIGH).
RISING. Se dispara la interrupción cuando el pin pase de valor bajo a alto (LOW a HIGH | 0 a 1).
FALLING. Se dispara la interrupción cuando el pin pase de valor alto a bajo (HIGH a LOW | 1 a 0).


También se cuenta con funciones para activar o desactivar el uso de las interrupciones. Con tan solo usar la función noInterrupts() se asegura de que no se interrumpa la porción de código que le sigue a esta función, también está la función interrupts() que hace lo contrario, ya que permite las interrupciones. Esto puede ser útil dependiendo el caso y se maneja similar a los hilos y candados.

Interrupciones de microcontroladores



Una interrupción es un recurso del cual disponen la mayoría de los procesadores y microcontroladores en el mercado hoy en día. Permiten cambiar la continuidad de ejecución de un programa, para atender una necesidad, ya sea externa o interna.

Como ejemplo, un botón de RESET puede ser visto como una fuente de interrupción que de manera asíncrona detiene todos los procesos y reinicia el sistema por completo. Incluso, dependiendo del sistema, lo puede llevar a un estado inicial.

Las interrupciones se manejan de distintas formas según el procesador, fabricante, desarrollador, etc. Hablando a nivel de microcontroladores, la mayoría tienen algo en común, y es como atienden dicha interrupción. Al recibirse una señal de interrupción, se abre la brecha en la continuidad del programa en ejecución, y se recurre a un registro llamado “Handler”, el cual, dependiendo del microcontrolador, contendrá el código de ejecución para atender la interrupción, o contendrá una dirección donde se encontrará dicho código.

Entre las utilidades de las interrupciones podemos encontrar cosas tan simples como cambiar el valor de un puerto de 0 a 1, hasta cosas tan complejas como lo es un despachador de tareas, he allí, el poder de este recurso.


Las interrupciones pueden tener fuentes internas y externas. Una fuente de interrupción interna puede ser por ejemplo, un error por overflow o la finalización de un contador; una fuente externa, puede ser un botón de reset, también una señal de control o un detector de cambios de nivel.