搜索
bottom↓
回复: 97

用ATTINY13做的大功率LED头灯调光驱动电路(仅设计,还没做板验证)

[复制链接]

出1070入962汤圆

发表于 2009-3-24 11:35:10 | 显示全部楼层 |阅读模式
最近和玩户外的一个朋友交流,感觉手电品种很多,而且贵的很,一般都会使用锂电池,但是专业山友都不愿意用锂电池,而且手电照明时间短,成本太高。
结合现在淘宝上卖的十几块钱的降压恒流驱动板,我自己用ATTINY13设计了一个支持多级或者无级调光,支持暴闪甚至可以自动发送SOS莫尔斯电码灯语信号的驱动板。下面是电路图,还没有做验证,很多元件参数都没有确定。等样品到了我自己先做感光板测试吧。

欢迎拍砖。。。。


(原文件名:tmp1.JPG)

出1070入962汤圆

 楼主| 发表于 2009-3-24 12:09:46 | 显示全部楼层
补充一下,这个电路输入电压是5.5V~36V直流,可以由铅酸蓄电池进行供电,输出最大为1.2A,由Rsense决定电流,工作频率2MHz,效率超过90%,mos管厂家推荐使用AP2306.可以做电池低电压提示和保护,就是怕AVR的ADC基准电压不是很准,还要一个个的校正。
下面是恒流芯片TAC5241的资料点击此处下载 ourdev_427562.pdf(文件大小:255K) (原文件名:TAC5241.pdf)

出1070入962汤圆

 楼主| 发表于 2009-3-24 12:10:55 | 显示全部楼层
程序正在写,写完一起公布上来,就等明天厂家发来的样片了。

出0入0汤圆

发表于 2009-3-24 12:11:38 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-3-24 13:47:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-24 21:52:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-25 09:24:37 | 显示全部楼层
支持

出0入0汤圆

发表于 2009-3-25 10:52:03 | 显示全部楼层
要死机啊,这个控制电路我搞了两年了,始终不能解决T13的死锁问题,在低电压,电源电压剧烈波动的情况下,T13会出现连外中断都无法唤醒的死睡状态,导致功率管烧毁,用汇编也无法解决问题,工作电压超过3V没有问题。


又看了下楼主的电路,如果用专用驱动芯片,T13仅做控制的话,这个问题不用担心。

户外电源,可充电锂电池仍然是最佳选择

出0入0汤圆

发表于 2009-3-25 10:53:19 | 显示全部楼层
另,按钮太多了,一个就可以实现全部功能

出10入120汤圆

发表于 2009-3-25 10:55:00 | 显示全部楼层
死机需要在电路里面有硬件保护的

出0入0汤圆

发表于 2009-3-25 11:00:34 | 显示全部楼层
小小的手电,体积有限,硬件能省则省,而且现在手电行业已经被搞烂了,不得不考虑成本问题。

出0入0汤圆

发表于 2009-3-25 11:10:36 | 显示全部楼层
大功率LED驱动,我也是在做的。。。。

首先用LED专用驱动IC,这个比较稳定。就算单片机死机,LED的电流保持稳定,也不会烧场效应管。

做好单片机的供电滤波,保持供电电压稳定。(高频干扰很大,特别是尖锋,电压波动大)

按键只用一个就可以了,长按开关机。。短按转换功能。。

出0入0汤圆

发表于 2009-3-25 11:15:21 | 显示全部楼层
做来自己玩,还可以。。做产品不用想了。。。

出1070入962汤圆

 楼主| 发表于 2009-3-25 12:02:17 | 显示全部楼层
今天已经实现了无级调光了,不过发现人眼对光强的感受和PWM的占空比的变化不是线性的,在光强较弱时人眼对光强变化比较敏感,在比较亮时就感觉不明显了,所以输入电流在时间轴上呈线性关系时,人眼的感觉不是线性的。无级调光其实没必要那么细的分辨率,几个固定档位就可以了。
下面要实现暴闪和SOS电码的发送,还有按键就接了一个出来,这些状态都能实现。比较头疼的就是ADC电压采样,做低电压告警,干扰大,本身基准源又不准,还没做,不知道效果如何。
不知道专业的LED照明调光使用什么MCU,我就会AVR,所以就T13了。这两天看到网上做的用QX7135驱动,几个并联,然后用搭接不同的焊盘方式实现电流的大小,居然也叫5档调光,难道山友还要随身带个电烙铁吗。

