Hack: Cable para Uni-T UT71D

junio 12, 2018 circuiteando 0 Comments

Tengo un multímetro Uni-T UT71D que dispone de función para registro de datos. En concreto me permite capturar hasta 10.000 mediciones sin tener que estar conectado a un ordenador. El problema que presenta es que a la hora de recuperar los datos que hay grabados en su interior, solo aparecen una o dos entradas en el programa oficial.

Si se conecta al programa de PC y se capturan los datos en tiempo real, el programa funciona correctamente.

Recibiendo datos en tiempo real

Como se ve en la foto, se reciben datos en tiempo real correctamente. Tiene dos modos, uno de 20.000 cuentas que toma medidas cada 2 segundos y otro de 4.000 cuentas que las toma 10 veces por segundo. En ambos casos funciona correctamente, y los números de lectura en la primera columna son correlativos.

Sin embargo, cuando se se envían los datos almacenados en memoria, lo hacen a una velocidad muy superior y en la pantalla solamente aparece una o dos entradas.

Investigando por internet, por los foros de eevblog.com descubrí que parece que hay un error en el firmware en la versión europea y la función encargada de mandar los datos utiliza un formato de 7 bits en lugar de 8 durante la transmisión por USB.

Dado que no se puede actualizar por software, la solución a la que han llegado algunos usuarios es la de comprar un cable para otro multímetro que utiliza el mismo protocolo, pero es por puerto serie en vez de USB, y mediante un conversor externo de serie a USB, conectarlo al ordenador como puerto virtual y configurar el puerto a 2400 bits/segundo, 7 bits de datos, paridad impar, 1 bit de parada y el control de flujo desactivado.

Dado que el cable vale cerca de 30 € y tarda casi un mes en venir de China, decidí intentar modificar el cable para ver si podía convertirlo a serie virtual por USB, con lo que me ahorraba el cable y el conversor.
En las placas Arduino por ejemplo, se reconocen como un puerto serie virtual. Y si pusiera el chip que traen en las placas para hacer la conversión. Vamos a probar.

Primero desarmo el cable a ver lo que trae en su interior.

PCB del cable USB Uni-t

La parte que encaja en el multímetro dispone un receptor óptico que envía los datos al chip CH9325 y este está conectado al cable USB.

Pinout del CH9325

Buscando por internet no encontré el datasheet del integrado, pero encontré una página donde habían puesto la disposición de pines del mismo.

Como se ve en la imagen superior, el chip recibe datos por una uart (puerto serie) y los manda por USB, se alimenta de 5 voltios y se le conecta un oscilador para los tiempos.

Ahora vamos a ver el chip que traen las placas Arduino Nano (son clones chinos).

Chip CH340G

Es el CH340G el que se encarga de pasar los datos del puerto serie del micro al ordenador por USB. La diferencia con el anterior, es que mientas que el que trae el multímetro utiliza un modo USB HID, con lo que no podemos hacer nada con él y solo lo puede leer el programa del fabricante, con este otro el ordenador lo reconoce como un puerto serie virtual, y se pueden cambiar los parámetros de conexión, así como leer los datos desde cualquier programa que pueda acceder al puerto serie.

Pinout del CH340G
Sí pude encontrar el datasheet de este último integrado, y en la imagen se pude ver el diagrama de pines en el que he tachado los que no se van a utilizar. Aunque no tengo claro para que son los pines V3, XI y XO.

Ejemplo de conexión

Buscando por el datasheet me encuentro con un ejemplo para el CH340T, no es el mismo, pero se parece bastante. En él se ve como los pines XI y XO son para conectar un oscilador externo y el V3 se conecta a masa. Con esto y tras traducir un poco de chino para saber la frecuencia del oscilador del CH340G. Es la misma que la tenía el CH9325, por lo que veo factible cambiar un chip por el otro.

Soldando los pads con los pines correspondientes mediante cables

Al ser un chip diferente la posición de los pines no coincide, por lo que se unen los pads de la placa con los pines correspondientes mediante cables.

Chip liado en cinta kapton.

Se utiliza cinta kapton para aislar los pads y después se pone el integrado encima, terminando con más cinta para que no se muevan los cables y se puedan soltar.

Placa montada en la carcasa
Se cierra provisionalmente con otro poco de cinta
Se coloca en el multímetro (encaja perfectamente)

Configurando el puerto serie virtual

Lo conecto al ordenador y lo reconoce a la primera (ya tenía los drivers instalados al trabajar con el Arduino Nano), ni me lo creo. Configuro el puerto como indican en los foros y pruebo con el programa oficial (que tiene una opción para puerto serie) a ver si recibe datos en tiempo real, y lo hace, de hecho la primer foto de este artículo es con el cable ya modificado, si se hace zoom en la parte izquierda de la pantalla se ve que se reconoce como puerto serie CH340.

Pues vamos con la prueba de fuego, a ver si es capaz de recibir los 420 valores que tengo almacenados en la memoria del multímetro.

Saltos en los valores de lectura

En la foto superior se ve como el multímetro ha pasado 420 valores y en el programa se ve como el último valor es el 419, nos falta uno, pero si subimos más para arriba vemos como del 390 pasa al 393, del 396 al 404 etc..., faltan muchos valores.

Vuelvo de nuevo a indagar por los foros a ver si ya han encontrado la solución. Afortunadamente si la han encontrado, en el foro de eevblog en una review del multímetro en el post 212, nos encontramos con un usuario que ha creado una hoja de excel capaz de de decodificar los datos que manda el multímetro y utiliza una terminal para capturar los datos.

El problema es que el software es una castaña ;-), resulta que lo que hace es que cada vez que se obtiene un valor, se pone a decodificarlo y a mostrarlo en pantalla y después vuelve a ponerse a la espera de datos, mientras que está haciendo eso el multímetro sigue mandando datos y se pierden.

A continuación pruebo el método que se menciona en el foro:

Leyendo datos en Termite

Como se ve en la imagen, se utiliza Termite para recibir los datos en crudo, uno detrás de otro, sin procesarlos.

Comprobando lecturas

Los copio a un editor de textos para ver si falta algún dato, están todos, desde el 1 al 420 correlativos.

Ahora una vez que tenemos los datos es cuando los procesamos.

Datos procesados

He pasado la hora de Excel a Calc de LibreOffice y le he añadido un gráfico.

En la primera columna se pegan los datos en crudo (RAW), en la segunda se ajusta la longitud de los valores, en la tercera se sacan los valores de medida, en la cuarta se obtiene el modo en el que estaba el multímetro, en la quinta el rango, en la sexta el tiempo (para ello se pone la hora a la que se puso en marcha y el intervalo de toma de datos, calculando la hora de cada medición) y en la séptima el valor final de medida. Quedando representadas las variaciones de voltaje con respecto al tiempo en el gráfico de la derecha.

La hoja de cálculo nos da mucha más flexibilidad que el programa oficial y podemos hacer gráficas a medida entre otras muchas cosas. Aunque es un poco engorroso tener que abrir el programa de la terminal, configurarlo, obtener los valores y tener que pegarlos en la hoja para poder ver los valores. Por lo que estoy pensando en hacer un pequeño programa que reciba los datos directamente sin configurar nada y sea capaz de guardarlos en un archivo a su vez que los decodifique y los muestre en otro archivo de texto. De esta manera se pueden ver directamente o pasarlo después a la hoja para hacer gráficas. También puede tener ciertas opciones extra, como mostrar los registros comprendidos entre dos valores, o los mayores o menores a cierto número por si hay subidas o bajadas de tensión, etc..., cuando lo tenga terminado lo publicaré en el blog.

0 comentarios: