找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13698|回复: 12
收起左侧

基于STC15W408AS的LED小台灯

  [复制链接]
ID:395170 发表于 2018-9-7 21:16 | 显示全部楼层 |阅读模式
电路为BUCK型,所有LED串电阻后并联。
LED为5730的暖白与白色两种,暖白6只,白色的4只。
电位器调节LED亮度,电位器的ADC值直接赋予PWM的比较值。
逆时针旋到底为关机状态,此时单片机工作于掉电模式,用
掉电唤醒专用定时器唤醒,电流约5uA。
电位器顺时针旋转一定角度后,单片机工作于空闲模式,由T0定时
唤醒,单片机电流约3.7mA。
由于国LED比较刺眼,最后在LED上蒙了两层卫生纸,用封口胶给粘上的。
灯与底座之间采用USB接口连接,这样的好处是灯可以插到USB充电
器上单独使用。
核心代码:
        while(1)
        {
                POT_L;//使能电位器
                delayus(1);
                v=adc_read8(2);
                //CCAP1H=v;
                POT_H;//关闭电位器
                if((v<10)&&(CCAP1H<11))//关机
                {
                        CCAP1H=0;
                        CCAPM1=0;//关PWM
                        n++;
                        if(n>=5)//每5秒闪一次,便于夜间寻找
                        {
                                n=0;
                                IOCLR(P1,BIT(0));
                                IOSET(P1,BIT(0));
                        }               
                        PCON=0X02;//掉电
                        _nop_();
                        _nop_();               
                }
                else//不关机
                {               

                        CCAP1H=((U16)CCAP1H*9+v)/10;//亮度渐变
                        CCAPM1=BIT(6)|BIT(1);               
                        PCON=0x01;//空闲
                        _nop_();
                        _nop_();               
                }
        }


















--------------------------
11.1317:更新PCB,因为原PCB中LED模块敷铜距离太近。
12.0922:
  程序中原PWM时钟为FOSC/2,PWM频率约22KHz,现已将PWM时钟改为FOSC,PWM频率约43KHz。
   电路中增加AP5056充电芯片,USB输出增加1uf电容,如无此电容,电流会有较大锯齿。





C7=1uf时,输出串1欧取样电阻测得的波形:

C7=10uf时,输出串1欧取样电阻测得的波形:


问: 这是BUCK电路电压调光啊。不算PWM调光

答:
我的PWM占空比是跟随电位器的,电位器不动,占空比就不变,怎么不算PWM调光?
LED通电后,它的电压是基本不变的,特性类似于稳压二极管。
所以当Q4导通时,电感上的电压也基本不变,电流呈线性上升,所以占空比越大时,平均电流也越大。
所以LED的平均电流与PWM占空基本是呈线性的,应当称之为“电流调光”

单片机源程序如下:
  1. /*--------------------------------------------------
  2. 电位器调节LED亮度
  3. 逆时针旋到底为关机状态,此时单片机工作于掉电模式,用
  4. 掉电唤醒专用定时器唤醒,电流约5uA。
  5. 电位器旋转一定角度后,单片机工作于空闲模式,由T0定时
  6. 唤醒,单片机电流约3.7mA

  7. //--------------------------------------------------*/
  8. #include <INTRINS.H>
  9. #include "STC15F2K60S2.H"
  10. #include "MAIN.H"
  11. #include "uart-15.C"
  12. #include "stcadc.c"
  13. //--------------------------------------------------
  14. //定义
  15. //--------------------------------------------------

  16. //最大PWM
  17. #define        MAXPWM        230
  18. //电位器使能
  19. #define POT_L        IOCLR(P1,BIT(1))
  20. #define POT_H        IOSET(P1,BIT(1))

  21. //--------------------------------------------------
  22. //毫秒级延时
  23. //--------------------------------------------------
  24. void delayms(U16 t)
  25. {
  26.         U16 i;
  27.         for(;t>0;t--)
  28.         for(i=FOSC/13186;i>0;i--);
  29. }
  30. //--------------------------------------------------
  31. //微秒级延时
  32. //--------------------------------------------------
  33. void delayus(U16 t)//72=200us
  34. {
  35.         while(t--);
  36. }

  37. //--------------------------------------------------
  38. //T0中断:
  39. //每次+-1更新PWM值,处理启动与停机
  40. //--------------------------------------------------
  41. void timer0_isr(void) interrupt 1
  42. {

  43. }
  44. //--------------------------------------------------
  45. //掉电唤醒定时器
  46. //t*488us
  47. //--------------------------------------------------
  48. void wkt_init(U16 t)
  49. {
  50.         WKTCL=t;
  51.         WKTCH=BIT(7)|(t>>8);

  52. }

  53. //--------------------------------------------------
  54. //PCA初始化
  55. //--------------------------------------------------
  56. void pca_init(void)
  57. {
  58.         CMOD=4<<1;//FOSC
  59.         //CMOD=1<<1;//FOSC/2
  60.         CCAPM1=BIT(6)|BIT(1);//8位PWM
  61.         CCAP1H=0X80;       
  62.         //P_SW1=0<<4;//切换CCP到P1
  63.         //P_SW1=1<<4;//切换CCP到P3
  64.         CR=1;
  65. }
  66. //--------------------------------------------------
  67. //T0初始化
  68. //--------------------------------------------------
  69. void timer0_init(U16 f)
  70. {
  71.         U16 v;
  72.         TMOD&=0xf0;
  73.         TMOD|=0X00;        //T0方式0,16位自动重装
  74.         v=65536-(FOSC/12/f);
  75.         TH0=v>>8;
  76.         TL0=v;
  77.         ET0=1;
  78.         TR0=1;
  79. }
  80. //--------------------------------------------------
  81. //端口初始化
  82. //--------------------------------------------------
  83. void io_init(void)
  84. {
  85.         P0=0XFF;
  86.         P1=0XFF;
  87.         P2=0XFF;
  88.         P3=0XFF;
  89.         P1M1=BIT(2)|BIT(3)|BIT(4);//AD测电位器、充电电压
  90.         //IOCLR(P1,BIT(1));//P1.1光纤接收使能
  91.         //P3M1=0xff;
  92.         //P2M1=BIT(5);
  93.         //M0,M1:00:准双向口,01:推挽,10:仅输入,11:开漏
  94.         //注意:5A60S2的M0,M1是相反的
  95. }

  96. //--------------------------------------------------
  97. //所有设置初始化
  98. //--------------------------------------------------
  99. void init_devices(void)
  100. {
  101.         io_init();
  102.         uart1_init(9600,1);//关中断
  103.         timer0_init(20);
  104.         pca_init();
  105.         wkt_init(2000);
  106.         //cmp_init();
  107.         //uart2_init(1600,0);//19200/12=1600,关中断
  108.         //IOSET(AUXR,BIT(2));//BRTx12,让独立波特率变为原来的12倍(uart2)
  109.         //uart3_init(2400,1);//2400
  110.         //IOSET(AUXR,BIT(7));//T0x12,让T0的时钟变为原来的12倍,波特率也提高了(模拟串口)
  111. //        IP=0X02;//优先级控制(T0为最高优先级):D4:PS,D3:PT1,D2:PX1,D1:PT0,D0:PX0,
  112.         EA=1;
  113. }


  114. //--------------------------------------------------
  115. //主函数
  116. //--------------------------------------------------
  117. void main(void)
  118. {
  119.         U8 v,n;
  120.         //S16 e;
  121.         init_devices();

  122.         while(1)
  123.         {
  124.                 POT_L;
  125.                 delayus(1);
  126.                 v=adc_read8(2);
  127.                 //CCAP1H=v;
  128.                 POT_H;
  129.                 if((v<10)&&(CCAP1H<11))//关机
  130.                 {
  131.                         CCAP1H=0;
  132.                         CCAPM1=0;
  133.                         n++;
  134.                         if(n>=5)//每5秒闪一次,便于夜间寻找
  135.                         {
  136.                                 n=0;
  137.                                 IOCLR(P1,BIT(0));
  138.                                 delayus(2);
  139.                                 IOSET(P1,BIT(0));
  140.                         }               
  141.                         PCON=0X02;//
  142.                         _nop_();
  143.                         _nop_();               
  144.                 }
  145.                 else//不关机
  146.                 {               
  147.                         //if(v>MAXPWM)v=MAXPWM;
  148.                         //CCAP1H=v;
  149.                         /*e=(U16)v-CCAP1H;
  150.                         if(e<-10)e=-10;
  151.                         if(e>10)e=10;
  152.                         CCAP1H+=e;*/
  153.                         CCAP1H=((U16)CCAP1H*9+v)/10;
  154.                         CCAPM1=BIT(6)|BIT(1);               
  155.                         PCON=0x01;
  156.                         _nop_();
  157.                         _nop_();               
  158.                 }
  159.         }
  160. ……………………

  161. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1.1电路及程序.rar (958.86 KB, 下载次数: 122)

评分

参与人数 1黑币 +10 收起 理由
aifengdian + 10 赞一个!

查看全部评分

回复

使用道具 举报

ID:394663 发表于 2018-9-12 10:58 | 显示全部楼层
很好的程序,马上下载来实验下。
回复

使用道具 举报

ID:413700 发表于 2018-12-6 02:11 来自手机 | 显示全部楼层
谢谢先,正找这个用电位器来调光的,但是电路中如果有增加一个电位器来调色温就好
回复

使用道具 举报

ID:79544 发表于 2019-3-30 16:46 | 显示全部楼层
g感谢分享学习啦!!!!
回复

使用道具 举报

ID:211814 发表于 2019-5-17 20:54 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:616896 发表于 2019-10-26 09:58 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:634487 发表于 2019-11-3 12:30 | 显示全部楼层
这个程序的掉电时间  是怎么算的?
回复

使用道具 举报

ID:440637 发表于 2019-11-13 16:46 | 显示全部楼层
感谢分享学习啦
回复

使用道具 举报

ID:440637 发表于 2019-11-13 16:50 | 显示全部楼层
谢谢你,学习了
回复

使用道具 举报

ID:69115 发表于 2020-1-3 10:34 | 显示全部楼层
这个程序挺实用,下来试试.谢谢楼主分享
回复

使用道具 举报

ID:283883 发表于 2020-1-4 08:06 | 显示全部楼层
哇塞,楼主电路板怎么做的,怎么这么好,像工厂打样的一样
回复

使用道具 举报

ID:428443 发表于 2020-7-29 23:25 来自手机 | 显示全部楼层
请问这个电位器 用多大阻值的 谢谢
回复

使用道具 举报

ID:378732 发表于 2020-8-3 03:05 | 显示全部楼层
这个PCB是用雕刻机雕的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表