跳转到内容

示波器设计

来自维基教科书,开放的世界开放书籍
电视示波器

本书讲述的是示波器是如何设计的。我旨在使用普通电视机进行显示,但我的设计实际上也可以由 PC 使用,因为数据可以并行读取。我将描述示波器所需的所有部件。实际上,我在大约 30 年前设计了这个版本,这是我的考试作品,我正在展示它。这个新版本不使用四个线绕电路板来完成所有逻辑门,而是使用 Spartan FPGA。

电视示波器方框图

[编辑 | 编辑源代码]
电视示波器方框图

这张图片显示了我们电视示波器的方框图。它由五个模块组成。第一个模块是输入接口 (KOI),它负责来自三个旋转编码器的信号,这些编码器用于设置不同的双通道衰减 (Vots/DIV) 和扫描时间值 (扫描时间/DIV)。第二个模块 (KOA) 是我们电视示波器的模拟核心,它是一个高带宽放大器。第三个模块是触发器模块 (KOT),它使您能够在选择的信号电平和斜率上触发。第四个模块 (KOL) 是我们电视示波器的数字核心。第五个模块只是一个用于电视的接口 (KOV)。

KOF,示波器前端

[编辑 | 编辑源代码]
示波器前端

在这里你可以看到我的机械结构。每个单元都有自己的电路板。如您所见,它与上面的方框图并不完全匹配,但在这里更实用。如果你想出售一台设备,这更合适,这意味着不同的单元相互隔离,并且某种程度上是独立的。我个人认为 KOA 具有最高的商业潜力,其次是 KOT,也许 KOR 对其他人也有用。但是,KOL 和 KOV 太专业了,没有人会想要或需要它们。

我已经对这张图片进行了升级,KOT 中的自动/正常触发功能已被消除,因为它现在被硬连线到 KOL 中(参见 Ts_Enable 的新版本)。

关键组件

[编辑 | 编辑源代码]
TVS 组件列表

此列表中的机械部件(粗体)是指上面的 KOF。电气部件指的是我们电视示波器的其他部分。所有部件都相当重要。SRAM 在访问时间方面至关重要 (12ns)。PROM 并不重要,除了内存空间。PROM 可以更改为任何类型,主要需要确保大小正确。我选择 27C512 部分是因为我喜欢 (E)PROM,部分是因为我可以使用我的 Dataman S4 编程器对其进行编程。虽然整个速度都很重要,但我还选择了一个快速的运算放大器 (LM318)。比较器 (CMP01) 已过时,但我之前从 eBay 购买了一些,并且很喜欢它(同时我也在我的原始电视示波器中使用它)。两个关于复合电视同步生成和提取的专用 IC 是不必要的,因为 Spartan 可以模拟它们,但我将它们用于我的原始电视示波器,它们最大程度地减少了 Spartan 的设计工作量。


KOR,示波器稳压器

[编辑 | 编辑源代码]
示波器电源

在输入处,稳压器看到大约 17Vp。AVss 不需要 3m3 的缓冲电容,因为那里的电流相当低,但我喜欢对称。AVcc 也不消耗太多电流,但所有其他稳压器都会消耗,所以这里我们需要一个相当高的电容。为了查看不同的供电电流,我们必须首先检查不同稳压器的电压。对于 Vcc,我们有 12V,对于 Vdd,我们有 14V,对于 Vaux,我们有 15V,对于 Vint,我们有相同的 16V。

所有稳压器都可以提供约 1.5A 的电流,但在不使用散热器的情况下,TO220 无法处理超过 2W 的电流。例如,对于 Vint,这意味着最大电流为 2/16=125mA,这并不多。我不知道我的 Spartan 在 40MHz 时会消耗多少电流,但我认为不会太小。Spartan 有三个电源 (3.3/2.5/1.2V),哪个电源消耗电流?或者它们都消耗?

我认为 1.2V 是核心电源,我推测它是这里消耗电流的地方,而 125mA 听起来不够。我的计划是在所有 Spartan 电源上安装散热器。这个散热器将是一个卡扣式散热器,其 K 值约为 16K/W,据我所知,最大允许功耗为

