辉光管时钟
一、缘起
为什么要做这个光管时钟,因为有一天我看到其他学生的电脑桌面是这个光管时钟。她说她非常喜欢它,非常喜欢它。她一直想做一个。我说是的,非常好。过了一段时间,我想给女朋友做这件事,只是为了好玩,也可以学习各种技术,真的是一箭三雕,所以我开始了一段漫长而曲折的设计和之旅。
二、参考资料
网上有很多关于这个辉光管时钟的信息。这里有几个项目或网站我参考过,觉得很有用: 辉光管之家 物联网项目设计 (七) 基于RT-thread的MQTT协议物联网辉光钟 blanboom/NixieClock zzx0226/IN14_NIXIEClock
三、项目概述
功能简介:飞思卡尔MC9S08DZ以60为主控芯片,驱动六根光管分别显示时分秒或年月日wifi正时模块可以连接到互联网。目前项目已全部完成,这里给大家开源:https://github.com/XiaobaoAlex/NixieClock_WiFi_github
四、实现思路
-
板的最小系统是MC9S08DZ60为核心;
-
辉光管需要170V高压驱动,使用MAX1771升压芯片做BOOST升压电路;
-
单片机IO口不足,6个光管的60个管脚不能同时控制。HV57708PG 4路串行输入 64路并行输出芯片作为光管驱动芯片;
-
使用DS3231实时钟芯片计时;
-
使用ATK-ESP-01模块连接wifi接入互联网,使用sntp服务正时;
-
电源部分为12V输入,由boost电路将12V转换为170V7805转换为5V作为板子主电源,ds3231和wifi模块供电均为3.3v,需要电源转换芯片AMS1117-3.3.转换电源;
-
单片机电源电压和工作电压为5V,ds3231和wifi电平转换模块和单片机通信,3.3V和5V电平转换由TXS0104EDR完成电平转换芯片;这个芯片在我的另一个博客中有详细的介绍。.3V单片机与5V设备通信解决方案(串口,IIC、SPI)
-
显示部分由6个国产南昌牌顶显光管和4个作为间隔点的霓虹管组成。
五、具体实现
1、MC9S08DZ60最小系统
这个MC9S08DZ60是我们实验室使用的芯片,之前做过,软硬件都做过,得心应手。但是到了最后一版,我用了12V7805转5作为电源V给单片机供电后,最小系统的晶体振动不振动,也不进入程序,所以我又买了一波元件来更换最小系统上的电容器和晶体振动。过了一段时间,我灵机一动,查了一下7805能不能直接给单片机供电。答案当然是肯定的,但是输入输出电容就讲究了。说是要加百uF级钽电容滤除低频干扰,nF高频干扰的电容过滤水平。我是按照数据手册画的,输出部分加了100nF等我换上10个电容uF最小系统电容后正常。这个电容问题让我焊接了几个最小系统,重新画了最小系统的晶振电路(重新打板),真的很磨人。
2、max1771升压芯片
这个芯片和升压电路真的有很多值得说的。 网上有很多关于这个电路的原理,这里只说我在设计和生产过程中的经验。 首先是组件的选择。我们不仅要考虑每个组件的正确值,还要跟上它们的功率。换句话说,它们必须足够大,具有很大的耐压值和功率。这些大的自然大。我起初就是电感和电容的封装搞错了只能重新打板,当然这只是众多重新打板次数中的一次,E1的耐压值为50V,就是比12V两倍要大,这样才安全。L1是功率电感,体积上升时功率会很大。我选择了那种12*黑色立方体电感。E储能电容为11,输出电压为170V,因此,耐压值为2500V.我选择插针电解电容器。还有就是MOS管Q1.耐压值也大于170V,起初,我在数据手册上推荐它,但我没有注意到它是低压的mos管道,电路不工作。D肖特基二极管必须选择快速开关。注意我的这些部件是不是特别大,哈哈哈。 二是升压部分。这个BOOST根据我的理解,升压电路主要依靠开关电源R8和R根据数据手册中给出的公式,理论上电压可以上升到任何高度,但请注意,电压不能上升到无限大,换句话说,我们应该注意输入电压的大小。我们需要170V高压光管能正常工作,那么我们应该用多少电压作为输入呢?实践证明,5V不,我一开始用5V输入电压,考虑使用type-c接口为板供电,空载时电路输出良好,稳定170V,到目前为止,我认为我的升压电路已经完成了,但当6根管道同时驱动时,电压直线下降加上6根管道,升压电路的输出仅为122-125V,六个光管明亮,但是缺笔画现象严重,有的管子甚至不亮,根本不能用。在中间,我认为我选择的电感有问题研究这个升压电路,最后换了那个5.5mm-12V圆形接口成功(第二次打板)。在中间,我认为我选择的电感有问题研究这个升压电路,最后换了那个5.5mm-12V圆形接口成功(第二次打板)。虽然网上大部分都是12V作为输入,他们没有说5V不,啊啊啊。
3、ATK-ESP-01模块
TX、RX需要与单片机叉接。它的原理图很好まよい,这俩个上拉电阻和二极管给我整懵了,搞得我以为D1那条线是TX,D2那条线是RX.当然,最后我明白了这个原理图的深刻含义,他是对的。(当TXD输出1,截至二极管,TXD_TTL也是1;当TXD输出0,二极管导通,TXD_TTL和TXD电平等,也是0。)最后,我没有要求这两个直接连接到电平转换芯片的上拉电阻和二极管。它的内部已经被拉了。 直接用AT需要注意的是,其默认波特率为115200,需要将波特率改为9600,以便以后操作;此外,调试该模块必须使用串口调试器和逻辑分析仪,首先使用串口调试器和串口调试助手发送指令,看看是否可以连接无线网络,测试模块的功能是否正常,然后用单片机收发指令时,逻辑分析仪需要查看所有信息的发送和接收情况,这样你就可以知道问题出在哪里。 连接路由后需要设置时区,注意发送连接wifi指令后4-5左右s模块可以真正连接路由,此时可以设置时区,因此在发送连接wifi命令后应设置较长的延迟,否则返回时间为1970年00:000秒。 接收时间字符串后如何取出时间信息?主要用memcpy和strstr解决函数,用memcpy函数可以从固定区域的字符串中取出,得到年、月、日、分秒、星期。对于月和星期,它们由字母表示,必须使用strstr函数判别,如果找到相应的字符串,可以确定是月份和星期。具体代码请查看我的开源项目链接,不拿出来说啦。
4、DS3231实时钟芯片芯片
DS3231高精度I2C具有集成温度补偿晶体振荡器的实时钟器件。该装置包含电池输入端,断开主电源时仍能保持精确计时。集成晶体振荡器可以提高装置的长期精度。使用芯片封装SOP-8包装,几乎不需要外部设备的支持,使用IIC协议和主控芯片通信。为实现主电路调电仍能完成行时功能,使用3.7V CR1220 纽扣电池和电池座DS3231MZ芯片提供备用电源,使芯片在外部电源中断时仍能离开。 这个软件驱动部分主要是看网上的驱动代码,遇到问题就啃数据手册。
5、HV5708高压驱动芯片
这个芯片很有意思。一开始没看数据手册就抄了网上的驱动代码。结果发现驱动不了,只好自己数。手册。
如上图所示,这里的POL是控制标准模式输出或反向模式输出的,驱动的辉光管亮灭的方法,是在所有数字阳极一个170V的高压,在某个数字阴极给68V,两端电压只有100多伏,电压不够该数字灭,反之给0V使数字亮。这种高电压灭低电压亮,就是反向输出模式。VPP上给68V电压,输出的高电压由此而来,它是靠稳压二极管把170V降压得来的.LE上有个取反符号,在写时序时要特别注意。 HV57708是一款可以承受高电压的串行输入转并行输出的驱动芯片,可完成4路输入转64路输出的功能。SR1、SR2、SR3、SR4都是16位寄存器,每个寄存器往右边控制16个管脚的高低压输出,他们加起来也就可以同时控制64个高低压输出。前提是要牺牲一定时间来写满这4个16位寄存器,那么如何写呢,我们注意看图,首先这四个寄存器与管脚不是一一对应的,如图SR1对应的管脚就是1、5、9、13…,这样设计主要是方便我们写入。要输入一个64位的值,这样的数据类型太大了,所以我们将其分开来放在俩个32位数据里,命名为datapart1、datapart2,首先按照Di4、Di3、Di2、Di1的顺序,将后一个32位的数据datapart2的后四位,写入这4个16位寄存器SR4、SR3、SR2、SR1的第一位值(从上面的Di4、Di3、Di2、Di1写,用DIR可以控制写入方向),也就是写好了64、63、62、61这个四个端口,看!这样是不是就正好对上了,我要输入数据的最后四位就对上了这个芯片的最后四位。之后依此类推,再次写入15次,这64位寄存器就全写好了,缺点就是牺牲了时间,但是这个芯片的时序非常快,大家不用担心,驱动秒级别的时钟根本没问题。当时看懂这个芯片还挺开心的,觉得非常有意思。真,不懂就得看数据手册,网上的信息很混乱,但是数据手册永远不会骗你。
6、辉光管与电路板总体布局
六个辉光管分别显示时分秒,中间由氖管作为分隔符隔开。板子采用沉金工艺,上面的图案作装饰用 ,别忘了这是做给女朋友的礼物,哈哈哈。为了找这个花边的图案我花了好长时间,处理这个花边的时候因为画图自动的二值化效果太差了,我还用了matlab进行二值化,真的是走心的。
7、壳体
亚克力板1.9毫米无色高透明材质,CAD绘制好找淘宝加工,4块板11块钱,挺好不贵。
9、软件架构
六、总结与心得体会
这个项目最开始的电路原理图、电路板和程序搞的特别快,毕竟网上有很多资料可以参考,电路照着画再稍微根据自己的实际情况修改一下,程序拿别人的驱动再结合自己单片机修改一下,最初的电路板和程序搞的比较快,但是这时候电路板和程序都不知道好不好使,电路板只是自己认为没有问题,程序只是编译通过不报错。接下来就是漫长曲折的调试环节,中间遇到了各种问题,踩了很多坑,可以说该踩的坑都踩了。回想起来,前期绘制了3维模型并作了渲染,打板回来后就一直进行软硬件调试,遇到问题的时候请教了很多朋友,老师;各种论坛看各种帖子也请教了不少博主;下载了很多别人的项目来参考;使用各种调试工具来辅助调试;改了很多最初的设计,在嘉立创打了4次样板。可以说这是一个站在前人的肩膀上,不断思考不断尝试不断修正的过程,最终完成了这个项目。 好了,完结撒花。