一般的户外确实使用锂电池就可以,但是高海拔的山友对锂电池的观点可不一样,他们中的人为了购买到镍镉电池特地收购二手对讲机呢,现在新的对讲机都是使用镍氢或者锂电池。铅酸电池虽然比较重,但还是他们使用最广泛的电源。

pcb板已经画出来了,双面板,圆形,直径18mm,可以安装到灯头板的背后

(原文件名:LED.JPG)

出0入0汤圆

发表于 2009-3-25 12:15:06 | 显示全部楼层
大功率LED驱动,用tiny13做过小到恒流几十毫安的产品,大至恒流近十安的产品都有,除电源稳压IC外没用别的IC,倒没见过死机哦

出1070入962汤圆

 楼主| 发表于 2009-3-25 12:23:21 | 显示全部楼层
楼上介绍下经验吧,没敢直接拿T13和MOS管来做,就是怕一个工作频率不够效率不行,第二T13死机很危险,所以加了个驱动芯片,1块多一片,就是PCB太挤了。请问楼上用的什么稳压IC?

出0入0汤圆

发表于 2009-3-25 12:30:09 | 显示全部楼层
人眼对光强的感受和LED调光方式有关
脉宽调光是调节LED开及关的时间来调节亮度,这种方式在LED调到暗时直视LED仍觉很刺眼,因此时LED开通时间虽然很短但电流还是100%的
另一种方法是调节LED的恒流电流,这种方式在LED调到暗时直视LED就比较柔和不刺眼,因此时LED的电流是恒定的小电流

出0入0汤圆

发表于 2009-3-25 14:09:19 | 显示全部楼层
工作频率通常在60K左右,效率一般在80~90%这样子,正常情况下没见过死机,不过BOD(20uA大了点)是一定要开的,地线不乱走.
稳压IC, 电源6V以下不用,10V以下用HT7550-1,20V以下用TPS71550,30V以下用78L05/78M05,30V以上用三极管+稳压二极管

出0入0汤圆

发表于 2009-3-25 14:57:18 | 显示全部楼层
T13的死机我测出来大约在1.4V左右,在这个电压左右单片机的时钟仍在运行,但是里面的一些寄存器的数据已经不稳定了,有可能触发SLEEP(这个不是程序跳飞导致的,是寄存器在这么低的电压下数据混乱所致)但中断唤醒可能又是关闭的,如果此时电压又突然回升,处理器又开始工作,但是各数据寄存器里的数据全乱了,什么现象都会出现!如果是其它问题,用软件陷阱可以解决,但是死睡就没办法了。手电控制里往往为了控制成本,用一片T13来解决所有问题,一旦T13完蛋,整个电路就会灾难后果,尤其是没有硬件保护的功率管。但这种电压能跳到1.4V的我也只有在3V供电的AA电池电路中才碰到。而且也只出现在升压电路里!!!一般的试验里碰不到,但做长时间的可靠试验就会发现。如果工作电压不会触及1.4V。这个问题可以不用担心/

如果有专用恒流电路来控制LED,T13只控制工作模式,这样的问题就算出现也不会有大的后果,大不了重新开机。ACM7135我用过,效果不错,长期实验未发现死机现象。这种没有升降压的电路是比较稳定的。

现在的大功率手电基本上用PIC的8脚MCU来控制的,程式也是千遍一律。PIC控制的也不可靠,我网上买的装用3W的CREE手电,在试用了不到一年,功率管突然烧毁(爆裂烧毁,肯定是死机!)



【17楼】 shinehjx ::效率80-90%怎么达到的?能否介绍一下!!!升压电路是否也有这么好的效率?3V升3。8V电路我最多到80%。大功率时效率降低,大功率的时候70%都不到啊 。

出0入0汤圆

发表于 2009-3-25 15:22:23 | 显示全部楼层
用AMC7135来恒流,那只能是哄人。。。那么发热量大,效率低得可怜。电流随着电压变化漂移大。。充其量就是一个会变化的电阻。

电筒控制方案就好是使用LED专用驱动IC + 单片机。。

电池能用3.8V-4.2V的最好(单片机供电更好处理),采用降压型恒流IC

由于体积有限,可以用LED驱动部份 恒流IC(SOT-23)+ 场效应管(SOT-23) + 二极管(SS14)+ 电感

单片机 使用PIC10F204(SOT-23)软件摸拟PWM 控制恒流IC + 一个按键(长按开关机,短按功能转换)

