在七夕到来之时,我将做出一个只属于她的,独一无二的礼物:数字电波钟—永恒精准的走时。感兴趣的一起来围观吧!
使用硬件
MSP430F149,4位8段0.8寸数码管,Pcf8563t时钟芯片,电波钟模块
使用软件
IAR for 430 V5.3
写在前面:
沉寂了一年之久,一直都没有任何发帖,原因有很多,比如太忙,或者太累,再或者懒,究其根本,是我觉得我没有什么好的思路,没有好的创意,想到的都是已经有人想到过的,相信不仅观众提不起兴趣,我自己都提不起兴趣。其实这次的DIY只是碰上了七夕节日,既然有这个契机,手上也有可以用到的材料,不如就此逼自己一下,做出一个只属于她的,独一无二的礼物:数字电波钟—永恒精准的走时。
下决定的时候,已经是7月22日了,此时距离七夕节8月2日只有10天时间,刨去周末回家的2天,实际的开发周期只有8天。时间在一开始就已经非常紧迫了。按照我以前的经验,我这个时候已经在设计电路图了,但是我这次决定做一次尝试和改变,我决心在一开始花最多的时间设计外观。在搜索了大量的类似外形产品之后,我画了一幅草图给我的同事,让他抽空帮我用CAD画成3D模型图。在几次讨论细节之后,他把脑中的外壳形状在电脑上实现了。各位看到此处肯定已经猜到我接下来要干什么了,没错,我准备把这个3D模型交付给3D打印店来制作。我同时也提出了表面抛光和喷高光漆的工艺要求。这个任务完成的时候,已经是7月28日的下午了。剩下的时间就交给3D打印店了。这里说明一下,外壳壳体部分是交给3D打印的,而亚克力面板部分是交给专门的亚克力切割店的。只要各个部分的加工精度都能保证在0.4mm一下,就一定能够严丝合缝的组装在一起。
设计的外观图纸
硬件设计
尽管最后交付给3D打印店的时间是28日,我在25日的下午,已经将原理图的设计完成了,其实原理图并不复杂,一个单片机驱动4位8段式的共阴数码管,相信大多数还没毕业的电子相关专业学生都能轻易制作出来。这里,因为是共阴极,我用了大量的三级管来做驱动和位选,其实有时间我可以用其他集成IC来实现,只不过时间紧张,只能用自己最熟悉的方式来做了。简单描述一下,就是从5V电源适配器出来的电源,经由AMS1117-3.3V稳压之后,经过滤波和去耦,分别送给单片机MSP430F149,数码管的阳极输入端的三极管9013的C极,RTC时钟芯片PCF8563T,以及电波钟模块。电源,单片机和数码管驱动没有什么特别的,我着重想介绍的是这个电波钟模块。
原理图
现代授时技术,各式各样,大家最熟悉的莫过于电视上的每天晚7点新闻联播开始前的那段报时了吧。所谓授时,就是授时中心以各种形式(广播,电视,互联网,无线电信号)等方式,把其原子钟上的精确时间进行群发。这样看来,其实还有很多授时技术运行在大家的生活当中,GPS授时算是成本比较低廉的一种了。任何一种GPS模块,都会输出从卫星上获得的时间数据,而卫星的时间来源也是星载的原子钟。但是GPS有一个致命的弱点就是在室内基本就无法工作,因此也无法输出时间数据。基于此,世界上几个发达国家均建设了中波广播式的授时台,每天通过无线数据广播的形式来完成授时,中波经由天波传输可以达到2000km远的地方。其中,位于日本的JJY授时中心和位于中国河南商丘的BPC授时中心在我所在的城市武汉均能收到信号。不过令人费解和气愤的,一个由中科院建设的国家级的授时中心,其授时产品的专利所有权却在一家西安的私营公司手里,市面上除了他们家生产的中国码BPC电波钟产品,就没有别的了。在这里我不过多讨论这家公司和政府和研究所等机构有什么猫腻,但是正是因为专利垄断,市场上没有别的产品出售,而我最需要的解码模块更是到处都找不到。不过功夫不负有心人,去年12月我在某宝上找到一个店主,自称破解了中国码BPC的解码格式,并且在出手解码模块。为了保护各方利益,我就不提店名和ID了。收到模块后进行了一番测试,在室内条件下,只需要将模块的天线对准北方(商丘在武汉以北),经过几十秒不等的检测就能成功获取时间,从串口输出数据。
电波钟模块(黑色的绕线的是天线)
在28号开始3D打印之后,我的PCB尺寸和定位孔位置也已经确定,可以立即着手开始设计PCB文件了。有原理图和大致外观设计在前,PCB设计很容易实现,在29日的下午已经完成了PCB。因为要赶在8月2日之前完成,所以加急打样是必须的了,我用了24小时打样,PCB将在31日周四到达。最后留给软硬件联合调试的时间只有1天。
软件设计
软件部分的设计其实说简单也简单,说麻烦也麻烦。因为我选用的是TI公司的MSP430单片机,这个单片机有一个特点就是没有开漏输出模式,因此在面对RTC芯片的IIC时候,类似SDA这样的引脚既要输出又要输入的情形,就非常麻烦。解决办法只能是在需要输出的时候将端口模式改为输出,需要输入的时候将端口模式改为输入。驱动NXP的PCF8563这个RTC我在51和STM32上早就实现了无数次了,但是这次移植到430上颇为费了一番功夫,主要问题的就是卡在主机(MSP430)对从机(PCF8563)发起读写请求后,获取不到ACK。熟悉IIC通信的朋友应该知道,ACK是确保IIC通信成功的基础。经过了1天1夜的调试,我终于发现问题出在发起请求后,SDA引脚没有能够在ACK来临之前及时切换为输入模式,导致ACK无法拉低SDA引脚,进而导致收不到ACK信号。解决了这个问题之后,后面的软件调试没有任何问题,控制数码管和从电波钟模块获得时间数据都是非常简单的问题。这里我还用到了一个定时器中断,作用是1秒闪烁一次数码管中间的冒号,用来模拟秒钟,实际跟走时没有任何关联。
主程序流程图
联合调试
PCB板子如期在31日的中午到达,同时到达的还有3D打印的外壳。
晚上通电调试,才发现sot-23封装的9013三极管的B和E极居然画反了,现在改版已经来不及,只有一个办法就是把三极管翻转180°,然后把引脚像下折弯,这样焊接上去,B和E就交换了位置。加紧赶工,晚上12点之前把软件功能全部实现了。
试装到盒子里,没有固定和粘合,也没装电波模块
面板边缘有不整齐的地方
整机组装
整体组装费了一点劲,因为之前没考虑到电波钟模块和天线的厚度,因此调整了半天才找到不会挤在一起的位置。终于最后总装完成。
开机画面
显示时间1
显示时间2
6,包装盒制作
之前曾经送给她一个SD/TF读卡器,但是因为没有外壳,一个裸露的PCB,被她嘲笑很久。于是这次我决定在外壳的基础上还要再设计一个包装盒。包装盒的所有材料:盒子,填充材料EVA,内衬绒布全是在某宝买的。包装盒制作一件是2号的上午了,中午就要回家送给她,因此开完会,立马召集帮我制作外壳同事一起来剪裁绒布和填充物。终于赶在12点之前完成了,大功告成!
原始盒子
开始填充
填充完成,贴上了内衬布
放入,完成
写在后面:
其实这次的DIY制作,还是有很多问题的。主要还是因为时间仓促,导致了面板和外壳的尺寸没有一一核实就交付加工。也是因为仓促,PCB的封装没有足够的检查就交付打样。至于程序,因为本着实现功能第一的目的,因此没有做什么优化,在晃动的情况下,能看到数字的断线。后面如果有时间,我会重新优化一次程序,加上一些外部控制功能,甚至加上电池和充电管理。当然这都是后话了,总之,在规定的时间前完成了规定的内容,自我评价者是一次合格的DIY。
2号下午到家之后,送给她,看起来这次,她非常的喜欢,立即摆在桌子上开启起来了。哈哈哈,好开心!
最后附上两张工作间的照片,与各位硬件工程师共勉 |