4085
需用时 08:10
看极光,不用去北极
DIYer:ledartist
制作时间:一星期
制作难度:★★★★★
GEEK指数:★★★★☆

视频中这个闪烁的美丽光轮就是“极光”——我设计制作的二极管艺术品。对发光二极管和电子技术的痴迷是我完成这个作品的主要动力。极光的电路中有162个RGB发光二极管,每圈的颜色变换都是由一个微型控制器用一种改进过的脉宽调制方式控制。


/gkimage/g3/aa/rn/g3aarn.png

虽然我采用的控制器本身只有一个脉宽调制模块,但是极光能同时展示27种独立的亮度。以下的内容将为你展示极光的整个设计制作过程。


1   概念

/gkimage/s7/8m/mp/s78mmp.png

RGB发光二极管(也被叫做全彩发光二极管),可以发出各种颜色的光,涵盖的色彩范围一点儿也不比彩虹少。这个效果听起来很复杂,但原理其实很简单:把红绿蓝三原色的三个小发光二极管装在一起,通过改变三原色的亮度比例,混合出各种颜色。

大部分亮度控制电路都用到一种叫做脉宽调制的技术来控制亮度。目前许多微型控制器都内嵌了一个或更多脉宽调制模块,但通常少于5个。当需要控制9个不同亮度的发光二极管时,我就得用多个控制器或者外置电路,如果这9个都是全彩发光二极管,则需要多达27个脉宽调制器。

于是我在试验过程中以不同的配置,做了各种类型的尝试,试图减少脉宽调制控制器的使用量。 除此之外,我还试图让亮度在变化时更加平滑。现在大部分PIC微型控制器提供的都是8~10位的脉宽调制分辨率,在这样的分辨率下,二极管灯光在比较暗时的光亮变化不是渐变的,会有阶梯感。因为人眼对光强属于非线性响应,所以需要对亮度变化曲线做gamma修正来给人以亮度均匀变化的视觉体验。总之,根据我的计算,要实现平滑的视觉效果需要至少12位的脉宽调制分辨率。

如果只是按此原理做个简单的电路,使每个发光二极管都由12位以上的独立脉宽调制控制器控制,我就需要用到某种特制的发光二极管控制IC。

不过这样的特制IC的解决方案既不微型也不便宜,对我没有吸引力,最终我决定把脉冲调制和多工驱动结合起来:把每个脉宽调制的循环拆成多个脉冲,再分别驱动三原色二极管,于是三原色二极管就一个脉冲调制循环里被分别点亮数次(大概有点像脉冲宽度调制和脉冲增量调制的混合吧),而整个全彩二极管的平均亮度输出与这段时间内的脉冲次数成正比。这样做不仅能通过以不同频率点亮三原色来减少发光二极管的可见闪烁,还能通过结合多个脉宽调制的脉冲增加脉冲调制分辨率。

不过减少可见闪烁后的发光二极管闪烁频率还是很高的,让极光看上去的刷新率比123Hz高的多。

看一下时序表,我取了7个发光二极管的R/G/B总线信号来说明我的概念。正如你所见,R/G/B通道间隔着轮流点亮,这些脉冲控制着发光二极管确切的点亮时段。当R/G/B总线中任意一个处在高电平时,LED就会点亮。总的点亮时段和颜色则取决于R/G/B总线的高电平组合。

比如说,图中:

LED1只点亮在1级(最低的亮度)红
LED2会点亮到2级绿
LED3会亮到3级蓝
LED4会点亮到3级黄(红+绿)
LED5会点亮到3级紫(红+蓝)
LED6会点亮到3级青色(绿+蓝)
LED7会点亮到255级(最高的亮度)白
  • 从1到255的时间大概为8.1毫秒,所以时续表看起来似乎是由暗到明点亮的,但是其实肉眼看只是有亮度差异而已。

希望这足够解释极光的LED控制原理。

相关资料

PWM的维基词条

PDM的维基词条


2   电路

/gkimage/in/2a/77/in2a77.png

查看完整电路图

