|
電路為BUCK型,所有LED串電阻后并聯(lián)。
LED為5730的暖白與白色兩種,暖白6只,白色的4只。
電位器調(diào)節(jié)LED亮度,電位器的ADC值直接賦予PWM的比較值。
逆時(shí)針旋到底為關(guān)機(jī)狀態(tài),此時(shí)單片機(jī)工作于掉電模式,用
掉電喚醒專用定時(shí)器喚醒,電流約5uA。
電位器順時(shí)針旋轉(zhuǎn)一定角度后,單片機(jī)工作于空閑模式,由T0定時(shí)
喚醒,單片機(jī)電流約3.7mA。
由于國(guó)LED比較刺眼,最后在LED上蒙了兩層衛(wèi)生紙,用封口膠給粘上的。
燈與底座之間采用USB接口連接,這樣的好處是燈可以插到USB充電
器上單獨(dú)使用。
核心代碼:
while(1)
{
POT_L;//使能電位器
delayus(1);
v=adc_read8(2);
//CCAP1H=v;
POT_H;//關(guān)閉電位器
if((v<10)&&(CCAP1H<11))//關(guān)機(jī)
{
CCAP1H=0;
CCAPM1=0;//關(guān)PWM
n++;
if(n>=5)//每5秒閃一次,便于夜間尋找
{
n=0;
IOCLR(P1,BIT(0));
IOSET(P1,BIT(0));
}
PCON=0X02;//掉電
_nop_();
_nop_();
}
else//不關(guān)機(jī)
{
CCAP1H=((U16)CCAP1H*9+v)/10;//亮度漸變
CCAPM1=BIT(6)|BIT(1);
PCON=0x01;//空閑
_nop_();
_nop_();
}
}
















--------------------------
11.1317:更新PCB,因?yàn)樵璓CB中LED模塊敷銅距離太近。
12.0922:
程序中原PWM時(shí)鐘為FOSC/2,PWM頻率約22KHz,現(xiàn)已將PWM時(shí)鐘改為FOSC,PWM頻率約43KHz。
電路中增加AP5056充電芯片,USB輸出增加1uf電容,如無(wú)此電容,電流會(huì)有較大鋸齒。



C7=1uf時(shí),輸出串1歐取樣電阻測(cè)得的波形:

C7=10uf時(shí),輸出串1歐取樣電阻測(cè)得的波形:

問(wèn): 這是BUCK電路電壓調(diào)光啊。不算PWM調(diào)光
答:
我的PWM占空比是跟隨電位器的,電位器不動(dòng),占空比就不變,怎么不算PWM調(diào)光?
LED通電后,它的電壓是基本不變的,特性類似于穩(wěn)壓二極管。
所以當(dāng)Q4導(dǎo)通時(shí),電感上的電壓也基本不變,電流呈線性上升,所以占空比越大時(shí),平均電流也越大。
所以LED的平均電流與PWM占空基本是呈線性的,應(yīng)當(dāng)稱之為“電流調(diào)光”
單片機(jī)源程序如下:
- /*--------------------------------------------------
- 電位器調(diào)節(jié)LED亮度
- 逆時(shí)針旋到底為關(guān)機(jī)狀態(tài),此時(shí)單片機(jī)工作于掉電模式,用
- 掉電喚醒專用定時(shí)器喚醒,電流約5uA。
- 電位器旋轉(zhuǎn)一定角度后,單片機(jī)工作于空閑模式,由T0定時(shí)
- 喚醒,單片機(jī)電流約3.7mA
- //--------------------------------------------------*/
- #include <INTRINS.H>
- #include "STC15F2K60S2.H"
- #include "MAIN.H"
- #include "uart-15.C"
- #include "stcadc.c"
- //--------------------------------------------------
- //定義
- //--------------------------------------------------
- //最大PWM
- #define MAXPWM 230
- //電位器使能
- #define POT_L IOCLR(P1,BIT(1))
- #define POT_H IOSET(P1,BIT(1))
- //--------------------------------------------------
- //毫秒級(jí)延時(shí)
- //--------------------------------------------------
- void delayms(U16 t)
- {
- U16 i;
- for(;t>0;t--)
- for(i=FOSC/13186;i>0;i--);
- }
- //--------------------------------------------------
- //微秒級(jí)延時(shí)
- //--------------------------------------------------
- void delayus(U16 t)//72=200us
- {
- while(t--);
- }
- //--------------------------------------------------
- //T0中斷:
- //每次+-1更新PWM值,處理啟動(dòng)與停機(jī)
- //--------------------------------------------------
- void timer0_isr(void) interrupt 1
- {
- }
- //--------------------------------------------------
- //掉電喚醒定時(shí)器
- //t*488us
- //--------------------------------------------------
- void wkt_init(U16 t)
- {
- WKTCL=t;
- WKTCH=BIT(7)|(t>>8);
- }
- //--------------------------------------------------
- //PCA初始化
- //--------------------------------------------------
- void pca_init(void)
- {
- CMOD=4<<1;//FOSC
- //CMOD=1<<1;//FOSC/2
- CCAPM1=BIT(6)|BIT(1);//8位PWM
- CCAP1H=0X80;
- //P_SW1=0<<4;//切換CCP到P1
- //P_SW1=1<<4;//切換CCP到P3
- CR=1;
- }
- //--------------------------------------------------
- //T0初始化
- //--------------------------------------------------
- void timer0_init(U16 f)
- {
- U16 v;
- TMOD&=0xf0;
- TMOD|=0X00; //T0方式0,16位自動(dòng)重裝
- v=65536-(FOSC/12/f);
- TH0=v>>8;
- TL0=v;
- ET0=1;
- TR0=1;
- }
- //--------------------------------------------------
- //端口初始化
- //--------------------------------------------------
- void io_init(void)
- {
- P0=0XFF;
- P1=0XFF;
- P2=0XFF;
- P3=0XFF;
- P1M1=BIT(2)|BIT(3)|BIT(4);//AD測(cè)電位器、充電電壓
- //IOCLR(P1,BIT(1));//P1.1光纖接收使能
- //P3M1=0xff;
- //P2M1=BIT(5);
- //M0,M1:00:準(zhǔn)雙向口,01:推挽,10:僅輸入,11:開漏
- //注意:5A60S2的M0,M1是相反的
- }
- //--------------------------------------------------
- //所有設(shè)置初始化
- //--------------------------------------------------
- void init_devices(void)
- {
- io_init();
- uart1_init(9600,1);//關(guān)中斷
- timer0_init(20);
- pca_init();
- wkt_init(2000);
- //cmp_init();
- //uart2_init(1600,0);//19200/12=1600,關(guān)中斷
- //IOSET(AUXR,BIT(2));//BRTx12,讓獨(dú)立波特率變?yōu)樵瓉?lái)的12倍(uart2)
- //uart3_init(2400,1);//2400
- //IOSET(AUXR,BIT(7));//T0x12,讓T0的時(shí)鐘變?yōu)樵瓉?lái)的12倍,波特率也提高了(模擬串口)
- // IP=0X02;//優(yōu)先級(jí)控制(T0為最高優(yōu)先級(jí)):D4:PS,D3:PT1,D2:PX1,D1:PT0,D0:PX0,
- EA=1;
- }
- //--------------------------------------------------
- //主函數(shù)
- //--------------------------------------------------
- void main(void)
- {
- U8 v,n;
- //S16 e;
- init_devices();
- while(1)
- {
- POT_L;
- delayus(1);
- v=adc_read8(2);
- //CCAP1H=v;
- POT_H;
- if((v<10)&&(CCAP1H<11))//關(guān)機(jī)
- {
- CCAP1H=0;
- CCAPM1=0;
- n++;
- if(n>=5)//每5秒閃一次,便于夜間尋找
- {
- n=0;
- IOCLR(P1,BIT(0));
- delayus(2);
- IOSET(P1,BIT(0));
- }
- PCON=0X02;//
- _nop_();
- _nop_();
- }
- else//不關(guān)機(jī)
- {
- //if(v>MAXPWM)v=MAXPWM;
- //CCAP1H=v;
- /*e=(U16)v-CCAP1H;
- if(e<-10)e=-10;
- if(e>10)e=10;
- CCAP1H+=e;*/
- CCAP1H=((U16)CCAP1H*9+v)/10;
- CCAPM1=BIT(6)|BIT(1);
- PCON=0x01;
- _nop_();
- _nop_();
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
1.1電路及程序.rar
(958.86 KB, 下載次數(shù): 123)
2018-9-7 22:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
LED臺(tái)燈電路及程序.rar
(935.5 KB, 下載次數(shù): 131)
2018-9-7 22:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|