您当前的位置:五五电子网电子知识单片机-工控设备51单片机VFD的实现原理和驱动设计 正文
VFD的实现原理和驱动设计

VFD的实现原理和驱动设计

点击数:7354 次   录入时间:03-04 11:53:39   整理:http://www.55dianzi.com   51单片机

VFD 的简单介绍

VFD 是指真空荧光显示器,是 Vacuum Fluorescent Display 的缩写,利用电子撞击玻璃基板上的荧光粉而发光,通过VFD上面的各个亮点的组合一起发亮来显示字符,数字,特定的图标等等。由于VFD的显示,清晰 明亮 低工耗等特点被广泛用于家用电器,仪器设备,自动动化设备等上面,用来显示数字信息如温度,字符信息 如:名称 和一些标记指示信息。有关VFD的硬件结构,工作原理,在网上有很多的介绍,在官方网站可以很容易的找到非常准确的介绍。VFD原理及使用请在本站下载

DVD视盘机的VFD显示典型硬件电路

VFD的硬件电路可根据VFD屏的SPEC了解其需要驱动的段,位,选择相应的驱动IC,常用的包括PT6312,PT6311,PT6311相对驱动的段,位多些,可连接的按键也多些。驱动电路的外围元件参数参照PT6311,PT6312的SPEC即可,需要注意的是,6312,6311有很多品牌均可通用,不同品牌的驱动注意其振荡电阻阻值的差异,其余基本相同,另外在电路半设计中驱动电压+5V的去藕电容尽量靠近IC,驱动数据线(DATA,STB,CLK)各连接一个101瓷片到地,保证IC,数据线不受干扰或减轻干扰。

VFD显示屏的供电

VFD显示屏的供电包括交流~3V3灯丝电压和驱动芯片需要的-21V~-27V以及+5V,上图是典型的变压器次级供电处理电路。
还有一种方法是用直流逆变得到或者使用开关电源,现在市场上很多专门的DVD开关电源,满足DVD解码板以及VFD显示的电源要求,电源组包括:+5V,±12V,-21V,~3V3,有些还带常用集成功放的电源,使用他们也非常方便。笔者设计的TOPAV-2008开发平台,其VFD供电采用了直流逆变交流的方式,结构非常简洁,使用方便,详细可到 单片机 音响技术网了解。

VFD 的软件控制驱动设计

前面说过VFD用途广泛,所以就非常有必要搞清楚如何通过软件去驱动它了,怎样让VFD显示我们要显示的内容,这就是一个程序员要思考的问题了,也是本文的目力所在。市场上有很多电子产品都要用到VFD,其中目前比较火热的数字电视,机顶盒(DVB)还有DVD上面都在使用VFD显示。要想让VFD正常的工作还要依赖一个工作的平台,比如说,你是在 Sunplus平台上,还是在Cheertek,Ali,ST,MTK,ESS的等平台上做。要让程序能高效的工作,并且具备最大可能性的移植和扩展性是非常重要的,例如让一个VFD的驱动模块同时可以在 Sunplus,cheertek,Ali等多个平台上工作,也可以能在其它 单片机 上工作,只要它能支持 C语言编程。为了让整个模块更加的模块化,我们就需要对整个模块进行进一步的细份。哎!废话少说,太激动了。

驱动三步走

我们把VFD的驱动分成三步或三部分来实现,各个部分实现相应的功能:

第一步:上层接口,用于适应市场上不同公司和种类的VFD。
第二步:中间层 ,VFD各中显示功能的的实现,用语满足显示需求。例如:一般显示,闪动, 滚动,旋转,等....
第三步:平台接口,用于实现和各个平台之间的接口,主要是和CPU的通信。
基于上面的构想,下面就来分步实现它

简单的介绍一下实现环境:

编译环境:GCC

语言 :C

测试平台:Cheertek(CT219,909),和Ali(Ali3330,3329)(DVB的外部显示,用来显示电台名称等等…)

VFD硬件:CS16312。

第一步:建立通用接口:用于适应市场上不同公司和种类的VFD 8段编码在开始写成程序实现之前,先了解字符显示的原理,字符是根据8段编码的方式在VFD上面显示的,当然也有更多段的编码方式。8段编码用一个字节来描述一个ASCII字符,对扩展的ASCII 码如包含德语,法语等就要用到更多段的编码,也就是用多个字节来表示一个字符。

在一个八段编码的VFD中,把8段分别定义为 a,b,c,d,e,f,g,h段,用一个字节来表示就是
h g f e d c b a
h是字节的最高位,a是字节的最低位。
显示字符的原理如下:

电路图

VFD常用字母的写法
“米”字8和8的区别请注意有不同根据上面的原理,0 表示熄灭,1 表示点亮,可以得出,8段分别点亮后的对应编码是:

8段的每一段对应一个字节的一个位的:

h : 1000 0000 ---> 0x80
g : 0100 0000 ---> 0x40
f : 0010 0000 ---> 0x20
e : 0001 0000 ---> 0x10
d : 0000 1000 ---> 0x08
c : 0000 0100 ---> 0x04
b : 0000 0010 ---> 0x02
a : 0000 0001 ---> 0x01
根据上面的每段编码,如果要显示字符 'A' 需要同时点亮a,b,c,e,f,g段并且d段熄灭,这样一个 'A' 的字符轮廓就出来了,如上图”AbCd”中的'A',所以的字母A的编码是0111 0111 也就是把相应要点亮的段编码或起来就可以了'A'的编码值 = a|b|c|e|f|g 各个段的对应关系如下:

