很早之前就想要自制一个光立方,网上有很多4x4x4和8x8x8的例子,但是通过研究发现网上的作品都是需要74hc573锁存器的,比如说8x8x8的光立方,层控制需要一组8个引脚,列控制就需要8x8=64个引脚,单片机肯定没有那么多引脚,只能通过锁存器进行扩展引脚,64个引脚就需要8个74hc573进行连接,如果是自己焊接的话必然会出现大量杂乱的导线飞线,不美观,也失去了光立方的观赏性。同样,4x4x4的光立方正常连接需要16个或20个引脚,则需要20dip以上的单片机,同样小巧的4x4x4接个大号单片机也不太美观。 所以我就突发奇想,基于光立方的显示原理,设计了通过一个三极管将一个控制端分为两列控制,这样就能够通过两个轴向的端口控制阵列中所有的灯。四个灯的简易原理图如下图所示,P0.0,P0.1,P2.0,P2.1这4个引脚就可以控制4个灯的单独亮起,延伸为8x8的情况,使用64个NPN型三极管,就可以使64列led通过两组共16引脚控制,同时考虑到使用贴片型三极管体积会非常小,放置在灯座背面也不碍眼。
上图中,P1端接led的正极,如果为1(下面假设高电位5v为1,低电位0v为0),则此列led有可能会亮,如果为0,则led不可能会亮;P2端接NPN型三极管的E端,通过能使led亮的电流必然会经过三极管的C,E端口,如果E端为1,则led不可能会亮,如果为0,则led有可能会亮;P0端接NPN型三极管的B端,这里没有加限流电阻是因为单片机的标准IO口本身就有上拉阻值,这样无论IO为1为9都不会对IO口或者三极管造成损害,如果为1,则三极管导通,led有可能会亮,如果为0,三极管截止,led不可能会亮。
综上所述,将P1端为强上拉之后,想要使单个led亮起,则对应的引脚P1必须为1,P0为1,P2为0,其他情况都不会使led亮,这就保证了每个led对应一种端口状态,每个ed都能单独亮起,满足制作灯阵的条件。
单片机所使用的电源为5v,但led并没有连接限流电阻,这是基于下列四个方面的考虑:
1,单片机引脚最大输送电流为20ma,并不会对led造成损坏。
2,三极管导通时也会有最大电流的限制,Vce会进行分压。
3,光立方显示的时候led并不会一直通电,而是以扫描的方式轮流通电,对于应该亮起的led来说,导通的电流就相当于pwm波,占空比非常低,平均下来电压根本不会对led造成损坏。
4,设计此结构光立方就是为了减少外部元件,增加美观性,减小焊接难度而设计的,不加电阻更符合要求。
基于上述理论,我先焊接出了4x4x4的光立方进行测试,焊接完成写完扫描函数的时候,光立方成功的亮起,内心是喜悦的,至少证明了这种设计是可行的,最后有实拍图展示。
硬件的搭建之后就是软件的编写,通过不停的实验测试,进行程序优化,减少无用的代码,设计呼吸渐变的效果,最终编写出大约2分钟的动画效果。
在设计此光立方之前,最大的担心就是怕led的亮度不够高,因为单个led亮起的时间最大为1/64个扫描循环周期,8x8x8的光立方则为1/512的亮起时间,以为亮度会非常暗,所以也设想了一套补救方案,就是利用高压驱动,在led的正极再接入一个PNP三极管,E极接高压比如9v,12v,原先的强上拉直接控制变成三极管的B极控制,希望通过加高电压弥补导通占空比低的缺陷。看来实际5v就可以满足正常亮度。
由于led是高频通电亮起的,担心由于扫描函数过长造成人眼能识别的闪烁,考虑在每个led并联一个电容,同时也能避免瞬间给led接入高压造成led损坏,起到一个缓冲电压的作用,但实际效果并不理想,在尝试性并联一个电容后,led会变得比正常暗很多,没有起到效果,且得不偿失。造成这种现象的原因我推测是:假设led正常发光是2v电压,在不接电容的情况下,led有时导通在2v以上正常发光,有时不发光;而接上电容之后,开始发光时会对电容充电,导致两端电压较低,低于2v发比较暗的光,结束通电后希望led能继续延时发光一段时间,但实际电容所给的电压很快低于2v导致无法发光。总的来说,不接电容时所有能量都给了发光的led,接上电容后有相当一部分能量给了不能发光的led上。
还好现在光立方是正常的,但是在写程序的时候发现一个变量无法确定最优值,那就是扫描函数中单led亮起的时间,这个时间不能太大也不能太小,太小会导致单led的占空比更小,亮度变低,如果太大会使整个显示函数过长,同个led两次亮起时间间隔太大,也会造成亮度变低,同时会造成动画刷新过慢,出现频闪现象,。所以这个延时的取值对整个光立方显示效果至关重要。
所以我就对延时取值和亮度的关系做了一系列实验,对全部灯都亮,一半的灯亮,4个灯亮三种情况的不同延时对应的光强进行了实验并记录。实验数据和图表如下图:
由折线图可以看出大约设定在25个空函数时,光强达到最大值。这一个延时的值对扫描函数的总时长影响不大,所以可以采用作为延时这个参量。
全文完,下次会搭建出8x8x8的光立方进行测试(已经搭建成功 传送门),下面是本次光立方的展示图片。
[ 此帖被zhangzhi297在2016-11-08 16:23重新编辑 ]