其中 K 是散热器的冷却系数,Kiso 是隔离的热阻,Kjc 是结点到外壳的热阻。使用 Kiso=0.3,Kjc(TO220)=2 且 K=16,我们得到 7W。现在 Vint 可以消耗 7/16=0.44A 的电流,虽然所有其他稳压器的压差更小,但它们可以提供更大的电流。假设它们最大提供约 0.5A 的电流,缓冲电容足够大吗?如您所知,输入滤波器电容电压下降的一个很好的近似值为

因此,对于 10ms 的时间延迟,使用 50Hz 的交流电源,全波整流和 6.6mF,我们有 0.8V 峰峰值纹波。如果 AVcc/AVss (12V) 在任何时候都能工作,电压降不能超过 17V-(12V+3V)=2V,而稳压器需要 3V 的压差才能调节,因此总体裕量并不高。换句话说,为系统供电的总电流不能超过 1A。

另一方面,我计划使用一个能够提供 1.7Aac 的交流电源适配器,这意味着最大约为 1.2Adc。



KOI,示波器接口

[编辑 | 编辑源代码]

这是一个理论上的单元,而我对于如何设计它还不太确定,因此我在这里设计了适用于所有旋转编码器和衰减器的电路。两种不同的旋转编码器解决方案将在稍后的阶段合并到KOA和KOL中。我目标是设计一个双通道示波器,因此将有两个12步旋转编码器(在KOA中)和一个18步旋转编码器(在KOL中)。显示的POR电路将驻留在所有这三个模块中,从而形成三个独立的POR电路。

Tsw和POR控制

[编辑 | 编辑源代码]
Tsw控制

这里我展示了一个/POR电路的示意图,该电路在施加电源电压时变为低电平。它保持低电平一小段时间(约100毫秒),这使得所有IC都能设置为已知的起始值。我还展示了一个电路,该电路从旋转编码器生成五个输出数据(读取地址),这些地址然后用于设置不同的Tsw/DIV扫描时间。如今,使用旋转编码器是相当必要的,因为多极多档旋转开关已经过时,如果能找到,它们的价格也很高。我展示的另一个电路简单地嗅探地址,并通过简单的LED(在我的例子中是LED阵列)显示设置。我从中国购买了一台模拟示波器,我很喜欢它,但我非常不喜欢当超出范围时它会发出蜂鸣声的功能。在这里,我使用的是当您顺时针旋转旋钮超过最短Tsw(625ns)时,它会切换到最长Tsw(0,5s),但如果您逆时针旋转旋钮超过最长Tsw,它会停留在最长Tsw的功能。

我围绕这一点的思考有点超前,因为现在我也希望将此功能用于伏特/DIV,这意味着如果您顺时针(CW)翻转旋钮,您将从1mV转到5V,但如果您逆时针(CCW)转动旋钮,您将停留在5V范围。想象一下,您有一个大约50V的信号,而您碰巧在5V范围内逆时针(CCW)转动旋钮。您是否希望输入放大器暴露在50V下?

输入放大器(KOA)设置为1mV灵敏度,通过衰减器针对不同的伏特/DIV进行衰减,突然的50V在这里可能不太好。我似乎已经设计好了,使输入可以达到大约22V而不会破坏输入保护二极管。这里正常的示波器极限约为300Vp。


衰减器控制

[编辑 | 编辑源代码]
衰减器控制

在这里,我使用单个HC191计数器来选择衰减器电压电平(12个电平)。然后,我对4位地址进行译码,并使用优先编码器为每个电平点亮一个LED。HC191将驻留在KOA中,而不是Spartan(或KOL)中,这使得整体设计由于KOA和KOL的独立PCB而具有更多教学功能。

OOR功能(超出范围)与上面相同,但在这里,我们从1mV移动到5V(0h地址) while顺时针旋转旋钮,在5V处逆时针旋转旋钮,则意味着我们停留在5V处。


衰减器

[编辑 | 编辑源代码]
衰减器

