辉光管时钟

辉光管时钟

一、缘起

        为什么会做这个辉光管时钟呢,是因为有一天看到其他同学的电脑桌面是这个辉光管时钟,她说她很喜欢这个,非常喜欢,一直想做一个,我说可以啊,挺好挺好。过了一段时间我就想做这个送给女朋友,正好玩一玩,还能学习各种技术,真是一箭三雕,于是就开始了漫长曲折的设计制作之旅。

二、参考资料

        网上关于这个辉光管时钟的资料很多,这里列举我参考过并觉得非常有用的几个项目或网站:
        辉光管之家
        物联网项目设计 (七) 基于RT-thread的MQTT协议物联网辉光钟
        blanboom/NixieClock
        zzx0226/IN14_NIXIEClock

三、项目概述

        功能简述:以飞思卡尔MC9S08DZ60为主控芯片,驱动六个辉光管分别显示时分秒或者年月日,带有wifi模块可以连接互联网正时。目前项目已全部完成,这里给大家开源:https://github.com/XiaobaoAlex/NixieClock_WiFi_github

Alt
Alt

Alt

四、实现思路

  1. 板子的最小系统以MC9S08DZ60为核心;

  2. 辉光管需要170V高压驱动,用MAX1771升压芯片做BOOST升压电路;

  3. 单片机IO口不足,不能同时控制6个辉光管的60个管脚,用HV57708PG 4路串行输入 64路并行输出芯片做辉光管驱动芯片;

  4. 使用DS3231实时时钟芯片计时;

  5. 使用ATK-ESP-01模块连接wifi接入互联网,利用sntp服务正时;

  6. 电源部分为12V输入,由boost电路将12V转换为170V供辉光管使用,用7805转换为5V作为板子主电源,ds3231和wifi模块的供电均为3.3v,需要电源转换芯片AMS1117-3.3做电源转换;

  7. 单片机供电电压和工作电压为5V,ds3231和wifi模块与单片机通信要做电平转换,3.3V和5V的电平转换由TXS0104EDR电平转换芯片完成;这个芯片在我另一篇博客里有详细介绍。3.3V单片机与5V器件通信解决方案(串口、IIC、SPI)

  8. 显示部分由6个国产南昌牌顶显辉光管加4个作为间隔点的氖管组成。

五、具体实现

1、MC9S08DZ60最小系统

        这个MC9S08DZ60是我们实验室用的芯片,之前也拿它做过毕设,软硬件都搞过,所以得心应手。但是到最后一版的时候,就是我用12V作为供电,用7805转5V给单片机供电之后,最小系统的晶振就是不起振,下不进程序,搞得我又去重新购置了一波元器件来更换最小系统上的电容和晶振,试了还不行。过了一段时间之后,我灵机一动,查了一下7805可不可直接给单片机供电,答案当然是可以,但是输入输出电容那部分就有讲究了。说是要加百uF级别的钽电容滤除低频干扰,nF级别的电容滤去高频干扰。我这按照数据手册上来画的,输出部分就加了100nF的电容,等我换上一个10uF的电容之后,最小系统就正常了。这个电容问题搞得我焊了好几个最小系统,还重新画了最小系统的晶振电路(重新打板),真磨人。

2、max1771升压芯片

       关于这个芯片与升压电路真的有很多值得说的。