其实最主要的单片机的供电,单片机在低于工作电压的时候经常出现想不到的问题。应该要保证其最低工作电压,还用就是尖锋干扰。。。

出1070入962汤圆

 楼主| 发表于 2009-3-25 15:31:44 | 显示全部楼层
搬个板凳,我是来学习的。从来没有做过LED驱动,也是一时兴趣,厂商给了些资料和芯片,就动手了。
基本思路也是LED专用驱动IC+MOS+单片机,由于是用两个单体锂电池串联供电,或者是蓄电池供电,所以选了5241,降压恒流芯片,
工作频率2MHz,从厂商资料曲线来看,驱动单颗3W LED时的效率接近95%。5241有个好处,就是内置一颗LDO,能输出5V 2mA,正好可以供单片机工作,否则单片机电源自己实现比较痛苦。

现在用T13做,貌似最高PWM频率是40K,再高上不去了。

估计更加难做的是升压恒流的,就是单颗锂电池或者1AA,2AA供电的驱动,看来网上也说效率不容易高。

出1070入962汤圆

 楼主| 发表于 2009-3-25 15:40:41 | 显示全部楼层
PIC10F204(SOT-23)封装很小啊,貌似AVR能找到的最小的就是T13了,画PCB痛苦啊!

出0入0汤圆

发表于 2009-3-25 16:07:48 | 显示全部楼层
用AMC7135来恒流,那只能是哄人。。。那么发热量大,效率低得可怜。电流随着电压变化漂移大。。充其量就是一个会变化的电阻。

电筒控制方案就好是使用LED专用驱动IC + 单片机。。

电池能用3.8V-4.2V的最好(单片机供电更好处理),采用降压型恒流IC

由于体积有限,可以用LED驱动部份 恒流IC(SOT-23)+ 场效应管(SOT-23) + 二极管(SS14)+ 电感

单片机 使用PIC10F204(SOT-23)软件摸拟PWM 控制恒流IC + 一个按键(长按开关机,短按功能转换)

其实最主要的单片机的供电,单片机在低于工作电压的时候经常出现想不到的问题。应该要保证其最低工作电压,还用就是尖锋干扰。。。
  
*****************************************************************************************************

AMC7135是专用的锂电恒流电路,锂电池的电压是3.6V--4.3V.而目前最常用的CREE白光LED满功率时端电压为3.4V--3.8V。这样的恒流驱动AMC7135效率仍然是很高的。不失为理想的选择,唯一的遗憾是电流太小,大电流要并联使用

尽管现在很多厂家都宣称电路的转换效率是80%以上,还有声称90%以上,我对这些参数表示怀疑,我曾经分解国内名牌FENIX的手电筒,是用两节AA电池供电的,(380元一个)最大功率输出时效率只有50%左右!!!!一般升压电路能做到80%已经很不错了。

期待楼主早日做出成品,到时测试一下数据。不过降压电路效率可以做的很高

出0入0汤圆

发表于 2009-3-25 16:43:47 | 显示全部楼层
【18楼】 jj3055  AVR不开BOD死的机率很大我是不敢用,T13L开BOD就不能工作在1.8V以下了,但是3V的电池要使T13L在开BOD的情况下电池持续降至1.4V以下都能正常工作也是有办法的,稍后上个图大家拍下砖。
    升、降压电路及大、小功率都能做到80~90%的效率,输出10A内 再大没做过。至于经验我也不是什么高人只能随便说些我认为是关键的:合适的频率,我一般是用在60KHz附近,太高很难做好(专用IC除外),电感铜线的线径最好粗些、大电流的走线粗些,滤波用瓷片,2A以上电流则瓷片+高速电解。如有不对请指正。

【19楼】 ivws  AMC7135来恒流。。充其量就是一个会变化的电阻,线性恒流就是这样的不适合用于压差大的场合。软件摸拟PWM调光用PIC10F200就能胜任,频率能做在2KHz内

【20楼】 Appcat 我就是苹果猫 能实际测下5241效率能到多少吗?看介绍很不错,SOT23封装我喜欢小面积很合用,迟些也弄些试试。T13 PWM频率可以高于40K的,设置为Fast PWM top=OCR0A,频率=mcu主频/OCR0A的值。升压恒流的也不难做,1AA的有专用IC

出0入0汤圆