簧片继电器消耗的电流超过25mA,这超过了HC-MOS所能提供的电流,因此我们需要某种缓冲器,我使用ULN2003。来自上面衰减器控制的输出随后被反转,因此我们需要在驱动ULN之前对其进行反转。当Cin不为零并且我们希望衰减与频率无关时,我们需要在两个衰减电阻上都加上一个电容。在1mV/DIV时,信号直接进入KOA,因此在这里我们只能看到Cin,但由于标准探头预期为25pF,因此我们必须添加大约17pF。因此,1mV/DIV是一个特殊情况,但我们可以将其视为在任何衰减级别,探头都必须看到25pF。

有四个控制公式需要考虑

其中

当我们需要考虑KOA输入时,我们有

这是预期的探头电阻,最后

其中25pF是预期的探头电容。

这简化为

这里我们只需要考虑上面关于物理R3/C3元件的特殊情况。顺便说一下,Att总是小于1,因为它只是一个简单的分压器,我认为如果我们使用1/Att,公式会更加流畅。


衰减器表

[edit | edit source]
衰减器表

我已经计算了我们12种不同设置的所有衰减器值。我的目标是在频率和电平方面都达到约2%的容差。虽然这种容差相当窄,但我部分需要并联电容器,部分需要使用E96系列的特殊1%电阻。电容器的容差通常很差(不要指望超过10%),因此衰减器表中的这部分并不那么精确。对于高灵敏度电平(低衰减),必须考虑输入级(KOA)的电容。我认为KOA的输入电容将小于8pF,而输入保护二极管(1N4148)据说最大电容为8pF,虽然该值是在零反向电压下测量的,但它们在-12V偏置时的实际电容会更好。KOA在没有二极管的情况下,输入电容估计为0pF,主要是因为电流发生器的输出电容相当低,而它与晶体管的极低输入电容串联。

我突然想到,我们的KOA输入电阻(限制保护二极管电流)的电容约为0,1pF,这远小于我们的25pF,并且也与约8pF的净二极管电容串联。因此,在实际应用中,我们可以忽略KOA输入电容。我已经这样做了,并相应地更正了衰减器表。

我选择输入电阻为470欧姆,因为我的两个模拟示波器在通道输入端标有250Vp最大值,而470欧姆将近似地将输入保护二极管的电流限制在250V/470欧姆=0,5A,而1N4148可以承受0,5A的重复峰值电流(0,3A最大直流电流)。在现实生活中,输入端不会有稳定的250V直流电压(在最坏的情况下),而只是峰值电压,所以我的限制就足够了。

限制输入电压为250V的另一个原因是,这是电容器的标准电压额定值。然而,不同的电容器承受着不同的电压,如果我们看R2,它在5V设置下几乎承受了所有电压,而在1mV设置下则没有任何电压,但我觉得,如果所有电容器都能承受250V,这是一个好方法。唯一的问题是,我的电容器库存并不都是250V的,所以我计划在特殊定制订单中购买它们(你可能很高兴地知道,我不需要那么多)。

KOA,示波器放大器

[edit | edit source]
示波器放大器

在差分输入级(A)中,我使用一对BF245A JFET晶体管。这主要是因为我想能够将输入电阻设置为高,如果你用双极性晶体管这样做,你需要达林顿晶体管来限制输入偏置电流,从而限制偏移(由于另一个晶体管使用较低的电阻工作),我不喜欢这样。在这里,我还使用了一个电流发生器(T3),主要是因为它可以轻松地设置偏置电流,同时它也产生了大量的CMRR。下一个级(B)是一个C级输入电容驱动器,而高驱动阻抗会导致低带宽。集电极电阻R3/R4不是那么大,但它们的电阻远大于发射极跟随器的输出电阻。在C级,我使用了一对锗高频晶体管(AF239),我这样做主要是为了好玩。这是增益级,我将晶体管的差分连接一直使用到这里,因为DM增益高于CM增益。你可以将一个单端增益晶体管的发射极电阻去耦来获得相同的增益,但我不喜欢那样,我认为保持信号差分更平滑。在级(D)中,只是一个发射极跟随器,以实现低输出阻抗。然而,输出连接会破坏一部分低阻抗,因为我将可变电位器设置为1k,并与一个470欧姆的电阻串联。对最大输出阻抗的粗略估计为250欧姆,对于单极点,你希望极点(fp)在频率上高3倍以达到-0,5dB,所以如果我们希望测量10MHz而没有问题,则极点应该位于30MHz。我们对250欧姆的粗略估计告诉我们,下一级的最大电容应该是21pF。

