舞臺(tái)燈光效果設(shè)計(jì)是舞臺(tái)場(chǎng)景設(shè)計(jì)的重要組成部分。目前國(guó)內(nèi)使用的各種新型燈光設(shè)備,如換色器、調(diào)光器、電腦燈等大多是從國(guó)外進(jìn)口,國(guó)內(nèi)幾乎沒(méi)有生產(chǎn)。為此,我們應(yīng)國(guó)內(nèi)某舞臺(tái)燈不設(shè)備廠的要求設(shè)計(jì)了一種以AT89C2051單片機(jī)為控制器的新型舞臺(tái)燈光換色器HSQ-1A。該換色器可變換8種色彩,換色精度高,工作可靠。使用時(shí),舞臺(tái)上所有的換色器和總控制臺(tái)根據(jù)RS-485協(xié)議連成總線網(wǎng)絡(luò);總控制臺(tái)作為主機(jī)通過(guò)總線發(fā)布命令,控制所有換色器的工作。以下介紹換色器的工作原理及設(shè)計(jì)方案。 一、系統(tǒng)結(jié)構(gòu)和工作原理 換色器由一個(gè)中空的框架、兩根卷軸以及各色透光薄膜組成。制作時(shí),首先將不同顏色的透光膜連接成條幅,并在條幅的兩端安上卷軸。然后用卷軸將條幅卷起,以活動(dòng)的方式把卷軸安裝在框架的兩側(cè)。使用時(shí),把換色器放在白色光源前方,轉(zhuǎn)動(dòng)兩根卷切換不同顏色的透光膜,從而產(chǎn)生不同顏色的燈光效果。這種不換光源只換透光膜的換色方案,與更換不同顏色光源的方案相比,雖然換色速度較慢,但成本低,可靠性高。因此,換色器在換色頻度低的場(chǎng)合中應(yīng)用很廣。 在換色器的設(shè)計(jì)中,重點(diǎn)在于卷軸的驅(qū)動(dòng)和定位機(jī)構(gòu)的設(shè)計(jì)。過(guò)去,采用的交流電機(jī)和光電碼盤(pán)實(shí)現(xiàn)方式,運(yùn)行噪聲大、定位精度差,在實(shí)際使用中效果不理想。現(xiàn)在,在新?lián)Q色器中選用步進(jìn)電機(jī)作為驅(qū)動(dòng)和定位機(jī)構(gòu),徹底解決了以上問(wèn)題。換色器工作時(shí)運(yùn)行平穩(wěn)、噪聲小、定位精度高,完全達(dá)到了設(shè)計(jì)要求。 總控制臺(tái)與換色器之間的通信使用DMX512數(shù)據(jù)傳輸協(xié)議。DMX512協(xié)議是美國(guó)舞臺(tái)燈光協(xié)會(huì)(USITT)于1990年發(fā)布的一種燈光控制器與燈具設(shè)備進(jìn)行數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)。這包括電氣特性、數(shù)據(jù)協(xié)議、數(shù)據(jù)格式等各方面的內(nèi)容。 DMX512電氣特性與RS-485完全兼容,包括驅(qū)動(dòng)器/接收器的選擇、線路負(fù)載和多站配置等方面的要求都是一致的。 DMX512數(shù)據(jù)協(xié)議規(guī)定使用250Kbps的波特率。在進(jìn)行正常數(shù)據(jù)傳輸之前,發(fā)送1個(gè)復(fù)位信號(hào),聲明數(shù)據(jù)傳輸?shù)拈_(kāi)始。隨后的第1幀數(shù)據(jù)稱(chēng)為起始代碼,其中包含設(shè)備類(lèi)型碼,以指明后續(xù)數(shù)據(jù)的接收設(shè)備的類(lèi)型。最后,按設(shè)備編號(hào)的順序給每個(gè)設(shè)備發(fā)送1幀數(shù)據(jù),依次為:1#設(shè)備數(shù)據(jù)幀、2#設(shè)備數(shù)據(jù)幀,直至最后一個(gè)設(shè)備。設(shè)備總數(shù)最多可達(dá)512個(gè),數(shù)據(jù)幀間隔為高電平,最長(zhǎng)不超過(guò)1s。 DMX512數(shù)據(jù)格式規(guī)定,1幀數(shù)據(jù)長(zhǎng)度為11位。按傳送順序說(shuō)明如下: 第1位——起始位,低電平(SPACE); 第2~9位——數(shù)據(jù)位,從最低位到最高位(LSB~MSB),正邏輯; 第10、11位——停止位,高電平(MARK); 奇偶校驗(yàn)位——不傳送。 二、硬件電路 換色器硬件電路如圖1所示: ULN2003A是內(nèi)含7個(gè)達(dá)林頓管的驅(qū)動(dòng)芯片,輸入電壓與TTL電平兼容。每個(gè)上達(dá)林頓管的集電極可吸收最大500mA的電流,耐壓30V,因此可以用來(lái)驅(qū)動(dòng)四相步進(jìn)電機(jī)。 74LS125三態(tài)門(mén)用于控制電機(jī)的工作方式。電機(jī)正常工作時(shí),74LS125處于導(dǎo)通狀態(tài),兩個(gè)電機(jī)可以同方向、同步轉(zhuǎn)動(dòng);電機(jī)復(fù)位時(shí),三態(tài)門(mén)阻斷,只有一個(gè)電機(jī)可以轉(zhuǎn)動(dòng)。 MAX1487用于驅(qū)動(dòng)/接收RS-485信號(hào)。其接收器的輸入阻抗只有1/4個(gè)單位負(fù)載,最多可連接128個(gè)通信設(shè)備。另外,MAX1487的傳輸信號(hào)變化沿沒(méi)有限制斜率,所以最高數(shù)據(jù)傳輸可達(dá)2.5Mbps。 三、X25045介紹 在采用DMX512協(xié)議通信時(shí),換色器的編號(hào)用于從總控制臺(tái)發(fā)送的數(shù)據(jù)包中選擇發(fā)給本設(shè)備的數(shù)據(jù)幀。正常工作時(shí),編號(hào)數(shù)據(jù)不會(huì)掉電丟失,而且必要時(shí)編號(hào)還可修改。因此采用XICOR公司的串行E2PROM器件X25045對(duì)編號(hào)數(shù)據(jù)進(jìn)行存儲(chǔ)。 X25045是帶有串行E2PROM的CPU監(jiān)控器。圖2是它的引腳圖: CS/WDI:片選輸入/看門(mén)狗復(fù)位輸入; SO:串行輸出; WP:寫(xiě)保護(hù)輸入; Vss:地; Vcc:電源; RESET:復(fù)位輸出; SCK:同步時(shí)鐘輸入; SI:串行輸入。 X25045的狀態(tài)寄存器描述器件的當(dāng)前狀態(tài),各位意義如表1所列。 表1 7 6 5 4 3 2 1 0 0 0 WD1 WD0 BL1 BL0 WEL WIP 其中,WD1、WD0是看門(mén)狗定時(shí)時(shí)間設(shè)置位;BL1、BL0是存儲(chǔ)單元寫(xiě)保護(hù)區(qū)設(shè)置位;WEL是只讀標(biāo)志,1表明寫(xiě)使能開(kāi)關(guān)打開(kāi);WIP也是只讀標(biāo)志,1代表芯片內(nèi)部正處于寫(xiě)周期。電復(fù)位時(shí),各位都被清零。 X25045芯片功能包括以下4種: (1)上電復(fù)位控制。在對(duì)X25045通電時(shí),ERSET引腳輸出有效的復(fù)位信號(hào),并保持至少200ms,使CPU有效復(fù)位。 (2)電源電壓監(jiān)控。當(dāng)檢測(cè)到電源電壓低于內(nèi)部門(mén)檻電壓VTRIP時(shí),RESET輸出復(fù)位信號(hào),直至電源電壓高于VTRIP并保持至少200ms,復(fù)位信號(hào)才被撤消。VTRIP的出廠值根據(jù)芯片型號(hào)不同共有5個(gè)級(jí)別的電壓范圍。對(duì)于需要電源電壓精確監(jiān)控的應(yīng)用,用戶(hù)可以搭建編程電路,對(duì)芯片內(nèi)VTRIP電壓進(jìn)行微調(diào)。 (3)看門(mén)狗定時(shí)器。芯片內(nèi)部狀態(tài)寄存器的WD1、WD0是看門(mén)狗定時(shí)設(shè)置位,通過(guò)狀態(tài)寄存器寫(xiě)指令WRSR修改這2個(gè)標(biāo)志位,就能在3種定時(shí)間隔中進(jìn)行選擇或關(guān)閉定時(shí)器。對(duì)看門(mén)狗的復(fù)位由CS輸入電平的下降沿完成。表2是WD1、WD0組合的含義。 表2 WD1 WD0 看門(mén)狗定時(shí)值 0 0 1.4s 0 1 600ms 1 0 200ms 1 1 禁止看門(mén)狗工作 (4)串行E2PROM。芯片內(nèi)含512字節(jié)存儲(chǔ)單元,10萬(wàn)次可靠寫(xiě),數(shù)據(jù)保持時(shí)間100年。XICOR設(shè)計(jì)了3種保護(hù)方式防止誤寫(xiě)。包括:WP寫(xiě)保護(hù)引腳,當(dāng)引腳被拉低時(shí),內(nèi)部存儲(chǔ)單元狀態(tài)寄存器都禁止寫(xiě)入;存儲(chǔ)區(qū)域?qū)懕Wo(hù)模式,通過(guò)對(duì)狀態(tài)寄存器的BL1、BL0位的設(shè)置,可以選擇對(duì)不同的存儲(chǔ)區(qū)域進(jìn)行寫(xiě)保護(hù);在進(jìn)行任何寫(xiě)操作前都必須打開(kāi)寫(xiě)使能開(kāi)關(guān),而且在上電初始化寫(xiě)操作完成時(shí),寫(xiě)使能開(kāi)關(guān)自動(dòng)關(guān)閉。顯然,在幾方面的保護(hù)之下,產(chǎn)生誤寫(xiě)的可能性極小,表3是BL1、BL0組合的含義。 表3 BL1 BL0 寫(xiě)保護(hù)的單元地址 0 0 沒(méi)有保護(hù) 0 1 180H~1FFH 1 0 100H~1FFH 1 1 000H~1FFH 對(duì)X25045的操作是通過(guò)4根口線CS、SCK、SI和SO進(jìn)行同步串行通信來(lái)完成的。SCK是外部輸入的同步時(shí)鐘信號(hào)。在對(duì)芯片定改指令或數(shù)據(jù)時(shí),時(shí)鐘前沿將SI引腳信號(hào)輸入;在讀郵數(shù)據(jù)時(shí),時(shí)鐘后沿將數(shù)據(jù)位輸出到SO引腳上。數(shù)據(jù)的輸入/輸出都是高位在先。 芯片內(nèi)部共有6條指令,如表4所列。 表4 命令名稱(chēng) 命令格式 內(nèi) 容 WREN 0000 0110 打開(kāi)寫(xiě)使能開(kāi)關(guān) WRDI 0000 0100 關(guān)閉寫(xiě)使能開(kāi)關(guān) RDSR 0000 0101 讀狀態(tài)寄存器 WRSR 0000 0001 寫(xiě)狀態(tài)寄存器 READ 0000 A8011 讀存儲(chǔ)單元 WRITE 0000 A8010 寫(xiě)存儲(chǔ)單元 (1)WREN和WRDI是寫(xiě)使能開(kāi)關(guān)的開(kāi)/關(guān)指令。它們都是單字節(jié)指令。 (2)RDSR和WRSR是狀態(tài)寄存器的讀/寫(xiě)指令。在從SI輸入指令后,RDSR的執(zhí)行結(jié)果,即狀態(tài)寄存器內(nèi)容須從SO讀出;而WRSR需要緊接著輸入修改數(shù)據(jù)。 (3)READ和WEITE是存儲(chǔ)單元的讀/寫(xiě)指令。輸入指令后(指令碼第三代表存儲(chǔ)單元地址的最高位),接著輸入低八位地址,最后就可以連續(xù)讀出或?qū)懭霐?shù)據(jù)。其中,讀指針和寫(xiě)指針的工作方式完全不同,讀指針的全部8位用來(lái)計(jì)數(shù),0FFH溢出后變成00H;寫(xiě)指針只用最低兩位計(jì)數(shù),XXXXXX11B溢出后變成XXXX XX00B,所以連續(xù)寫(xiě)的實(shí)際結(jié)果是在4個(gè)單元中反復(fù)寫(xiě)入。另外,由于E2PROM的寫(xiě)入時(shí)間長(zhǎng),所以在連續(xù)兩條寫(xiě)指令之間應(yīng)讀取WIP狀態(tài),只有內(nèi)部寫(xiě)周期結(jié)束時(shí)才可輸入下一條寫(xiě)指令。 AT89C2051內(nèi)部沒(méi)有SPI接口硬件,因此本系統(tǒng)利用了單片機(jī)的4根口線和軟件模擬讀寫(xiě)時(shí)序的方式與X25045通信。軟件包在文末給出。 四、軟件原理 系統(tǒng)程序包括主程序和串口通信斷服務(wù)程序。主程序首先從X25045中取出本設(shè)備編號(hào)備用,然后進(jìn)入循環(huán)。特環(huán)程序的主要任務(wù)包括:①檢測(cè)換色標(biāo)志,當(dāng)換色標(biāo)志有效時(shí),則調(diào)用步進(jìn)電機(jī)驅(qū)動(dòng)程序控制轉(zhuǎn)抽,將換色器切換到新顏色;②幀間隔1s延時(shí),當(dāng)時(shí)間到時(shí),中斷程序?qū)?fù)位串口接收程序;③定時(shí)復(fù)位X25045的看門(mén)狗。 通信中斷服務(wù)程序用于檢測(cè)RS-485總線發(fā)送的復(fù)位信號(hào)和起始代碼。當(dāng)兩者同時(shí)有效時(shí)開(kāi)始對(duì)后續(xù)接收的數(shù)據(jù)幀進(jìn)行幀計(jì)數(shù)。當(dāng)計(jì)數(shù)值與設(shè)備編號(hào)相同時(shí),說(shuō)明當(dāng)前幀是給本設(shè)備的數(shù)據(jù),于是根據(jù)該數(shù)據(jù)設(shè)置換色標(biāo)志,由主程序執(zhí)行換色動(dòng)作。 X25045的通信接口軟件: CS BIT P3.2 SCK BIT P3.3 SI BIT P3.4 SO BIT P3.5 (1)X25045數(shù)據(jù)寫(xiě)入程序 功能:將緩沖區(qū)數(shù)據(jù)寫(xiě)入指定地址開(kāi)始的單元。 入口:F0、R3是E2PROM單元地址最高位低八位;R0是緩沖區(qū)首地址;R2是緩沖區(qū)長(zhǎng)度。 WRITEX:LCALL STAX ;指令啟動(dòng) MOV A,#06H ;輸出WREN LCALL BYTE_OUT LCALL STAX ;下一指令啟動(dòng) MOV A,#02H ;輸出WRITE MOV C,F(xiàn)0 ;插入單元地址最高位 MOV ACC.3,C LCALL BYTE_OUT MOV A,R3 ;輸出單元地址低八位 LCALL BYTE_OUT BYWR:MOV A,@R0 ;從緩沖區(qū)取數(shù)輸出 LCALL BYTE_OUT INC R0 ;指針加1 DJNZ R2,BYWR ;緩沖區(qū)未空則繼續(xù)輸出 LCALL ENDX ;指令結(jié)束 LCALL WIP_CHK ;等待WIP=0 RET (2)X25045數(shù)據(jù)讀出程序 功能:把指定地址開(kāi)始的單元數(shù)據(jù)讀出并放入緩沖區(qū) 入口:與寫(xiě)入程序相同。 READX:LCALL STAX MOV A,#03H ;輸出READ MOV C,F(xiàn)0 MOV ACC.3,C LCALL BYTE_OUT MOV A,R3 ;輸出低八位地址 LCALL BYTE_OUT BYRD:LCALL BYTE_IN ;輸入數(shù)據(jù)送入緩沖區(qū) MOV @R0,A INC R0 ;指針加1 DJNZ R2,BYRD ;緩沖區(qū)未滿(mǎn)則繼續(xù)輸入 LCALL ENDX RET (3)X25045狀態(tài)寄存器寫(xiě)入程序 功能:對(duì)狀態(tài)寄存器進(jìn)行設(shè)置。 入口:ACC是修改值。 WRSR:LCALL STAX PUSH ACC MOV A,#06H ;輸出WREN LCALL BYTE_OUT LCALL STAX MOV A,#01H ;輸出WRSR LCALL BYTE_OUT POP ACC ;輸出設(shè)置值 LCALL BYTE_OUT LCALL ENDX LCALL WIP_CHK ;等待WIP=0 RET (4)X25045狀態(tài)寄存器讀出程序 功能:讀出狀態(tài)寄存器當(dāng)前值。 出口:ACC是當(dāng)前值。 RDSR:LCALL STAX MOV A,#05H LCALL BYTE_OUT LCALL BYTE_IN LCAL ENDX RET (5)其他子程序 WIP_CHK:LCALL RDSR ;等待X25045結(jié)束內(nèi)部寫(xiě)周期 JB ACC.0,WIP_CHK RET STAX:SETB CS ;啟動(dòng)X25045指令 NOP ;先拉高CS,再拉你SCK,最后拉低CS CLR SCK NOP CLR CS NOP RET ENDX:CLR SCK ;結(jié)束X25045指令 SETB CS ;先拉低SCK后拉高CS NOP NOP RET BYTE_OUT:MOV R4,#08H ;向X25045寫(xiě)入一字節(jié)數(shù)據(jù) BOUT1:CLR SCK RLC A MOV SI,C SETB SCK NOP NOP DJNZ R4,BOUT1 RET BYTE_IN:MOV R4,#08H ;從X25045讀出一字節(jié)數(shù)據(jù) BIN1:CLR SCK MOV C,SO RLC A SETB SCK NOP NOP DJNZ R4,BIN1 RET RST_DOG:SETB CS ;復(fù)位看門(mén)狗定時(shí)器 NOP CLR CS NOP SETB CS RET |