Appcat 发表于 2009-3-24 11:35:10

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

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

欢迎拍砖。。。。

http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427556.JPG
(原文件名:tmp1.JPG)

Appcat 发表于 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)

Appcat 发表于 2009-3-24 12:10:55

程序正在写,写完一起公布上来,就等明天厂家发来的样片了。

h2feo4 发表于 2009-3-24 12:11:38

学习

brightsm 发表于 2009-3-24 13:47:40

mark

GUOHUDONG 发表于 2009-3-24 21:52:37

mark

lionliu 发表于 2009-3-25 09:24:37

支持

jj3055 发表于 2009-3-25 10:52:03

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


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

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

jj3055 发表于 2009-3-25 10:53:19

另,按钮太多了,一个就可以实现全部功能

makesoft 发表于 2009-3-25 10:55:00

死机需要在电路里面有硬件保护的

jj3055 发表于 2009-3-25 11:00:34

小小的手电,体积有限,硬件能省则省,而且现在手电行业已经被搞烂了,不得不考虑成本问题。

ivws 发表于 2009-3-25 11:10:36

大功率LED驱动,我也是在做的。。。。

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

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

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

ivws 发表于 2009-3-25 11:15:21

做来自己玩,还可以。。做产品不用想了。。。

Appcat 发表于 2009-3-25 12:02:17

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

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

pcb板已经画出来了,双面板,圆形,直径18mm,可以安装到灯头板的背后
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427855.JPG
(原文件名:LED.JPG)

shinehjx 发表于 2009-3-25 12:15:06

大功率LED驱动,用tiny13做过小到恒流几十毫安的产品,大至恒流近十安的产品都有,除电源稳压IC外没用别的IC,倒没见过死机哦

Appcat 发表于 2009-3-25 12:23:21

楼上介绍下经验吧,没敢直接拿T13和MOS管来做,就是怕一个工作频率不够效率不行,第二T13死机很危险,所以加了个驱动芯片,1块多一片,就是PCB太挤了。请问楼上用的什么稳压IC?

shinehjx 发表于 2009-3-25 12:30:09

人眼对光强的感受和LED调光方式有关
脉宽调光是调节LED开及关的时间来调节亮度,这种方式在LED调到暗时直视LED仍觉很刺眼,因此时LED开通时间虽然很短但电流还是100%的
另一种方法是调节LED的恒流电流,这种方式在LED调到暗时直视LED就比较柔和不刺眼,因此时LED的电流是恒定的小电流

shinehjx 发表于 2009-3-25 14:09:19

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

jj3055 发表于 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%都不到啊 。

ivws 发表于 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 + 一个按键(长按开关机,短按功能转换)

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

Appcat 发表于 2009-3-25 15:31:44

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

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

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

Appcat 发表于 2009-3-25 15:40:41

PIC10F204(SOT-23)封装很小啊,貌似AVR能找到的最小的就是T13了,画PCB痛苦啊!

jj3055 发表于 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%已经很不错了。

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

shinehjx 发表于 2009-3-25 16:43:47

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

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

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

jj3055 发表于 2009-3-25 17:04:47

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

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

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

jj3055 发表于 2009-3-25 17:08:49

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

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

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

shinehjx 发表于 2009-3-25 17:12:52

贴图,单节3V CR123供电驱动CREE LED,公司的产品程序就不方便贴了
功能:1, 长按长亮,离手熄灭。
      2, 0.6秒内连按2下(双击)爆闪 直至再次按键才熄灭。
      3, 0.6秒内连按3次 保持长亮,直至再次按键才熄灭。
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427919.JPG
(原文件名:led.JPG)

jj3055 发表于 2009-3-25 17:18:50

这个电路低压工作很巧妙,仔细研究下

shinehjx 发表于 2009-3-25 17:22:28

【25楼】 jj3055   T13 Fast PWM 是可以改变PWM TOP的,请看
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427921.JPG
(原文件名:pwm.JPG)

jj3055 发表于 2009-3-25 17:24:25

这个电路好象对LED的冲击会很大

Appcat 发表于 2009-3-25 17:25:17

呵呵,有了楼上的电路图,程序也就好写了。没想到随便往论坛里扔块板砖,居然引来这金玉满堂!让我也膜拜一下:万能的坛啊~~~

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

xiaoyuanlu 发表于 2009-3-25 17:27:58

MARK!有时间弄片试试!

Paul 发表于 2009-3-25 17:29:59

单锂同步整流电路,业余不计成本方案
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427927.jpg
(原文件名:4.jpg)

Appcat 发表于 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_KEY2000 //长按键的时间

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


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

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

}

// Timer 0 output compare B interrupt service routine
interrupt 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;
            }
            

      };
}

jj3055 发表于 2009-3-25 17:41:24

哈哈,平时没有仔细研读手册,才知道快速PWM的TOP也是可以设置的,呵呵

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

shinehjx 发表于 2009-3-25 18:06:41

楼上过奖了惭愧啊-_-!

Appcat 发表于 2009-3-25 18:17:55

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

kitdog 发表于 2009-3-25 19:07:34

哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行?

Appcat 发表于 2009-3-25 19:12:32

成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!

明天我可以试试。

jj3055 发表于 2009-3-25 19:21:44

哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行?

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

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

jj3055 发表于 2009-3-25 19:26:26

成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!

明天我可以试试。

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

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

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

kitdog 发表于 2009-3-25 20:15:03

我当然知道早就有了,我也是玩过18650滴,在这里只是提个建议和方向。


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


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

