用ATTINY13做的大功率LED头灯调光驱动电路(仅设计,还没做板验证)
最近和玩户外的一个朋友交流,感觉手电品种很多,而且贵的很,一般都会使用锂电池,但是专业山友都不愿意用锂电池,而且手电照明时间短,成本太高。结合现在淘宝上卖的十几块钱的降压恒流驱动板,我自己用ATTINY13设计了一个支持多级或者无级调光,支持暴闪甚至可以自动发送SOS莫尔斯电码灯语信号的驱动板。下面是电路图,还没有做验证,很多元件参数都没有确定。等样品到了我自己先做感光板测试吧。
欢迎拍砖。。。。
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427556.JPG
(原文件名:tmp1.JPG) 补充一下,这个电路输入电压是5.5V~36V直流,可以由铅酸蓄电池进行供电,输出最大为1.2A,由Rsense决定电流,工作频率2MHz,效率超过90%,mos管厂家推荐使用AP2306.可以做电池低电压提示和保护,就是怕AVR的ADC基准电压不是很准,还要一个个的校正。
下面是恒流芯片TAC5241的资料点击此处下载 ourdev_427562.pdf(文件大小:255K) (原文件名:TAC5241.pdf) 程序正在写,写完一起公布上来,就等明天厂家发来的样片了。 学习 mark mark 支持 要死机啊,这个控制电路我搞了两年了,始终不能解决T13的死锁问题,在低电压,电源电压剧烈波动的情况下,T13会出现连外中断都无法唤醒的死睡状态,导致功率管烧毁,用汇编也无法解决问题,工作电压超过3V没有问题。
又看了下楼主的电路,如果用专用驱动芯片,T13仅做控制的话,这个问题不用担心。
户外电源,可充电锂电池仍然是最佳选择 另,按钮太多了,一个就可以实现全部功能 死机需要在电路里面有硬件保护的 小小的手电,体积有限,硬件能省则省,而且现在手电行业已经被搞烂了,不得不考虑成本问题。 大功率LED驱动,我也是在做的。。。。
首先用LED专用驱动IC,这个比较稳定。就算单片机死机,LED的电流保持稳定,也不会烧场效应管。
做好单片机的供电滤波,保持供电电压稳定。(高频干扰很大,特别是尖锋,电压波动大)
按键只用一个就可以了,长按开关机。。短按转换功能。。 做来自己玩,还可以。。做产品不用想了。。。 今天已经实现了无级调光了,不过发现人眼对光强的感受和PWM的占空比的变化不是线性的,在光强较弱时人眼对光强变化比较敏感,在比较亮时就感觉不明显了,所以输入电流在时间轴上呈线性关系时,人眼的感觉不是线性的。无级调光其实没必要那么细的分辨率,几个固定档位就可以了。
下面要实现暴闪和SOS电码的发送,还有按键就接了一个出来,这些状态都能实现。比较头疼的就是ADC电压采样,做低电压告警,干扰大,本身基准源又不准,还没做,不知道效果如何。
不知道专业的LED照明调光使用什么MCU,我就会AVR,所以就T13了。这两天看到网上做的用QX7135驱动,几个并联,然后用搭接不同的焊盘方式实现电流的大小,居然也叫5档调光,难道山友还要随身带个电烙铁吗。
一般的户外确实使用锂电池就可以,但是高海拔的山友对锂电池的观点可不一样,他们中的人为了购买到镍镉电池特地收购二手对讲机呢,现在新的对讲机都是使用镍氢或者锂电池。铅酸电池虽然比较重,但还是他们使用最广泛的电源。
pcb板已经画出来了,双面板,圆形,直径18mm,可以安装到灯头板的背后
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427855.JPG
(原文件名:LED.JPG) 大功率LED驱动,用tiny13做过小到恒流几十毫安的产品,大至恒流近十安的产品都有,除电源稳压IC外没用别的IC,倒没见过死机哦 楼上介绍下经验吧,没敢直接拿T13和MOS管来做,就是怕一个工作频率不够效率不行,第二T13死机很危险,所以加了个驱动芯片,1块多一片,就是PCB太挤了。请问楼上用的什么稳压IC? 人眼对光强的感受和LED调光方式有关
脉宽调光是调节LED开及关的时间来调节亮度,这种方式在LED调到暗时直视LED仍觉很刺眼,因此时LED开通时间虽然很短但电流还是100%的
另一种方法是调节LED的恒流电流,这种方式在LED调到暗时直视LED就比较柔和不刺眼,因此时LED的电流是恒定的小电流 工作频率通常在60K左右,效率一般在80~90%这样子,正常情况下没见过死机,不过BOD(20uA大了点)是一定要开的,地线不乱走.
稳压IC, 电源6V以下不用,10V以下用HT7550-1,20V以下用TPS71550,30V以下用78L05/78M05,30V以上用三极管+稳压二极管 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%都不到啊 。 用AMC7135来恒流,那只能是哄人。。。那么发热量大,效率低得可怜。电流随着电压变化漂移大。。充其量就是一个会变化的电阻。
电筒控制方案就好是使用LED专用驱动IC + 单片机。。
电池能用3.8V-4.2V的最好(单片机供电更好处理),采用降压型恒流IC
由于体积有限,可以用LED驱动部份 恒流IC(SOT-23)+ 场效应管(SOT-23) + 二极管(SS14)+ 电感
单片机 使用PIC10F204(SOT-23)软件摸拟PWM 控制恒流IC + 一个按键(长按开关机,短按功能转换)
其实最主要的单片机的供电,单片机在低于工作电压的时候经常出现想不到的问题。应该要保证其最低工作电压,还用就是尖锋干扰。。。 搬个板凳,我是来学习的。从来没有做过LED驱动,也是一时兴趣,厂商给了些资料和芯片,就动手了。
基本思路也是LED专用驱动IC+MOS+单片机,由于是用两个单体锂电池串联供电,或者是蓄电池供电,所以选了5241,降压恒流芯片,
工作频率2MHz,从厂商资料曲线来看,驱动单颗3W LED时的效率接近95%。5241有个好处,就是内置一颗LDO,能输出5V 2mA,正好可以供单片机工作,否则单片机电源自己实现比较痛苦。
现在用T13做,貌似最高PWM频率是40K,再高上不去了。
估计更加难做的是升压恒流的,就是单颗锂电池或者1AA,2AA供电的驱动,看来网上也说效率不容易高。 PIC10F204(SOT-23)封装很小啊,貌似AVR能找到的最小的就是T13了,画PCB痛苦啊! 用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%已经很不错了。
期待楼主早日做出成品,到时测试一下数据。不过降压电路效率可以做的很高 【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 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)的电路就显得浪费了。不得已而为之啊。 20楼】 Appcat 我就是苹果猫 能实际测下5241效率能到多少吗?看介绍很不错,SOT23封装我喜欢小面积很合用,迟些也弄些试试。T13 PWM频率可以高于40K的,设置为Fast PWM top=OCR0A,频率=mcu主频/OCR0A的值。升压恒流的也不难做,1AA的有专用IC
********************************************************
???这个有点不解。Fast PWM 可以设置TOP吗?能否指点一下啊! 贴图,单节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) 这个电路低压工作很巧妙,仔细研究下 【25楼】 jj3055 T13 Fast PWM 是可以改变PWM TOP的,请看
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427921.JPG
(原文件名:pwm.JPG) 这个电路好象对LED的冲击会很大 呵呵,有了楼上的电路图,程序也就好写了。没想到随便往论坛里扔块板砖,居然引来这金玉满堂!让我也膜拜一下:万能的坛啊~~~
Fast PWM top=OCR0A这种模式是可以的,把TCCR0A和TCCR0B的WGM2,WGM1,WGM0位全部设定为1就可以了。我的40K其实就是Fast PWM top=0xFF。 MARK!有时间弄片试试! 单锂同步整流电路,业余不计成本方案
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427927.jpg
(原文件名:4.jpg) 贴程序啦,还是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;
}
};
} 哈哈,平时没有仔细研读手册,才知道快速PWM的TOP也是可以设置的,呵呵
这些电路非常有实际的参考价值shinehjx不愧为手电高手! 楼上过奖了惭愧啊-_-! 刚才试试测效率,只有一块表,所以根本测不准,大概估了一下,80%左右吧。8V输入,360mA,输出那边是3.4V电压,电流应该是不到700mA。这个电路的问题是上电时给输入电容充电会使LED亮一下,此时T13和5241应该还没进入正常工作状态呢。 哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行? 成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!
明天我可以试试。 哪怕只有一个开关,仍会给改装成品电筒带来困难的。能否只靠上电/断电来切换工作状态?用T13自带的EEPROM来记录上电次数和上电时间,再做判断切换状态是否可行?
***********************************************
这个早就有了,现在的商品手电都是这个原理,PIC的话另加一块24C02 成品电筒不要开关吗?只要有一个轻触开关就可以了。如果是通断式的开关,不用记录上电次数,只要记录上次断电状态就可以,再次上电时切换一下状态并且保存就OK。这个思路好啊。谢谢呃,这里牛人真多!
明天我可以试试。
********************************************
哈哈,我设计的手电都是只有一个轻触按纽的,部分已经经过了一年的SLEEP,还可以正常唤醒工作,只是非常非常偶尔出现的工作时死睡挺烦恼的,尽管这种几率非常非常小。
另外我的死机大都出现在电池受到剧烈冲击,与簧片脱离接触,短时的断电引起的 我当然知道早就有了,我也是玩过18650滴,在这里只是提个建议和方向。
另外我的死机大都出现在电池受到剧烈冲击,与簧片脱离接触,短时的断电引起的
-------------------------------------------------------------------
T13供电处并一钽电容,再和电池端用肖特基格开应该够时间做掉电处理了。
另只记录上次断电状态是无法做到可靠的状态转换的,使用中一个意外的碰撞就可能让手电发生状态转换了。
一个可靠的成品是要加上上电时间判断的,必须在上电后规定的时间(很短零点几秒)内断电,且至少连续记录到两次这种特殊的上断电才发生状态转换。 受教了,这样的话断电重新上电后要过一个时间,再来修改状态,应该就可以抵抗电池冲击掉电。 请问
CREE LED 这是一个系列的产品吧 如果想diy 26楼的那个图
请问 该选那个型号呢 谢谢
手头上有个现成的手电筒 不知道 能否改造。
这个手电是led的 9个白光 led 并联
3节7号电池 #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做记录的,只有一个电源开关/ 请教shinehjx:
你那个电路可以升压到多少伏,电感的大小和电容的大小怎么确定,谢谢! mark 马克2 mark 顶 学习下,有时间自己也DIY一个 ATTINY13这个片子多少钱?
我用STCSOP-16封装有点大,+P沟道管,电流800MA
手电筒成本很重要,特别是工厂这块的成本! 电压在到3.2V 就锁住,掉电!
3.2V 以上工作,静态电流0.1UA jj3055是做这行的吗???
可以有别的方式请教请教呗 手电驱动ldch是牛人啊! LED照明产品的发热较难处理,特别是3W/颗的设计 LED照明产品的发热较难处理,特别是3W/颗的设计
--------------------------
设计比较好的手电,LED都是安装在铝基板上的,基板和铝合金外壳之间有个大面积接触的散热环,可以用导热硅脂填充,主要热量从电筒的外壳走。 万能的坛啊~~~扭~~ 好贴,具有很高的参考价值 还有谁在做?我最近有个这样的项目,已投产!还想再改进一下,探讨探讨! ATTINY13可做到1.8V,最小封装是SOP-8。但是目前价格是杯具。 我们做的,整个杯罩散热,不需要铝基板,效果非常好!18650电池,2200MAH能照10个小时左右! 怎么沉下去了! 有个国产芯片 cn5911很适合,CN5911是1A的恒流驱动电路,它的最主要优点是外部触发能自动生成强光、弱光、闪烁、关断共4个状态,改变了需要单片机控制状态的历史,一个电路就可搞定,节省成本。 好贴,mark 留着以后用 收了收了!!!
太好了! mark一下,太精彩了。 楼上的高手,为什么不用带A/D的单片机,直接用单片机pwm来控制led做恒流源的,这样不是更加的节省成本。
不过好像外界干扰导致led的闪烁比较难解决。
期待高手分析,有没有可能,硬件加软件的处理能不能达到单片机+led的低成本模式。 make 这帖子太牛了。。。 回复【13楼】Appcat 苹果猫
-----------------------------------------------------------------------
我原来工作的公司专业做LED头灯产品和方案,用台湾松翰的单片机(1元多,带12位AD和PWM),一颗IC搞定充、放电、控制,电压基准采用TL431,用一个IO口给TL431供电,同时可以关闭这个基准源。多种控制方案(轻触开关、扭转开关),电量不足自动降低亮度,闪灯提示。 mark mark Mark too Mark mark mark mark mark mark 回复【30楼】Appcat 苹果猫
呵呵,有了楼上的电路图,程序也就好写了。没想到随便往论坛里扔块板砖,居然引来这金玉满堂!让我也膜拜一下:万能的坛啊~~~
fast pwm top=ocr0a这种模式是可以的,把tccr0a和tccr0b的wgm2,wgm1,wgm0位全部设定为1就可以了。我的40k其实就是fast pwm top=0xff。
-----------------------------------------------------------------------
有一点我还没确定,OCR0A用来设置TOP了,那么占空比怎么设置?
谢谢! mark 马克! mark cool! 你们用ATTINY13最小工耗做的是多少毫安!呀 mark 回复【楼主位】Appcat苹果猫
-----------------------------------------------------------------------
楼主,谢谢,学习了 楼主,学习了 回复【楼主位】Appcat 苹果猫
-----------------------------------------------------------------------
学习了,不知楼主做的结果如何?关注ING 顶 感谢分享! Mark 哇,这个帖子太牛了。 shinehjx 发表于 2009-3-25 17:12
贴图,单节3V CR123供电驱动CREE LED,公司的产品程序就不方便贴了
功能:1, 长按长亮,离手熄灭。
...
电路很棒现在很多太阳能路灯控制器使用这种电路
页:
[1]