发表于 2009-3-25 17:04:47 | 显示全部楼层
18楼】 jj3055  AVR不开BOD死的机率很大我是不敢用,T13L开BOD就不能工作在1.8V以下了,但是3V的电池要使T13L在开BOD的情况下电池持续降至1.4V以下都能正常工作也是有办法的,稍后上个图大家拍下砖。
    升、降压电路及大、小功率都能做到80~90%的效率,输出10A内 再大没做过。至于经验我也不是什么高人只能随便说些我认为是关键的:合适的频率,我一般是用在60KHz附近,太高很难做好(专用IC除外),电感铜线的线径最好粗些、大电流的走线粗些,滤波用瓷片,2A以上电流则瓷片+高速电解。如有不对请指正。
*************************************************************

我一直都在为手电驱动电路的效率问题困饶,我至今最大的效率只能做到80%多一点点(我用40K的频率),从没上过85%。而且电流大于700毫安效率剧烈下降。自己模电学的不好,没办法,只能瞎琢磨。【23楼】 shinehjx 能否赠送一些比较成熟的电路啊!呵呵~~~~~~

我一直不开BOD,就是为了省下那几十微安的电流,睡眠时如果还耗这些电的话,对于纽扣电池(CR2016)的电路就显得浪费了。不得已而为之啊。

出0入0汤圆

发表于 2009-3-25 17:08:49 | 显示全部楼层
20楼】 Appcat 我就是苹果猫 能实际测下5241效率能到多少吗?看介绍很不错,SOT23封装我喜欢小面积很合用,迟些也弄些试试。T13 PWM频率可以高于40K的,设置为Fast PWM top=OCR0A,频率=mcu主频/OCR0A的值。升压恒流的也不难做,1AA的有专用IC

********************************************************

???这个有点不解。Fast PWM 可以设置TOP吗?能否指点一下啊!

出0入0汤圆

发表于 2009-3-25 17:12:52 | 显示全部楼层
贴图,单节3V CR123供电驱动CREE LED,公司的产品程序就不方便贴了
功能:1, 长按长亮,离手熄灭。
      2, 0.6秒内连按2下(双击)爆闪 直至再次按键才熄灭。
      3, 0.6秒内连按3次 保持长亮,直至再次按键才熄灭。

(原文件名:led.JPG)

出0入0汤圆

发表于 2009-3-25 17:18:50 | 显示全部楼层
这个电路低压工作很巧妙,仔细研究下

出0入0汤圆

发表于 2009-3-25 17:22:28 | 显示全部楼层
【25楼】 jj3055   T13 Fast PWM 是可以改变PWM TOP的,请看

(原文件名:pwm.JPG)

出0入0汤圆

发表于 2009-3-25 17:24:25 | 显示全部楼层
这个电路好象对LED的冲击会很大

出1070入962汤圆

 楼主| 发表于 2009-3-25 17:25:17 | 显示全部楼层
呵呵,有了楼上的电路图,程序也就好写了。没想到随便往论坛里扔块板砖,居然引来这金玉满堂!让我也膜拜一下:万能的坛啊~~~

Fast PWM top=OCR0A这种模式是可以的,把TCCR0A和TCCR0B的WGM2,WGM1,WGM0位全部设定为1就可以了。我的40K其实就是Fast PWM top=0xFF。

出0入0汤圆

发表于 2009-3-25 17:27:58 | 显示全部楼层
MARK!有时间弄片试试!

出0入0汤圆

发表于 2009-3-25 17:29:59 | 显示全部楼层
单锂同步整流电路,业余不计成本方案

(原文件名:4.jpg)

出1070入962汤圆

 楼主| 发表于 2009-3-25 17:33:01 | 显示全部楼层
贴程序啦,还是CVAVR的。
简单说一下,使用比较低的主频+8分频,目标是T13尽量省电,但是没有在关机状态下休眠什么的,暂时是初步的功能实现。
单片机上电后LED处于关机状态,PWM不输出,5241的DIM直接拉低。然后长按3秒左右开机,10%亮度,每短按一次亮度增加,按照25%,50%,75%,100%递增。当100%时再短按一下,就进入暴闪,100%亮度亮200ms灭200ms。在暴闪状态下短按一下,进入SOS呼救状态,循环发送SOS信号。在任何状态下长按关机。程序如下:由于暴闪和SOS直接使用了系统delay函数,会导致按钮在这个状态下反应时间变长,有待改进。回头看看能否上段视频效果。



#include <tiny13.h>
#include <delay.h>

