基于PWM控制的LED燈光系統(tǒng)設(shè)計_第1頁
基于PWM控制的LED燈光系統(tǒng)設(shè)計_第2頁
基于PWM控制的LED燈光系統(tǒng)設(shè)計_第3頁
基于PWM控制的LED燈光系統(tǒng)設(shè)計_第4頁
基于PWM控制的LED燈光系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

基于PWM限制的LED燈光系統(tǒng)設(shè)計【摘要】本設(shè)計介紹了一種以STC單片機為核心的LED燈光限制系統(tǒng),主要采納PWM技術(shù),及UART通訊技術(shù)。PWM是一種特別成熟的技術(shù),目前已經(jīng)廣泛應(yīng)用于調(diào)速,調(diào)光系統(tǒng),而UART通訊是單片機最為常用的一種通訊方式。具體介紹單片機限制電路,通訊布線,PWM電路,及PWM限制設(shè)計,給出了系統(tǒng)軟件設(shè)計方案。【關(guān)鍵詞】PWM;STC單片機;UART通訊一、引言目前很多的燈光限制系統(tǒng)只是簡潔的實現(xiàn)限制燈的亮暗依次及亮暗的時間,這類簡潔的限制方式廣泛地應(yīng)用在燈光廣告中,電路板一般采納限制核心電路加上口線擴展電路及輸出驅(qū)動電路組成,但是這類電路在組成大矩陣的LED顯示時,存在布線困難等問題,在出現(xiàn)故障時維護比較困難,須要先查布線線路上是否存在故障,然后再查電路驅(qū)動板是否存在問題,一旦出現(xiàn)問題需更換布線線路或驅(qū)動電路板,維護費用較高。本設(shè)計提出基于PWM限制的LED燈光系統(tǒng)設(shè)計,系統(tǒng)采納單片機STC12C2052為核心的PWM限制電路系統(tǒng),采納UART通訊方式,布線簡潔,運用數(shù)據(jù)間隔檢測方式接收UART數(shù)據(jù)包,適應(yīng)不同波特率下的應(yīng)用,采納數(shù)據(jù)間隔接收數(shù)據(jù)可以牢靠地接收到一個完整的數(shù)據(jù)包,不管數(shù)據(jù)包是否有數(shù)據(jù)頭,解決了協(xié)議不同的麻煩,定義的數(shù)據(jù)比較短,數(shù)據(jù)接受更為牢靠。二、電路原理及特點(一)電路系統(tǒng)框圖本設(shè)計的燈光系統(tǒng)框圖如下圖2-1:直流12V集中供電開關(guān)電源UART總線直流12V集中供電開關(guān)電源UART總線LED4LED3LED2LED1...PWMnPWM4PWM3PWM2PWM1...從限制板n從限制板4從限制板3從限制板2從限制板1主限制板LED4LED3LED2LED1...PWMnPWM4PWM3PWM2PWM1...從限制板n從限制板4從限制板3從限制板2從限制板1主限制板圖2-1PWM限制LED系統(tǒng)的系統(tǒng)框圖本設(shè)計的燈光系統(tǒng)主要由1個主限制和9個從限制板(1個主限制板最多可限制256個從限制板)及開關(guān)電源組成。供電方式采納由開關(guān)直流電源+12V集中供電。主限制板實現(xiàn)對各個從限制板的PWM輸出值限制、限制燈的亮暗次序剛好間限制,主限制板與從限制板的連線方式采納通用的UART通訊方式。從限制板主要實現(xiàn)并執(zhí)行主限制發(fā)送過來的PWM值,由自身所帶的PWM輸出管腳輸出限制值來驅(qū)動LED,進行燈的亮度限制及亮暗限制。(二)電路系統(tǒng)原理圖圖2-2電路系統(tǒng)原理圖本設(shè)計通過開關(guān)電源把市電220V溝通電轉(zhuǎn)變?yōu)?2V的直流電源集中供電,然后從接口端子(J1)輸入。因為考慮到大工程時LED顯示矩陣越大,功耗固定狀況下,電壓越小,電流就越大,布線的線就要求越粗,不利于整體布線,而且+5V電壓很小,抗干擾實力很差。因此在每個限制板上加上獨立的電源電路有利于開關(guān)電源輸出線路的布線可選擇細(xì)的線,而且經(jīng)過二次穩(wěn)壓后的+5V電源更加穩(wěn)定,所以每個限制板都由電源電路和主限制電路組成。限制電路采納單片機STC12C2052作為限制核心。主限制板與從限制板連線即主限制板的TXD發(fā)送腳接到從限制板的RXD腳。(三)電路組成及其原理圖2-3電源電路原理圖1.電源電路圖2-3為燈光系統(tǒng)的電源電路原理圖。電源電路圖主要由以下幾個部分組成:a.DC直流電源輸入接口端子(J1),主要實現(xiàn)+12V直流電源的輸入連接[1]。b.二極管IN4148(D1)作用為直流防逆向。c.電解電容E1和E2運用在電源低頻干擾濾波。瓷片電容C1和C2運用在電壓較高頻段的干擾濾波。d.三端穩(wěn)壓集成芯片7805,供應(yīng)+5V的電源。電路工作過程如下:從J1電源輸入接口端輸入+12V直流電壓,在直流電源輸入的正負(fù)端沒有接錯狀況下,電源電壓可以經(jīng)過防逆二極管后電源電壓降為8.3V~14.3V,通過輸入濾波電容E1和C1濾除電源輸入的干擾信號后,經(jīng)三端穩(wěn)壓管7805穩(wěn)壓,E2和C2輸出濾波,輸出一個穩(wěn)定的+5V直流電源。圖2-4主限制電路原理圖2.主限制電路圖2-4為主限制電路原理圖,主要有以下幾個部分構(gòu)成:a.STC12C2052單片機有以下特點:指令與8051完全兼容,但是比一般的單片機體積更小、價格更便宜,速度更快。寬電壓工作范圍(3.5V~5V),帶兩路的PWM管腳及RC震蕩器,具有2K字節(jié)程序存儲空間,同時芯片內(nèi)部集成硬件看門狗電路可以極大的提高程序運行的穩(wěn)定性。具有硬件SPI接口便利與各種SPI器件的接口,程序調(diào)試可以通過ISP在線編程方式實現(xiàn)。每一個I/O口都可以可設(shè)置四重模式口線的驅(qū)動實力均可達到20MA,同時又可以在超低功耗工作下工作。b.晶振電路由Y1,C3,C4構(gòu)成,Y1晶振采納11.0592MHZ,使軟件波特率計算誤差小,C3,C4起諧振的作用。復(fù)位電路采納簡潔的RC復(fù)位電路,主要由E3和R2組成。STC12C2052的復(fù)位管腳在高電平常單片機產(chǎn)生復(fù)位。C5是去耦汲取電容,汲取單片機芯片工作時產(chǎn)生的尖峰電壓[2]。c.PWM輸出LED電路由R2和D2構(gòu)成,將STC12C2052的P3.7管腳設(shè)置為PWM工作方式,通過R2(1K)限流電阻后驅(qū)動D2(LED)(P3.7輸出為低電平常候LED燈亮)。d.地址設(shè)置電路主要由撥碼開關(guān)S1組成,實現(xiàn)從機的地址設(shè)置。單片機開機后程序自動從P1口讀入設(shè)置值作為從機的通訊地址,地址采納二機制編碼方式,P1口有八根口線,可以最多產(chǎn)生256個地址。本設(shè)計只用到P1.4、P1.5、P1.6、P1.7管腳設(shè)置地址(最多產(chǎn)生16個從機地址)其中P1.4腳為最低位,P1.7腳為最高位。設(shè)置2到10號從機地址分別為02H,03H,04H,05H,06H...0AH。三、設(shè)計過程運用到主要技術(shù)(一)UART技術(shù)一般通訊中可以采納同步通訊和異步通訊兩種方式[3],本設(shè)計UART通訊運用異步通訊方式。為了進行異步通訊首先通訊雙方的通訊速度(通訊波特率)要相同,這樣接收到的數(shù)據(jù)才能正確,不同波特率接收到的數(shù)據(jù)將會產(chǎn)生偏移,致使數(shù)據(jù)接受錯誤。1.波特率設(shè)置由于本設(shè)計的LED硬件系統(tǒng)對速度的要求并不高,為了與51系列單片機的速度相兼容,便于波特率及其他速度計算,也將STC12C2052的工作頻率也設(shè)置為12分頻。通信波特率的設(shè)置為4800BPS,4800BPS進行測試過這樣的波特率在10m下可以比較牢靠地進行數(shù)據(jù)接收.在更高的速度下,接收數(shù)據(jù)的錯誤率將會增加。用定時器T1的模式2來產(chǎn)生波特率應(yīng)通過下式來計算TH1的裝入值:波特率Bps=(2^SMOD/32)*(Fosc/12*(256-TH1))(3-1)Bps表示波特率,F(xiàn)osc表示外接晶振頻率[4]。2.初始化串口和T0中斷流程結(jié)束開啟串行口中斷允許接受中斷SCON=50PCON=0開啟EA中斷開啟T0定時器清除T0中斷標(biāo)T1工作在模式2TH0=50USTL0=50US設(shè)置T0最高優(yōu)先級中斷從PI口讀出本機地址起先結(jié)束開啟串行口中斷允許接受中斷SCON=50PCON=0開啟EA中斷開啟T0定時器清除T0中斷標(biāo)T1工作在模式2TH0=50USTL0=50US設(shè)置T0最高優(yōu)先級中斷從PI口讀出本機地址起先開啟T0中斷開啟T0中斷圖3-1初始化串口和T0中斷a.STC12C2052的P1口中讀出從機地址(ReadMy_ADDR)。b.T0為最高優(yōu)先級中斷(IP=0X22)。由于T0是作為數(shù)據(jù)包的間隔定時檢測中運用,在程序中必需保證T0中斷的精確性,所以設(shè)置為最高優(yōu)先級。c.設(shè)置T0為工作模式2,設(shè)置T0定時為50US(TH0=50US,TL0=50US)。d.T1工作在模式2,這種方式可實現(xiàn)每隔預(yù)定時間發(fā)出限制信號,特殊適合于串行口波特率發(fā)生器的運用[5]。e.清除T0中斷標(biāo)記(TF0=0)。f.開啟T0中斷(EF0=1)。g.開啟T0定時器(TR0=1)。h.開啟中斷(EA=1)。i.PCON=0,波特率不倍增,正常工作方式。j.SCON設(shè)為50,工作在模式1下,10位UART。數(shù)據(jù)位為8位,一個起始位,一個停止位[6]。REN為1,允許接受數(shù)據(jù)。k.允許接受中斷。l.開啟串行口中斷。(二)數(shù)據(jù)間隔傳輸 返回數(shù)據(jù)間隔檢測收到一個字節(jié)數(shù)據(jù)?總中斷次數(shù)=40(40*50us=2ms)開啟50us定時收到下一個字節(jié)數(shù)據(jù)?總中斷次數(shù)為零數(shù)據(jù)包接收完成總中斷-1返回數(shù)據(jù)間隔檢測收到一個字節(jié)數(shù)據(jù)?總中斷次數(shù)=40(40*50us=2ms)開啟50us定時收到下一個字節(jié)數(shù)據(jù)?總中斷次數(shù)為零數(shù)據(jù)包接收完成總中斷-150us中斷程序50us中斷程序 Y Yy一y總中斷次數(shù)為零?Y Yy一y總中斷次數(shù)為零?NN圖3-2數(shù)據(jù)間隔傳輸流程在本設(shè)計的UART通訊中采納了數(shù)據(jù)間隔傳輸。設(shè)計中要傳輸?shù)臄?shù)據(jù)包是4個字節(jié),包括55H數(shù)據(jù)頭(加了數(shù)據(jù)頭增加了數(shù)據(jù)傳輸抗干擾實力),地址,PWM限制值,校驗值。主機發(fā)送的時候?qū)?5H數(shù)據(jù)頭與地址,PWM限制值相異或產(chǎn)生校驗值。從機收到完整的數(shù)據(jù)包后,先推斷地址是否是本機地址,然后把地址值和PWM限制值還有數(shù)據(jù)頭異或再推斷是否和接收到的校驗值相等,假如與校驗值相等正確則接收到的數(shù)據(jù)是正確,進行PWM燈限制輸出.否則數(shù)據(jù)錯誤不進行PWM燈限制輸出,在通訊中加入數(shù)據(jù)校驗提高了數(shù)據(jù)通信的牢靠性。數(shù)據(jù)間隔檢測,在異步通信中數(shù)據(jù)包里的字節(jié)之間間隔時間不超過一個字節(jié)傳輸時間,即t=1/波特率,我們用的是4800波特率,T=1/4800≈2MS,在數(shù)據(jù)傳送過程中假如字節(jié)間的間隔小于2MS我們認(rèn)為接收到的數(shù)據(jù)是在同一個數(shù)據(jù)包中的.當(dāng)在2MS時間里沒有收到下個字節(jié)的數(shù)據(jù),我們就認(rèn)為這個數(shù)據(jù)包傳輸完畢.這樣按數(shù)據(jù)包分開數(shù)據(jù),避開了從機在接收數(shù)據(jù)包錯誤導(dǎo)致功能出錯,提高了功能實現(xiàn)的穩(wěn)定性和牢靠性.具體軟件的實現(xiàn)方法是,將T0設(shè)置為模式2定時方式,定時的時間為50us,當(dāng)接收到一個字節(jié)后,將T0的總中斷次數(shù)設(shè)置為40次同時T0開啟定時,每中斷一次假如總中斷次數(shù)大與零,則總中斷次數(shù)減始終到接收到下一個字節(jié)的數(shù)據(jù),我們?nèi)〕隹傊袛啻螖?shù)假如不為0(兩個字節(jié)時間間隔小于2MS),我們就認(rèn)為數(shù)據(jù)包還沒有接收完成,須要接著檢測本字節(jié)與下個字節(jié)的時間間隔.假如取出總中斷次數(shù)假如為0,說明數(shù)據(jù)包接收完畢,可進行下一步的數(shù)據(jù)解析。(三)PWM技術(shù)PWM技術(shù)脈寬調(diào)制(PWM)是利用微處理器的數(shù)字輸出來對模擬電路進行限制的一種特別有效的技術(shù),它廣泛應(yīng)用在從測量、通信到功率限制與變換的很多領(lǐng)域中[7]。PWM技術(shù)是一種對模擬信號電平進行數(shù)字編碼的方法。通過高辨別率計數(shù)器的運用,方波的占空比被調(diào)制用來對一個具體模擬信號的電平進行編碼。PWM信號仍舊是數(shù)字的,因為在給定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。通的時候即是直流供電被加到負(fù)載上的時候,斷的時候即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以運用PWM進行編碼。PWM技術(shù)的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行數(shù)模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1變更為邏輯0或?qū)⑦壿?變更為邏輯1時,也才能對數(shù)字信號產(chǎn)生影響。對噪聲反抗實力的增加是PWM相對于模擬限制的另外一個優(yōu)點,而且這也是在某些時候?qū)WM用于通信的主要緣由。從模擬信號轉(zhuǎn)向PWM可以極大地延長通信距離。在接收端,通過適當(dāng)?shù)腞C或LC網(wǎng)絡(luò)可以濾除調(diào)制高頻方波并將信號還原為模擬形式[8]。因此本設(shè)計利用PWM技術(shù)的特點進行對LED燈的電壓大小限制,達到燈光亮度變更的效果。本設(shè)計的STC12C2052中有兩個PWM管腳(PWM0,PWM1),為了軟件設(shè)計簡潔在硬件設(shè)計中只用到一個PWM0(P3.7口線),采納單片機硬件PWM輸出的波形穩(wěn)定,只須要變更PWM值就可以變更輸出的脈沖寬度,限制幅度特別便利。STC12C2052中PWM管腳可調(diào)脈沖寬度輸出模式原理如下圖3-3:EPCnHCCPnHEPCnLCCPnLEPCnHCCPnHEPCnLCCPnL(0,CL)<(EPCnl,CCAPnL)(0,CL)>=(EPCnl,CCAPnL)輸出0輸出1PWMn9-BITcomparator0CLEnableCLoverflowECOMnCAPPnCAPNnMATnTOGnPWMnECCFnCCAPMnn=0,1,2,31000010由于全部模塊共用僅有的PCA定時器,所以他們的輸出頻率相同。各個模塊的輸出占空比是獨立變更的,與運用的捕獲寄存器(EPCNL,CCAPNL)有關(guān)。由圖3-3可知,當(dāng)CLSFR的值小于(EPCNL,CCAPNL)時,輸出為低,當(dāng)PCACLSFR的值等于或大于(EPCNL,CCPANL)時,輸出為高。當(dāng)CL的值由FF變?yōu)?0溢出時,(EPCNH,CCAPNH)的內(nèi)容裝載到(EPCNL,CCAPNL)中。這樣就可實現(xiàn)無干擾的更新PWM。要使能PWM模式,模塊CCAPMN寄存器的PWMN和ECOMN位必需置位[9]。依據(jù)以上原理通過以下公式可以算出PWM電壓值。F=Fosc/12(3-2)(VCC/256)*調(diào)制后脈寬=PWM電壓值(3-3)在公式3-2中,由于設(shè)置PCA定時器的頻率為晶振的12分頻,所以PWM輸入的頻率為Fosc/12。在公式3-3中,由于PWM是八位的,在固定周期內(nèi)可以認(rèn)為把VCC分成256個等分,輸出電壓的幅度約為輸出的PWM值乘以vcc/256。2.LED燈限制系統(tǒng)中的PWM流程:CCAPM0=42CL=0CH=0CCON=0起先設(shè)置COMD=80CCAPM0=42CL=0CH=0CCON=0起先設(shè)置COMD=80清除PWM輸出清除PWM輸出EPCA_LVD=1EPCA_LVD=1打開PCA計數(shù)器打開PCA計數(shù)器結(jié)束結(jié)束圖3-4初始化PWM流程a.設(shè)置時鐘模式為Fosc/12,空閑下不計數(shù)。COMD是PCA模式寄存器(PWM和PCA共用寄存器),當(dāng)COMD的限制字CPS1、CPS0(第2、1位)同設(shè)為0時就是12分頻,其中限制字CIDL(第7位)是計數(shù)器陣列空閑限制:當(dāng)CIDL=0時,空閑模式下PCA計數(shù)器接著工作,CIDL=1時,空閑模式下PCA計數(shù)器停止工作。因此COMD=80。b.清除中斷標(biāo)記和計數(shù)器溢出標(biāo)記。CCON是PCA限制寄存器,它的限制字CF(第7位)是PCA計數(shù)器陣列溢出標(biāo)記,CR(第6位)是PCA計數(shù)器陣列運行限制位,該位通過軟件置位,用來啟動PCA計數(shù)器陣列計數(shù)。CF,CR通過軟件清零,因此CCON=0。c.計數(shù)器值清零(CL=0,CH=0)。d.設(shè)置PCA為PWM方式通道為PWM0,即P3.7輸出。CCAPMn代表用到PWMn管腳輸出,本次設(shè)計只用到PWM0,因此我們就設(shè)置CCAPM0。CCAPMn是PCA比較/捕獲模塊寄存器,其中限制字ECOMn(第6位)功能是使能比較器,當(dāng)ECOMn=1時,使能比較器功能。限制字PWMn(第1位)是脈寬調(diào)整模式,當(dāng)PWMn=1時,使能CEXn腳用作脈寬調(diào)整輸出,因此CCAPM0=42。e.清除PWM輸出。f.開PCA中斷(EPCA_LVD=1)[10]。g.EA=1,開中斷。h.打開PCA計數(shù)器,CR=1(Fosc/12輸入),結(jié)束。四、實物制作調(diào)試和測試數(shù)據(jù)分析實際制作實物時,理論上認(rèn)為電源是近距離輸入,干擾會小,省去了三端穩(wěn)壓管7805輸入端的電容E1和C1。輸出端的電容E2改用容量20uF的電解電容,理論上一樣能達到預(yù)期的效果。在主電路中省去RC復(fù)位電路,干脆采納ST12C2052內(nèi)部集成自帶的RC復(fù)位電路。LED燈接的1K歐姆限流電阻改為470歐姆的電阻,目的是為了增加LED的亮度。后來考慮到增加UART通信的穩(wěn)定性,增加了驅(qū)動三極管,利用三極管共集電極的特性,降低輸出阻抗,提高輸入阻抗,使主機發(fā)送數(shù)據(jù)的電流增大,從機接受數(shù)據(jù)的電流減小,從而使主機能驅(qū)動更多的從機。實物焊接好后,起先下載芯片程序。用STC單片機ISP下載器,通過軟件STC-ISP.EXE下載主機程序到主機芯片STC12C2052中,下載從機程序到從機芯片STC12C2052中,然后把芯片插入底座中。插上電源后,發(fā)覺各從機LED燈根本沒有輸出。經(jīng)過細(xì)致分析最有可能產(chǎn)生的緣由是由于通訊不正常各從機沒有接收到主機發(fā)送的PWM限制吩咐,所以從機沒有執(zhí)行PWM限制輸出。運用示波器查看主限制板的TXD輸出信號腳,發(fā)覺通訊輸出信號正常,但是通訊的波特率較慢。于是經(jīng)過一段時間的調(diào)試,發(fā)覺問題是在設(shè)定STC-ISP.EXE軟件時,時鐘源必需設(shè)定為外部晶體或時鐘。起初是設(shè)為內(nèi)部RC震蕩器,由于內(nèi)部RC震蕩器的誤差較大并不適合在通訊中運用,導(dǎo)致了芯片無法正常工作。程序下載勝利后,插上電源,LED燈起先了循環(huán)變更。第一步從一號燈起先到十號燈逐個亮起,燈全部亮3秒后,接著燈全滅,如此循環(huán)5次。其次步從一號燈起先直到十號燈,每個燈的亮度都以漸亮形式變更,每個燈設(shè)定了四種亮度,后一個燈比前一個燈快一個步長的亮度,整體給人燈光波浪型流淌的感覺,循環(huán)幾次后全部燈亮起,一會后燈全滅。第三部從十號燈起先到一號燈逐個亮起,燈全部亮起3秒后,接著燈全滅,如此循環(huán)5次。第四部從十號燈起先直到一號燈每個燈的亮度都以漸亮形式變更,每個燈設(shè)定了四種亮度,后一個燈比前一個燈快一個步長的亮度,循環(huán)幾次后全部燈亮起,一會后燈全滅。測試后第一部和第三步循環(huán)出現(xiàn)問題,不是每個燈都亮,有的時候循環(huán)起先,某些燈就亮了,或者某些燈被跳過沒有亮起。其次和第四步?jīng)]有了漸暗的顯示。表4-1測試結(jié)果記錄1測試第幾部循環(huán)循環(huán)次數(shù)第1步第3步1循環(huán)起先前5號燈先亮循環(huán)起先前4號燈先亮而循環(huán)起先后10號燈不亮2正常循環(huán)起先前5號燈先亮而循環(huán)起先后6號燈不亮3循環(huán)起先前3號燈先亮而循環(huán)起先后9號燈不亮正常4循環(huán)起先前9號燈先亮而循環(huán)起先后7號燈先亮循環(huán)起先前9號燈和10號燈先亮5循環(huán)起先后6號燈不亮正常表4-2測試結(jié)果記錄2第幾部循環(huán)第2步第4步測試結(jié)果每個燈以漸亮形式變更,后一號燈比前一號燈快一個步長,整體給人水流淌的感覺。沒有預(yù)期的每個燈漸暗的顯示。每個燈以漸亮形式變更,前一號燈比后一號燈快一個步長,整體給人水流淌的感覺。沒有預(yù)期的每個燈漸暗的顯示。經(jīng)分析,出現(xiàn)表4-1和表4-2結(jié)果的可能緣由有:a.設(shè)計時認(rèn)為電源是近距離輸入,干擾會小很多,就省掉了三端穩(wěn)壓管7805輸入端的濾波,使電源輸出信號不夠穩(wěn)定,又由于采納UART通訊方式TTL電平抗干擾較差,所以造成從機接收數(shù)據(jù)時候受到干擾。b.為了提高UART的穩(wěn)定性,增加了驅(qū)動三極管后,出現(xiàn)了其他的問題。在宏晶科技的網(wǎng)站里有建議在主限制板后加一個密徹斯特反向驅(qū)動器74HC14,在從機接收端再加一個密徹斯特反向驅(qū)動器74HC14。c.軟件部分的問題,當(dāng)時設(shè)置波特率為9600BPS,出現(xiàn)從機很難接受到信號的現(xiàn)象,9600BPS以上的波特率就使數(shù)據(jù)傳輸更加不穩(wěn)定。理論上波特率設(shè)置為4800BPS比較穩(wěn)定,但還是出現(xiàn)從機接受數(shù)據(jù)不穩(wěn)定的問題。應(yīng)當(dāng)設(shè)置比4800BPS更低的波特率。雖然有問題還沒得到解決,但從調(diào)試過程中已經(jīng)勝利實現(xiàn)PWM的LED燈的亮度限制。五、結(jié)束語本設(shè)計在程序上已經(jīng)可以勝利完成PWM的燈光亮度的限制,由STC12C2052限制的PWM的硬件調(diào)幅技術(shù)實現(xiàn)簡潔,調(diào)整敏捷。從硬件設(shè)計來看,硬件設(shè)計比較簡潔,主要是軟件PWM限制和UART通訊。同時硬件設(shè)計還存在一些不足之處,由于UART采納驅(qū)動發(fā)送,發(fā)送距離有所增加,但是不適于用超長距離的通訊限制。與通用的燈光系統(tǒng)相比新的燈光系統(tǒng)限制上多了PWM調(diào)整燈的亮度輸出,可以限制燈的漸明漸暗過程,布線與維護簡潔,只在某個燈損壞時候,只須要更換相應(yīng)的從限制板將更換上去的從機地址設(shè)置為損壞的從機地址就可以正常工作,同時布線只須要幾根線,更換較為簡潔。但是相對于原來的燈光系統(tǒng)還存在一個主要的問題,由于每一個從機都須要有一個STC12C2052限制接受數(shù)據(jù),造成在比較大的陣列LED中運用成本較高的問題,對于這個問題,可以重新更改軟件和硬件,使得STC單片機的PWM管腳都全部運用上去,就STC12C2052單片機有兩路的PWM輸出假如將兩路的PWM都運用上,那么一個從機板上就可以限制兩個LED燈的亮度調(diào)整從而節(jié)約一半的硬件成本。參考文獻[1]郝文化.ProtelDXP電路原理圖與PCB設(shè)計[M].北京:機械工業(yè)出版社,2004,127-301.[2]謝嘉奎.電子線路(第五版)[M].北京:高等教化出版社,2001,105-130.[3]何立民.MCS-51單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天高校出版社,1995,45-66.[4]何立民.單片機中級教程:原理與應(yīng)用[M].北京:北京航空航天高校出版社,2002,77-95.[5]://w8-04/438813p17.htm[6]3.htm[7][8][9]STC12C5410AD系列單片機器件手冊[EB/OL].宏晶科技,2007,75-82.[10]龔運新.單片機C語言開發(fā)技術(shù)[M].北京:清華高校出版社,2006,100-123.LEDLightingSystemDesignBasedontheControlofPWMElectronicandInformationEngineeringDepartmentMajorofElectronicInformationEngineeringXiaoyiWangInstructorYinghongLiu【Abstract】ThisdesignintroducesonekindofLEDlightingcontrolsystemasthecoretoSTCsinglechipmicrocomputer.ItmainlyusesPWMtechnologyandUARTcommunicationtechnology.PWMisonekindofverymaturetechnology,whichnowiswidelyusedinSpeed,dimmingsystem.UARTcommunicationisonekindofcommunicationMeanswhichisusedthemostcommonly.Thedesignintroducesthesinglechipcontrolcircuits,communicationscabling,PWMcircuit,andPWMcontroldesignindetail,anditalsogivestheProgrammeofsystemsoftware.【Keywords】PWM,STCsinglechipmicrocomputer,UARTcommunication.附件一、主限制程序#include "..\..\pwm\include\upwm.h"#include "..\..\Public\include\public.h"main(){ PcaPwmInit(); SetMyBause(); InitUart(); while(1) { #ifdefKONGCONTRLMAIN Main_PullContrl(); #endif#ifdef KONGCONTRLSLAVER{if(GetUartData()==0) { PwmOut(UartReceviceBuf[2]); Delayms(20); } } #endif }}附件二、公共部分程序#include <intrins.h>#include"../../UserDef.h"#ifdefUSE_PUBLIC_8BITCRC //8位CRC計算程序unsignedcharCrcCmp(unsignedchar*buf,unsignedcharlen){ unsignedcharcrcount=0,i; for(i=0;i<len;i++) crcount=crcount^buf[i]; returncrcount;}#endif#ifdef USE_PUBLIC_DELAYvoidDelayms(unsignedinttime) //延時函數(shù){ unsignedintdataj; unsignedintdatai; for(i=0;i<time;i++) for(j=0;j<600;j++) _nop_();}#endif附錄三、UART通訊程序#include"../../UserDef.h"#include"..\include\uartdef.h"#include"..\include\stc12c2052ad.h"#include "..\..\Public\include\public.h"#defineCrystal221184002 //定義晶體頻率22.1184MHZ#define SysClkTick12 //定義系統(tǒng)指令周期?#define Base_50us256-((50*Crystal)/(SysClkTick*1000000l)) //50us溢出時間基準(zhǔn)//UART接收緩沖單元unsignedcharidata UartReceviceBuf[MAXBUF];unsignedchar Receive_Num=0; //接收的字節(jié)數(shù)unsignedchar Send_Num=0; //發(fā)送的字節(jié)數(shù) unsignedchar Send_Ok =0; //已經(jīng)發(fā)送的字節(jié)數(shù)//間隔時間定時器間隔值unsignedchar T0Delay_Count=0x16;//時間間隔unsignedchar Comm_Time;#ifdefKONGCONTRLMAIN//主機unsignedchar Slave_Addr;#endif//UART發(fā)送緩沖unsignedcharidataUartSend_Buf[MAXBUF];unsignedchar My_Addr;//口線初始化,并且讀出設(shè)置的地址值void ReadMy_Addr(void){ P1M0=0; P1M1=0;#ifdefKONGCONTRLMAIN My_Addr=1; #else { My_Addr=P1; My_Addr=My_Addr>>4; } #endif} //初始化串口,T0中斷void InitUart(){ ReadMy_Addr(); IP= 0X02; //將定時器0中斷設(shè)置為最高級別中斷 TMOD= 0x22; //T1,T0initialB00100001 TH0=Base_50us; //設(shè)置定時初值 TL0=Base_50us; TF0=0; //清除中斷T0標(biāo)記 ET0=1; //使能T0中斷 TR0=1; //計時起先 EA=1; PCON=0x0; //UART串口初始化程序 SCON=0x50; REN=1; //serialportreceivebegin ES=1; //允許串口中斷} //波特率設(shè)置程void SetMyBause(void) {AUXR=AUXR&0x3F; //設(shè)置為12T方式 TH1=BAUSE4800; TL1=BAUSE4800; TR1=1;}//定時器中斷函數(shù),用以實現(xiàn)定現(xiàn)定時功能Time_IntVal(void)interrupt1using2{TF0=0;if(Comm_Time>1) Comm_Time--;}//中斷處理程序voidIntComm()interrupt4using1{ if(RI) { RI=0; ES=0; if(!Comm_Time) { Comm_Time=T0Delay_Count; Receive_Num=0; } if((Receive_Num<MAXBUF)&&(Comm_Time!=1)) { UartReceviceBuf[Receive_Num]=SBUF; Receive_Num++; Comm_Time=T0Delay_Count; } }if(TI) { TI=0; if(Send_Ok<Send_Num) SBUF=UartSend_Buf[Send_Ok++]; else { Send_Num=0; Send_Ok=0; } }ES=1;}//主機程序處理部分#ifdef KONGCONTRLMAIN//3.串口發(fā)送程序unsignedcharSendComm(unsignedcharlen){ unsignedinttimeout=0;if(len>MAXBUF) return-1;if(Send_Ok!=0) { while(Send_Ok!=0) { timeout++; if(timeout>=1000) { Send_Ok=0; Send_Num=0; return1; } } return1; }Send_Num=len; SBUF=UartSend_Buf[0]; ES=1; Send_Ok=1; return0; }//外部引用extern voidPwmOut(unsignedcharpwmin);bit Maxout_Flag; //公共運用變量//計算下一臺機器的PWM寬度void GetPwidth(unsignedchar*pwidth,unsignedcharmode){ unsignedcharpwmin; unsignedcharstepwidth;pwmin=*pwidth;if(pwmin<=MINPLUEWIDTH) Maxout_Flag=0; else { if(pwmin>=MAXPLUEWIDTH) Maxout_Flag=1; }if(mode==0) stepwidth=STEPWIDTH; else stepwidth=STEPWIDTH1; if(Maxout_Flag) pwmin=pwmin-stepwidth; else pwmin=pwmin+stepwidth;*pwidth=pwmin;} void PollOut1(unsignedcharmode){ unsignedchari; unsignedcharpwmin; Maxout_Flag=0; if(mode==0) { pwmin=MAXPLUEWIDTH;; PwmOut(pwmin); Delayms(DELAYTIME3); Slave_Addr=STARADDR; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=MAXPLUEWIDTH;; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME3); Slave_Addr++; }}else{ pwmin=MAXPLUEWIDTH;; Slave_Addr=STARADDR+DAULTMACHINENUM-1; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=MAXPLUEWIDTH;; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME3); Slave_Addr--; } PwmOut(pwmin);}}//輪訓(xùn)顯示void PollOut(unsignedcharmode){ unsignedchari; unsignedcharj; unsignedcharpwmin; Maxout_Flag=0;if(mode==0) { for(j=0;j<LOOPTIME;j++) { pwmin=j*STEPWIDTH+MINPLUEWIDTH; PwmOut(pwmin); Delayms(DELAYTIME); Slave_Addr=STARADDR; GetPwidth(&pwmin,0); for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=pwmin; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME); Slave_Addr++; GetPwidth(&pwmin,0); } } } else { for(j=0;j<LOOPTIME;j++) { pwmin=j*STEPWIDTH+MINPLUEWIDTH; Slave_Addr=STARADDR+DAULTMACHINENUM-1; for(i=STARADDR;i<(STARADDR+DAULTMACHINENUM);i++) { UartSend_Buf[0]=0x55; UartSend_Buf[1]=Slave_Addr; UartSend_Buf[2]=pwmin; UartSend_Buf[3]=CrcCmp(UartSend_Buf,3); SendComm(4); Delayms(DELAYTIME); Slave_Addr--; GetPwidth(&pwmin,0); }PwmOut(pwmin); } } } //LED燈全滅處理程序void LedOutDa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論