A la hora de diseñar el menú nos planteamos incluir las funciones de calefacción y de control de luces. Sería interesante tener algo físico que simulara estos dos sistemas. ¿Por qué no incluir un sensor de temperatura, algo que simule un calentador y unos LED's cuya luminosidad podamos variar?
La idea de la interfaz gráfica era mostrar que con los gestos se realizba alguna acción así que lo de que esa acción se realizara físicamente era algo un poco secundario. Sin embargo, nuestro PIC32 tiene una serie de periféricos muy potentes y que no estabamos utilizando para nada, así que decidimos dar uso a dos periféricos más, los módulos de PWM y el conversor analógico/digital.
El PIC32 dispone de 5 canales de PWM "independientes", y un conversor digital analógico de 10 bit de tipo SAR capaz de trabajar a hasta 1 Ms/s y con varios sistemas de multiplexación analógica para dar cobertura a varios canales. Con esto podemos controlar 5 LED's de forma independiente y un sensor de temperatura de los más simples que existen, que proporcionan una tensión proporcional a la temperatura.
En funcionamiento del PWM es bastante sencillo. Un temporizador arranca y comienza a contar a una frecuencia determinada hasta llegar a un valor preajustado de 16 bit (periodo), momento en el cual se reinicia y comienza a contar de nuevo.Con este valor ajustamos el periodo de la señal de PWM. Los módulos de PWM simplemente se ponen a vigilar a este temporizador. Cada uno de estos módulos tiene su propio registro de 16 bit con un valor al que vamos a llamar PWMi con i indicando el número del canal de PWM de 1 a 5. Cuando el timer alcanza algún valor PWMi, el correspondiente módulo PWM conmuta su salida y la pone a nivel bajo. Cuando se alcanza el valor de periodo y el temporizador se reinicia, el módulo de PWM vuelve a poner a nivel alto su salida.
El ciclo de trabajo de cada módulo será PWMi/periodo y por tanto PWMi tendrá que ser menor o igual que periodo, y justamente el valor "periodo" nos marcará la resolución disponible en el ciclo de trabajo. Nosotros trabajamos con una frecuencia de PWM (1/periodo) de 1200Hz por puro capricho (hubiera bastado con una frecuencia suficiente para no notar parpadeo), y a esa frecuencia conseguimos trabajar con 16 bit de resolución (también por capricho, ya que en realidad tanta resolución es innecesaria para esta aplicación).
En cuanto al conversor analógico/digital, la cosa resultó ser algo más complicada. Este periférico del PIC es tan sofisticado que configurarlo para realizar una tarea tan tonta como tomar una muestra cuando nosotros se lo pidamos y darnos el valor convertido sin hacer nada con él requirió leerse la parte completa de la hoja de características referente al módulo para entender el funcionamiento completo del mismo y saber qué cosas desactivar y cuales no para conseguir nuestro objetivo. Afortunadamente funcionó a la primera.
Para aquellos que tengan curiosidad, aquí está el documento relativo a este módulo del PIC32:
http://ww1.microchip.com/downloads/en/DeviceDoc/61104E.pdf
Al final, nuestra práctica utiliza varios periféricos del PIC: una UART, un puerto I2C (sí, nosotros también utilizamos este maravilloso estándar de comunicación entre integrados) , un comparador analógico, el conversor analógico/digital, los módulos de PWM , el reloj/calendario de tiempo real y 4 temporizadores.

No hay comentarios:
Publicar un comentario