#define KEY PINB.3
#define LEDDRV PORTB.0
#define MAX_STATE 8     //最多支持状态数
#define LONG_KEY  2000 //长按键的时间

unsigned char udata;    //PWM设定
unsigned char pstate;   //功能切换状态
unsigned int counter;   //按键按下时间计数器


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
    counter++;
}

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
// Place your code here

}

// Timer 0 output compare B interrupt service routine
interrupt [TIM0_COMPB] void timer0_compb_isr(void)
{
// Place your code here
    //OCR0B = udata;
    OCR0A = udata;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here
udata = 0;
pstate = 0;

// Crystal Oscillator division factor: 8
#pragma optsize-
CLKPR=0x80;
CLKPR=0x03;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State5=T State4=T State3=T State2=T State1=1 State0=1
PORTB=0x0b;
DDRB=0x03;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 75.000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Non-Inverted PWM
// OC0B output: Non-Inverted PWM
TCCR0A=0x83;
TCCR0B=0x01;
TCNT0=0x00;
OCR0A=udata;
//OCR0B=udata;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x0E;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
            if (!KEY)
            {
                counter= 0;
                while (!KEY);
                if (counter > LONG_KEY)     //长按
                {
                    if (pstate != 0)        //如果状态不处于关机状态,则执行关机
                    {
                        pstate = 0;
                    }
                    else
                    {
                        pstate = 1;         //如果已经在关机状态则执行开机
                    }
                    
                }
                else
                {
                    if (pstate) pstate++;
                    if (pstate == MAX_STATE) pstate = 1;
                }
               
               
                delay_ms(50);   //延时,防抖~~~~
            }
            
            
            switch (pstate)
            {
                case 0x00:              //初始关机状态
                    TCCR0A=0x03;
                    PORTB.0 = 0;
                    break;
                case 0x01:
                    TCCR0A=0x83;
                    udata = 0x19;       //10%亮度
                    break;
                case 0x02:
                    udata = 0x40;       //25%亮度
                    break;
                case 0x03:
                    udata = 0x80;       //50%亮度
                    break;
                case 0x04:
                    udata = 0xc0;       //75%亮度
                    break;
                case 0x05:              //100%亮度
                    udata = 0xff;      
                    break;
                case 0x06:              //暴闪
                    TCCR0A=0x03;
                    LEDDRV = 1;
                    delay_ms(200);
                    LEDDRV = 0;
                    delay_ms(200);      
                    break;
                case 0x07:              //SOS
                    TCCR0A=0x03;
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(300);
                    
                    LEDDRV = 1;
                    delay_ms(300);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(300);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(300);
                    LEDDRV = 0;
                    delay_ms(300);
                    
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(100);
                    LEDDRV = 1;
                    delay_ms(100);
                    LEDDRV = 0;
                    delay_ms(2000);
                    break;
                    
                default:
                    break;
            }
            

      };
}

出0入0汤圆

发表于 2009-3-25 17:41:24 | 显示全部楼层
哈哈,平时没有仔细研读手册,才知道快速PWM的TOP也是可以设置的,呵呵

这些电路非常有实际的参考价值  shinehjx  不愧为手电高手!

出0入0汤圆

发表于 2009-3-25 18:06:41 | 显示全部楼层
楼上过奖了惭愧啊-_-!

出1070入962汤圆

 楼主| 发表于 2009-3-25 18:17:55 | 显示全部楼层
刚才试试测效率,只有一块表,所以根本测不准,大概估了一下,80%左右吧。8V输入,360mA,输出那边是3.4V电压,电流应该是不到700mA。这个电路的问题是上电时给输入电容充电会使LED亮一下,此时T13和5241应该还没进入正常工作状态呢。

出0入0汤圆

发表于 2009-3-25 19:07:34 | 显示全部楼层
哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行?

出1070入962汤圆

 楼主| 发表于 2009-3-25 19:12:32 | 显示全部楼层
成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!

明天我可以试试。

出0入0汤圆

发表于 2009-3-25 19:21:44 | 显示全部楼层
哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行?

***********************************************

这个早就有了,现在的商品手电都是这个原理,PIC的话另加一块24C02

出0入0汤圆

发表于 2009-3-25 19:26:26 | 显示全部楼层
成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!

明天我可以试试。

********************************************

哈哈,我设计的手电都是只有一个轻触按纽的,部分已经经过了一年的SLEEP,还可以正常唤醒工作,只是非常非常偶尔出现的工作时死睡挺烦恼的,尽管这种几率非常非常小。

