多语言展示
当前在线:582今日阅读:86今日分享:14

如何制作一个炫酷的旋转LED

制作炫酷的旋转LED
工具/原料
1

STC15F2K60S2 单片机1片

2

MBI5026 16路恒流LED驱动芯片1片

3

DS1302 时钟芯片1片

4

DRV11873 无霍尔直流无刷电机(BLDC)驱动芯片1片

5

XKT-510 无线充电专用芯片1片

6

直径38cm 30uh 线圈一对 (用于无线供电发射和接收)

7

NE555 芯片一片

8

分体式红外对射开关1对(用于转速检测和位置检测)

9

电阻、电容、晶振等外围元件若干

方法/步骤
1

原理图设计(分为上下两部分,上部分为转动部分,下部分为无线供电和电机驱动部分)

2

将原理图部署为PCB线路图:

3

依据PCB图纸制成PCB线路板(某宝搜PCB打样,5*5cm一般30-40元 10片)

4

组装、焊接:

5

为单片机写入代码,同时使用VC++写一个windows程序,作为上位机,用于给单片机设定时间、文字等。

6

实际运行效果图:

注意事项
1

硬盘电机驱动。我用的是DRV11873,这个芯片也是好东东,几个简单的外围元件,就能驱动BLDC(三项无霍尔直流无刷电机),支持PWM输入调速,如果不给定PWM信号,默认以最高速转,本来我就是以最高速驱动的,但是发现转速太高的话,很难控制单片机中断,因为转一圈耗费的时间太短了,还要把每一圈分成几百个个点用来驱动LED,这样中断处理就必须更短,难。只好再加一个NE555做PWM信号输出,用电位器调整占空比,让电机转速降下来。

2

无线供电。因为电路板一直在转,所以供电就比较麻烦了。用现成的芯片——XKT-510。就是线圈自己绕起来比较麻烦,后来某宝定制了2个,加运费画了20大洋。

3

转速自适应。先说一下转速的检测,我用的是一对分体式红外线对射开关,加上拉电阻后直接接到单片机的外部中断0口,用来判断是否转了一圈,主要起到定位的作用。硬件搭建好之后,写的第一个版本的软件,是不带转速自适应的,完全靠延时,这样很不好,呵呵。转速一变,字的宽度就会变,搞不好还会乱,钟表显示起来就更不好了,没法准确的画60个刻度。网上搜了n久,只看到有个大神用自行车做的旋转LED,他把定时器弄的比较小,然后判断一圈中断了几次,然后除以要显示的位置个数,来定位,本来想借鉴他的方法,但不行,因为我虽然降低了硬盘的转速,但比他的自行车转速还是要高n多倍的,太小的定时器会增加CPU负荷,CPU拿出更多的时间处理中断,就有更少的时间做正事,会降低效率。后来灵光一现,用的自创的方法:用两个定时器(我用的定时器0和定时器3,因为定时1用到串口了,定时器2也用了,一会儿再讲),定时器3只是用来计时,不用来来产生中断,设置定时器3的初值为0,12T模式,这样24M下大概32毫秒左右才会中断吧,关键是,在红外开关检测到转了一圈的中断处理中,将他再次置0,事实上,转一圈根本不需要32毫秒那么久,也就是说,这个定时器的中断原则上永远不会被触发。为什么这么做??嘻嘻,其实这里用了一个比较巧妙的办法,看不懂的话,需要复习一下定时器初值的计算:在INT0处理中(红外开关),先暂停定时器3,然后看看它的TH和TL的值是多少,也就是转一整圈跑过的计数,用0xffff减去这个数,就是跑一圈需要的时间计数,再除以你要显示的列数,得到数再用0xffff减,就是你定时0应该设定的初值,这样,转一圈,定时器0刚好会中断n次,n就是你要的次数。

4

钟表显示。其实这个显示是没有难度的,用上面的方法,让定时器0转一圈刚好中断60次,然后画出刻度、时针、秒针、分针,难点在于DS1302速度很慢,每次中断都去读时间的话,会来不及。采取了这样的方法,由于文字显示和钟表显示交替进行,所以只在交替时读取一次当前时间,然后用定时2,每隔20毫秒中断一下,这样中断50次后去增加秒针计数,判断秒是否大于59,随即根据情况增加分针和时针计时,这样既保证了时间的准确性(每次状态切换都会重新从DS1302读数,相当于校正时间),又确保了高转速下的时钟的显示。

6

动态平衡。就是确保让整个电路板转起来后平衡,一边重一边轻的话,震动会很厉害。其实我觉得这个才是最难的,因为它不像软件上的困难,可以通过一些技术技巧来解决,这个解决起来很麻烦。我采用了下面的办法:用细绳将电路板吊起来,两次后可以大概确定重心,然后自己估摸着增加配重,不是很准确,但也没有别的好办法。最后整个电路板转起来还是有点震动,嫌麻烦懒得再去细调了。

推荐信息