文章目录[隐藏]
辉光管时钟
一、缘起
为什么会做这个辉光管时钟呢,是因为有一天看到其他同学的电脑桌面是这个辉光管时钟,她说她很喜欢这个,非常喜欢,一直想做一个,我说可以啊,挺好挺好。过了一段时间我就想做这个送给女朋友,正好玩一玩,还能学习各种技术,真是一箭三雕,于是就开始了漫长曲折的设计制作之旅。
二、参考资料
网上关于这个辉光管时钟的资料很多,这里列举我参考过并觉得非常有用的几个项目或网站:
辉光管之家
物联网项目设计 (七) 基于RT-thread的MQTT协议物联网辉光钟
blanboom/NixieClock
zzx0226/IN14_NIXIEClock
三、项目概述
功能简述:以飞思卡尔MC9S08DZ60为主控芯片,驱动六个辉光管分别显示时分秒或者年月日,带有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转换为170V供辉光管使用,用7805转换为5V作为板子主电源,ds3231和wifi模块的供电均为3.3v,需要电源转换芯片AMS1117-3.3做电源转换;
-
单片机供电电压和工作电压为5V,ds3231和wifi模块与单片机通信要做电平转换,3.3V和5V的电平转换由TXS0104EDR电平转换芯片完成;这个芯片在我另一篇博客里有详细介绍。3.3V单片机与5V器件通信解决方案(串口、IIC、SPI)
-
显示部分由6个国产南昌牌顶显辉光管加4个作为间隔点的氖管组成。
五、具体实现
1、MC9S08DZ60最小系统
这个MC9S08DZ60是我们实验室用的芯片,之前也拿它做过毕设,软硬件都搞过,所以得心应手。但是到最后一版的时候,就是我用12V作为供电,用7805转5V给单片机供电之后,最小系统的晶振就是不起振,下不进程序,搞得我又去重新购置了一波元器件来更换最小系统上的电容和晶振,试了还不行。过了一段时间之后,我灵机一动,查了一下7805可不可直接给单片机供电,答案当然是可以,但是输入输出电容那部分就有讲究了。说是要加百uF级别的钽电容滤除低频干扰,nF级别的电容滤去高频干扰。我这按照数据手册上来画的,输出部分就加了100nF的电容,等我换上一个10uF的电容之后,最小系统就正常了。这个电容问题搞得我焊了好几个最小系统,还重新画了最小系统的晶振电路(重新打板),真磨人。
2、max1771升压芯片
关于这个芯片与升压电路真的有很多值得说的。
这个电路的原理网上说的非常多,这里只说我设计与制作过程中的经验。
第一是元器件的选型,不能只想着各个元件的值对了就行,他们的功率也得跟上才行,换句话说他们都得足够大,耐压值大,功率大。这些大了体积自然就大了。我起初就是电感和电容的封装搞错了只能重新打板,当然这只是众多重新打板次数中的一次,E1的耐压值为50V,就是比12V的俩倍还要大,这样才安全。L1为功率电感,体积上去了功率就大,我选的是那种12*12的黑色立方体电感。E11为储能电容,输出电压为170V,所以耐压值得选250V.我选的是插针电解电容。还有就是MOS管Q1的耐压值也得大,要超过170V,我起初用的是数据手册上推荐的,但是我没注意到它是低压的mos管,结果电路不工作。D1得选快速开关的肖特基二极管。注意看的我这几个元件是不是都特别大,哈哈哈。
第二是升压部分。这个BOOST升压电路按我的理解就是开关电源,主要靠R8和R14来控制升压比,按数据手册上给的公式来看,理论上电压升到任何高度都可以,但是注意,电压肯定是不能升高到无穷大的,换句话说,我们要注意输入电压的大小。我们需要一个170V的高压辉光管才能正常工作,那我们应该用多大的电压作为输入呢。实践证明,5V是不行的,我起初是用5V做的输入电压,想着用type-c接口为板子供电,这样电路在空载的时候输出很不错,稳稳的170V,到这我就以为我的升压电路做好了,可是到最后同时驱动6个管子的时候,电压直线下降,加上6个管子之后升压电路输出只有122-125V,六个辉光管亮是亮了,但是缺笔画现象严重,有的管子甚至不亮,根本不能用。中间还以为我选的电感有问题,疯狂研究这个升压电路,最后换了那种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-5s模块才能真正连接路由,这个时候才能设置时区,所以在发送连接wifi命令后要设置比较长的延时,不然返回的时间就是1970年00时00分00秒。
那么接收时间字符串之后如何把时间信息取出。主要用memcpy和strstr函数解决,用memcpy函数将固定区域的字符串取出就可以得到年月日时分秒星期,对于月份和星期,他们是字母表示的,得用strstr函数判别,如果找到对应字符串就能确定是月份和星期。具体代码请查看我的开源项目链接,不拿出来说啦。
4、DS3231实时时钟芯片
DS3231是一款高精度I2C实时时钟器件,具有集成的温度补偿晶体振荡器。该器件包含电池输入端,断开主电源时仍可保持精确计时。集成的晶体振荡器可提高器件的长期精确度。芯片封装使用SOP-8封装,且几乎不需要外部器件支持,使用IIC协议和主控芯片通信。为了达到主要电路调电依旧可以完成走时的功能,使用3.7V CR1220 纽扣电池和电池座为DS3231MZ芯片提供备用电源,使芯片在外部供电中断时依旧可以走时。
这个软件驱动部分主要就是看网上的驱动代码,遇到问题就啃数据手册。
5、HV57708高压驱动芯片
这个芯片很有意思,起初我是没有看数据手册就是抄网上的驱动代码,结果发现驱动不了,就只得自己啃数据手册。
如上图所示,这里的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次样板。可以说这是一个站在前人的肩膀上,不断思考不断尝试不断修正的过程,最终完成了这个项目。
好了,完结撒花。
版权声明:本文为CSDN博主「xiaobaoAlex」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaobaoAlex/article/details/121341320
暂无评论