我现在将描述不同的级,从输入级(A)开始。虽然CM增益低得令人难以置信,但我省略了它,直接进入DM增益,DM增益是

这是一个相当低的增益,但与“板电阻”(rp)相比,我们使用了相当小的漏极电阻。在下一级,由于发射极跟随器,电压增益几乎正好为1,我将不会显示这一点。在C级,我们然后有我们的串联增益,这些双极性晶体管的增益表达式是

这里,级B的输出电阻(Rs)估计为25/Ic,而对于小信号晶体管,gm据说为Ic[mA]/25。在AF239的数据表中,我发现g11在800MHz时为2mS,在200MHz时为45mS,虽然这是一个导纳,但hie可能被评估为最坏的情况为500欧姆。

因此,总增益约为6*32=192。然而,这低于我的需求,我需要215。有趣!在我的位置,R3/R4可以增加很多,一方面,偏置电流需要减小,另一方面,级B有输入电容,这并不是那么关键,但会使带宽变差,而我的目标是GBW为2,15GHz。另一方面,我在计算中使用了最差的g11。

构建这个“运算放大器”非常令人兴奋,我会在增益方面超过215,在带宽方面超过2,15GHz吗?


KOT,示波器触发器

[edit | edit source]
示波器触发器

这个单元选择四种不同的触发源,并产生一个触发脉冲,以便在想要的点开始采样。这些源是CH1、CH2、EXT和LINE,通道输入直接来自KOA,EXT来自外部触发源,LINE来自50Hz交流电源线。还有一个探头校准工具,可以用来校准探头。还有一个旋转开关(V-Mode),用于选择发送到ADC的内容。然而,在IC10:b之后,存在一个误解,我在下面进行了更正。

新版本

[edit | edit source]
示波器触发器

自动触发将在KOL中启用,因此不需要Ready信号。自动触发将始终启用,以便可以显示直流信号。到目前为止,要显示直流信号,需要将触发源设置为LINE,而KOT只对交流信号提供触发信号。我将在Ts_Enable单元中进一步解释。


KOL,示波器逻辑模块

[edit | edit source]

除了 SRAM、PROM、同步 IC、单稳态多谐振荡器和故障发生器外,所有数字电路都将在 Spartan FPGA 中实现。我认为 SRAM、单稳态多谐振荡器和故障发生器无法实现,但我认为 ROM 功能是可能的,但我不想将 Gate CAD (ECS) 与 VHDL/Verilog 混合,而且我编程也不擅长。同步 IC 可以用 Spartan 实现,但我认为如果使用现有的 IC,编程工作量会更少。

Ts_Enable

[edit | edit source]
Ts_Enable

该单元嗅探输入触发信号,并使用单稳态多谐振荡器,在来自示波器模拟部分的触发信号出现时置位为高电平。多谐振荡器置位的时间略长于使用最大扫描时间 (10*Tsw_max) 扫描示波器所需的时间,而 x 方向上有 10 个“方块”,每个 Tsw。

该单元必须位于 Spartan 之外。

新版本

[edit | edit source]
带有自动触发的 Ts_Enable

此版本包含一个自动触发器,使 DC 信号能够显示。它的工作方式是 Spartan 模拟整个 10Tsw(或屏幕宽度)延迟,如果在 10Tsw 之前没有采样,则会生成自动触发。新的尖锐触发信号在自动触发之前有 <10Tsw,这意味着如果其触发在自动触发之前到来,则静态的 AC 信号将接管,这对于屏幕宽度来说是正常情况,因为我们正在观察可能只在一个 Tsw 内变化的信号。

Ts/Tswap 生成器

[edit | edit source]
Tsw 生成器

在这里,我们将 40MHz 晶体进行分频,以提供不同的扫描时间。实际上,扫描时间 (Tsw) 本身并没有生成,而是 Tsw/50,它提供了采样时间 (Ts)。还创建了一个名为 Tswap (40MHz) 的信号,用于在垂直同步时间内将采样数据从采样存储器移动到读取存储器,因为除了垂直同步时间外,无法移动采样,并且以最高速度移动采样是件好事。