另外我的死机大都出现在电池受到剧烈冲击,与簧片脱离接触,短时的断电引起的

出0入0汤圆

发表于 2009-3-25 20:15:03 | 显示全部楼层
我当然知道早就有了,我也是玩过18650滴,在这里只是提个建议和方向。


另外我的死机大都出现在电池受到剧烈冲击,与簧片脱离接触,短时的断电引起的
-------------------------------------------------------------------
T13供电处并一钽电容,再和电池端用肖特基格开应该够时间做掉电处理了。


另只记录上次断电状态是无法做到可靠的状态转换的,使用中一个意外的碰撞就可能让手电发生状态转换了。
一个可靠的成品是要加上上电时间判断的,必须在上电后规定的时间(很短零点几秒)内断电,且至少连续记录到两次这种特殊的上断电才发生状态转换。

出1070入962汤圆

 楼主| 发表于 2009-3-25 20:36:54 | 显示全部楼层
受教了,这样的话断电重新上电后要过一个时间,再来修改状态,应该就可以抵抗电池冲击掉电。

出0入0汤圆

发表于 2009-3-25 23:04:29 | 显示全部楼层
请问
CREE LED 这是一个系列的产品吧 如果想diy 26楼的那个图

请问 该选那个型号呢 谢谢

手头上有个现成的手电筒 不知道 能否改造。

这个手电是led的 9个白光 led 并联

3节7号电池

出235入8汤圆

发表于 2009-3-26 08:01:55 | 显示全部楼层
#include <tiny13.h>
#include <delay.h>
//IO--寄存器定义
#define PB0   0          //tiny13第5脚
#define PB1   1          //tiny13第6脚
#define PB2   2          //tiny13第7脚
#define PB3   3          //tiny13第2脚
#define PB4   4          //tiny13第3脚
#define PB5   5          //tiny13第1脚

#define SM0   3
#define SM1   4
#define SE    5
//控制寄存器EECR位名设置
#define EERE  0          //读使能
#define EEPE  1          //编程使能
#define EEMPE 2          //准备好中断使能
#define EERIE 3          //主机编程使能
#define EEPM0 4          //EEPROM编程模式位
#define EEPM1 5          //
//LED亮度基数设置
#define lum3  0xff                        //亮度1--最亮
#define lum2  0x50                        //亮度2
#define lum1  0x10                        //亮度3
#define lum0  0x00                        //亮度4--关

#define led_dis()   (PORTB&=~(1<<PB1))     //LED低电平有效
#define led_en()    (PORTB|=(1<<PB1))      //LED高电平有效
#define pwm_en()    (PORTB&=~(1<<PB3))     //PWM开
#define pwm_dis()   (PORTB|=(1<<PB3))      //PWM关

unsigned char lum;                      //亮度
unsigned char count;
unsigned char count1;
bit flag;
bit time_flag;
//=======================================================================
//eeprom写一个字节数据
//变量:address--地址    data--数据
//
//=======================================================================  
void eep_write(unsigned char address,unsigned char data)
{
   //等待上一次写操作结束
   while(EECR&(1<<EEPE));
   //设置编程模式
   EECR=(0<<EEPM1)|(0>>EEPM0);      
   //设置地址和数据寄存器
   EEAR = address;
   EEDR  = data;
   //置位EEMPE
   EECR |= (1<<EEMPE);
   //置位EEWE,启动写操作
   EECR |= (1<<EEPE);
}
//=======================================================================
//eeprom读一个字节数据
//变量:address--地址   
//
//=======================================================================  
unsigned char eep_read(unsigned char address)
{
   //等待上一次写操作结束
   while(EECR&(1<<EEPE));
   //设置地址寄存器
   EEAR=address;
   //设置EERE以启动读操作
   EECR |= (1<<EERE);
   //自数据寄存器返回数据
   return(EEDR);
}
//=======================================================================
//定时器T0溢出中断
//
//
//=======================================================================  
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    count++;
    if(count>=200)
      {
        count=0;
        flag=~flag;
        if(flag)    led_en();
        else        led_dis();
      }
}
//=======================================================================
//设备初始化
//
//
//=======================================================================
void init_devices(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

//IO口初始化
PORTB = 0xff;
DDRB  = 0x02;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9600.000 kHz
// Mode: Fast PWM top=FFh
// OC0A output: Inverted PWM
// OC0B output: Inverted PWM
TCCR0A=0x21;
TCCR0B=0x0a;
TCNT0=0x00;
OCR0A=0xff;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
MCUCR=0x00;
GIMSK=0x00;
PCMSK=0x00;
GIFR=0x00;
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
#asm("sei")                     //打开全部中断
//MCUCR|=(1<<SM1)|(0<<SM0);     //掉电模式
//MCUCR|=(1<<SE);               //休眠使能
//#asm ("sleep");               //开机后进入中断
}
//=======================================================================
//                               主程序
//
//
//=======================================================================
void main(void)
{  
init_devices();
delay_ms(10);
lum=eep_read(0x01);       //读取eeprom里的数据
lum++;
if(lum>=4)  lum=0;
eep_write(0x01,lum);      //写eeprom里的数据
led_dis();

TIMSK0=0x00;
TCCR0A=0x00;
TCCR0A=0x21;
switch(lum)
{   
    case 0:     OCR0B=lum1;         
    break;
    case 1:     OCR0B=lum2;         
    break;   
    case 2:     OCR0B=lum3;
    break;
    case 3:     OCR0B=lum3;       //闪
                TCCR0A=0x01;
                TIMSK0=0x02;
    default:   OCR0B=lum1;
    break;           
}
while (1)
      {     
      }
}


