前言

19年的时候做了这款模仿做的辉光管时钟,可以随机显示世界线(一切都是命运石之门的选择!)。先来看下显示效果吧。

另外说一句,由于本项目是开发于2019年,可能有些芯片已经停产,或者价格有浮动的,可以自行寻找代替。

硬件

电源

  1. 交流转直流12V采用外置适配器,其实以现在的眼光来看,可以用锂电池+锂电池管理芯片+C口USB做一个充电型的。不过涉及到辉光管点亮的升压电路,前端电压过低这个问题到后续改进的时候再解决吧。
  2. 12V转3.3V 线性降压电路,采用317+XC6202先12V转5V,再5V转3.3V。
  3. 12V转180V升压电路,采用MAX1771+TK8P65W。

    12V输入
    12V输入

    12V转3.3V
    12V转3.3V

    升压电路
    升压电路

主控芯片

采用STM32F103RBT6这颗ST品牌的芯片,封装LQFP64。相对来说19年"缺芯危机"前,国外的牌子资料多,且价格也还算便宜,所以当时抱着学习的目的用的这颗芯片。在当下2024年,其实很多国产Pin to Pin的M0内核的芯片都可以胜任,价格更低。

显示部分

  1. 辉光管驱动部分采用HV57708,这也是大部分做这个项目都会选择的芯片。
  2. IN14辉光管配一个底座,底座中空,正好可以放一颗全彩led,用于时钟模式时呼吸灯效果。全彩LED驱动使用LPD6803。

    辉光管驱动
    辉光管驱动

    全彩led驱动
    全彩led驱动

其他电路

  1. 时钟芯片DS3231,配合纽扣电池可以保存时间1-2年。
  2. 触摸芯片YS804A,用于操作设置。相对于实体按钮,触摸可以让板面更加整洁。

    时钟电路
    时钟电路

    触摸电路
    触摸电路

软件

软件部分逻辑上总体还是比较简单的,着重讲一下辉光管驱动部分,其他的就看源码吧。

辉光管驱动

辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极,而大部分数字管阴极的形状为阿拉伯数字)。将170伏特的直流电压加在阴极和阳极之间,每一个阴极可以发出氖的的红橙色光。由于混合气体的不同,不同数字管之间的颜色有所区别

辉光管原理图
辉光管原理图

以上摘自维基百科,所以从原理上可以看出,只要在阳极给予170V以上电压,相应的阴极导通,就可以显示我们想要的数字。所以硬件上经过升压电路得到的180V电压经过限流电阻加载在各个辉光管的阳极上,阴极采用HV5778移位导通。

HV5778是4路串行输入,64路并行输出。四根数据线,一根时钟线,和四根控制线。根据规格书中的真值表可知:

  1. BL, POL我们使用当中都要置高,DIR控制方向,所以也置高。
  2. 每次时钟上升沿时,四位数据进行移位。
  3. 每次LE置高时,数据并行输出

    真值表
    真值表

void HV57708DatInput(u32 datHigh, u32 datLow)
{
    u32 tmp = 0;
    u8 i = 0;
    
    HV_CLK_L();        // 拉低时钟,准备发送数据
    
    // 低32位数据
    tmp = datLow;
    for(i = 0; i < 8; i++)
    {
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN4_H();
        }
        else
        {
            HV_DIN4_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN3_H();
        }
        else
        {
            HV_DIN3_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN2_H();
        }
        else
        {
            HV_DIN2_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN1_H();
        }
        else
        {
            HV_DIN1_L();
        }
        tmp >>= 1;
        __NOP();
        __NOP();
        __NOP();
        HV_CLK_H();
        __NOP();
        __NOP();
        __NOP();
        HV_CLK_L();
    }
    
    // 高32位数据
    tmp = datHigh;
    for(i = 0; i < 8; i++)
    {
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN4_H();
        }
        else
        {
            HV_DIN4_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN3_H();
        }
        else
        {
            HV_DIN3_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN2_H();
        }
        else
        {
            HV_DIN2_L();
        }
        tmp >>= 1;
        
        if(tmp & HV_DAT_MASK)
        {
            HV_DIN1_H();
        }
        else
        {
            HV_DIN1_L();
        }
        tmp >>= 1;
        __NOP();
        __NOP();
        __NOP();
        HV_CLK_H();
        __NOP();
        __NOP();
        __NOP();
        HV_CLK_L();
    }
}
void HV57708DatPush(void)
{
    HV_LE_H();
    __NOP();
    HV_LE_L();
    __NOP();
}

结语

一直很喜欢命运石之门这个游戏和动画,有机会制作出这样的周边还是蛮开心的。这个项目时间也比较久了,如果想要交流的可以在下面留言,我看到了第一时间会回复你。

下载

软硬件资料你可以点这里下载:软件 | 硬件