除了 PROM 外,组件类型编号并不相关,因为该单元将在 Spartan 中实现。

[我将在稍后删除它,只需更新图片即可。需要注意的是,我得出结论,在使用 500 个样本的电视屏幕上显示网格意味着我需要一个 128kB 的 PROM,而减少到 250 个样本只需要一半,这意味着我可以使用我珍贵的 27C512-10 来完成 Tsw 分频和网格。这样,在设计方面,其余部分将更加简单(因为只有一个完整的字节计数器),并且通过将每个分频(Tsw)的样本数量减半,我可以在 Tsw 方面降低,从而查看更高频率的信号。缺点是我必须重新设计这张图片以及下面的编程表,另一个缺点是分辨率,即每个 Tsw 25 个样本(而不是 50 个样本)。]

新版本

[edit | edit source]
Tsw 生成器

下面,我将每个 Tsw 的样本数量从 50 个减少到 25 个。这是因为我想使用我珍贵的 27C512,它们只有 64kx8,而我最初需要 128kx8。每个 Tsw 25 个样本确实意味着我可以测量更高的频率,而分辨率会因此有所降低,但我认为每个 Tsw(分频)25 个样本就足够了。超高速 SRAM 是限制因素。



PROM 编程表

[edit | edit source]
编程表

在这里,40MHz 晶体被分频,以提供我们需要的 Ts 和 Tsw(其中 Tsw 是每个分频的扫描时间,示波器中 x 方向的分频数为十个,每个 Tsw 在这里被采样 50 次)。如你所见,最短的 Ts 是晶体周期,我认为 SRAM 的访问时间需要是这个时间的一半,因为我在使用 20ns 内存时遇到了一些问题。

新版本
[edit | edit source]
Tsw 编程表

在这里,我更新了 Tsw PROM 的编程表。我还没有做过太多研究,只是将上面的原始编程表更改为此表。我可能需要检查一下,但这很容易。

采样/交换模式开关

[edit | edit source]
采样/交换模式开关

该单元在采样 (Ts) 和交换 (Tswap) 之间切换。在采样时,采样存储器将被数据填充,并且当最后一个地址被“采样”时,会产生一个 LAR(最后一个地址就绪)。第一个 LAR 切换到交换,但交换只能在垂直同步期间进行(这里称为交换开始),此外,总采样时间可能超过 20ms(半个电视页面时间),因此我们必须等到采样完成后才能交换。在交换开始时,采样存储器的内容将以高速(在本例中为 40MHz)复制到读取存储器,由于速度如此之快,复制将在电视图像的垂直部分结束之前完成。当所有数据都已交换后,会产生另一个 LAR,它通过 NTE 使能新的触发。

在选定的起始行,将显示样本。电视屏幕上还有一个区域,该区域仅为我们的 256 ADC 数据范围(En.D-lines)而启用,该信号还使水平调整显示数据 (X-Pos) 成为可能。

新版本

[edit | edit source]
使用 VO 的采样/交换模式开关

在这里,我将“交换开始”更改为垂直脉冲 (VO),而 VO 的持续时间很短(约 200us),并且在 Spartan 内部不允许出现故障。通过这样做,我可能还能够跳过同步分离 IC (LM1881),而只使用同步发生器 IC (MSM5258),它具有我需要的信号。

Ts/Tswap 地址

[edit | edit source]
Ts/Tswap 地址

在这里,我们为 Ts 和 Tswap 生成地址。计数器初始化为 Fh,而第一个时钟脉冲将它们设置为地址为 0h 的第一个样本,从那里开始,计数器只是向上递增。我们还生成一个 LAR(最后一个地址就绪)信号,它告诉我们已达到最大地址(即,所有 500 个样本都已存储)。LAR 生成两次,第一次是在采样后,第二次是在交换后,只有在交换完成后,LAR 才会生成 NTE(新触发使能),以便可以进行新的采样。

由于使用的计数器具有同步加载功能,因此时钟需要延迟很短的时间(由一个小电容 C1 完成),因为 /LD 在时钟到来时必须为低电平。我将改为使用异步计数器。


