IV-18(ИВ-18)荧光电子数码管,上世纪80-90年代前苏联的产物,冷战时期曾大量制造并用于军事设备;冷战结束后,同其他海量的战争遗留物一起,被埋于地下,或被封存于冰冷的仓库角落。
第一次见到她是在英国的辉光钟爱好者Konstantin的网站上,国内见到应用这个管子的第一人是荆州老段(YeYuDo),第一次见到实物是在2011年年夏天。
同国产YS-13/18以及前苏联的IV-11等不同的是,她一根管内嵌入了8个7段数字,并且每个数字右下角都有小数点,在管子的左侧,还有一个表示负数的短横线,在短横线上面还有一个较大的圆点符号。
原版俄文说明书:
主要参数如下:
下面来两张正面和背面的裸照:
在背面清晰可见灰黑色的消气剂,以及管子型号和生产年月。
IV-18荧光管共有22根管脚,其中有3根管脚无任何连接,实际使用的有19根管脚,管脚定义见下图:
其中三根未使用的管脚进入管子内部以后,没有任何的电气连接,用肉眼即可分辨出来,见下图:
与一般的电子管一样,IV-18荧光管内部是真空,所以也有一个抽气口,但是她的抽气口做过处理,没有锋利的尖尖,而是平头,这样不容易被碰碎导致漏气,请见下图:
IV-18荧光管内部有两条灯丝,两条灯丝并联,贯穿于头尾之间。
灯丝很细,每根灯丝由顶部的一个很细的拉力弹簧来牵引,平行穿越每一个数字面前。
IV-18荧光管最独特的地方在于她的基板,与IV-11/22不同,IV-18的基板是一片透明的玻璃板,用于显示数字比划的每一段,以及连接每一个段的线路,均紧贴在玻璃板上;而每一个数字的栅网非常细腻,嵌在玻璃基板板两侧,浮于数字前端,通过玻璃基板被面的连接线连接到每一个管脚。
我们由此可以看出,整个荧光管的电气特性有点类似于我们当今所使用的LED数码管模块,必须采用动态扫描方式来驱动,因为她的每一个段都是连接在一起的,通过依次给每一个数字位的栅极通电来选择当前显示的位,然后给7段数字线条通电,来显示一个数字,依次快速动态刷新,来完成8个数字的显示。
具体的细节图请见照片:
电路设计方面并不复杂,几乎没有什么技术含量,都是非常简单的典型应用。且本人没有催毛求疵的心态,只求整个电路运行稳定可靠,PCB布局合理,器件尽量的少;整个电路由升压电路、MCU主控、RTC模块、VFD驱动、外围及接口器件这几部分组成。
升压电路部分使用的还是廉价并经典的MC34063做高压升压,外扩了MOS管IRLR024,升压效率大幅提高,而且MC34063、电感、MOS管一点也感觉不到温度;IV-18的推荐工作电压为45v-70v,经过测试发现工作在49v的时候效果最佳。
下面是升压部分的电路原理图:
RTC模块依旧采用了内置温补晶振的DS3231SN高精度时钟芯片,配置CR1220锂电池,能确保断电3年内开机不用重新对时;
DS3231SN就不多介绍了,400k高速IIC接口,在0℃至40℃的工作温度范围内能提供±2ppm的输出精度;
有些朋友总是抨击DS3231SN,说它贵的不值,自己用DS1302都可以做到一年误差几秒钟云云,个人在这里不做评论,只是想说:
同样的RTC芯片,不同的外围电路,工作的状态截然不同;
同样的RTC芯片,同样的外围电路,不同的PCB布线,工作状态截然不同;
同样的RTC芯片,同样的外围电路,同样的PCB布线,不同的工作环境,工作状态截然不同;
本次选用的荧光管驱动芯片选用的是美信的VFD专用驱动芯片MAX6921,它有20个输出端口,恰好满足IV-18荧光管的需求,段和位选输出电压能够高达76V,外围只需几颗电容,无任何其他器件,并且仅需4根通讯线连接MCU进行串口通讯控制。
应用电路见下图:
主控选用的依旧是STC12C5628AD,LQFP32封装,体积比较小,而且内置EEPROM,可以用于存储所有的菜单设置。
DS3231SN的读写程序实在是太经典不过了,把它封装成程序模块,每次在其他项目中直接定义扩展函数就可以了,在这里贴出来源码,使用STC芯片的朋友改一下I/O定义即可。
下面是DS3231.c文件的源码:
/****************************************Copyright (c)**************************************************
**
** 项目名称: IV-18 VFD Clock
** 文件名称: DS3231.c
** 模块功能: 实现DS3231SN的全功能控制
**
**------------------------------------------------------------------------------------------------------
**
** 创 建 者: 严泽远
** E-mail : yanzeyuan@163.com
** QQ : 6626209
** Mobile : 18602007878
** 创建时间: 2011-02-02
** 版 本: v1.0.0
** 描 述: 基础程序
**
********************************************************************************************************/
#include //加载STC12C5620AD.H头文件
#include //加载Define.H头文件
#include//加载DS3231Variable.H头文件
/********************************************************************************************************
** 全局常数定义
********************************************************************************************************/
bit ack; //应答标志位
/********************************************************************************************************
** 函数名称: BCD2HEX(uchar val)
** 功能描述: BCD转HEX
** 入口参数: val:BCD码
** 创 建 者: 严泽远
** 创建时间: 2011-01-25 20:33
** 版 本: v1.0.0
********************************************************************************************************/
uchar BCD2HEX(uchar val)
{
return ((val>>4)*10)+(val&0x0f);
}
/********************************************************************************************************
** 函数名称: HEX2BCD(uchar val)
** 功能描述: HEX转BCD
** 入口参数: val:HAX码
** 创 建 者: 严泽远
** 创建时间: 2011-01-25 20:34
** 版 本: v1.0.0
********************************************************************************************************/
uchar HEX2BCD(uchar val)
{
return (((val%100)/10)<
下面是DS3231Variable.h文件的源码:
/****************************************Copyright (c)**************************************************
**
** 项目名称: YS18-3 Clock
** 文件名称: DS3231Variable.h
** 模块功能: 全局变量定义
**
**------------------------------------------------------------------------------------------------------
** 创 建 者: 严泽远
** E-mail : yanzeyuan@163.com
** QQ : 6626209
** Mobile : 18602007878
** 创建时间: 2011-02-02
** 版 本: v1.0.0
** 描 述: 基础程序
**
********************************************************************************************************/
/********************************************************************************************************
** I/O接口定义
********************************************************************************************************/
sbit SCL = P2^7; //DS3231数据接口
sbit SDA = P2^6; //DS3231数据接口
/********************************************************************************************************
** DS3231常数定义
********************************************************************************************************/
#define DS3231_WriteAddress 0xD0 //器件写地址
#define DS3231_ReadAddress 0xD1 //器件读地址
#define DS3231_SECOND 0x00 //秒
#define DS3231_MINUTE 0x01 //分
#define DS3231_HOUR 0x02 //时
#define DS3231_WEEK 0x03 //星期
#define DS3231_DAY 0x04 //日
#define DS3231_MONTH 0x05 //月
#define DS3231_YEAR 0x06 //年
//闹铃1
#define DS3231_ALARM1SECOND 0x07 //秒
#define DS3231_ALARM1MINUTE 0x08 //分
#define DS3231_ALARM1HOUR 0x09 //时
#define DS3231_ALARM1WEEK 0x0A //星期/日
//闹铃2
#define DS3231_ALARM2MINUTE 0x0b //分
#define DS3231_ALARM2HOUR 0x0c //时
#define DS3231_ALARM2WEEK 0x0d //星期/日
#define DS3231_CONTROL 0x0e //控制寄存器
#define DS3231_STATUS 0x0f //状态寄存器
#define BSY 2 //忙
#define OSF 7 //振荡器停止标志
#define DS3231_XTAL 0x10 //晶体老化寄存器
#define DS3231_TEMPERATUREH 0x11 //温度寄存器高字节(8位)
#define DS3231_TEMPERATUREL 0x12 //温度寄存器低字节(高2位)
MAX6921的通讯过程与大多数串行数据通讯时序一致,仅需DIN, CLK LOAD三个通讯接口,下面是时序图:
MAX6921一共有20个输出端口,所以串行数据共20bit,即D0-D19,不过在这次的应用中,只需要控制IV-18荧光管的9个栅极和8个阳极,所以一共只需要17个bit数据即可。
根据原理图可以看出,17个bit对应的D9-D16共8bit为动态扫描某一时刻的8个阳极状态,D0-D8共9bit为动态扫描某一时刻的栅极状态,所以仅需要在一个定时器中断里不停的与MAX6921通讯,进行动态扫描即可。
在这里选用了STC12C5628AD的定时器0中断,并将定时器溢出时间配置为10us,共使用8个栅极(未使用IV-18荧光管最左边的符号位),8次扫描为一个周期,每次将相应的栅极和阳极数据传送至MAX6921即可,代码很简单:
i=17;
for(;i>0;i--)
{
DIN = Tmp&0x0001; _nop_();
CLK = 1; _nop_();
CLK = 0; _nop_();
Tmp>>=1;
}
LOAD = 1; _nop_();
LOAD = 0; _nop_();