DMX512协议

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。

 

DMX512(digital multiplex)

其实就是主机向从机整包单向广播发送的协议(protocol),从机自取所需。

DMX512数据协议是美国舞台灯光协会(USITT)于1990年发布的一种灯光控制器与灯具设备进行数据传输的标准。它包括电气特性,数据协议,数据格式等方面的内容。
512协议规定使用的波特率是250Kbps

一、链接拓扑(network topology)

根据后面的协议可以知道,其实就是将所有的slave挂到线上去。(线最长可以多长?)

 

二、协议(protocol)的时序如下图

1) 先说明地址,包的格式是固定的,第一个数据帧就是地址1(说是0也可以),接下来的数据帧,地址逐渐+1。

2) 1 slot 或者叫 1 data frame(数据帧)=1 start bit(低电平) + 8 data bits + 2 stop bits(高电平) = 11bits, 1bit=4us,1slot=44us。(下图右下角的蓝色字体部分)

3) 1 packet (数据包)= 1 break + 1 MAB(mark after break) + 1 SC(start code) + 512 slots + 1 MTBP(mark time between packets) (下图红色字体部分)

  • 1 break 典型值88us
  • MAB 典型值 8us
  • SC就是一帧 44us,第0帧
  • MTBP,高电平有效,0-1s之间

time = 88us + 8us + 44us + 512 * 44us + 0 = 22668us = 22.668ms 发包频率44.11Hz,也就是控制频率了,如果地址用不完,把slot减少,时间也可以节省,然后频率可以更高了。(调光控制台每发送一个信息包,可以对全部512个受控通道形成一次全面的控制。发送一个信息包的时间大约是23 ms,每秒钟将对所有512个受控通道完成44 次控制,即受控光路的刷新频率44 Hz,如果实际受控通道少于512个,那么刷新频率将相应提高。

)

 

放大右下角的每帧时序

 

START BIT 为开始位,宽度为一个比特,是受控灯具准备接收并解码控制数据的开始标志;

STOP BITS为结束位,宽度为两个比特,表示一个指令帧的结束;

D0~ D7为8 位控制数据,其电平组合从00000000一11111111 共有256个状态(对应十进制数的0~255),控制灯光的亮度时,可产生256个亮度等级,0000~ (0)对应灯光最暗,11111111(255)对应灯光最亮。

无校验位

 

DMX512指令的位宽(每比特宽度)是4 us,每一个指令帧11位,故指令帧宽度为44 us,传输速率为1/44us = 250 kbps。

 

DMX512 信息包定时表:

 

一个完整的DMX512信息包(Packet)由一个MTBP位、一个Break 位、一个MAB位、一个SC 和512个数据帧构成。MTBP(Mark TimeBetween Packets)标志着一个完整的信息包发送完毕,是下一个信息包即将开始的“空闲位”,高电平有效。Break为中断位,对应一个信息包结束后的程序复位阶段,宽度不少于两个帧(22 比特)。程序复位结束后应发送控制数据,但由于每一个数据帧的第一位(即开始位)为低电平,所以必须用一个高电平脉冲间隔前后两个低电平脉冲,这个起间隔、分离作用的高电平脉冲即MAB(Mark After Break),此脉冲一到,意味着“新一轮”的控制又开始了。SC(Start Code)意为开始代码帧(图1中的第0帧),和此后到来的数据帧一样,也是由11 位构成,除两个高电平的结束位之外,其他9位全部是低电平,通常将其叫做第0 帧或第0通道,可理解为一个不存在的通道。

 

 

### DMX512协议详解 DMX512(Digital Multiplex with 512 pieces of information)是一种广泛应用于舞台灯光和特效设备控制的通信协议。其设计初衷是为了简化复杂的灯光控制系统,通过标准化的数据传输方式来提高兼容性和可靠性。 #### 协议基础 DMX512在物理层采用了EIA-485差分信号技术[^1],这种技术能够有效减少电磁干扰的影响,从而提升数据传输的稳定性。DMX512是一个单向通信协议,这意味着数据仅能由控制器发送至受控设备,而不支持从受控设备返回数据给控制器的操作模式[^1]。 #### 数据帧结构 DMX512的数据帧是由一系列特定的时间间隔和电平变化组成的。一个完整的DMX512数据帧包括以下几个部分: - **Break**: 这是一段持续时间较长的低电平信号,用来标记新一帧数据的开始。根据标准规定,这个时间段至少要达到2秒[^2]。 - **Mark After Break (MAB)**: 在Break之后紧接着的是短暂的高电平状态,称为Mark After Break。它的作用是用来区分Break结束以及后续数据位的到来。 - **Slot Zero/Start Code**: 随后的第一个字节定义为槽零或者启动码,默认情况下其值设为0表示常规数据包。 - **Data Slots**: 接下来的每组8比特代表不同的通道数值,理论上最多可以容纳512个这样的数据槽[^1]。 以下是Python模拟生成简单DMX512数据流的一个例子: ```python import serial import time def send_dmx_data(port_name, data): ser = serial.Serial(port=port_name, baudrate=250000, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_TWO) break_time = 0.002 # Minimum required BREAK duration is typically around this value. mark_after_break = 0.001 # MAB should be shorter than the shortest slot period. try: while True: # Send BREAK condition ser.break_condition = True time.sleep(break_time) ser.flush() # End BREAK and start sending actual data ser.write(bytearray([0]) + bytearray(data)) # Start code followed by channel values # Wait before next frame transmission time.sleep(mark_after_break + ((len(data)+1)/40)) finally: ser.close() # Example usage send_dmx_data('/dev/ttyUSB0', [i % 256 for i in range(512)]) ``` 此脚本展示了如何利用PySerial库在一个指定端口上连续不断地发出符合基本DMX512规范的数据序列[^2]。 #### 应用场景 由于DMX512具备良好的稳定性能与广泛的行业认可度,在实际应用中主要体现在以下几个方面: - 舞台照明系统的远程调控; - 建筑物外墙动态光影秀的设计实施; - 大型演出活动中的烟火效果同步触发等。 ### 注意事项 当尝试构建自己的DMX512解决方案时需要注意硬件层面的支持情况,例如所使用的微处理器是否具有足够的处理能力去精确管理BREAK及时隙之间的转换过程。对于某些非严格场合下的简易项目来说,可能适当放宽对完全遵循官方标准的要求也能取得满意的效果[^2]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值