我是用EEPROM做记录的,只有一个电源开关/

出0入0汤圆

发表于 2009-3-27 19:53:02 | 显示全部楼层
请教shinehjx:

   你那个电路可以升压到多少伏,电感的大小和电容的大小怎么确定,谢谢!

出0入0汤圆

发表于 2009-11-27 10:15:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-27 12:00:44 | 显示全部楼层
马克2

出0入0汤圆

发表于 2010-4-27 21:39:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-27 21:55:02 | 显示全部楼层

出0入0汤圆

发表于 2010-4-28 22:49:26 | 显示全部楼层
学习下,有时间自己也DIY一个

出0入0汤圆

发表于 2010-4-29 08:13:52 | 显示全部楼层
ATTINY13  这个片子多少钱?

我用STC  SOP-16封装  有点大,+P沟道管,电流800MA   

手电筒成本很重要,特别是工厂这块的成本!

出0入0汤圆

发表于 2010-4-29 08:14:58 | 显示全部楼层
电压在到3.2V 就锁住,掉电!
3.2V 以上工作,静态电流0.1UA

出0入0汤圆

发表于 2010-4-29 08:33:20 | 显示全部楼层
jj3055  是做这行的吗???
可以有别的方式请教请教呗

出0入0汤圆

发表于 2010-4-29 08:54:58 | 显示全部楼层
手电驱动ldch是牛人啊!

出0入0汤圆

发表于 2010-4-29 10:18:46 | 显示全部楼层
LED照明产品的发热较难处理,特别是3W/颗的设计

出1070入962汤圆

 楼主| 发表于 2010-4-29 10:44:46 | 显示全部楼层
LED照明产品的发热较难处理,特别是3W/颗的设计
--------------------------
设计比较好的手电,LED都是安装在铝基板上的,基板和铝合金外壳之间有个大面积接触的散热环,可以用导热硅脂填充,主要热量从电筒的外壳走。

出0入0汤圆

发表于 2010-4-29 11:33:02 | 显示全部楼层
万能的坛啊~~~扭~~

出0入0汤圆

发表于 2010-4-29 11:41:17 | 显示全部楼层
好贴,具有很高的参考价值

出0入0汤圆

发表于 2010-4-29 13:39:45 | 显示全部楼层
还有谁在做?我最近有个这样的项目,已投产!还想再改进一下,探讨探讨!

出1070入962汤圆

 楼主| 发表于 2010-4-29 13:52:29 | 显示全部楼层
ATTINY13可做到1.8V,最小封装是SOP-8。但是目前价格是杯具。

出0入0汤圆

发表于 2010-4-29 16:01:44 | 显示全部楼层
我们做的,整个杯罩散热,不需要铝基板,效果非常好!18650电池,2200MAH  能照10个小时左右!

出0入0汤圆

发表于 2010-4-30 08:17:34 | 显示全部楼层
怎么沉下去了!

出0入0汤圆

发表于 2010-4-30 13:41:22 | 显示全部楼层
有个国产芯片 cn5911很适合,CN5911是1A的恒流驱动电路,它的最主要优点是外部触发能自动生成强光、弱光、闪烁、关断共4个状态,改变了需要单片机控制状态的历史,一个电路就可搞定,节省成本。

