LED路燈\吸頂燈具有明顯的環(huán)保節(jié)能優(yōu)勢(shì),而實(shí)時(shí)的控制LED亮度和功率消耗,在節(jié)能減排方面具有重要的意義;如LED路燈可以分時(shí)間段的(白天、黃昏、晚上、深夜)、或者按天氣實(shí)時(shí)明亮變化(如雷雨陰暗天氣、大太陽(yáng)天氣等)自動(dòng)調(diào)整LED輸出電流功率,保持需要的輸出照度,從而節(jié)省的電源的開支,減少了二氧化碳的排放。 LED驅(qū)動(dòng)器一般具有PWM輸入控制模式,要達(dá)到上述的工作模式,需要我們配套一支智能PWM信號(hào)發(fā)生器,PWM發(fā)生器在完成各種智能控制的時(shí)間里不允許打斷PWM的連續(xù)輸出,否則會(huì)產(chǎn)生明顯的閃爍感;因此本人利用MCU的PCA模塊輸出PWM調(diào)制信號(hào),可以保證PWM的連續(xù)輸出,同時(shí)可以利用中斷功能實(shí)現(xiàn)各種工作模式的控制,方便于接入網(wǎng)絡(luò)實(shí)現(xiàn)上位機(jī)的實(shí)時(shí)監(jiān)測(cè)。 我們可以選擇具有實(shí)用于LED的有PCA模塊的MCU,本人用STC公司的MCU進(jìn)行的分析試驗(yàn),STC公司的MCU是增強(qiáng)型單片機(jī),在51工業(yè)級(jí)模式上又增加了PCA、DAC、SPI等等,使得我們的MCU系統(tǒng)硬件可以大大的簡(jiǎn)化,性能卻非常的優(yōu)秀,非常適用于高電磁干擾、環(huán)境惡劣的地方。 在生成PWM信號(hào)時(shí)我們要先了解驅(qū)動(dòng)的PWM控制參數(shù),如頻率、輸入阻抗、功耗等;然后確定PWM硬件電路,最后編寫PWM程序。 以下是編寫的程序: //--------------芯片STC12C5A60S2--晶振11.0592M---- //------------------LED日光燈PWM紅外遙控接收程序------- #include <stc12c5a.h> #define uint unsigned int #define uchar unsigned char sbit LED_LE=P3^4; sbit IR_RE=P3^2; sbit p01=P0^1; //----開關(guān)檢測(cè)輸入 sbit p02=P0^2; //----開關(guān)檢測(cè)輸入 uchar pulse=0x10;//定義PWM步進(jìn)變量 static uchar date[4]={0,0,0,0}; static uchar qinlong; static uchar ZKB1,ZKB2; //------------------------- void delay882() { uchar i,j; i=35; do{j=68; do{j--;} while(j); i--; }while(i); } //------------------------- void delay1000() { uchar i,j; i=39; do{j=70; do{j--;} while(j); i--; }while(i); } //------------------------- void delay2400() { uchar i,j; i=93; do{j=70; do{j--;} while(j); i--; }while(i); } //////////////////////////////////////// void delay5ms(void)//5ms去抖動(dòng)延時(shí) { unsigned int tempcyc=1000; while(tempcyc--); } //-------------------------------------- void delayya() { uint i; for(i=0;i<30000;i++); } //====================================== void sezi() { LED_LE=0; EA=1; EX0=1; //允許外部0中斷 IT0=1; //外部0中斷使用下降沿觸發(fā) //---------- // TMOD=0x01;//------定時(shí)器0中斷設(shè)置//需要用定時(shí)中斷才用,一般不需用 // TH0=0xff; //因?yàn)闀?huì)有中斷干擾的現(xiàn)象,影響PWM輸出的連續(xù)性. // TL0=0xf0; // ET0=1; // TR0=1; //---------- CMOD=0x80;//------PCA模塊PWM設(shè)置 CCON=0x00;//CMOD=0X84為T0為信號(hào)源,這時(shí)將T0設(shè)置段落打開//0X80時(shí)則用12分頻時(shí)鐘信號(hào) CL=0x00; //CMOD=0X86使用外部脈沖信號(hào),從P1.2腳加入信號(hào) CH=0x00; CCAPM0=0x42; PCA_PWM0=0x00; CR=1; } //***********************************************/ //===================0.5-9.5ms的延時(shí)調(diào)光信號(hào)============= void main() { uchar j=5; sezi(); while(1) { if(qinlong==0x00) { CCAP0H=(256-250); qinlong=0xff; } else if(qinlong==0x01) { CCAP0H=(256-240); qinlong=0xff; } else if(qinlong==0x02) { CCAP0H=(256-220); qinlong=0xff; } else if(qinlong==0x03) { CCAP0H=(256-200); qinlong=0xff; } else if(qinlong==0x04) { CCAP0H=(256-180); qinlong=0xff; } else if(qinlong==0x05) { CCAP0H=(256-160); qinlong=0xff; } else if(qinlong==0x06) { CCAP0H=(256-150); qinlong=0xff; } else if(qinlong==0x07) { CCAP0H=(256-100); qinlong=0xff; } else if(qinlong==0x08) { CCAP0H=(256-50); qinlong=0xff; } else if(qinlong==0x09) { CCAP0H=(256-10); qinlong=0xff; } //------------------------------------------以下開關(guān)檢測(cè)輸入 else if(!p01) delay5ms(); if(!p01) { CCAP0H=CCAP0H+j; delayya(); if(CCAP0H>=250)CCAP0H=250; } //----------------- else if(!p02) delay5ms(); if(!p02) { if(CCAP0H<=10)CCAP0H=10; CCAP0H=CCAP0H-j; delayya(); } } } //=====================紅外線中斷========================
|