新版本

[edit | edit source]
Ts/Tswap 地址

在这里,我消除了一个计数器,将样本数量从 500 个减少到 250 个。这与我珍贵的 27C512 EPROM 有关,同时它也简化了很多。

在这张图中,我使用 HC193 代替 HC163。这只是一个示意图,而计数器将在 Spartan 内部实现。然而,我瞄准的是 Spartan 库中的一个具有异步加载功能的计数器。在以前版本中,我使用了一个具有同步加载功能的计数器,这会使事情变得复杂(加载脉冲必须延迟时钟)。以前计数器的优点是它更快,但正如我所说,这并不重要(因为 Spartan 速度很快)。

我中继 Ts/Tswap 时钟的倒置版本(并将其称为 /Ck),这非常重要,因为它在写入存储器时会对整个时钟造成延迟。不能在生成地址的同时写入存储器。

LAR 信号被检查是否过冲(250 个样本意味着 0-249),但发生的事情是,当样本编号为 249 时,异步加载会加载 FFh,以便当第一个 Ts/Tswap 到来时,我们具有地址 0。

LAR 脉冲很短,它只是一个大约 tpd 持续时间的尖峰。然而,我们在这里不需要一个完整的脉冲,tpd 就足够初始化计数器了。这样,我们就有了大约 250 个 Ts/Tswap 的精确时间延迟。

TV_Read (adr+sim.data)

[edit | edit source]
TV_Read

这里我们生成同步IC读取的读取地址。它从垂直输出脉冲(VO)开始,该脉冲在奇数场时变高,地址由D-Read信号向前递增。信号En.D-Lines告诉系统从哪里开始读取并在电视屏幕上显示数据。En.D-lines设置了我们希望数据在屏幕上的位置。Sim.Data是一个模拟数据总线,用于与(反转的)ADC数据进行比较。来自ADC的数据被反转(模拟或数字方式),因为电视屏幕顶部的第一行行号为0,而行号向下增加,因此为了能够将行数据与ADC数据进行比较,ADC必须被反转。


新版本

[edit | edit source]
TV-Read,更简单

在这里,我还取消了处理250个样本的计数器。当D-lines未使能且垂直脉冲(VO)到达时,模拟数据(Sim.Data)和读取地址将被设置为FFh。在每次行读取(D-Read)时,模拟数据将与读取地址同时递增。因此,在第一个D-read脉冲时,模拟数据为零,地址为零。模拟数据从电视屏幕顶部开始,因此A/D值将必须反转以匹配行号(模拟数据)。当模拟数据等于反转的A/D值时,像素点亮。

此版本比原始版本更简单,部分原因是我在这里使用具有异步加载和清除的上/下计数器,部分原因是地址/样本数量只有两位十六进制数长。

在实践中,这并不重要,因为我计划使用Spartan库中预定义的计数器,但我现在还不知道它们是什么,另一方面,我可以只使用门来制造计数器,这正是我为我的CPU所做的,并且我知道它存在于库中。

内存处理

[edit | edit source]
内存处理,方框图
内存处理

采样到采样内存中进行。当采样完成且垂直脉冲到达时,采样的样本将由交换时钟移动到读取内存。完成此操作后,读取内存被读取。这是因为样本只能在电视显示样本时读取,我们需要始终看到样本。

网格PROM

[edit | edit source]
网格PROM

当模拟数据等于编程数据时,像素点亮。模拟数据从屏幕顶部线性增加,第一行值为0,反转数据使数据也为0。因此,当行号与数据相同时,像素点亮。但是,网格PROM的编程并不那么简单。


新版本

[edit | edit source]
网格数据

这里我减少了样本数量,以便能够使用我珍贵的27C512。这意味着每个Tsw(分度)的分辨率将从每分度50个样本变为每分度25个样本。但是,它也使我能够测量更高的频率。考虑50Ts/Tsw,最短的Ts为25ns,那么一个完整的分度将需要25ns*50=1,25us。现在,要可视化的信号的最短周期的估计值约为1,25us/5=250ns。反转它使所能看到的最高频率为4MHz。将分辨率减半将能够可视化8MHz。