7 6 5 4 3 2 1 0
h g f e d c b a
0 1 1 1 0 1 1 1

通过上面的分析可以在程序中用如下宏来重新定义VFD的8段

#define SEG_A 0x01
#define SEG_B 0x02
#define SEG_C 0x04
#define SEG_D 0x08
#define SEG_E 0x10
#define SEG_F 0x20
#define SEG_G 0x40
#define SEG_H 0x80
通过上面的分析和段定义可以为字符'A' 做如下定义:

#define CHAR_A SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G

根据上面的分析定义,我可以为26个字母,和10个数字字符做完整的定义 如下:

#define NUM_0 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F
#define NUM_1 SEG_B|SEG_C
#define NUM_2 SEG_A|SEG_B|SEG_D|SEG_E|SEG_G
#define NUM_3 SEG_A|SEG_B|SEG_C|SEG_D|SEG_G
#define NUM_4 SEG_B|SEG_C|SEG_F|SEG_G
#define NUM_5 SEG_A|SEG_C|SEG_D|SEG_F|SEG_G
#define NUM_6 SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G
#define NUM_7 SEG_A|SEG_B|SEG_C
#define NUM_8 SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G
#define NUM_9 SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G

#define CHAR_A SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G
#define CHAR_a CHAR_A
#define CHAR_B SEG_C|SEG_D|SEG_E|SEG_F|SEG_G
#define CHAR_b CHAR_B
#define CHAR_c SEG_D|SEG_E|SEG_G
#define CHAR_C SEG_A|SEG_D|SEG_E|SEG_F
#define CHAR_d SEG_B|SEG_C|SEG_D|SEG_E|SEG_G
#define CHAR_D CHAR_d
#define CHAR_E SEG_A|SEG_D|SEG_E|SEG_F|SEG_G
#define CHAR_e CHAR_E
#define CHAR_F SEG_A|SEG_E|SEG_F|SEG_G
#define CHAR_f CHAR_F
#define CHAR_g NUM_9
#define CHAR_G NUM_9
#define CHAR_H SEG_B|SEG_C|SEG_E|SEG_F|SEG_G
#define CHAR_h CHAR_H
#define CHAR_I NUM_1
#define CHAR_i NUM_1
#define CHAR_L SEG_D|SEG_E|SEG_F
#define CHAR_l CHAR_L
#define CHAR_N SEG_A|SEG_B|SEG_C|SEG_E|SEG_F
#define CHAR_n SEG_B|SEG_C|SEG_E|SEG_F|SEG_H
#define CHAR_O NUM_0
#define CHAR_o SEG_C|SEG_D|SEG_E|SEG_G
#define CHAR_P SEG_A|SEG_B|SEG_E|SEG_F|SEG_G
#define CHAR_p LETT_P
#define CHAR_r SEG_E|SEG_G
#define CHAR_R CHAR_r
#define CHAR_S SEG_A|SEG_C|SEG_D|SEG_F|SEG_G
#define CHAR_t SEG_D|SEG_E|SEG_F|SEG_G
#define CHAR_T LETT_t
#define CHAR_U SEG_B|SEG_C|SEG_D|SEG_E|SEG_F
#define CHAR_Y SEG_B|SEG_C|SEG_D|SEG_F|SEG_G
#define CHAR_G SEG_G
#define CHAR_BLANK 0x00
上面为基本的字符数字都做了编码定义,以后就可以通过编码来指代这些字符,如一个字符串 “Hello world” 等于 CHAR_H+CHAR_e+CHAR_l+CHAR_l+CHAR_BLANK+CHAR_w+CHAR_O

CHAR_r+CHAR_l+CHAR_d.
用数组表示:

char str_hw[11]={CHAR_H,CHAR_e,CHAR_l,CHAR_l,CHAR_BLANK,CHAR_w,CHAR_O
CHAR_r,CHAR_l,CHAR_d};

显示原理

到目前为止,我们还只是对基本字符和数字进行了逻辑上的编码,和怎样生成一个字符串,这些多还仅仅是个开始,要想在VFD上面显示”hello world” 还有很多事情要做,接下来我们就要了解 VFD是如何显示字符的。
VFD要显示字符还要通过一块VFD驱动芯片来实现,VFD本身只能显示就像电脑的显示器一样,要想让它显示内容还要通过驱动芯片加上周边驱动电路共同来完成显示的任务。在DVB,DVB和其它用到VFD的电子产品中都会有一块VFD的电路板,通常叫VFD板(VFD panel)或前面板(Front panel)这块电路板就是由VFD驱动芯片,周边驱动电路和VFD组成。在目前的市场中VFD驱动芯片种类很多,但标准一样。VFD通过驱动电路与驱动芯片相连,来完成驱动芯片的显示任务,而驱动芯片的的任务是通过平台系统(如 Ali的 3329主芯片)获得的。在实际的编程过中,只需要通过平台系统上的主芯片(CPU)来控制VFD板上的驱动芯片从而完成一个显示任务,或其他任务,平台系统上的主芯片(CPU)一般是通过一个标准的三线串口来与VFD驱动芯片连接。上面简单的介绍了主板CPU,驱动芯片和VFD之间的关系,具体的细节可以在相应的DATA SHEET或spec.中找到,或从硬件工程师那看到详细的电路连接状况,对相互协调工作就会有比较深刻的认识。哎!又罗嗦了

[1] [2] [3]  下一页


本文关键字:暂无联系方式51单片机单片机-工控设备 - 51单片机

《VFD的实现原理和驱动设计》相关文章>>>