出0入0汤圆

发表于 2010-7-20 19:20:43 | 显示全部楼层
好贴,mark

出0入0汤圆

发表于 2010-7-20 20:40:02 | 显示全部楼层
留着以后用

出0入0汤圆

发表于 2010-7-20 21:40:14 | 显示全部楼层
收了收了!!!
太好了!

出0入0汤圆

发表于 2010-7-27 17:39:18 | 显示全部楼层
mark一下,太精彩了。

出0入0汤圆

发表于 2010-7-27 17:47:19 | 显示全部楼层
楼上的高手,为什么不用带A/D的单片机,直接用单片机pwm来控制led做恒流源的,这样不是更加的节省成本。
不过好像外界干扰导致led的闪烁比较难解决。
期待高手分析,有没有可能,硬件加软件的处理能不能达到单片机+led的低成本模式。

出0入0汤圆

发表于 2010-8-16 09:35:11 | 显示全部楼层
make

出0入0汤圆

发表于 2010-8-19 22:15:12 | 显示全部楼层
这帖子太牛了。。。

出0入0汤圆

发表于 2010-8-23 19:05:09 | 显示全部楼层
回复【13楼】Appcat 苹果猫
-----------------------------------------------------------------------

我原来工作的公司专业做LED头灯产品和方案,用台湾松翰的单片机(1元多,带12位AD和PWM),一颗IC搞定充、放电、控制,电压基准采用TL431,用一个IO口给TL431供电,同时可以关闭这个基准源。多种控制方案(轻触开关、扭转开关),电量不足自动降低亮度,闪灯提示。

出0入0汤圆

发表于 2010-8-23 20:57:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-7 09:56:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-10 16:57:05 | 显示全部楼层
Mark too

出0入42汤圆

发表于 2010-12-14 14:04:46 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-12-14 15:24:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-14 20:49:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-15 14:54:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-31 21:12:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-31 21:37:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-29 12:03:55 | 显示全部楼层
回复【30楼】Appcat 苹果猫
呵呵,有了楼上的电路图,程序也就好写了。没想到随便往论坛里扔块板砖,居然引来这金玉满堂!让我也膜拜一下:万能的坛啊~~~
fast pwm top=ocr0a这种模式是可以的,把tccr0a和tccr0b的wgm2,wgm1,wgm0位全部设定为1就可以了。我的40k其实就是fast pwm top=0xff。

-----------------------------------------------------------------------

有一点我还没确定,OCR0A用来设置TOP了,那么占空比怎么设置?

谢谢!

出0入0汤圆

发表于 2011-7-6 08:12:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-6 08:32:07 | 显示全部楼层
马克!

出0入0汤圆

发表于 2011-7-6 11:24:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-18 17:40:47 | 显示全部楼层
cool!

出0入0汤圆

发表于 2011-9-9 16:23:25 | 显示全部楼层
你们用ATTINY13最小工耗做的是多少毫安!呀

出50入10汤圆

发表于 2011-9-16 13:28:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-22 11:24:08 | 显示全部楼层
回复【楼主位】Appcat  苹果猫
-----------------------------------------------------------------------

楼主,谢谢,学习了

出0入0汤圆

发表于 2011-10-19 16:26:00 | 显示全部楼层
楼主,学习了

出0入0汤圆

发表于 2011-11-25 13:18:44 | 显示全部楼层
回复【楼主位】Appcat 苹果猫
-----------------------------------------------------------------------
学习了,不知楼主做的结果如何?关注ING

出0入0汤圆

发表于 2012-2-25 14:30:10 | 显示全部楼层

出0入0汤圆

发表于 2012-10-24 22:37:58 | 显示全部楼层
感谢分享!

出0入0汤圆

发表于 2014-8-1 10:24:26 | 显示全部楼层
Mark                              

出0入0汤圆

发表于 2018-1-28 20:08:51 | 显示全部楼层
哇,这个帖子太牛了。

出0入0汤圆

发表于 2018-7-17 20:04:52 | 显示全部楼层
shinehjx 发表于 2009-3-25 17:12
贴图,单节3V CR123供电驱动CREE LED,公司的产品程序就不方便贴了
功能:1, 长按长亮,离手熄灭。
       ...

电路很棒  现在很多太阳能路灯控制器使用这种电路
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 22:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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