亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

真空荧光显示控制器

组件和用品

Arduino UNO
...或任何 8 位 Arduino
× 1
VFD 显示
我们的朋友
× 1
CD4094
DIP 集成电路
× 2
CD4017
DIP 集成电路
× 2
BC557
...或等效晶体管(2N3906、2SA733、ecc)或更高电压 PNP 的
× 17
BC547
...或等效晶体管 (2N3904, 2SC945, ecc)
× 2
PC817
在大多数开关电源中都可以找到无处不在的光耦合器,底线部分
× 1
1N4007 – 高电压、高额定电流二极管
× 4
电容器
查看值和电压的示意图
× 4
470nF 电容器
任何类型都好
× 1
Perfboard
又名:纸板、原型板,或者您首选的组装解决方案
× 1
1/4W 电阻
查看值的示意图
× 24
杜邦跳线
...或您喜欢的联系和帖子
× 1
Wire
用于电路背面和连接显示器的细线,不要在那里使用连接器,因为引脚间距可变,快速焊接更容易
× 1

必要的工具和机器

烙铁(通用)
焊锡丝
在当地商店购买,这个没有便宜的东西,0.5mm 是首选
线剪

关于这个项目

有什么用?

由于一些明显的原因,VFD 显示器不再流行,它们是由玻璃制成的(“嗯,酷!”),有一个白炽灯丝(“真的??”),它们基本上是真空管(“有趣!”),它们使一盏灯如此明亮,有时是彩色的,它需要在顶部使用深色塑料(“嗯,又酷了!”)。

通常你需要一个专用的芯片来驱动 em,大多数模块/设备都带有这个芯片,你可以通过 I2C 或 SPI 独立控制(这在易用性方面更好),以防你购买或拥有这些显示器之一并且缺少这样的芯片“连接并运行”并不容易,理想的做法是购买该芯片(通常采用 SMD 格式)。该电路为 Arduino 提供了一个相当不错的接口,并且很可能可以驱动任何 VFD,包括笨重的“管”式老式 VFD,但顺便说一下,具有很多段的矩阵显示器并不是一个好主意,您可以扩展电路但是成千上万……嗯,也许不是。

利弊

优点

  • 几乎零成本(希望如此)
  • 容易找到零件
  • 高电压能力(阳极高达数百伏)
  • 独立的栅极和阳极电压
  • 只需要 3 条数字数据线
  • 可扩展(以防万一,需要更多的 CPU 工作)
  • 已为每个 8 位 Arduino 编写代码

缺点

  • 需要一堆不同的电压和电源(对于 VFD 来说并不奇怪)
  • 无调光功能(电压驱动除外)
  • 使用两个 Arduino 资源,SPI 和 timer1
  • 不能挂微控制器,否则扫描会冻结在网格上
  • 它不是一对电阻器和 LED,它需要一些工作

工作原理

VFD 通常以多路复用方式工作,例如具有 X 轴和 Y 轴的 2D 矩阵,您需要加热灯丝(阴极,您会看到它前面的那些细线),并在该灯丝上连接接地,一个正电压到一个网格(控制网格,X 轴的一个点)和一个段引脚(阳极,Y 轴的一个点)上的正电压,此时一个段(只有一个)亮起。为了点亮任何段和任何组合,并且周围有“很少”的电线,多路复用每次选择一个网格,同时配置阳极以点亮该网格下的相应段,片刻之后,它选择另一个网格并这次配置阳极以使相应的段在第二个网格下正确点亮。加速这种连续重复扫描会导致运动如此之快,以至于在我们的眼睛下它不会每次选择一个网格,而是一次驱动,这就是所谓的 POV(视觉持久性)。

该电路使用同系列的两种集成电路,两个CD4094和两个CD4017,4094驱动阳极,4017驱动栅极,4094可以在其输出端存储高/低配置,对阳极有好处侧面,4017 是经典芯片,具有 10 个排序输出,非常适合网格。一旦 4094 加载了力矩阳极配置,“ok”信号(选通)应用此设置,同时一步切换 4017,允许自动排序。

电源部分基本上只是一些 BC557 晶体管(或等效物),它们允许阳极上更宽的电压摆幅,因为这些显示器需要比 Arduino 的 5V 更高的电压。栅极由 4017 直接驱动,PC817 光耦合器允许在 4017 周围提供高于 5V 的电压,并且与 CD4094 的电压电平不同,这大大简化了整体。

