引言
舞台灯光效果设计是舞台场景设计的重要组成部分。目前国内使用的各种新型灯光设备,如换色器、调光器、电脑灯等大多是从国外进口,国内几乎没有生产。为此,我们应国内某舞台灯不设备厂的要求设计了一种以AT89C2051单片机为控制器的新型舞台灯光换色器HSQ-1A。该换色器可变换8种色彩,换色精度高,工作可靠。使用时,舞台上所有的换色器和总控制台根据RS-485协议连成总线网络;总控制台作为主机通过总线发布命令,控制所有换色器的工作。以下介绍换色器的工作原理及设计方案。
一、系统结构和工作原理
换色器由一个中空的框架、两根卷轴以及各色透光薄膜组成。制作时,首先将不同颜色的透光膜连接成条幅,并在条幅的两端安上卷轴。然后用卷轴将条幅卷起,以活动的方式把卷轴安装在框架的两侧。使用时,把换色器放在白色光源前方,转动两根卷切换不同颜色的透光膜,从而产生不同颜色的灯光效果。这种不换光源只换透光膜的换色方案,与更换不同颜色光源的方案相比,虽然换色速度较慢,但成本低,可靠性高。因此,换色器在换色频度低的场合中应用很广。
在换色器的设计中,重点在于卷轴的驱动和定位机构的设计。过去,采用的交流电机和光电码盘实现方式,运行噪声大、定位精度差,在实际使用中效果不理想。现在,在新换色器中选用步进电机作为驱动和定位机构,彻底解决了以上问题。换色器工作时运行平稳、噪声小、定位精度高,完全达到了设计要求。
总控制台与换色器之间的通信使用DMX512数据传输协议。DMX512协议是美国舞台灯光协会(USITT)于1990年发布的一种灯光控制器与灯具设备进行数据传输的标准。这包括电气特性、数据协议、数据格式等各方面的内容。
DMX512电气特性与RS-485完全兼容,包括驱动器/接收器的选择、线路负载和多站配置等方面的要求都是一致的。
DMX512数据协议规定使用250Kbps的波特率。在进行正常数据传输之前,发送1个复位信号,声明数据传输的开始。随后的第1帧数据称为起始代码,其中包含设备类型码,以指明后续数据的接收设备的类型。最后,按设备编号的顺序给每个设备发送1帧数据,依次为:1#设备数据帧、2#设备数据帧,直至最后一个设备。设备总数最多可达512个,数据帧间隔为高电平,最长不超过1s。
DMX512数据格式规定,1帧数据长度为11位。按传送顺序说明如下:
第1位——起始位,低电平(SPACE);
第2~9位——数据位,从最低位到最高位(LSB~MSB),正逻辑;
第10、11位——停止位,高电平(MARK);
奇偶校验位——不传送。
二、硬件电路
ULN2003A是内含7个达林顿管的驱动芯片,输入电压与TTL电平兼容。每个上达林顿管的集电极可吸收最大500mA的电流,耐压30V,因此可以用来驱动四相步进电机。
74LS125三态门用于控制电机的工作方式。电机正常工作时,74LS125处于导通状态,两个电机可以同方向、同步转动;电机复位时,三态门阻断,只有一个电机可以转动。
MAX1487用于驱动/接收RS-485信号。其接收器的输入阻抗只有1/4个单位负载,最多可连接128个通信设备。另外,MAX1487的传输信号变化沿没有限制斜率,所以最高数据传输可达2.5Mbps。
三、X25045介绍
在采用DMX512协议通信时,换色器的编号用于从总控制台发送的数据包中选择发给本设备的数据帧。正常工作时,编号数据不会掉电丢失,而且必要时编号还可修改。因此采用XICOR公司的串行E2PROM器件X25045对编号数据进行存储。
X25045是带有串行E2PROM的CPU监控器。
CS/WDI:片选输入/看门狗复位输入;
SO:串行输出;
WP:写保护输入;
Vss:地;
Vcc:电源;
RESET:复位输出;
SCK:同步时钟输入;
SI:串行输入。
X25045的状态寄存器描述器件的当前状态,各位意义如表1所列。
其中,WD1、WD0是看门狗定时时间设置位;BL1、BL0是存储单元写保护区设置位;WEL是只读标志,1表明写使能开关打开;WIP也是只读标志,1代表芯片内部正处于写周期。电复位时,各位都被清零。
X25045芯片功能包括以下4种:
(1)上电复位控制。在对X25045通电时,ERSET引脚输出有效的复位信号,并保持至少200ms,使CPU有效复位。
(2)电源电压监控。当检测到电源电压低于内部门槛电压VTRIP时,RESET输出复位信号,直至电源电压高于VTRIP并保持至少200ms,复位信号才被撤消。VTRIP的出厂值根据芯片型号不同共有5个级别的电压范围。对于需要电源电压精确监控的应用,用户可以搭建编程电路,对芯片内VTRIP电压进行微调。
(3)看门狗定时器。芯片内部状态寄存器的WD1、WD0是看门狗定时设置位,通过状态寄存器写指令WRSR修改这2个标志位,就能在3种定时间隔中进行选择或关闭定时器。对看门狗的复位由CS输入电平的下降沿完成。表2是WD1、WD0组合的含义。
(4)串行E2PROM。芯片内含512字节存储单元,10万次可靠写,数据保持时间100年。XICOR设计了3种保护方式防止误写。包括:WP写保护引脚,当引脚被拉低时,内部存储单元状态寄存器都禁止写入;存储区域写保护模式,通过对状态寄存器的BL1、BL0位的设置,可以选择对不同的存储区域进行写保护;在进行任何写操作前都必须打开写使能开关,而且在上电初始化写操作完成时,写使能开关自动关闭。显然,在几方面的保护之下,产生误写的可能性极小,表3是BL1、BL0组合的含义。
对X25045的操作是通过4根口线CS、SCK、SI和SO进行同步串行通信来完成的。SCK是外部输入的同步时钟信号。在对芯片定改指令或数据时,时钟前沿将SI引脚信号输入;在读邮数据时,时钟后沿将数据位输出到SO引脚上。数据的输入/输出都是高位在先。
芯片内部共有6条指令,如表4所列。
(1)WREN和WRDI是写使能开关的开/关指令。它们都是单字节指令。
(2)RDSR和WRSR是状态寄存器的读/写指令。在从SI输入指令后,RDSR的执行结果,即状态寄存器内容须从SO读出;而WRSR需要紧接着输入修改数据。
(3)READ和WEITE是存储单元的读/写指令。输入指令后(指令码第三代表存储单元地址的最高位),接着输入低八位地址,最后就可以连续读出或写入数据。其中,读指针和写指针的工作方式完全不同,读指针的全部8位用来计数,0FFH溢出后变成00H;写指针只用最低两位计数,XXXXXX11B溢出后变成XXXX XX00B,所以连续写的实际结果是在4个单元中反复写入。另外,由于E2PROM的写入时间长,所以在连续两条写指令之间应读取WIP状态,只有内部写周期结束时才可输入下一条写指令。
AT89C2051内部没有SPI接口硬件,因此本系统利用了单片机的4根口线和软件模拟读写时序的方式与X25045通信。软件包在文末给出。
四、软件原理
系统程序包括主程序和串口通信断服务程序。主程序首先从X25045中取出本设备编号备用,然后进入循环。特环程序的主要任务包括:①检测换色标志,当换色标志有效时,则调用步进电机驱动程序控制转抽,将换色器切换到新颜色;②帧间隔1s延时,当时间到时,中断程序将复位串口接收程序;③定时复位X25045的看门狗。
通信中断服务程序用于检测RS-485总线发送的复位信号和起始代码。当两者同时有效时开始对后续接收的数据帧进行帧计数。当计数值与设备编号相同时,说明当前帧是给本设备的数据,于是根据该数据设置换色标志,由主程序执行换色动作。
X25045的通信接口软件:
CS BIT P3.2
SCK BIT P3.3
SI BIT P3.4
SO BIT P3.5
(1)X25045数据写入程序
功能:将缓冲区数据写入指定地址开始的单元。
入口:F0、R3是E2PROM单元地址最高位低八位;R0是缓冲区首地址;R2是缓冲区长度。
WRITEX:LCALL STAX ;指令启动
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX ;下一指令启动
MOV A,#02H ;输出WRITE
MOV C,F0 ;插入单元地址最高位
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出单元地址低八位
LCALL BYTE_OUT
BYWR:MOV A,@R0 ;从缓冲区取数输出
LCALL BYTE_OUT
INC R0 ;指针加1
DJNZ R2,BYWR ;缓冲区未空则继续输出
LCALL ENDX ;指令结束
LCALL WIP_CHK ;等待WIP=0
RET
(2)X25045数据读出程序
功能:把指定地址开始的单元数据读出并放入缓冲区
入口:与写入程序相同。
READX:LCALL STAX
MOV A,#03H ;输出READ
MOV C,F0
MOV ACC.3,C
LCALL BYTE_OUT
MOV A,R3 ;输出低八位地址
LCALL BYTE_OUT
BYRD:LCALL BYTE_IN ;输入数据送入缓冲区
MOV @R0,A
INC R0 ;指针加1
DJNZ R2,BYRD ;缓冲区未满则继续输入
LCALL ENDX
RET
(3)X25045状态寄存器写入程序
功能:对状态寄存器进行设置。
入口:ACC是修改值。
WRSR:LCALL STAX
PUSH ACC
MOV A,#06H ;输出WREN
LCALL BYTE_OUT
LCALL STAX
MOV A,#01H ;输出WRSR
LCALL BYTE_OUT
POP ACC ;输出设置值
LCALL BYTE_OUT
LCALL ENDX
LCALL WIP_CHK ;等待WIP=0
RET
(4)X25045状态寄存器读出程序
功能:读出状态寄存器当前值。
出口:ACC是当前值。
RDSR:LCALL STAX
MOV A,#05H
LCALL BYTE_OUT
LCALL BYTE_IN
LCAL ENDX
RET
(5)其他子程序
WIP_CHK:LCALL RDSR ;等待X25045结束内部写周期
JB ACC.0,WIP_CHK
RET
STAX:SETB CS ;启动X25045指令
NOP ;先拉高CS,再拉你SCK,最后拉低CS
CLR SCK
NOP
CLR CS
NOP
RET
ENDX:CLR SCK ;结束X25045指令
SETB CS ;先拉低SCK后拉高CS
NOP
NOP
RET
BYTE_OUT:MOV R4,#08H ;向X25045写入一字节数据
BOUT1:CLR SCK
RLC A
MOV SI,C
SETB SCK
NOP
NOP
DJNZ R4,BOUT1
RET
BYTE_IN:MOV R4,#08H ;从X25045读出一字节数据
BIN1:CLR SCK
MOV C,SO
RLC A
SETB SCK
NOP
NOP
DJNZ R4,BIN1
RET
RST_DOG:SETB CS ;复位看门狗定时器
NOP
CLR CS
NOP
SETB CS
RET