我不打算实现模拟示波器标准功能,即10倍放大,因此我们只能测量大约8MHz的最大频率。

但是,此网格PROM的编程并不那么简单。在30年前的最初情况下,它需要查尔默斯大学最快的可用计算机花费大约两个小时!

视频输出发生器

[edit | edit source]
视频输出发生器

此图是初步的,但相当重要,因为它从根本上决定了如何读取采样内存。我的计划不同于最初的版本,在最初的版本中,我们有一个名为“Swap-start”的输出信号。我这次使用了两个SRAM,但现在正在考虑只使用每个通道一个SRAM,而MSM5258 PAL同步发生器实际上有一个复位,也许可以用来在受控的屏幕位置启动对采样SRAM的读取。最初的解决方案必须等到垂直同步。

新版本

[edit | edit source]
视频输出发生器

在这里,我取消了同步分离器IC(LM1881),而是使用同步发生器IC(MSM5258)。垂直输出脉冲(VO)的长度约为200us,它是在奇数场变正的脉冲。我预料到这里会出现问题,因为如果我们使用最短的Tsw,一个10Tsw扫描(整个屏幕)将需要250*25ns=6,25us,这也与交换速度相同。因此,强制的采样+交换将需要12,5us,也就是说,如果它花费的时间比采样时间长,这意味着交换必须等到下一个垂直脉冲(VO)。但是,如果我们考虑长的Tsw,其中10Tsw可以长达5s(10*0,5s/DIV),这种情况总是会发生。在这里,我们希望在屏幕上看到一些东西,尽管采样还没有准备好。所以这不是问题。

问题可能是,我没有嗅探VO的实际边缘,而是打算使用200us VO脉冲(而Spartan无法处理危险),这意味着如果10Tsw小于200us,我们必须等到下一个VO。另一方面,如果10Tsw大于VO,我们必须等到VO。

我已经得出结论,同步发生器IC的输出是开漏的。这样,很容易将输出电压适应Spartan。电阻器的值无关紧要,但我将使用10k。


行场解码器

[edit | edit source]
行使能

此模块生成一个信号,该信号在所有256行(这是我们的数据范围)期间为高电平。我很难理解它,并将尝试更好地理解它。它被复制为LM1881同步分离器的应用示例。

我认为我现在更好地理解了它,并进行了一些修正,最彻底的修正是从连续行数量的借位输出中取消了反相器,而这在所有连续行都被计数时是负的脉冲。在那个阶段,闩锁必须复位,以便连续行的最终计数在倒计时(CD)输入上使能一个1来停止计数。连续行是最后发生的事件,然后生成奇偶屏幕。

但是,我当时认为,虽然这里有电容器,但我需要将这部分放在Spartan之外。但我现在认为,这是不必要的,因为复合同步(CS)和垂直脉冲(VO)实际上都是脉冲。但是,行的精确开始可能需要在事后调整。

我这样推理,虽然它们是脉冲,但它们何时处于控制状态并不重要,因为它们无论如何都会同步出现。如果内部计数器的触发相对于CS延迟14us脉冲或不延迟并不重要,同样,如果VO脉冲的触发延迟200us也不重要。


TV-Read时钟

[edit | edit source]
TV-Read时钟

此单元提供偏移可能性,用于我们希望在水平方向上显示样本的位置。它还为网格和数据提供独立的偏移可能性。因此,我们可以将网格水平调整到电视屏幕的中心,并调整数据的X-POS。X-POS相当重要,因为我们经常希望调整它,以便信号在某个位置穿过网格,以便我们可以更容易地估计它的频率。

外部读取

[edit | edit source]
外部读取

这里我们尝试在外部读取采样数据。这是通过在PC中创建两个信号(VO和D-read)来初步完成的。VO是一个持续时间很短的正脉冲(通常约为200us),D-Read是一个合成的水平脉冲,它与读取地址同步读取数据。此同步在内部实现,因此为了在没有PAL同步的情况下读取数据,我们需要注意。当出现NTE(采样和交换完成)时,这意味着新数据驻留在读取内存中,但读取读取内存可能需要更短的时间(与10Tsw相比)才能达到下一个NTE(例如,新的采样和交换),在这种情况下,我们只需等待NTE 并发送VO 直到NTE 变高,也就是说,我们读取一次并发送VO 直到NTE 变高,然后我们再次读取(新数据)。