极光有18个全彩二极管在9个回路里。总共有162个发光二极管。每圈都是分隔开来控制的。所有有9个LED电路需要控制。

我采用 PIC24F08KA101 作为控制器,这个芯片是16位的,已经足够控制电路,所以并不需要占地方的外部设备来达到运算峰值32Mhz

电路本身很简单,微型控制器连着一个摇杆式的开关(其中有5个触点开关),用3个MOSFET(场效应管)和12个BJT(双极性管)控制着通过LED的电流。3.3V的线性稳压器给PIC供电,LED回路则用5V的电源驱动。

这个电路其实就像9*3的矩阵变换电路,但是3列被全彩LED的3原色替代。所以三路三原色是多工驱动的,分别点亮而不是一起亮。通常我不喜欢做多工驱动的东西,但有时必须对简单性和节省空间两方面妥协自己的喜好嘛。

因为这个微型控制器只有一个脉冲宽度调制模块,我需要把这个脉宽信号扩展到三原色发光二极管。我用一个“与门”解决这个问题。R-BUS只在R-DRV为低电平且PWM为高电平时为高电平,G-BUS只在G-DRV为低电平且PWM为高电平时为高电平等等。这个简单环节的电路工作很正常,节省了节省了成本更节省了PCB板上宝贵的空间。我的高边开关用到了MOSFET,因为我找到的BJT无法承受162个发光二极管并联的电流(高达3A!)。MOSFET( DMP3098L )承受电流的能力值得推荐。

低边开关电路就很简单了,用BJT的共射极组态。

发现电路中有许多1KOhm的电阻接在输出端上了么?也许你会不明白它们的作用。这些电阻能帮助晶体管在没有点亮LED时也能快速关断。因为晶体管工作时间是纳秒级的,所以启动和关断的时间很重要。总的来说,这些电阻会让脉宽调制运行的更快,能减少肉眼可见的闪烁。


3   PCB

/gkimage/5d/o9/uu/5do9uu.png

我想把极光做的越小越好,所以设计PCB板费了很大功夫,实际上,我除了反复调整PCB设计还反复调整了电路设计,基本把元件数量也控制在最少了。


/gkimage/5z/rp/hn/5zrphn.png

我在 DorkbotPDX 订做了这个PCB板,他们有一个我很喜欢的交互式PCB设计程序(有点像BatchPCB)。做好的PCB板很好看,美国制造,阻焊漆是暗紫色的。


4   元件

/gkimage/z6/zb/q2/z6zbq2.png

元件列表,或者后面的BOM文件中也有元件列表:

162x 150Ohm (0603)
9x 220 Ohm (0603)
13x 1k Ohm (0603)
3x 470 Ohm (0603)
1x 10k Ohm (0603)
2x 10uF (0603)
1x 1uF (0603)
1x AP7333-33
3x DMP3098L
12x MMBT2222A
1x PIC24F08KA101
1x 4向摇杆开关(Panasonic EVQQ7)
162x 5mm全彩LED
1x 5V直流电源或4x镍氢电池和电池盒

部分元件来源:

LED是直接从中国快递过来的,花了几天时间,不过元件质量很好,别的元件在Digi-Key有卖(北京的朋友应该都知道,这些中发都有卖)。你可以用其他元件替代晶体管:比如BJT可以用多种其他元件替代,但是找到替代MOSFET的元件应该不容易。

无论如何,如果你有更经济的元件搭配,请告诉我。

BOM文件下载 (1kb)


5   工具和材料

/gkimage/wr/28/1l/wr281l.png
● 放大镜
● 焊膏(装在注射器里备用)
● 镊子
● 电烤箱
● 红外/激光温度计
● 电烙铁
● 线剪
○ 焊锡(去买最好的药芯焊丝吧)
○ PIC编程器(支持PIC24F08KA,并且可以通过标准6脚ICSP连接器进行ICP烧录)和电脑

6   准备组装

由于元件数量特别多、分布特别密集、布局特别罕见,组装过程需要特别精湛的焊接技巧和一颗特别淡定的心。

由于多数元件都是贴片的,我用的是“涂焊膏、放元件、烤!”的贴片焊接技巧,如果你以前做过贴片电路,应该明白我在说什么了。当然,焊接贴片电路有许多办法,你可以选择你擅长的。我这里只演示一下我的方法。

/gkimage/9y/2z/f3/9y2zf3.png

准备工作当然是数清并准备好所有的贴片元件。我建议预先把贴片元件按位置整理好,这样你把焊膏涂在PCB上后就可以马上找到元件并且安上去。


7   涂焊膏

/gkimage/3e/zr/yj/3ezryj.png

这一步我本想用钢网模板做的,但是很不幸,便宜的钢网模板不支持相互之间呈非直角摆放的元件。所以我只能手工把焊膏用一只注射器涂在需要焊膏的位置。相信我,这是个极为纠结的过程,看了视频就知道。


8   安置元件

/gkimage/5m/c2/2g/5mc22g.png

让人神经麻木的布置焊膏完成了后,你就可以开始把贴片元件都摆放到适当的位置去了,当然这也不是什么轻松活,同样你看了视频就知道了……

由于元件很多,我们需要个计划,可以按照我准备的 元件位置指南 进行。其实为了美观,我没有在PCB上标明元件位置,所以你也只能按我的指南来做。按照先中央再四周的顺序进行摆放。


/gkimage/gh/tp/7c/ghtp7c.png

同时你还要小心身上的静电击穿元件,如果有防静电桌垫最好了,没有的话像我一样把铝箔铺在PCB板下面进行工作吧。特别要注意那个四向摇杆开关的方向,这个开关方向如果错了你就没法给PIC编程,然后就得用热风枪把它吹掉重焊了(嗯,其实我就是因为犯了这个错误才买了一套热风枪工具……)。还有也别把PIC的方向弄错了。

PS:做以上这些事情之前不要摄入大量咖啡因,因为咖啡因能让你手抖从而让这些事加倍困难。

元件位置指南 (1 MB)文件下载


9   烤!

接下来我就要把PCB放进电烤箱了,正是厨房的那种,而且很老很破旧,事前我甚至祈祷希望它能足够的热。这时有一个红外/激光温度计几乎是必须的,除非你已经熟练到能用心去感受烤箱温度。

/gkimage/90/7a/5l/907a5l.png
  • 放在一个托盘上的PCB

小心的把PCB板放在烤箱里,不要碰乱了贴片元件的位置,我是放在烤箱的中间,因为我觉得那里温度比较稳定。打开开关,把烤箱温度开到最高,然后监测PCB附近的温度,等到温度逼近160摄氏度时就调低烤箱温度,反复调节烤箱温度使得这个温度保持1到2分钟,然后继续调高温度到200摄氏度以上。这时你就会看到焊膏都融化了,也许还会冒一点烟。


/gkimage/qn/n2/sz/qnn2sz.png
  • 焊膏太多的地方过会就得用吸锡带整理啦。

等到所有的焊膏都融化就可以把烤箱关掉了。有些人把PCB放在烤箱里冷却,但是我沉不住气戴着隔热手套就把PCB拿出来了,无论如何不要冷却的过快(比如放在一个冷的表面上)就可以了。

在PCB冷却到能用手摸时,就该进行检查工作了,戴上放大镜观察所有的细节,元件、焊点什么的。除非你特别棒,(或者我还不够棒)不然肯定会发现一些要修复的地方。比如SSOP(PIC24F)的引脚很接近,要仔细检查有没有桥接的情况,我总是要用吸锡带来修复这个问题。


10   电器检查和编程

/gkimage/y3/o6/eg/y3o6eg.png

在继续进行之前,先用万用表测试一下,确保电源和ICP相关的部分没有短路的元件。


/gkimage/w6/ts/yw/w6tsyw.png

接下来打开电脑,启动Microchip IDE,用提供的HEX文件给PCB板上的PIC微型控制器编程。


/gkimage/hq/v7/69/hqv769.png

这时你需要一个5V的电源供应,这里我用一个两脚的插针连接电源(注意电源的极性),以及一个5脚的插针连接编程器。我的编程器是ICD2,你的编程器如果也是这种老式的,记得把高电压编程模式的电压设置低于9V。


/gkimage/kl/tv/42/kltv42.png

另外说明书建议在MCLR针脚使用高速并联稳压器来稳定电压,这有点夸张了,我把一个8.2V的稳压二极管连接在MCLR和GND之间也正常完成了编程。

没什么意外的话,你就能看到IDE报编程成功了,如果有问题就还得回头逐步慢慢检查。

HEX文件下载 (14 KB)


11   测试LED

鉴于任何零件都有次品率,并且焊上PCB后再发现这点的感觉真是糟透了,我在焊接前会把全部162个LED都检查一遍。

/gkimage/w1/s6/sw/w1s6sw.png
  • 1.4MHz下工作的PIC16F627

每个全彩LED需要测试的其实是三个发光二极管,而市面上没有卖这样的测试器,所以我自己做了一个(制作过程就改天另写了,有兴趣的同学请继续关注)。很简单,用到了一个8位的微型控制器(PIC16F627),5分钟就能装好。这个测试器能测试7种不同的RGB混合颜色,所以你能轻易发现有缺陷(我自己确实检出了几个不亮或者光亮暗淡的)的全彩二极管。你每次可以同时测试3个LED,它们相互之间的对比也能让你更容易发现异常。

把次品从PCB上取下来很麻烦的,所以这样的检测完全不是浪费时间,磨刀不误砍柴工嘛。


12   焊接LED

/gkimage/5z/86/14/5z8614.png
  • 这个小饭盒放PCB正合适。

/gkimage/6o/u5/5q/6ou55q.png

/gkimage/wl/h4/45/wlh445.png

/gkimage/kn/6o/0m/kn6o0m.png

/gkimage/0i/kb/35/0ikb35.png
  • 临时电源

擦擦汗鼓励自己一下吧,因为马上就要大功告成了。再保险起见最后做个测试,把9个发光二极管插进孔里(注意极性啊),按两条竖线径向安好,接通电源。看下视频你会明白我在说什么,如果你看到颜色变化的话,你就真的马上要大功告成了。

如果没问题那么先冷静一下,把9个发光二极管再拿出来,因为你得如图中那样把过长的引脚剪掉再把它们装上PCB。

从中间的一圈孔开始装,装好一圈翻转过来焊接完毕后打开电源测试一下,如果全部发光二极管都亮的话再装下一圈。直到所有LED都装好为止


13   供电

/gkimage/0k/kf/5u/0kkf5u.png
  • Molex插针,DC 5V, 4A

PCB板上有一个2脚的插针用来接电源。供电的就是普通的5V电源,至少要有1A的输出电流。可以像我这样直接把直流输出口换成插口,好插在针脚上,也可以直接用焊锡把电源和PCB上的针脚焊在一起。


/gkimage/3c/p4/gb/3cp4gb.png

还可以用4节镍氢电池来为极光供电。4节镍氢电池串联的电压刚好5V左右,适用各种要求5V电压的电路,给极光用的话也可以持续供电几个小时。


14   操作极光

/gkimage/nb/yl/od/nbylod.png

希望你和我一样喜欢这种洗脑感强烈的色彩变幻,电路中还设计了五个可以调节的变量:上下拨动摇杆可以改变色彩变幻模式,左右拨动可以改变变幻速度,按下摇杆可以暂停/继续色彩变幻,长按两秒就可以把它关掉了。

鉴于编程空间还非常富裕,整个操作系统的功能完全可以继续扩展。编程器5个脚中的两个都可用来输入模拟信号,所以也许还可以增加些基于模拟信号输入的互动环节,比如声控什么的,欢迎黑客/创客们继续帮我完善设计啊。


资料来源

The End

发布于2011-07-14, 本文版权属于果壳网(guokr.com),禁止转载。如有需要,请联系果壳

举报这篇文章

Camel

机械工程硕士生,DIYer

pic