Arduino 必须提供所有编排,这意味着必须存储所有段配置并在每个电网开关处加载带有阳极设置的电路,这意味着它确实需要一个聪明的代码来完成用户操作之外的操作。我编写的代码设置了一个基于定时器的中断,它在每一步重新加载 4094 个芯片,实际上每秒大约 1000 次,因此对于 10 个网格,它提供 100Hz 的刷新率,这很好。有一组数据存储了segment配置,可以在代码中修改,不需要特定的程序或后续动作,中断例程会自己上传数据。

电源

4017芯片上的电网电压可以从5Vdc到18Vdc,电流至少为50mA,不需要调节。通常(就我所见)12V 对每种情况就足够了,增加它似乎不会增加太多亮度(如果是真空管,栅极不需要很大的电压)。

阳极电压可以从字面上的 0V 到您的晶体管可以承受的任何电压(BC557 为 50Vdc),通常如果显示是完美的,20-30Vdc 就可以完美地完成工作,没有调节是好的。对于正常设置,50mA 的电源就足够了。

对于那些类型的 Arduinos 或 MCU(尚未尝试),数字电源可以是 5Vdc 或 3.3Vdc,这需要 100mA 的电源(希望更少),以防 CD4094 变得迟钝,您可以减少代码中的 SPI 时钟和/或使用第一个 4094 的“Q'S”输出来实现更一致的通信。

灯丝电源必须提供至少 5V 200-300mA 的电流,如果您已经有一个直流电源,您可以避免使用桥式整流器和 1000uF 电容器,但您不能为 Arduino 使用相同的数字电源。在不太大的电器显示器的情况下,实际灯丝运行在 3V 左右,可以消耗 150mA。

提示和注意事项

  • 在连接电线之前,如果您不知道什么引脚是做什么用的,最好先尝试显示器,通常灯丝串联一对 AA 电池就可以了(通常是侧面触点),而一对串联的 9V 电池将为栅极和阳极提供正极化;网格和阳极通常分组,一个好主意是找到实际的“阳极零”,因为它很可能是数字或字母数字部分的第一段,通常所有网格都相同且顺序相同,将电线放入意外的倒序使软件在最后变得更加笨拙,而网格相反,显然遵循引脚顺序
  • 在灯丝电源上放轻松一点,一点一点地增加电流,待在黑暗中,当您开始看到灯丝变得略微白炽灯时,只需稍微减少一点就完成了,功率电位计是完美的,有时您会发现这些旧电视,但现在很难
  • 以理智的方式增加栅极和阳极上的电压,荧光粉会无法修复地燃烧,电路也会进行扫描,因此如果系统挂起,您将在单个栅极部分连续提供过多的功率
  • 对电网\阳极电压进行妥协,注意电网可能会消耗一些电流,不值得推动这一点,最好注意阳极
  • 为您的整个项目\设置使用单个变压器是理想的,也可以使用一些混合解决方案,但是切换 PSU,尤其是接地的 PSU 会给您带来恶作剧,这就是为什么在试验时使用经典总是一个好主意变压器电源
  • 您可以扩展此驱动程序,添加一些 CD4094 和/或 CD4017,当然,如果您需要 8 个或更少阳极,您可以去掉第二个 4094,与 4017 的情况相同,但如果您希望驱动程序准备就绪,只需构建尽可能完整
  • 如您所见,阳极晶体管的基极上没有电阻器,这提供了超快的驱动器并缩小了零件清单,但使 CD4094 消耗了一些功率,它们几乎根本不会加热,但某些芯片样本可能输出太强,检查电流消耗,以防芯片不会烧毁,因为耗散的功率在最大允许范围内,在 5V 电源下,每个引脚的电流可以在 4mA 范围内
  • 可以通过灯丝上的一些电流冲击来更新旧的疲惫显示器,如果整个显示器变暗而不仅仅是烧焦的部分,他们说你连续五次将电线明显地变成白炽灯(黄色)每次两秒钟,从未尝试过,但它可能需要两倍于灯丝额定电压,这可以清洁它们,但显然它对非常古老的\古董更有用......而且有风险,那些不是灯泡,你可以折断电线

代码

  • 带有工作程序的 Arduino 代码
