Comunicación DALI: ¿Es el protocolo DALI un mecanismo de transferencia de bytes o un mecanismo de capa de paquetes?

0

Según el DALI protocolo estándar de control de luz, la comunicación del bus DALI utiliza semidúplex asíncrono (dos cables) comunicación serial. Utiliza la codificación de Manchester a 1200 bits por segundo (baudios). Un bus DALI puede tener hasta 64 dispositivos esclavos en la red.

Estoy intentando implementar el protocolo DALI en STM32E407 (como maestro) y en la placa de descubrimiento STM32F3 (como esclavo). Estoy buscando algunos consejos prácticos para implementar la comunicación DALI.

Tengo algunas preguntas básicas sobre la comunicación DALI:

¿El protocolo DALI en sí mismo es un mecanismo de transferencia de bytes o es una capa de paquetes a nivel de software (como CAN)?

Si DALI es un mecanismo de capa de paquete, ¿qué mecanismo de transferencia de nivel de byte será mejor para él?

Si es el popular protocolo de comunicación asíncrono UART (o USART), ¿qué tan bueno es UART (o USART) para la comunicación multiprocesador (para alrededor de 64 dispositivos esclavos)? y a nivel de microcontrolador, ¿cuánto más rápida debería ser la interfaz serial (UART o USART) a "DALI 1200 baud rate" para una ejecución eficiente de la codificación Manchester?

Gracias de antemano!

    
pregunta charansai

3 respuestas

0

DALI describe la capa física, el protocolo y el conjunto de comandos.

No es realmente un protocolo de tipo UART (a menos que tenga una codificación externa de Manchester), y la forma habitual de implementar es un par de aisladores ópticos y un transistor más algunos pasivos para la capa física (que debe estar aislada) un temporizador o dos interrupciones de generación más un par de pines con interrupción en cambio para el IO.

Para la transmisión, configure una interrupción de 2400Hz y genere la bifase en el software en el ISR.

Para recibir, utiliza la interrupción en el cambio y un temporizador para escribir una máquina de estado simple para extraer los mensajes de 24 bits (IIRC).

El gotcha con DALI es la necesidad de un generador de números aleatorios para el descubrimiento automático, encontrar suficiente entropía en un dispositivo sin IO de usuario puede ser un poco molesto.

Tenga en cuenta también que para ser compatible con DALI, debe alcanzar la curva de atenuación para su tipo de luminaria bastante cerca, y DALI utiliza una curva de registro (a diferencia de DMX).

    
respondido por el Dan Mills
1

Los mensajes DALI son comandos (por ejemplo, Apagado, Ir a la escena 3), comandos de configuración (por ejemplo, Establecer nivel mínimo), consultas (por ejemplo, Nivel mínimo de consulta) o respuestas (por ejemplo, Sí). Algunos comandos, principalmente los comandos de configuración, requieren la transferencia de bytes porque el mensaje es demasiado pequeño para contener el comando, el direccionamiento y los datos. Entonces, para establecer un nivel mínimo, debe transferir el valor requerido a la DTR0 de la marcha antes de emitir el comando Establecer nivel mínimo, y debe enviar el comando Establecer nivel mínimo dos veces dentro de 100 ms. También puede volver a leer el valor DTR0 y otros valores DTR (DTR1, DTR2).

No es práctico usar UART estándar para transmitir o recibir DALI debido a la codificación de Manchester y los requisitos de temporización de bits y cuadros.

La eficiencia del ancho de banda con 64 engranajes de control se logra mediante el direccionamiento de grupo. Si está interesado en varios maestros, entonces deberá implementar la sincronización de varios maestros, incluida la detección de colisiones, la evitación y la recuperación, tal como se especifica en IEC 62386-103.

    
respondido por el Martin
1

DALI es un protocolo extremadamente simple de dos bytes (16 bits) por mensaje, que también es bastante complejo e inteligente en su implementación. El maestro envía mensajes a través de la red que todos los nodos reciben y procesan (o ignoran). Los esclavos pueden, pero no siempre, enviar respuestas de [8 bits] al maestro.

Estarás encantado de implementar maestro y esclavo con tus dos dispositivos, pero necesitarás hacer pequeñas placas adaptadoras de hardware como "transceptores" y un suministro de bus. Hay muchos ejemplos alrededor. Atmel, Microchip y NXP tienen notas de aplicaciones muy útiles sobre esto. A continuación se muestra un ejemplo de un transceptor que necesita en cada nodo.

Definitivamente, podría implementar comunicaciones mucho más rápidas con un UART y podría hacer 64 nodos por red sin problemas usando RS485 y algún protocolo ejecutado en él. Sin embargo, la velocidad no es el punto aquí. La inmunidad al ruido y la facilidad de cableado (incluida una topología muy flexible) son primordiales: puede conectar el cableado de cualquier manera con DALI. Algo que definitivamente no es el caso con RS485.

No puede codificar y decodificar Manchester con UART, pero es bastante sencillo golpearlo con un par de pines GPIO.

    
respondido por el DiBosco

Lea otras preguntas en las etiquetas