俄罗斯方块段码液晶屏驱动
分类: 硬件 发布于: 2024-01-14

网上入手了一个俄罗斯方块掌机,想取其屏幕用于DIY,但找遍全网均没有屏幕面板资料。经过几个月的摸索,已经能够点亮,记录全过程。

段码液晶

相关资料:

段码式液晶屏一种古老的显示屏,早期主要用来替代数码管,显示的笔段可以制作成不同的形状,因此演变成各种各样的样式。

seg segpowerstyle={max-width: 80%;min-width=300px}

1. 段码液晶屏(Segment LCD)基本结构:

  • 由两片平行玻璃基板构成,中间填充液晶材料
  • 每片玻璃内表面镀有透明导电电极(通常为氧化铟锡ITO)
  • 上下基板外侧各贴有一层偏光片,两者的偏振方向呈90°正交
  • 液晶分子在未加电时呈现自然螺旋排列(TN型液晶的典型特性)

2. 光学原理

  • 未加电压时: 液晶分子的螺旋结构会使光线偏振方向旋转90°,与下层偏光片匹配而透光(显示亮态)
  • 施加电压时(>阈值电压Vth,通常2-3V): 电场迫使液晶分子沿电场方向排列,失去旋光性,光线被下层偏光片阻挡而遮光(显示暗态)
  • 必须使用交流驱动(通常30-200Hz方波)以避免液晶电解老化

seg segpowerstyle={max-width: 80%;min-width=300px}

段码屏的每一个显示段,可以看作是一个特殊形状的像素。每个显示段都由两个电极控制,当施加适当电压时就能改变其显示状态。

在实际制造中,为了减少所需的驱动引脚数量,多个像素的某一侧电极会连接在一起,形成公共端。这样就构成了类似网格的行列结构,这些公共端即COM端和SEG端。COM端和SEG端的组合可以驱动不同的像素,映射关系即为真值表:

seg segpowerstyle={max-width: 95%;min-width=300px} seg2 segpowerstyle={max-width: 95%;min-width=300px}

这种设计思路和LED点阵屏的行列扫描方式很相似,都是通过行列交叉的方式来控制各个显示单元,但在驱动方式上,段码屏和LED点阵有本质区别。

LED点阵驱动方式

LED点阵屏采用逐行点亮的方式工作。由于LED只能单向导电,控制起来很简单:给要点亮的那一行施加正向电压,同时给其他行施反向电压。这样就能确保每次只点亮目标行的LED,其他行都保持熄灭,通过快速轮换实现整体显示效果。

以一个例子说明,假如要点亮第一行第一个像素,同时关闭其他像素,可以按下述策略设置行(R)和列(C)的电压:

       C1       C2
       │         │
R1 ────┼────┬────┼────┬─── +5v
       │    │    │    │
       ├─|◀─┘    ├─|◁─┘   ...
       │ +5V     │ 0V
       │         │
R2 ────┼────┬────┼────┬─── 0V
       │    │    │    │
       ├─|◁─┘    ├─|◁─┘   ...
       │ 0V      │ -5V
       │         │
      ...       ...
       │         │
      0V       +5v

四个像素的压差均在二极管下发用数字标明,可以看到:

  • 左上角的像素为正向电压,且超过LED发光的阈值,像素点亮;
  • 右上、左下的像素没有压差,像素不点亮;
  • 右下的像素,虽然有5V压差且超过阈值,但因为是反向电压,像素不点亮。

段码屏驱动方式

上述的扫描方式若用来驱动段码液晶就完全不可行了。以上为例,若换成段码液晶屏,虽然左上角像素可以点亮,并且右上和左下的像素因为压差未到达阈值电压Vth而不点亮,但右下角的像素却无法关闭!因为段码屏的像素没有单向导电性,只要像素两端压差超过Vth即会点亮。

因此,如果直接采用与LED点阵相同的扫描驱动方式来驱动段码液晶屏,会导致一个严重的问题:在扫描某一行时,其他非扫描行上的像素也会被部分点亮。这种串扰现象会造成屏幕整体呈现全黑或全灰的显示效果,使得原本要显示的图像完全无法辨认,失去了画面应有的对比度和清晰度。

段码液晶需要更精细的电压控制即:

  • 选中段电压 Von ≥ Vth
  • 非选中段电压 Voff < Vth

有一种方式可以满足上述条件,假设段码屏的驱动电压为3.3V,阈值电压为1V,点亮左上角像素,同时关闭其他像素:

       COM1       COM2
         │         │
SEG1 ────┼────┬────┼────┬─── 1.65V
         │    │    │    │
         ├─||─┘    ├─||─┘ 
         │1.65V    │0.83V
         │         │
SEG2 ────┼────┬────┼────┬─── 3.3V
         │    │    │    │
         ├─||─┘    ├─||─┘ 
         │ 0V      │-0.82V
         │         │
        3.3V       2.48V

可以看到,只有左上角的像素压差超过了阈值Vth。
再查看另一种情况:点亮右上角的像素,同时关闭其他像素,此时只需要将COM1调整为2.48V,将COM2调整为3.3V即可。

由于段码屏需要交流驱动,在扫描完成COM1、COM2之后,下一轮次需要反向压差。
依旧只点亮左上角像素,可以按如下方式:

       COM1       COM2
         │         │
SEG1 ────┼────┬────┼────┬─── 1.65V
         │    │    │    │
         ├─||─┘    ├─||─┘ 
         │-1.65V   │-0.82V
         │         │
SEG2 ────┼────┬────┼────┬─── 0V
         │    │    │    │
         ├─||─┘    ├─||─┘ 
         │ 0V      │0.83V
         │         │
         0V      0.83V

效果同上。

以上的电压数字中,0.83V(0.82V)、1.65V、2.48V并非为特殊数字,它们分别为驱动电压的1/4、1/2和3/4!总结一下要点:

  1. 正向电压扫描时:
  • 选中的行COM设置为VCC,非选中设为3/4 VCC
  • 对于选中的像素 SEG为1/2 VCC,非选中设为 VCC
  1. 反向电压扫描时:
  • 选中的行COM设置为GND,非选中设为1/4 VCC
  • 对于选中的像素 SEG为1/2 VCC,非选中设为 GND

只需设计一个电路满足下述条件即可完美驱动屏幕:

  1. 使COM产生0/4、1/4、3/4和4/4倍的驱动电压
  2. 使SEG产生0/4、2/4和4/4倍的驱动电压

一般来讲,MCU的IO只能产生两种固定电压,要驱动段码液晶屏需要外挂驱动IC,后者的内部有专用的电路可以产生不同档位的电平。但有一种权电阻网络的电路结构,也可以实现类似的功能:

    VCC
    ─┬─
    ┌┴┐100KΩ
    │A│
    └┬┘ ┌────┐50KΩ
COM ─┼──┤ C  ├─── BIAS
    ┌┴┐ └────┘
    │B│
    └┬┘100KΩ
    ─┴─
    GND

其中COM直连MCU的IO,根据电阻分压原理可得:

分压 COM BIAS
0/4 Lo Hi-Z
1/4 Hi-Z Lo
2/4 Hi-Z Hi-Z
3/4 Hi-Z Hi
4/4 Hi Hi-Z

由于BIAS只在输出1/4和3/4倍的电压时产生作用,对于SEG的电路,可以直接移除BIAS以简化设计。