HID灯电子镇流器控制电路和数字可寻址照明接口(DALI)的通信接口规范的FPGA实现
扫描二维码
随时随地手机看文章
项目背景及可行性分析
项目名称、项目的主要内容及目前的进展情况
答:项目名称为:HID灯电子镇流器控制电路和数字可寻址照明接口(DALI)的通信接口规范的FPGA实现。
主要内容:
(1)、通过A/D采样电子镇流器的Buck电路得到电压和电流的数字值。运用数字电路构成PID算法,对采样数据进行处理,产生PWM脉冲信号,实现对HID灯的恒流和恒功率控制,以达到精确调光和稳定工作。
(2)、将DALI通讯协议融合到FPGA中去,达到主计算机对HID灯电子镇流器组群的控制和通信,以实现根据实际环境和需要对HID灯的精确调光和状态查询。
目前进展情况:DALI部分主程序已经完成,编译通过,并正在仿真调试。PID部分正准备开始。
项目关键技术及创新点的论述;
答:(1)、用FPGA代替MCU来实现对HID电子镇流器的控制及调光。
(2)、将DALI通讯协议融入控制芯片,方便外界对电子镇流器的监测和控制。
(3)、用脉宽调制(PWM)技术实现对HID灯的精确调光。
技术成熟性和可靠性论述:
答:现有HID电子镇流器的控制一般是用MCU加专用控制芯片来实现,然而,现阶段绝大多数比较成熟的电子镇流器的控制芯片都是针对荧光灯的,针对HID灯的电子镇流器的控制芯片几乎呈现空白状态。但我们对HID灯电子镇流器比较熟悉,因此我们认为我们的设计具有可实现性。
经过系内专家及相关资料论证,我们的设计具有可靠性,具体可靠性我们会在整个设计完成后,配合已设计好的外围电路加以确认。
项目实施方案
1.方案基本功能框图及描述
用框图的方式并加以简单的描述简述实施本项目的技术方案。
以下第一幅图是我们的DALI的系统功能框图,所谓DALI(Digital Addressable Lighting Interface),是一种数字式可寻址照明通讯协议。
由图可知,我们的系统采用放电型上电式复位的结构。上电后正常情况是rst=1,从而对各信号进行赋初值。为了防止正常工作期间,再次发生rst=1的误复位操作,我们进而采用了先对rst采样并检测的措施:如果rst=1,执行200ms的延时,而后再次检测rst,如还为1,则非误触发;否则就有可能是干扰等产生的误触发,对此我们不做响应。
基于主机在每次发送address 和command之前,会在IRQ引脚对我们的系统进行下降沿触发,因此我们在复位后就等待IRQ下降沿触发信号。如果被触发,我们就开始接收数据,进入接收环节。
在进行对接收环节的描述之前,我们先来简要地说明一下Dali控制器命令的数据帧结构。Dali控制器命令的数据帧结构包括一个起始位,八个地址位 (第一字节),八个数据/指令位 (第二字节),和两个停止位。第一字节为address字节,第二字节为command字节。可以看出Dali的控制命令异常简单,那么是否能保证不出现错误,并实现精确调光呢?
答案是令人放心的。因为Dali数据传送采用以8bit为载体,若前4位为0,后4位为1,则中间的上升沿来表示1;若前4位为1,后4位为0,则中间的下降沿来表示0的传递信号方式。因此,对数据0和1的传送非常稳定,不容易受到干扰。此外,每帧数据还包含了:一个上升沿作为起始位,两个字节作为address和command,两位连续的高电平作为结束位(在实际中应为2*8bit的高电平)。总共加起来实际上是发送了152bit的数据。
进入接收环节,我们才算是开始了真正意义上的Dali程序环节。我们采用rec_bit代表我们已经接收的实际bit数目(也即接收到的addresss和command命令中的位数),采用rec_position作为每一个bit代表的8bit中所接收的数据位。在这个环节中我们逐位接收数据,当接收过程中发生错误,则停止接收,并返回判断IRQ是否触发状态. 如果整个接收过程(起始位,中间位,终止位)全无错误,则向RAM中相应字节写入”00000001”,标志可以进入数据处理阶段(handle_data)。.
数据处理可根据address 和command的不同分为: 灯调光专用指令, 普通指令, 特殊指令三种 :
由于我们接收的是一个十六位数据,并且其中前八位表示地址(8bit地址结构为YAAAAAAS),后八位表示command 和调光值,当接收到的十六位数据的最高位,即Y=0时表示为短地址,Y=1时表示为组地址,S为选择标志位,当S=0时表示后面的是调光等级值,S=1时表示后面的是指令
灯调光专用指令(lamp_setlevel),我们是做成元件例化(component)的形式,因此它并行于其他process。它包含了所要达到的调光值,最大调光值,最小调光值等输入值以及越限错误,现在的调光值(也即前次所达到的调光值),极值调光值判断和tch0,tch1等输出值。当所要达到的调光值为FF时,表示的是demo模式;当为00时,表示的是OFF模式,即关灯;当FE时,表示极值调光值,此时极值调光值判断置1。其他值时,根据所要达到的调光值的不同,tch0或tch1的值也置不同的值,这两个输出将是PWM的输入信号。这里具体的就不说了,请详见程序lamp_setlevel。
普通指令,(normal command) 则分为间接功率控制命令(indirect arc power control commands),整体配置命令(general configuration),功率参数设置(arc power parameters settings),系统参数设置(system parameters settings),询问相关状态信息(queries related to status information),询问相关功率参数设置(queries related to arc power parameters settings),询问相关系统参数设置(queries related to system parameters settings) 等。
以下我们简单介绍程序中一些二进制代码所对应的命令,列表如下:
Indirect arc power control commands |
|
0000 0000 |
OFF |
0000 0001 |
UP |
0000 0010 |
DOWN |
0000 0011 |
STEP_UP |
0000 0100 |
STEP_DOWN |
0000 0101 |
RECALL_MAX_LEVEL |
0000 0110 |
RECALL_MIN_LEVEL |
0000 0111 |
STEP_DOWN_AND_OFF |
0000 1000 |
ON_AND_STEP_UP |
0001 0000 |
GO_TO_SCENE |
General configuration commands |
|
0010 0000 |
RESET |
0010 0001 |
STORE_ACTUAL_LEVEL_IN_THE_DTR |
Arc power parameters settings |
|
0010 1010 |
STORE_THE_DTR_AS_MAX_LEVEL |
0010 1011 |
STORE_THE_DTR_AS_MIN_LEVEL |
0010 1100 |
STORE_THE_DTR_AS_SYSTEM_FALLURE_LEVEL |
0010 1101 |
STORE_THE_DTR_AS_POWER_ON_LEVEL |
0010 1110 |
STORE_THE_DTR_AS_FADE_TIME |
0010 1111 |
STORE_THE_DTR_AS_FADE_RATE |
0100 0000 |
STORE_THE_DTR_AS_SCENE |
System parameters settings |
|
0101 0000 |
REMOVE_FROM_SCENE |
1000 0000 |
STORE_DTR_AS_SHORT_ADDRESS |
Queries related to status information |
|
1001 0000 |
QUERY_STATUS |
1001 0001 |
QUERY_BALLAST |
1001 0010 |
QUERY_LAMP_FALLURE |
1001 0011 |
QUERY_POWER_ON |
1001 0100 |
QUERY_LIMIT_ERROR |
1001 0101 |
QUERY_RESET_STATE |
1001 0110 |
QUERY_MISSING_SHORT_ADDRESS |
1001 0111 |
QUERY_VERSION_NUMBER |
1001 1000 |
QUERY_CONTENT_DTR |
1001 1001 |
QUERY_DEVICE_TYPE |
1001 1010 |
QUERY_PHYSICAL_MINIMUM_LEVEL |
1001 1011 |
QUERY_POWER_FALLURE |
Queries related to arc power parameters settings |
|
1010 0000 |
QUERY_ACTUAL_LEVEL |
1010 0001 |
QUERY_MAX_LEVEL |
1010 0010 |
QUERY_MIN_LEVEL |
1010 0011 |
QUERY_POWER_ON_LEVEL |
1010 0100 |
QUERY_SYSTEM_FALLURE_LEVEL |
1010 0101 |
QUERY_FADE |
Queries related to system parameters settings |
|
1011 0000 |
QUERY_SCENE_LEVEL |
1100 0010 |
QUERY_RANDOM_ADDRESS_H |
1100 0011 |
QUERY_RANDOM_ADDRESS_M |
1100 0100 |
QUERY_RANDOM_ADDRESS_L |
特殊指令是广播发送的,所有的镇流器都能收到,其形式为address的八位内容为”101XXXX1”或”110XXXX1”.而且每条后边跟随着的八位command中存储的是对应的value(格式为:A1 00; A3 XX;A5 XX;A7 00; A9 00; AB 00;B1 HH;B3 MM;B5 LL;B7 XX;B9 XX; BB 00;BD 00 .共有十三条) 具体说来: A1 00 是终止特殊进程的指令,执行后所有特殊模式的处理进程都会被终止(以address_time<="00000000"的方式实现); A3 XX 将会向DTR中存储command的八位数值”XXXXXXXX “; A5 XX是初始化指令,这一指令在接下来的100毫秒内将被再次接收到; A7 00 是产生随机序列指令,镇流器将根据它产生一个新的随机地址,共有24位,分为高,中,低三个字节存放在三个存储器中.我们采用三个时钟(clk_main, clk_dali, clk_20)驱动的三个循环计数器计数,当需要产生随机地址时,把当时的计数值赋给三个存储器即可; A9 00是比较指令,镇流器会将已存储在search_address_h, search_address_m, search_address_l中的组合寻址地址(由主机发来的)与它的随机地址比较,如果随机地址小于或等于组合寻址地址,则镇流器不被撤销,回答YES(answer<="11111111"); AB 00 是撤销指令,也即随机地址和组合寻址地址相等的镇流器将被撤销(因为短地址已经确定)而不再响应比较指令; B1 HH,B3 MM,B5 LL 分别是将command中的数值存入search_address_h, search_address_m, search_address_l; B7 XX实际为1011 0111 0AAAAAA1,执行时如果镇流器被选中,则会将收到的6位地址保存为它的短地址(被选中的条件是:1.镇流器的随机地址和组合寻址地址相等 或者2.灯具和镇流器之间没有连接,则在接收到指令BD 00后,镇流器就会被物理选择探测到) [注意:当B7 XX为1011 0111 01111111 时,短地址将被删除.]; B9 XX 是确认短地址,当接收到的短地址和镇流器自身的短地址相同则回答YES; BB 00 如果镇流器被选中,则会向主机回发短地址(0AAAAAA1); BD 00 执行此指令时,镇流器被置为物理选择模式(selection<="00000001"),这一模式下不能进行组合寻址地址和随机地址的比较.
接着就是发送这一块了。前面对flag(也即dataout1信号)的02的置位,使得发送得以进行。于是,在clk_dali时钟上升沿的触发下,发送环节开始串行输出。在这里,Dali数据传送仍采用以8bit为载体,若前4位为0,后4位为1,则中间的上升沿来表示1;若前4位为1,后4位为0,则中间的下降沿来表示0的传递信号方式(这些在程序中有详细的发送步骤描述,恕不多叙)。值得注意的是:
answer是8bit的输出,它的串行输出必须一步步的执行,因此用temp_value来记录每一位的值,并按照Dali数据传送规则传出。
send_position与rec_position有些不同,send_position是一直加上去的,没有清零。这样,在send_position=24时,开始起始位上升沿的输出,到27bit结束,在从28到31bit是下降沿的输出。然后从32bit起,开始数据传递。当到达96bit时开始结束位的16bit高电平,然后再在112bit对flag(dataout1)和send_position清零。
上图是我们联合主控计算机,运用DALI通讯协议,进行HID灯恒功率工作调节的PID算法框图。
BUCK电路是电子镇流器的逆变电路,通过对它采样可得灯的工作电压与电流瞬时值,我们先经过滤波网络,LEM隔离和二阶滤波电路,而后进行采样并A/D转换,得到十位的数字值,然后用预存储的pref 与所得的电压值作除法,得到电流参考值,并与所采样的电流值比较作差,得到误差e(k),然后通过图示的pi算法分别进行乘法(*KP)和累加(
)后乘法(*KI),然后将两者所得结果再作加法,所得U(k)经图示步骤转化为PWM脉宽变化,进而控制功率管的开关时间,减小误差,实现负反馈,最终达到恒功率控制。