带有工作程序的Arduino代码Arduino
/* Versatile VFD Display Hrdware Interface Arduino Program 版权所有 (C) 2019 Genny A. Carogna 该程序是免费软件:您可以根据自由发布的 GNU 通用公共许可证的条款重新分发和/或修改它Software Foundation,许可证的第 3 版,或(由您选择)任何更高版本。分发此程序是希望它有用,但不作任何保证;甚至没有对适销性或针对特定目的的适用性的暗示保证。有关更多详细信息,请参阅 GNU 通用公共许可证。您应该已经收到一份 GNU 通用公共许可证以及该程序。如果没有,请参阅 .*//* 此代码以“幕后”方式使用来自 Arduino 的资源,timer1 和 SPI 模块都已使用且很忙 * ,所以你在使用 SPI、SPI 引脚和一些基于 timer1 的功能时可能会遇到大问题......建议的电路 * 没有板载内存,因此必须连续“扫描”段设置,每个网格 100 次每秒 * ,来自 Arduino 段数组,这也转化为所谓的“过度”CPU 工作,也就是说,你知道,* 最后只是经常使用微型,它可能会达到 3 左右CPU 在占用时间方面的工作百分比,您也可以尝试 * 使用 Arduino 的常规 SPI 工具,但它需要对输出和程序进行深入分析 * * 此代码适用于任何 8 位 Arduino,3.3V 也应该适用好吧,也许降低 SCK 频率,考虑到 CD4094 * 沿着它供电并且可能“欠压”(是的,正是超频原则来炒你心爱的PC) */#define ledLed 13 // 它是 LED 引脚,导致 LED 点亮,你知道 LED 点亮意味着一些与 LED 相关的东西(当然是科学家 mumbojumbo)#define strobePin 4 // Arduino 引脚致力于“频闪”行#define strobeHold 10 // 微秒 // 切换光耦合器的保持时间...不是兆赫兹快但可以接受// 我的显示器的数据(盒式磁带录音机、audiophoolery CD 阅读器和紧凑型立体声音响) ...不要介意,删除,只需定义“gridAmount”和“anodeAmount”#define JVC#define mitsubishiGrids 10#define mitsubishiAnodes 9#define marantzGrids 9#define marantzAnodes 14#define JVCGrids 11#define JVCAnodes 19#if defined mitsubishi define gridAmount mitsubishiGrids#define atomicAmount mitsubishiAnodes#elif defined marantz#define gridAmount marantzGrids#define ananoAmount marantzAnodes#elif defined JVC#define gridAmount JVCGrids#defineanoAmount JVCAnodes#endif//这个数组,segments[x],存储段位//段[0] 表示网格零,一个d 最不重要的位是该网格中的段零//您可以随意访问和修改此数组,从任何地方,无需做任何其他事情,效果立即可见//显示器上,并且只要您不这样做't 更改位,对于每个网格显示超过 8 个段,您需要一个 // 每个网格 16 位或 32 位容器,这是从上面的#define(s) 自动管理的#if ananoAmount> 16volatile uint32_t segment[gridAmount] ={0}; // 每个网格超过 16 个段(需要 32 位)#elif 阳极数量> 8volatile uint16_t 段[gridAmount] ={0}; // 每个网格超过 8 个段(16 位,双传输)#elsevolatile uint8_t segment[gridAmount] ={0}; // 每个网格 8 个或更少段(8 位)#endifvoid setup(){ // 以快速\直接方式将 SPI 引脚和一些功能性引脚作为输出 *portModeRegister(digitalPinToPort(PIN_SPI_SS)) |=digitalPinToBitMask(PIN_SPI_SS); *portModeRegister(digitalPinToPort(PIN_SPI_MOSI)) |=digitalPinToBitMask(PIN_SPI_MOSI); *portModeRegister(digitalPinToPort(PIN_SPI_SCK)) |=digitalPinToBitMask(PIN_SPI_SCK); *portModeRegister(digitalPinToPort(strobePin)) |=digitalPinToBitMask(strobePin); *portOutputRegister(digitalPinToPort(strobePin)) &=~digitalPinToBitMask(strobePin); // 放低 *portModeRegister(digitalPinToPort(ledLed)) |=digitalPinToBitMask(ledLed); *portOutputRegister(digitalPinToPort(ledLed)) &=~digitalPinToBitMask(ledLed); // 把它放在低延迟(800); // 等待 CD4017 重置完成的一些延迟(您需要在为 4017 通电后运行代码,这会使其在您一次性通电的情况下自动运行)cli(); // 禁用中断,让我们调整一些东西,而猫和狗不会到处逃跑 // timer1 配置,它使中断发生“网格乘以 100”每秒……这提供了 100Hz 的总刷新率,这是可以的 TCCR1A =0; TCCR1B =0; TCNT1 =0; OCR1A =160000 / gridAmount; TCCR1B |=(1 < 24 SPDR =~uint8_t(segments[turn]>> 24); // 我们需要 CD4094 上的取反位(晶体管排列的 cos) while (!(SPSR &(1 < 16 SPDR =~uint8_t(segments[turn]>> 16); // 我们需要 CD4094 上的取反位(晶体管排列的 cos) while (!(SPSR &(1 < 8 SPDR =~uint8_t(segments[turn]>> 8); // 我们需要 CD4094 上的取反位(晶体管排列的 cos) while (!(SPSR &(1 < 2) pos ++; uint16_t 掩码 =0xFF80; uint8_t numbers[] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00100111, B01010, B10101010101010 switch (pos) { case 0:case 1:case 4:case 5:case 6:case 7:case 8:segments[pos] &=mask;段[位置] |=数字[值];休息;情况 2:如果 (val ==1) 段 [1] |=(1 <<8); else 段[1] &=~(uint16_t(1) <<8);休息;情况 9:segments[9] &=0xFFF0; if (val ==1) 段[9] |=3;否则 if (val ==2) 段[9] |=B1101; }}// 简单的七段数字可视化void marantzPrintNum(uint8_t val, uint8_t pos) { if (pos> 5) return;位置++;位置++; uint16_t 掩码 =0xFF80; // 删除数字的位掩码 uint8_t numbers[] ={B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00,001,1010}1010100101010段[位置] &=掩码; // 删除任何数字段[pos] |=numbers[val]; // 设置数字}// 简单的七段数字可视化void JVCPrintNum(uint8_t val, uint8_t pos) { // 来(你真的不在乎)}//

