11 septiembre 2014

El extraño caso del compresor y el PIC32

Cuando ya tuvimos el código preparado, todos los componentes hardware conectados, y el desarrollo de la interfaz de usuario terminada, llegó el momento de hacer pruebas.

Fue justo en este momento cuando nos encontramos con un fenómeno curioso, extraño y desesperante a la vez. No siempre pasaba, pero al arrancar o apagar el compresor desde el PIC32, se perdía la sincronización del USB, con lo cual la comunicación entre la interfaz de usuario y el PIC32 se perdía y nos tocaba reiniciar todo el sistema.

Un suceso muy desesperante, pues por mucho que modifiqué el código del USB en el PIC32 no conseguimos ninguna solución.



Lo primero que pensamos fue que debido al alto consumo del compresor teníamos algún efecto (un armónico, o caida/subida de tensión, etc...) que nos llegaba desde la alimentación (ya que al final los dos componentes usan la misma fuente de alimentación). Así que nos liamos a separar las alimentaciones. Pero descubrimos que no, que seguía pasando el mismo fenómeno.

Lo siguiente fue cambiar el compresor (a ver si eso...), pero no, seguía pasando, incluso peor, con el nuevo compresor en el 100% de los casos, al arrancar el compresor, se perdía la comunicación USB.

También intentamos proteger el USB, pero sin ningún resultado.

Haciendo pruebas llegamos a desconectar completamente el compresor, tanto la alimentación como las señales, y lo arrancábamos/parábamos manualmente con un interruptor aislado, pero nada, seguía pasando lo mismo, al arrancar el compresor, se queda dañada la comunicación USB...

Así que acudimos a preguntar en foros, y a consultar a expertos. Ya teníamos un sospechoso, las emisiones electromagnéticas que se tienen que estar produciendo en el arranque del compresor. Las consultas confirmaros nuestras sospechas.

Lo que nos aconsejaron fué utilizar un filtro RC en la alimentación del compresor para absorber las radiaciones. Y trenzar todos los cables (en especial los de alimentación y señales del compresor) ya que el cableado podía estar haciendo un efecto de antena.

Y parece que esa es la solución, en nuestras últimas pruebas, ya no se ha vuelto a producir el maligno efecto "compresor-caida del USB".

04 septiembre 2014

Desarrollando el programa para el PIC32

Al principio del proyecto, mientras estuve en Alemania e Italia, no tenía ningún dispositivo físico para poder probar lo que iba desarrollando. Así que tan sólo pude hacer algunas pruebas sobre el simulador, para aclarar los conceptos y preparar código de algunos temas básicos como las interrupciones (sumamente importantes para los PIC).

Así que en Alemania hice el corazón del programa, desarrollando la estructura, planteando todas las funciones y dejando establecida la lógica que regirá el funcionamiento de mi proyecto.

El entorno de trabajo (MPLAB X) no es complicado de usar, tiene muchos pequeños detalles muy de agradecer por los desarrolladores, aunque a veces tiene funcionamientos extraños (a veces muestra errores donde no los hay, o dice que el proyecto no tiene ficheros, cuando está lleno de código....) que supongo irán depurando y solucionando.



En Junio. y ya en España, insistí mucho en que necesitaba una placa de pruebas para poder seguir con el desarrollo, y me proporcionaron el Ethernet Startet Kit de Microchip. Esta es una interesante placa de pruebas, tiene conexiones Ethernet y USB, y para poder trabajar con entradas/salidas estandard, tiene 3 pulsadores y tres led con los que trabajar. El PIC que monta es un PIC32MX795F512L, más avanzado que el que vamos a utilizar en el proyecto, pero como punto de partida (y hasta que tenga la placa real para poder probar), me vale.

Con eso ya pude completar el desarrollo, por fín pude comprobar como se trabaja con las interrupciones y pude ajustar bien el tema de tiempos (con los simuladores no se puede). Y lo más importante, pude empezar con el desarrollo de las comunicaciones USB.

La placa de control (con el PIC32) hará las funciones de un dispositivo USB, así que tuve que buscar información y ejemplos de como implementar el USB. Por suerte Microchip distribuye una amplia colección de ejemplos con su librería Harmony (y muchos otros en su propia web), y como todo el tema corría prisa, decidí partir del ejemplo de dispositivo USB CDC (en el PC se ve como un dispositivo Serie), e ir avanzando.

Por desgracia la mayoría de la información que se puede encontrar en internet se refiere a la antigua librería de Microchip (deprecada y retirada para los PIC32), así que hay que usar solamente lo que proporciona el fabricante (Microchip Harmony).

Como ya comenté estas librerías han sufrido muchos cambios en poco tiempo (espero que la recién publicada versión 1.00 sea más estable que las anteriores), y me ha tocado rehacer varias veces parte del código para utilizar una versión más actualizada (y todo esto un poco a ciegas, puesto que Microchip no publica los cambios entre versiones, ni cuales son los errores corregidos entre una y otra).

Pero lo conseguí, finalicé el código del proyecto, incluyendo las comunicaciones USB, y otros temas delicados como el conversor analógico digital (ADC), y las comunicaciones I2C (aunque con este último me tuvieron que echar una mano, lo reconozco).

(continuará)


03 septiembre 2014

Iniciando un proyecto con un PIC32

Hace mucho que no escribo aqui, y la verdad es que es imperdonable por mi parte, y más cuando estoy metido en un proyecto que da para muchas entradas...

Por medio de una amiga he entrado en un proyecto de desarrollo de una máquina más o menos compleja, con varios componentes hardware como una bomba, un compresor, sistemas de refrigeración, sondas de temperatura, controles de drivers externos, etc...

La parte que verá el usuario es una interfaz gráfica hecha en Java que corre en una placa Nitrogen (que al final es como un pequeño ordenador), y el control de todos los dispositivos hardware se realiza desde un microchip PIC32 (concretamente un PIC32MX575F256H) montado en una placa que otra gente del equipo ha diseñado para ello.

La parte de la que me encargo yo es de la programación del PIC32. Esto supone un reto, y una forma de volver a acercarme a la parte "hardware" de la informática, aunque como la programación se realiza en C (mejor dicho, un "C" adaptado por el fabricante) no me ha costado demasiado realizarlo.



Ya habíamos hecho algunas reuniones para ir aclarando puntos, pero no recibí las primeras especificaciones hasta finales de Mayo, cuando me tocó ir a Alemania e Italia por cosas de trabajo.

Así que acudí a la página de Microchip (el fabricante de los PIC) para bajarme el entorno de desarrollo (el MPLAB X). Y descubrí, con alivio, que este entorno de trabajo proporciona un simulador que viene muy bien para las tomas de contacto con la herramienta. Evidentemente me bajé toda la documentación que encontré sobre estos micros, así como códigos de ejemplo, librerías, etc...

Y ahí empezaron mis problemas. Descubrí que las librerías que la mayoría de desarrolladores utilizan en sus proyectos con los PIC están descatalogadas para los PIC32, y me tocó acudir a unas librerías de Microchip denominadas  Harmony. Estas librerías aún no se encuentran en una situación estable, e incluso cambian bastante entre una release y la siguiente. Lo que me ha obligado a quedarme atado a una versión en concreto para evitar problemas (hasta hace unas semanas no han sacado la versión "1.0", y cuando empecé con todo esto la versión disponible era la "0.7").

(continuará)