KOS,示波器Spartan

[编辑 | 编辑源代码]
Spartan 连接

虽然它被整合在 KOL 中,但这并不是一个独立的单元。然而,我需要指定 Spartan 的几个步骤(和门编程)。关键在于这里只使用纯门技术,因为我对它了解不多,并且为了简化(在我的世界中),尽可能减少使用 Spartan,同时将整体尺寸缩至最小。

所有进入 Spartan 的信号将从 5V 外部系统通过一个 100 欧姆的串联电阻,而 Spartan 并不耐受 5V 电压。然而,Ts_Enable 可以使用 3.3V 实现(HC-MOS 可以工作到 2V)。40MHz 晶体打算使用一个 5V DIL 晶体,需要一个 100 欧姆电阻,这也适用于 5V Tsw PROM(IC3)和旋转编码器计数器(IC6-7,HC191)的输出,然而,旋转编码器计数器可以使用 3.3V 以及施密特触发器(IC8)。

虽然 Ts_Enable 的触发脉冲来自一个“模拟”5V 系统,但我认为在 Spartan 之前串联一个 100 欧姆电阻会更具吸引力。

总的来说,我需要添加 10 个 100 欧姆电阻(我检查过,3.3V 足够用于 5V 系统上的高电平)。


新版本

[编辑 | 编辑源代码]
Spartan 连接

这个版本将有一个用于自动触发功能(10Tsw)的计数器输出。它还将整合所有用于 Spartan 接口所需的电阻。

我有点认为来自 5V 系统的 100 欧姆电阻有点太低了,因为假设 Spartan 存在输入保护二极管,那么最大输入电压为 4V(3.3V+0.7V)。那么(5V-4V)/100 为 10mA。Spartan 本身可能可以承受这个电流,但是提供这个电流的单元必须能够提供 10mA。而现在我不确定它们是否能够做到。PROM 可以,但 DIL 晶体和同步发生器 IC 呢?我检查过,同步发生器 IC 的推荐最小电源电压为 4V。

我得出的结论是,同步发生器 IC 具有开漏输出,这意味着我可以将输出设置为任何我喜欢的值(只要它低于 5V 电源)。所以这个 IC 不需要一个串联输入电阻连接到 Spartan。

我已经对这张图片进行了升级,我的理念是现在所有 Spartan 外部的 IC 都将在 5V 下运行。然而,这个电压(Vcc)并没有标注,只有 3.3V(Vdd)情况下的电源电压标注了。Spartan 需要通过电阻接受 5V,但它的 3.3V“核心”可以驱动 5V 逻辑。

我已经修改了这个图纸,因为我突然决定将旋转编码器的计数器放在 Spartan 中。计数器实际上并不那么特别,只是我很难意识到这一点。计数器只是使用 U/D' 输入和 CLK 输入的简单向上/向下计数器。这些在 Spartan 库中一定可以使用,如果不存在,我实际上可以使用普通门来制造它们。

KOV,示波器电视模块

[编辑 | 编辑源代码]
示波器电视模块

行使能(LE)部分将从 Spartan(借助内部计数器)生成,因此为 3.3V,所有其他信号都是外部的,幅度为 5V。

门将使用 5V 电源,我已经检查过 3.3V 足够用于高电平。


我使用分立逻辑封装设计了这个电视示波器。因此,整个设计可以使用封装来构建。唯一的问题是封装的数量相当多。因此,我试图通过使用 Spartan FPGA 来减少封装数量。我已经进行了一些初步计算,这似乎意味着封装数量从大约 50 个减少到 10 个。然而,分立式设计意味着使用 HC193(我的建议),但是这个计数器只工作到大约 32MHz 的频率(根据数据手册,通常情况下),而我们有时运行 40MHz。所以这个计数器可能需要修改。最后一点是,我强烈建议将 PC 读取功能中的所有信号都进行缓冲,这将节省 Spartan 和读取内存。HC541 可能适合这个目的。

华夏公益教科书