Alt
       这个电路的原理网上说的非常多,这里只说我设计与制作过程中的经验。
       第一是元器件的选型,不能只想着各个元件的值对了就行,他们的功率也得跟上才行,换句话说他们都得足够大,耐压值大,功率大。这些大了体积自然就大了。我起初就是电感和电容的封装搞错了只能重新打板,当然这只是众多重新打板次数中的一次,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次样板。可以说这是一个站在前人的肩膀上,不断思考不断尝试不断修正的过程,最终完成了这个项目。
       好了,完结撒花。

  • 17
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
本设计IN-14 辉光钟硬件方面详细介绍如下: *使用IN-14辉光管,四个氖灯显示时间冒号; *每个辉光管下面各安装一个全彩 LED; *单片机采用STM32F103VET6; *时钟芯片采用DS3231; *预留了18B20温度传感器焊点(程序中没有涉及); *辉光管驱动芯片采用HV57708PG; *全彩LED使用WS2812B,一个IO口可控制多路LED; 更新了更新了 更新PCB部分,改为单5V供电,焊接完成烧录程序无需外接器件即可使用; 新PCB工程为集成了24C02,待机按键,板载蓝牙及升压模块; 升压方案由UC3845变为LM3488方案,5V升压至170V(需调试依然建议购买模块); 删除触摸芯片; 删除软排线接口; 程序我自己都不忍直视,随缘更新; ̶*̶E̶E̶P̶R̶O̶M̶采̶用̶2̶4̶C̶0̶2̶(̶没̶有̶集̶成̶在̶p̶c̶b̶上̶需̶要̶通̶过̶排̶线̶外̶接̶)̶;̶ ̶*̶蓝̶牙̶在̶P̶C̶B̶上̶预̶留̶了̶焊̶接̶口̶,̶淘̶宝̶常̶用̶的̶H̶C̶-̶0̶5̶直̶接̶能̶焊̶上̶;̶ ̶*̶P̶C̶B̶面̶板̶正̶面̶没̶有̶任̶何̶器̶件̶,̶输̶入̶三̶条̶线̶G̶N̶D̶,̶+̶5̶V̶,̶+̶1̶7̶0̶V̶;̶ ̶*̶没̶有̶在̶P̶C̶B̶板̶上̶加̶升̶压̶模̶块̶,̶因̶为̶自̶己̶做̶辉̶光̶钟̶升̶压̶比̶较̶难̶找̶件̶且̶不̶容̶易̶成̶功̶,̶大̶部̶分̶是̶买̶现̶成̶的̶升̶压̶板̶;̶ ̶(̶当̶然̶我̶在̶后̶面̶文̶件̶中̶有̶单̶独̶U̶C̶3̶8̶4̶5̶升̶压̶单̶面̶板̶p̶c̶b̶工̶程̶,̶不̶想̶买̶成̶品̶的̶可̶以̶自̶己̶腐̶蚀̶,̶5̶5̶5̶和̶3̶4̶0̶6̶3̶升̶压̶方̶案̶网̶上̶也̶有̶很̶多̶)̶ ̶*̶预̶留̶了̶软̶排̶线̶接̶口̶可̶以̶进̶行̶I̶/̶O̶扩̶展̶操̶作̶;̶ ̶*̶预̶留̶了̶触̶摸̶芯̶片̶X̶W̶0̶5̶A̶焊̶点̶及̶触̶摸̶焊̶盘̶,̶可̶扩̶展̶进̶行̶触̶摸̶按̶键̶功̶能̶(̶程̶序̶中̶没̶有̶涉̶及̶)̶;̶ ̶*̶抱̶歉̶,̶由̶于̶新̶工̶程̶打̶不̶开̶了̶上̶传̶是̶之̶前̶更̶老̶一̶版̶的̶版̶本̶。̶老̶版̶本̶没̶有̶走̶线̶改̶动̶,̶但̶在̶排̶线̶或̶者̶蓝̶牙̶接̶口̶的̶名̶称̶上̶不̶一̶致̶。̶ 基于STM32的IN-14 辉光钟软件方面设计: *手机APP、遥控器、按键三种控制方式; *程序利用24c02保存数据; ̶(̶2̶4̶c̶0̶2̶、̶按̶键̶、̶红̶外̶需̶软̶排̶线̶引̶出̶外̶扩̶)̶ ̶*̶没̶有̶2̶4̶c̶0̶2̶程̶序̶无̶法̶正̶常̶运̶行̶,̶等̶有̶时̶间̶我̶集̶成̶在̶板̶子̶上̶,̶抱̶歉̶抱̶歉̶抱̶歉̶;̶ 基于STM32的IN-14 辉光钟功能介绍方面: *支持定时开关机 *提供8种字体切换效果;(其实都差不多= - =) *辉光管下全彩灯提供普通模式、呼吸模式、渐变模式; *普通模式下用户可以通过手机改变三基色进行调色; *呼吸及渐变模式下用户可以设置呼吸或渐变的颜色,支持速度、亮度调节及暂停; *时间、日期、开机时间、关机时间显示(背部按钮切换); *每10分钟启动辉光管防止阴极中毒程序,延长辉光管使用寿命 *更新:好早之前的工程了,程序写的又长又乱还用拼音定义对象,而且pcb工程有好多引脚名贪方便有标注错误。现在不忍直视,有空更新工程,现在仅供参考希望谅解。 本设计创意来源如下: 严老师:https://www.nixieclock.org/微博:https://weibo.com/nixieclock blanboom :https://blanboom.org/微博:https://weibo.com/blanboom 有任何问题都可以和我讨论,邮箱:xuzongyang1996@outlook.com PCB正面: PCB反面: 实物图展示: 手机APP(安卓) 附件内容包括: *项目设计原理图和PCB源文件,用AD软件打开; *单片机程序,用KEIL打开; *手机APP(安卓); *参考资料;
【舸轮综合船舶工作室】出品 欢迎关注b站up主:舸轮综合船舶制造 查看更多资源及教程 不保证没错误,本工作室不为使用此套开源资料造成的任何后果负责! IN14辉光钟 PCB文件及程序源码说明 版本V1.1 主要是对我奇怪的电路设计风格做一个解释(╯‵□′)╯︵┻━┻ 除了右边有一个8550外,PCB中几乎所有的三极管型号均为13001 7805最好加一个微型的散热器,实测发热较大 NE555只是拿来闪烁冒号的,不是升压的,需另外配升压板 NE555右上方那个R 500k阻值具体是多少需要试,这个阻值决定了冒号的闪烁频率 闪烁的冒号(氖泡)从板子左下角的两个2pin分别接入,切记不可并联后接入 PowerRealy是一个继电器,是用来控制升压模块通断的,封装是典型黄色的HK信号继电器 继电器左边的两个接口,标有- S +的是红外热释探头的接入口,实现人来自动开,可在-和S之间再并联一个自锁开关可实现手动开关,另一个是-IN+是电源输入,参考电压12v,电流约0.2A 单片机左边的2pin接口是升压模块电源接口 调时按钮是KEY1 KEY2 R4 R2 R7 R1是四个8路排阻,排阻有小白点的一端对准焊盘正方形的一端 板子下方中间的+HV-是升压模块输出接入点 其左边的Out+分别接4个辉光管的阳极 为了节省板子(偷懒)没有采用常规的74HC573锁存器一组一组扫描着输出,而是采用每个引脚专门控制一位,但引脚刚好又差了一个,无奈就加了一个573,把变化最小的第一位数字和调时按钮接在上面 左上角的2032BAT是接纽扣电池的,能够实现掉电走时,但我不知为何没成功 现在程序还不是很完善,有一些bug,已知的有:在整点时小时位会延时1分钟,比如从20:59到21:00时会先跳到20:00然后一分钟后才会变为21:01,调时时有时候小时那边会一直在十内循环,不管他直接多按几轮一般能出来,调分时有时会只有个位动,好像这时候只能重启了。 焊接时一定要注意三极管引脚之间别短路了! 焊接时一定要注意三极管引脚之间别短路了! 焊接时一定要注意三极管引脚之间别短路了! 即使看着没短路也要用万用表打一下以防万一,Protel自带的三极管封装为什么引脚焊盘之间距离如此感人我也不知道 四组Out-(注意最右边那三个是一组,最左边从Q25和Q26中间引脚引出的两个引脚也是一组)各自接什么参照网上的51单片机引脚定义再对照下表:(左边第一位代表从左往右第几个辉光管,第二位表示此辉光管对应引脚的数字,右边表示单片机的对应引脚) 11 P22 12 P23 20 P34 21 P06 22 P07 23 P21 24 P20 25 P17 26 P30 27 P31 28 P32 29 P33 30 P03 31 P04 32 P02 33 P01 34 P05 35 P00 40 P16 41 P35 42 P36 43 P37 44 P10 45 P11 46 P12 47 P13 48 P14 49 P15
这里提供一个基于 Python 和 Pygame 的辉光时钟效果的钟表小程序。需要先安装 Pygame 库。 ```python import pygame import time # 定义数字的字典 DIGITS = { 0: ['###', '# #', '# #', '# #', '###'], 1: [' #', ' #', ' #', ' #', ' #'], 2: ['###', ' #', '###', '# ', '###'], 3: ['###', ' #', '###', ' #', '###'], 4: ['# #', '# #', '###', ' #', ' #'], 5: ['###', '# ', '###', ' #', '###'], 6: ['###', '# ', '###', '# #', '###'], 7: ['###', ' #', ' #', ' #', ' #'], 8: ['###', '# #', '###', '# #', '###'], 9: ['###', '# #', '###', ' #', '###'] } # 定义颜色 BLACK = (0, 0, 0) YELLOW = (255, 255, 0) # 初始化 Pygame pygame.init() # 创建窗口 size = (600, 300) screen = pygame.display.set_mode(size) pygame.display.set_caption("Nixie Clock") # 循环直到用户点击关闭窗口 done = False # 创建一个时钟对象 clock = pygame.time.Clock() while not done: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 获取当前时间 current_time = time.strftime("%H%M%S") # 清屏 screen.fill(BLACK) # 绘制数字 for i, digit in enumerate(current_time): # 计算数字的位置 x = i * 70 + 50 y = 100 # 绘制数字的每一行 for row, line in enumerate(DIGITS[int(digit)]): for col, char in enumerate(line): if char == '#': # 绘制亮点 pygame.draw.circle(screen, YELLOW, (x + col * 10, y + row * 10), 3) # 刷新屏幕 pygame.display.flip() # 延迟 1 秒 clock.tick(1) # 关闭 Pygame pygame.quit() ``` 每个数字都用一个 5x3 的矩阵来表示,'#'表示亮点。在程序中,我们用一个字典来存储每个数字的矩阵。然后,我们在循环中获取当前时间,计算每个数字的位置,然后绘制出来。程序中使用了 Pygame 的窗口和绘图函数来实现。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值