Appcat 发表于 2009-3-25 20:36:54

受教了,这样的话断电重新上电后要过一个时间,再来修改状态,应该就可以抵抗电池冲击掉电。

yaya001 发表于 2009-3-25 23:04:29

请问
CREE LED 这是一个系列的产品吧 如果想diy 26楼的那个图

请问 该选那个型号呢 谢谢

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

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

3节7号电池

z31com 发表于 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 EERE0          //读使能
#define EEPE1          //编程使能
#define EEMPE 2          //准备好中断使能
#define EERIE 3          //主机编程使能
#define EEPM0 4          //EEPROM编程模式位
#define EEPM1 5          //
//LED亮度基数设置
#define lum30xff                        //亮度1--最亮
#define lum20x50                        //亮度2
#define lum10x10                        //亮度3
#define lum00x00                        //亮度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 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做记录的,只有一个电源开关/

lionliu 发表于 2009-3-27 19:53:02

请教shinehjx:

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

start00 发表于 2009-11-27 10:15:00

mark

laolu 发表于 2009-11-27 12:00:44

马克2

harng 发表于 2010-4-27 21:39:30

mark

gdmfq 发表于 2010-4-27 21:55:02

nimopur 发表于 2010-4-28 22:49:26

学习下,有时间自己也DIY一个

ct007 发表于 2010-4-29 08:13:52

ATTINY13这个片子多少钱?

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

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

ct007 发表于 2010-4-29 08:14:58

电压在到3.2V 就锁住,掉电!
3.2V 以上工作,静态电流0.1UA

ct007 发表于 2010-4-29 08:33:20

jj3055是做这行的吗???
可以有别的方式请教请教呗

ckvlhf 发表于 2010-4-29 08:54:58

手电驱动ldch是牛人啊!

zhang_mike2000 发表于 2010-4-29 10:18:46

LED照明产品的发热较难处理,特别是3W/颗的设计

Appcat 发表于 2010-4-29 10:44:46

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

yersen 发表于 2010-4-29 11:33:02

万能的坛啊~~~扭~~

FREEXP 发表于 2010-4-29 11:41:17

好贴,具有很高的参考价值

ct007 发表于 2010-4-29 13:39:45

还有谁在做?我最近有个这样的项目,已投产!还想再改进一下,探讨探讨!

Appcat 发表于 2010-4-29 13:52:29

ATTINY13可做到1.8V,最小封装是SOP-8。但是目前价格是杯具。

ct007 发表于 2010-4-29 16:01:44

我们做的,整个杯罩散热,不需要铝基板,效果非常好!18650电池,2200MAH能照10个小时左右!

ct007 发表于 2010-4-30 08:17:34

怎么沉下去了!

stoneway 发表于 2010-4-30 13:41:22

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

salvage 发表于 2010-7-20 19:20:43

好贴,mark

esdart 发表于 2010-7-20 20:40:02

留着以后用

nimopur 发表于 2010-7-20 21:40:14

收了收了!!!
太好了!

morine1 发表于 2010-7-27 17:39:18

mark一下,太精彩了。

morine1 发表于 2010-7-27 17:47:19

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

baof 发表于 2010-8-16 09:35:11

make

skyline1982 发表于 2010-8-19 22:15:12

这帖子太牛了。。。

wayhe 发表于 2010-8-23 19:05:09

回复【13楼】Appcat 苹果猫
-----------------------------------------------------------------------

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

gpzdc986 发表于 2010-8-23 20:57:30

mark

xiao_L 发表于 2010-12-7 09:56:25

mark

wetlillto 发表于 2010-12-10 16:57:05

Mark too

n0831 发表于 2010-12-14 14:04:46

Mark

kazuyuki 发表于 2010-12-14 15:24:30

mark

xuejianhua1986 发表于 2010-12-14 20:49:16

mark

smartzou 发表于 2010-12-15 14:54:10

mark

cuikai12345 发表于 2010-12-31 21:12:47

mark

fay02 发表于 2010-12-31 21:37:25

mark

youngchun 发表于 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了,那么占空比怎么设置?

谢谢!

287355586 发表于 2011-7-6 08:12:47

mark

hexenzhou 发表于 2011-7-6 08:32:07

马克!

jlhgold 发表于 2011-7-6 11:24:53

mark

guywei 发表于 2011-7-18 17:40:47

cool!

668880 发表于 2011-9-9 16:23:25

你们用ATTINY13最小工耗做的是多少毫安!呀

our2008 发表于 2011-9-16 13:28:38

mark

roled 发表于 2011-9-22 11:24:08

回复【楼主位】Appcat苹果猫
-----------------------------------------------------------------------

楼主,谢谢,学习了

roled 发表于 2011-10-19 16:26:00

楼主,学习了

raozhong 发表于 2011-11-25 13:18:44

回复【楼主位】Appcat 苹果猫
-----------------------------------------------------------------------
学习了,不知楼主做的结果如何?关注ING

gordon85 发表于 2012-2-25 14:30:10

zq6220 发表于 2012-10-24 22:37:58

感谢分享!

liulingang_1205 发表于 2014-8-1 10:24:26

Mark                              

nn5499 发表于 2018-1-28 20:08:51

哇,这个帖子太牛了。

LiLi-Long 发表于 2018-7-17 20:04:52

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

电路很棒现在很多太阳能路灯控制器使用这种电路
页: [1]
查看完整版本: 用ATTINY13做的大功率LED头灯调光驱动电路(仅设计,还没做板验证)