示意图

我避免绘制所有 BC557 晶体管,因为它们只是连接在所有 CD4094 输出上,都是一样的。

有一个跳线选择器(运行在红线上)你必须在 4017 芯片上配置,它在网格扫描完成时重置两个 4017,你必须在最后一个网格之后连接(或焊接)输出引脚上的飞跳线,因此如果您的显示器有 10 个网格,则跳线会在第 11 个输出端进行。

Arduino 连接用红色标出,您可以使用 USB 电源,但如果您已经有像 PC 一样的接地电源,强烈建议使用常规旧式变压器作为剩余电源。除了灯丝电源之外,这些电源必须都是直流的,我添加了一些二极管,因为您可能需要一个带有低压次级的单独变压器。灯丝功率通常在 3V 150mA 左右,一个 5V 的交流变压器就足够了。 “镇流器”可能是一个 100 欧姆的绕线功率电位器,或者一个固定电阻,或者一些 1N4007 二极管来降低电压。

BC557 晶体管将阳极上拉至阳极电压,当段关闭时,100kohm 电阻器将使电压驱动下降,而 CD4094 则正常保持在 5V。

CD4017 将由电网电压供电,不需要额外的晶体管。 4017 有一个“贫民窟”复位电路,持续时间大约为十分之一秒,您必须等待它在运行代码之前稳定下来。
级联某些 CD4017 的“原始”原理图需要其他逻辑门芯片,我使用 NPN 晶体管和光耦合器本身来复制与门,它在关闭时足够快,因此非常适合该任务,在释放时它会慢一点但我们不在乎,特别是因为 4017 上的时钟输入是施密特触发的,并且那里所需的速度并不“可怕”。

正如你所看到的,芯片和东西有各种各样的理由,好好看看。

制造工艺

  1. Squid Games Doll 使用 Arduino UNO
  2. ILI9341 TFT 触摸屏显示盾上的位图动画
  3. Web 操作的 DMX 控制器
  4. Arduino Pong Game - OLED 显示器
  5. Arduino 游戏控制器
  6. Unopad - 带有 Ableton 的 Arduino MIDI 控制器
  7. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  8. 玩 Nextion Display
  9. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  10. BME280 Nextion Display 上的温度、湿度和压力
  11. Sonar 使用 arduino 并在处理 IDE 上显示
  12. DIY 10Hz-50kHz 示波器在 128x64 LCD 显示器上