Protocolo serie asíncrono de ingeniería inversa para el calentador de agua sin tanque EcoSmart

3

Estoy intentando realizar una ingeniería inversa del protocolo de control remoto para mi Calentador de agua sin tanque EcoSmart .

Desafortunadamente, el dispositivo de control remoto ya no está disponible para la compra, y el fabricante no tiene información sobre el protocolo utilizado. Quiero probar y conectar el calentador directamente a un Arduino para poder monitorearlo / controlarlo a través de Ethernet.

El calentador tiene un conector de 4 pines para el control remoto, y está conectado a la MCU como se muestra aquí:

simular este circuito : esquema creado usando CircuitLab

La unidad envía datos en los siguientes escenarios:

  • Se cambió la temperatura girando la perilla de control
  • La unidad se enciende / apaga presionando el botón de control
  • Calentador activado / desactivado (inicio / parada del flujo de agua)

Mi alcance tiene decodificación RS-232 incorporada, y parece que decodifica algunos datos a 1200bps, pero no estoy seguro de que esté tratando con datos RS-232 / UART aquí. Mi pregunta para ti es: ¿qué tipo de datos te parece?

Esta es parte de la salida de una operación "ENCENDIDA" (es decir, presione el botón para encender el calentador): enlace

Para mí, esto parece demasiadas transiciones altas / bajas para UART ... Me inclino hacia un pulso de ancho variable para indicar 0/1. En el diagrama de tiempo anterior, puedes ver mi interpretación de RS-232 y "Otro" que indica un protocolo desconocido, que tendría un '0' digital como un pulso alto de 720 uS, y un '1' digital como un pulso alto de 24 mS .

Apreciaría cualquier información sobre el protocolo utilizado aquí. Si necesitas aclaraciones, haré mi mejor esfuerzo.

Referencia RS-232 / UART: enlace

Actualización: Después de grabar y transcribir muchas formas de onda de diferentes eventos, he descubierto parte del protocolo.

  1. Hay un comando 'Iniciar' al principio de cada secuencia. Consiste en una lógica baja durante al menos 4 ms, luego alta durante 7 ms, luego baja durante 4 ms.

  2. Después del comando 'Inicio', los pulsos cortos (720uS) representan la lógica Cero y los pulsos largos (2.4ms) representan la lógica Uno. Los espacios entre pulsos son aproximadamente 840uS.

  3. Todas las secuencias tienen una longitud de 5 bytes y se transmiten 6 veces.

  4. Los primeros 2 bytes son siempre los mismos: 00: FF: 0F: F0

  5. El tercer byte parece ser el comando / identificador de evento:

    • Evento de cambio de ajuste de temperatura (rueda girada): 00:70
    • Comando ON (botón presionado): 00:00
    • Comando OFF (botón presionado): 00:70 (igual que el ajuste de temperatura)
    • Evento de inicio de flujo: 02:70
    • Evento de detención de flujo: 00:70 (igual que el ajuste de temperatura y el comando de apagado)
  6. El cuarto byte es la temperatura en Fahrenheit, MSB a LSB (80 a 140)

  7. El quinto byte es la temperatura en grados Celsius, MSB a LSB (26 a 60)

Ahora tengo que determinar si puedo enviar estas mismas secuencias a la línea RX para cambiar las temperaturas y habilitar / deshabilitar el calentador de forma remota. Me pregunto si se usa una dirección diferente

ACTUALIZACIÓN # 2: ¡Éxito! Resulta que el envío de las mismas secuencias al pin RX se puede utilizar para ajustar la temperatura y encender y apagar la unidad. Fue bastante fácil golpear el protocolo con un Arduino Uno, y el calentador responde a los ajustes de temperatura alterando directamente la temperatura de salida (no es necesario subir o bajar un grado cada vez). Planeo publicar la guía de la interfaz completa junto con el código fuente tanto para la entrada como para la salida cuando se complete.

¡Gracias a todos los que ofrecieron sugerencias!

ACTUALIZACIÓN # 3: Se creó el repositorio de Github: enlace

ACTUALIZACIÓN # 4: Consulte el repositorio de github de Phil para obtener más información: enlace

    
pregunta Ryan Griggs

1 respuesta

3

El protocolo de datos que mostró en el documento vinculado se parece a la forma de onda de modulación común a algunos controles remotos IR. Es posible que la configuración cableada que usted describe pueda ser diseñada para que el enlace de control remoto también funcione si un módulo receptor de IR se enchufara en el encabezado remoto. (Las comunicaciones serían de una manera).

Se describen varios protocolos IR comunes en este documento .

Me aventuraría a adivinar que los dos tiempos más largos (7 ms / 4 ms) son la sincronización de inicio de la transmisión. Después del tiempo de sincronización, los datos parecen estar codificados en celdas de bits con una codificación de 1440 usec como modulación de Manchester. Un nivel de datos es de 720usegundos al inicio de la celda y 720usegundos en la segunda mitad de la celda. El nivel de datos opuesto está representado por la línea de datos baja para 720usec al inicio de la celda y alta en la segunda mitad de la celda de bit.

Este definitivamente no es un formato asíncrono usado por un protocolo UART típico.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas