读图模式
睡神耗子 2014-07-29 12:57
光立方,估计很多人都见过了。
这本来是我发到某论坛上的帖子,旨在讲授一些经验,不过鄙人一直是常期潜水者,所以没人捧场,很是乏味。我再从果壳上发一下吧。有爱好的童鞋可以借鉴一下,写得挺乱,有不懂的可以留言。
额。忘了贴资料,抱歉。。。。。(请点击)
**************************分隔符*******************************
光立方,我在三年前从一个国外网站上就见到了。那时候刚开始玩电子,就心血一热,开始做光立方。费了一个星期的功夫才把主题的LED显示体搭建完成了,而且当时的焊接功底实在不敢恭维。(后面有图为证) 后来由于毕业的缘故,没有继续做下去,光立方被我当做装饰品放再书桌上。
今年上半年的时候,看到了很多人的作品,想起我那个光立方。回忆起当年的时光,决定将它继续做完。 很顺利,不管是硬件搭建还是软件编程。
**************************分隔符*******************************
我看了很多教程,相比来说,我最开始看的老外的比较好。他们用的元件并不是我们常用的元件,但是上面的理论讲解很重要。
如果真的想做好,必须懂得原理,而不是一味的仿造。不知道有哪些朋友已经做过很好的教程,我把我的想法分享出来,供大家参考借鉴。
*************************分隔符******************************** 概要
首先,我的作品并没有完成多么炫的效果,我只是搭建了一个设计的平台。尤其是比较容易修改的显示程序,要炫的效果,完全可以大家自己设计!!!!
第二,硬件上,可能与平时大家所见的不同(受多个设计方案的影响,没选好一个方案),但我会介绍如何元件替代(包含单片机、行列驱动芯片的替换)。
第三,内容写得比较抽象,希望大家仔细看,并且多看别人作品,多看程序代码,先思考了再问,不是说不想回答,只是不想回答没有思考过的问题。
第四,设计属于睡神耗子自己所想的,所以和你以前见过的光立方可以不一样的架构。一位网友给我看了另一种电路,确实是设计精妙。不过本设计对于设计程序,以及理解是比较容易的。可以作为初级的教程来看。
第五,设计使用了大量网络的上图片资源。由于自己在制作的时候没有留下照片,而且说实话,做得挺难看的!所以不多配自己的图了。 作品展示
设计的挺难看,各位大侠就别计较了,各位菜鸟就知道有这么几个部分组成就可以了。 点击访问视频
这是我仿造的杜洋的光立方显示效果(懒,未仿造全部,部分效果也不好) 以上只是说明我能造出来啊!!! 这是源文件(修正电路图的错误): http://pan.baidu.com/s/1i3zdD9j 下面是重头戏。
第一.光立方主体焊接
这个没有什么好法子,大家慢慢,仔细的焊接吧。考验焊接功夫和耐性的时刻到了。 给几个别人的图做参考。
先找个木板钻8*8=64个孔,(什么,你没有木板和电钻。那找个替换,真不行,上纸箱板)。每个孔的间距一样,具体多长,量一下LED的负极(短的管脚)。比那个长度小大概3~5mm就差不多了(具体值,大家量一量就行了)。 然后弯管脚。为了确保光立方是个正方体,一般情况,都是弯短脚(负极)。
注意方向任意,但是所有的LED是一个方向,具体方向,就看个人喜好了。
8个LED焊接在一块,一共焊接8条,然后将这8条的LED灯链的一端(短引脚没焊接)焊接在一块。
为了结实,再在中间及另一端焊接个铜线。注意,要保证铜线是焊接在负极(短管脚上) 这样,一层就完成了。
总结下,焊接的要领是将一层的负极接到一块。(当然你非要正极接一块,也是可以的)。
如此反复,总共焊接8层,然后,将相同的长管脚焊接在一起。(或者,你一层层向上盖楼也行~!~)。 你会发现每一层都会空余一个管脚未焊接,我就把这个管脚当做层的控制端用了。
如上图所示,会发现每一层相同位置的LED的正极(长管脚,红色所指的)连接在一起,相信聪明的童鞋,知道如何控制光立方的某一个灯亮了:
在正极上加正电压,在层的控制端上加负电压即可了。 第二:显示原理
为了下面层驱动与阵列驱动的讲解,想说明一下光立方的显示原理。 玩过LED点阵或多位数码管的童鞋,更容易理解——对,动态扫描原理。
其实不同层的灯是不可能同是亮的。那么人怎么感觉亮呢,只要LED等闪得足够快,就可以了。人眼的视觉暂留大概24帧/秒(这也是为什么电影大多是这个值,请查看你电影文件的属性)。那么只要你能够将LED灯闪到这个速度就没问题了。对于电路来书,μs(微妙)级是很容易实现的,所以,这不是问题。
光立方其实就相当于64*8的LED点阵。你理论上只能让一层(64)的灯可以随意亮灭(一直保持,并且不相互干扰)。 当一定的速度,先点亮第一层,然后再点亮第二层……一直循环,就达到你要的效果了。 写得抽象,不懂得童鞋,去看看LED点阵,或者多位数码管的显示原理就可以。 第三:层驱动电路
层选,是要求这一层的控制端加负电压(因为这一层的负极都接一块了)。那么我们很容易的想用三极管的开关作用就可以了。对我就直接使用的三极管。
****有热心网友发现了我的错误,8550是PNP型三极管,而我写文章,画电路都写的NPN,我查看了下,是我自己的疏忽,真实设计是PNP,程序也是按照PNP写的。在此,十分感谢给予批评帮助的人。*******
MCU是单片机控制,一般要串个电阻,用来限流,这里讲原理,就不画了(具体去看附件中的原理图)。Layer_x指某一层的控制端。加了一个上拉电阻,保证平时状态下控制端处在高电压(那样就不会亮灯了。) 当MCU输出高时,PNP三极管就导通了,Layerer_x就连接到地上,那么层选就打开了。 PNP型三极管有很多,比如我用的就是S8550,相信许多童鞋是用过的。
有些童鞋说,他们见别人用的不是三极管,而是ULN2803。我以前是没用过的,查了查:是八路NPN达林顿连接晶体管,也就是说其实里面就相当于集成了8个三极管,用起来更方便。所以,大家手头有什么就用什么呗。 啥,ULN2803怎么用?看下图,我懒得画封装图了,用一个插座代替了,管脚顺序可没有改,别照抄啊!!!!
我的设计里,用了16个S8550,2个一组。原因是为了防止一个三极管承受不了这么大的电流(64个LED灯的电流)。 第四.阵列驱动
这是我起的名字,也就是一层64个灯的驱动。
64个灯,驱动那是相当麻烦了,用单片机直接驱动是不现实的,管脚不够,电流太大。那么我们考虑拓展单片机的IO口。
用很多芯片是可以用的:例如HC164, HC377,HC573,HC574,HC595等等。只要有8位输出就可以。大家用的比较多的应该是HC573,最初的时候我照着葫芦画瓢,非要买HC574。它俩没有什么大区别,只是锁存的信号不一样罢了。
借用一个574的图(573一样的接法,CLK改为HC573的LE即可)。有八片HC574,每一个HC574可以输出8位,这样就可以同时输出64位了,对应64个灯。
HC138是为了节省管脚的,我图省事,就直接用单片机的管脚接每个片子。
数据线是共用的,一次给一个片子写数据,轮流写,将所有的片子写完。那么阵列驱动数据就完成了。 当使能输出(许多片子有OE端),层选打开时,就可以点亮特定的灯了。
附HC164和HC595的驱动图。这两个片子都是串行转并行了,使用的单片机管脚更少一些!!
注意:所有输出端要加限流电阻,至于加多大,要看你的LED灯了。一般情况下的直插LED灯,红色的加的电阻大一些,绿色的小一些,实际情况自己测试就可以了。
一定要先计算一下你需要多大的电流,因为这关系到你选用多大电流的电源。
当然,一般情况下,最多亮64个LED(瞬间只能亮64个)。一般的充电器类都能达到这个电流水平(什么,你要用电池!别扯了***)。 第五.控制板
可以选用的单片机是很多的。
考虑管脚够用,至少也要十几个IO口吧。用个DIP40,LQFP32妥妥的。
51.AVR.PIC……随便哪个都可以,方便、易学、好买上选择,用STC的51就行了。我用了库存的STC12C5A60S2,相信这个单片机很多人都在用。
当然你用STC89C系列或者STC15系列也是可以的,他们区别在定时上,我使用的是定时器,你可以用STC给的工具来修改定时时间。
因篇幅问题不能全部显示,请点此查看更多更全内容