(2)发送状态:当MCU的DALI_TX引脚向三极管输出高电平驱动信号时,Q2导通,从而拉低Q3管的栅极电压使Q3截止,DALI接口电压为输出总线高电平;同理,当DALI_TX引脚对外输出低电平时,Q2截止,Q3导通,总线电平被拉低至0 V。通过高低电平驱动信号的切换,MCU向总线发送数据帧。
2.3 主控器程序设计
2.3.1 数据冲突的避免
DALI 1.0系统中,只有主控器为主机,主控器除了在等待接收后向帧以外的任一时间的数据发送不受限制。而DALI 2.0系统是多主模式,输入设备可以自由发送数据,即在总线上可能会有多个数据帧同时发送的情况发生,因此设计主控器采用载波侦听的机制(Carrier Sense Multiple Access with Collision Detection,CSMA/CD)监控DALI总线上的数据变化以避免数据传送冲突。当总线空闲时,主控器发送数据;当总线存在数据帧时,主控器等待总线空闲再发送数据;当主控器已开始发送数据但侦测到总线上存在数据冲突时,立即停止发送数据并等待重新发送。
2.3.2 系统设备初始化
在DALI系统的初始化过程中,主控器需要对总线上的输入设备和照明装置进行短地址分配[8],分配短地址流程图如图4所示。
主控器配置输入设备和照明装置的短地址的核心算法是二分法。主控器不断产生搜寻地址并与系统中的设备随机地址相比较,直至搜寻地址与随机地址相等即找到该特定设备并可配置短地址码。若已配置地址码个数为64或已无设备响应最大搜寻地址0xFFFFFF,则主控器完成地址分配。
2.3.3 DALI指令与时序
主控器与输入设备之间及主控器与照明装置之间具有不同的DALI指令集,需要单独设计。DALI系统正常运行的关键在于主控器正确识别总线上数据帧的来源及数据帧的内容,并满足特定的通信时序。
在程序设计上将DALI的底层数据发送和上层的指令应用分开。在主控器中,设计STM32F429产生1个tick为32 μs的基本定时器中断。在发送过程中,高电平或低电平连续保持13个tick,从而产生上升沿或下降沿的逻辑信号。在接收过程中,通过边沿触发的外部IO中断方式配合定时器中断实现数据的精准接收。
主控器通过外部Flash存储DALI系统中输入设备与照明装置的绑定关系。在系统运行过程中,采用查找表的方式,当总线上存在匹配的事件报告时控制照明灯具对象执行指定操作。
2.4 PC上位机实现
设计PC上位机操作软件,以便用户进行参数设定。采用Visual Studio 2017作为上位机开发环境,系统框架选用.NET,开发语言为C#。通过PC软件,用户可以进行DALI系统的地址分配、设备的基本属性修改、灯具分组和场景值设置等基本操作。