吳躍飛
安徽廣播電視臺(tái)制作中心 安徽合肥 230071
隨著科技的發(fā)展,近年單片機(jī)的應(yīng)用也深入到社會(huì)生活的各個(gè)領(lǐng)域,舞臺(tái)燈光的控制方式也因?yàn)殡娮蛹夹g(shù)的發(fā)展從模擬控制走向了數(shù)字化控制。舞臺(tái)燈光控制方式普遍采用的是DMX512協(xié)議它是美國劇場(chǎng)技術(shù)協(xié)會(huì)(United States Institute for Theater Technology,USITT)制定的數(shù)字多路復(fù)用協(xié)議。從推出這個(gè)協(xié)議標(biāo)準(zhǔn)以來已經(jīng)得到了世界范圍內(nèi)的生產(chǎn)商和使用者的認(rèn)可,國內(nèi)眾多的燈光生產(chǎn)廠家也紛紛采用該技術(shù)協(xié)議生產(chǎn)燈光設(shè)備。
DMX512信號(hào)電氣標(biāo)準(zhǔn)采用的是EIA-485電氣標(biāo)準(zhǔn),波特率為250kbps,DMX512協(xié)議規(guī)定數(shù)據(jù)以數(shù)據(jù)包的形式通過異步通訊的方式進(jìn)行傳輸。每個(gè)數(shù)據(jù)包由512個(gè)數(shù)據(jù)幀組成,每幀數(shù)據(jù)包括1位低電平起始位、8位數(shù)據(jù)位和2位高電平停止位。為了使解碼器能夠分辨出DMX512數(shù)據(jù)包,每一個(gè)數(shù)據(jù)包以一個(gè)不短于88us的低電平信號(hào)Break為起始信號(hào),接收器接收到Break信號(hào)就準(zhǔn)備接收隨后的數(shù)據(jù)幀;在Break信號(hào)之后是不短于8us的高電平 MAB (Mark after Break)信號(hào);之后就是數(shù)據(jù)幀。在DMX512協(xié)議中,MAB之后的第一幀數(shù)據(jù)被稱為SC(Start code),即起始字節(jié),在協(xié)議中規(guī)定其為零,但在實(shí)際應(yīng)用中可以由生產(chǎn)廠家自己確定其具體的值,以傳遞特殊消息。SC標(biāo)明其后面的數(shù)據(jù)是8位控制信號(hào)數(shù)據(jù)幀。一個(gè)數(shù)據(jù)包發(fā)送完成后,可以發(fā)送 MTBP(Mark Time Between Packets)。MTBP標(biāo)志著一個(gè)完整的信息包發(fā)送完畢,是下一個(gè)信息包即將開始的“空閑位”,數(shù)據(jù)包之間可以有時(shí)間間隔,也可以沒有。DMX512協(xié)議規(guī)定BREAK信號(hào)、MAB信號(hào)的最短時(shí)間,并規(guī)定BREAK信號(hào)、MAB信號(hào)、數(shù)據(jù)幀之間及數(shù)據(jù)包之間的時(shí)間間隔的最大值不得超過1s,否則當(dāng)作出錯(cuò)處理,但是DMX512協(xié)議并未對(duì)出錯(cuò)處理做任何規(guī)定。用戶可以根據(jù)自己的需要進(jìn)行錯(cuò)誤處理。
基于STC12C2052的DMX512解碼器主要分為:鍵盤輸入、數(shù)碼管顯示、數(shù)據(jù)通訊、PWM信號(hào)的生成、功率驅(qū)動(dòng)等部分組成。(見圖1)
鍵盤輸入部分采用四鍵盤的外部中斷查詢的方式,主要是用于解碼器的地址碼設(shè)置,功能選擇和設(shè)置工作。在解碼器正常工作時(shí)不需要鍵盤參與,因此不采用掃描式的鍵盤,避免消耗CPU的資源。(見圖2)
圖1
圖2
四位數(shù)碼管顯示采用數(shù)碼管專用驅(qū)動(dòng)芯片,這樣可以避免單片機(jī)掃描數(shù)碼管顯示造成的負(fù)擔(dān),同時(shí)還可以通過驅(qū)動(dòng)芯片提供的功能對(duì)數(shù)碼管進(jìn)行操作,例如:關(guān)斷數(shù)碼管顯示、數(shù)碼管顯示閃爍等不同方式來提示當(dāng)前解碼器的狀態(tài),如通訊信號(hào)正常、通訊信號(hào)中斷等狀態(tài)。(見圖3)
圖3
數(shù)據(jù)通訊部分采用MAX485與單片機(jī)的串口相連接組成單片機(jī)的通訊部分。并作了相應(yīng)的防干擾設(shè)計(jì)。PWM信號(hào)使用STC12C2052提供的四路PWM信號(hào)輸出,不需要另外增加部件。
如果需要驅(qū)動(dòng)功率設(shè)備則需要設(shè)計(jì)功率放大部分,通過PWM信號(hào)控制功率驅(qū)動(dòng)部分實(shí)現(xiàn)對(duì)大功率器件的驅(qū)動(dòng)??梢酝ㄟ^功率驅(qū)動(dòng)部分驅(qū)動(dòng)步進(jìn)電機(jī)、可控硅調(diào)光、大功率LED、大功率繼電器等設(shè)備。根據(jù)需要驅(qū)動(dòng)的大功率設(shè)備,所需的功率驅(qū)動(dòng)電路也有所不同。用戶可以根據(jù)自己的需要設(shè)計(jì)合適的驅(qū)動(dòng)電路。(見圖4)
圖4
解碼器的程序設(shè)計(jì)關(guān)鍵在于檢測(cè)DMX512的Break信號(hào),在檢測(cè)到Break信號(hào)后,緊接著后面就是DMX512的數(shù)據(jù)包,解碼器接收每幀數(shù)據(jù)并進(jìn)行計(jì)數(shù),直到數(shù)值的大小與單片機(jī)設(shè)置的地址大小相等,解碼器才會(huì)將連續(xù)的四幀數(shù)據(jù)接收下來放在內(nèi)存中,同時(shí)把數(shù)據(jù)送到PWM發(fā)生器,PWM的發(fā)生器就會(huì)按照數(shù)值生成相應(yīng)的PWM信號(hào)控制燈光的亮度。主程序開始執(zhí)行,先初始化IO口和各個(gè)寄存器。并讀取保存在解碼器中的本機(jī)地址送到數(shù)碼管顯示解碼器地址,打開串口中斷、定時(shí)器中斷和外部中斷,并開始檢測(cè)通訊端口的電平變化等待 DMX512信號(hào)中的 Break,一旦檢測(cè)到Break信號(hào)程序即開啟計(jì)時(shí)器計(jì)時(shí),當(dāng)電平再次發(fā)生變化時(shí)計(jì)時(shí)器中斷并比較計(jì)時(shí)與Break信號(hào)的時(shí)長,如果相等程序就認(rèn)為DMX512通訊已經(jīng)開始。假如時(shí)間不正確程序會(huì)重新返回繼續(xù)等待真正的Break信號(hào)的到來。在主程序運(yùn)行階段如果有外部中斷請(qǐng)求,那么主程序會(huì)暫停運(yùn)行而跳轉(zhuǎn)到外部中斷去執(zhí)行外部中斷的請(qǐng)求,如鍵盤操作請(qǐng)求等。執(zhí)行完外部中斷請(qǐng)求之后,返回主程序繼續(xù)運(yùn)行。
結(jié)束語
基于STC12C252的DMX512解碼器,使用器件少、造價(jià)成本低、性能穩(wěn)定。這種設(shè)計(jì)方案已經(jīng)廣泛應(yīng)用于LED聚光燈、LED帕燈的控制系統(tǒng)中。通過簡單的擴(kuò)展還可以實(shí)現(xiàn)聲控和主從控制等功能。