经常夜里用电脑,或写作、或上网,要是开着没有调光功能的工作台灯,40W的白炽灯似乎有点明亮了,总会感觉有点防碍了思考,但是关了灯又会感觉周围暗暗的,连键盘都没法看清。于是自己DIY了一个PWM调光的小夜灯。这个电路实现长按开关电路、具有8级调光、低功耗等功能,可以用作夜晚的弱光照明、设备的背光、小功率调光手电等等。对于年少的小朋友,夜里看书、玩电脑最好还是打开台灯或房间的吸顶灯,足够明亮的光线才不会影响视力的发育。

          先来了解一下PWM英文全称为Pulse Width Modulation即脉冲宽度调制,是一种利用数字输出对模拟电路进行控制的一种十分有效的技术,非常广泛应用到功率控制、电机调速、通信等各种电子技术培领域中。PWM简单来说就是把模拟信号进行量化,使其变为数字编码方便调控。PWM信号只有“高”和“低”,也可以看作“1”和“0”这2个二进制数字,在直流供电中的任何时刻只表示“通”与“断”。

           图1是2种占空比信号,分别是占空比为10%和90%的PWM输出。假设信号供电电源为10V,方波以一定频率进行10%占空比输出时,信号10%的时间是通的,90%的时间是断的,输出信号则对应一个电压幅值为1V的模拟信号,如果点空比为100%时,方波则变为高电平,则对应为10V的模拟信号。可能你还是没搞明白是PWM信号到底指什么,那可以看看图2的例子。

           图2是一个电灯的控制电路,也是一个可以用PWM控制的电路,如果电池电压为12V,把开关按下50毫秒灯泡就亮50毫秒,这段时间内灯泡得到的电压12V,下一个50毫秒断开开关这时灯泡的电压为0V,1秒内进行10次这样开关,灯泡亮度看起来就像用6V电压供电一样,而6V正是12V的50%,这种情况就是调制频率为10Hz,占空比为50%的PWM。
          同样的占空比,调制频率越低,负载效率就越低,可以设想一下,10Hz就是灯泡不断亮50毫秒灭50毫秒,这样人眼看起来是有点闪烁的,如果在一个周期内把12V供电灯泡点亮.5秒然后再断开5秒,这样就是0.1Hz,这时的占空比依然是50%,但是所得到的效果就更差了,光亮度看起来就5秒全亮,然后紧接着5秒全暗,根本就不可能相当于12V的50%(6V)供电的效果了。要想取得像调光灯一样的效果,就需要把调制频率提高,通断循环周期与负载对开关状态变化的响应时间相比必须足够短。大多数负载的PWM应用的调制频率一般是1K-200KHz。
了解了PWM的基本原理,我们就可以用硬件电路去实现了。笔者的这个制作里选用了ATMEL公司的Attiny13单片机生成PWM信号,它是一个只有8引脚的低功耗AVR单片机,除了基本的单片机功能外,还有一个具有8位PWM功能的定时器,能在PB0(OC0A)、PB1(OC0B)两引脚输出2路独立的PWM信号。本制作的电路图如图3。


           制作中用到2颗“食人鱼”白光LED(eagle-eye led或piranha LED),其外形像食人鱼,所以得其名,所封装的支架为4引脚,提高了散热性能,还具有比较大的发光角度,一般为120度。笔者选用的是5mm的白光“食人鱼”,标称导通电压约为3.6V,电流30mA。制作中直接使用电脑USB取电,电压为5V,PWM信号从PB0输出,通过R3、R4使Q1基极得到电流从而对Q1发射极电流进行控制,总电流控制在最大60毫安左右。R1、R2则起到限流作用。SW1为功能按键。ATtiny13使用内部9.6MHzRC振荡电路不对系统时钟进行8分频,使其工作在9.6MHz的频率中,使用内部复位电路,使电路最简化。

           笔者使用小型雕刻机制作好PCB后,焊接电路,效果如图5、图6。

           笔者用包装小型继电器的透明塑料包装条用来安装电路,切割成合适的大小,钻好安装孔,安装电路进入塑料条。使用USB接口线取得电源。使用USBASP工具将固件程序pwmled.hex烧录进入芯片中。电路焊接无误后,无需调试,上电后PWM输出12.5%的占空比,点亮LED总电流约为10mA,每短按一次按键时,占空比递增12.5%,直到100%输出电流约为60mA,再短按时又回到12.5%占空比,一共有8个亮度档位。长按3秒则可以关闭和点亮LED。图7是安装完成后的发光效果,为了使光线柔和笔者在塑料条上帖了一层美纹纸,光线柔和不剌眼。


            本文中前两制作中使用的PCB是使用小型雕刻机在单面玻纤覆铜板上雕刻而成,因板材及雕刻刀具限制,最小线间隔在0.3MM左右,为了方便业余制作画板时尽量保留覆铜面,这样可以减少雕刻时间,同时没有钻过孔,也没有刷阻焊漆,使制作最简化。虽然比不上成品印刷电路板的精度和品质,但是胜在方便快捷,在制作一些业余制作中简单的电路时还是十分好使的。
            程序编写使用到C语言,由于Attiny13的PWM是由硬件方式产生,只需要更改OCR0A寄存器的值,就可以更改PWM的占空比,所以在程序编写上显得极为简单,只需要编写一个按键处理程序就可以了,然后把按键的次数对应转换为定时器PWM设定值写入到OCR0A寄存器中。OCR0A为8位寄存器,也就是说它可以把一个方波周期分成256份,每增加一个值则占空比增加约为0.4%。

附件:LED夜灯程序源码下载.rar