使用微控制器捕获瞬态模拟信号通常需要添加全功率峰值保持电路作为外部外围设备。这种新颖的方法利用微处理器在模拟和数字模式之间即时切换引脚的能力,限度地减少了额外的硬件。虽然此 DI 专门使用 PIC,但该原理可应用于具有该功能的任何设备。
图 1显示了基础知识。我们稍后可能想添加一些复杂功能。
图 1基本峰值保持电路。标有 ANA 的 PIC 引脚对 C1 上的电压进行采样,然后将其重置为接地,为下采样做好准备。
A1 和 D1 组成一个“有源二极管”,当 A1 的非反相输入高于二极管的输出电压(从而高于反相输入的电压)时,它通过 R1 快速将 C1 充电至峰值输入电压。C1 保持其电荷,因为它没有放电路径(泄漏除外),直到 PIC 需要对其进行采样,此时 ADC 被分配给相关输入引脚(标记为 ANA),从而启动采集周期,在此期间 C1 的电荷与 PIC 的内部 C HOLD 共享。完成后,可以开始转换,这也会立即断开该引脚与 ADC 的连接,允许其从模拟输入更改为数字输出(低电平有效)以放电 C1,重置电路以准备下一个周期。因此,单个处理器引脚执行两个功能。图 2显示了基本功能的典型代码。
图 2简化代码,用于捕获 C1 上保持的电压,然后立即放电以重置电路,为下一个采样周期做好准备。
现在我们已经使它运行起来了,是时候指出它的缺点并提出一些解决方法了。
C1 两端的电压绝不能高于 A1 的 V DD之下的二极管压降,这会限制有效测量范围。(虽然正向电压较低的肖特基二极管可用于 D1,但较高的反向漏电会影响精度。)如果输入必须覆盖整个范围,简单的方法是先将其降低,然后接受稍微有限的测量分辨率或为 DAC 使用较低的参考电压(2.55 V 可能是理想的)。A1 的 V DD可以升高(见下文)以允许完全正向摆幅。同样,如果需要非常接近地读取读数,则可以将其 V SS推至负值。同样:见下文。
A1 中的任何输入偏移都会影响精度。使用 8 位 3.3 V 参考时,1 LSB 约为 13 mV,使用 12 位时约为 800 V,因此允许的偏移是其一半。(MCP6021 的偏移多为 500 V。)
请注意,虽然 C1 的电压将相对于 PIC 的 AVSS(或者可能是其 VREF 引脚)进行测量,但它将放电至 DVSS。(引脚数较少的设备将 AVSS 和 DVSS 组合在一个接地引脚上。)如果在低输入电平下精度至关重要,则请注意它们之间的任何相对偏移。微控制器通常在模拟测量期间处于休眠状态,以尽量减少此类误差,这些误差可能因设备的工作强度而异。
ADC 操作中固有的更微妙的误差源。在内部,它使用一个小电容器 (C HOLD ),根据设备的年份,其值从 10 pF 到 120 pF 不等,用于保持输入以进行处理。在采集时间内,外部电容器 C1 上的电荷与内部电容器共享,因此,除非在输入脉冲到达时 ADC 实际连接到引脚,否则它将读取低电平,按 C1 / (C1 + C HOLD ) 缩放。当 C1 = 10 nF 且 DAC 的 C HOLD? = 10 pF 时(如在更现代的 PIC 中一样),对于 10 位结果,误差将为 ~1 LSB,但对于 8 位结果,误差可以忽略不计;较低的 C1 值将导致更大的误差。
如果输入脉冲短于复位周期,且在引脚保持低位时到达,则脉冲将被衰减并有效丢失。(并确保 A1 的去耦电容能够提供不可避免的电源瞬变。)添加一个额外的 MOSFET(需要额外的 GPIO 引脚,如下图 2所示)可实现“即时”复位(或快一千倍左右,可能在一个指令周期内完成),并连接到真正的地,而不是 PIC 的内部地。(ADC 的引脚将保持为模拟模式。)在极其关键的情况下,解决办法可能是在另一个引脚上复制保持电路,并交替采样每个通道,在代码中选择较高的读数。
在我初的应用中,即测量射频信号突发的强度,这些点都不是问题,因为输入始终在 0.2 到 2.5 V 之间并持续数百微秒,而输出则缩放为从 0 到 9。
尽管存在这些保留意见,但这种开环方法比将运算放大器环绕在电容器周围的标准配置要快。由于 C1 是直接驱动的,因此输入脉冲的上升时间现在可以任意快。A1 的输出可能会瞬间过冲,但 R1C1 的较长时间常数会吸收这种干扰。
为了保证准确性,应选择 R1,以使运算放大器的输出驱动永远不会超过其电流限制值,因为这会破坏反馈回路,导致过冲和错误的高读数。此外,为了实现干净的操作,时间常数 R1C1 不应小于 A1 的轨到轨转换时间。10n + 47R(470 ns 与测量的转换时间大致相同)允许测量短至 ~3 ?s 的 2.5 V 脉冲。实验表明,R1 可以减小到 27R,对于 1 ?s / 2.5 V 输入脉冲,误差为 -10%。
C1 放电至半个 LSB 的时间约为 ~1.6 × (NumberOfBits + 1) × C1 × R OUT(LOW),其中后者对于工作在 3.3 V 的 PIC 通常约为 ~100 Ω。(“~1.6” 当然是 1 / (1 – 1 /? e )。)对于 8 位、10 nF 和 100 Ω;这约为 14 ?s,如果不需要测量到地,则可以缩短。(无论如何,有些 PIC 可能会遇到困难,特别是如果它们在 ADC 的输入路径中使用内部运算放大器。)选择在 A-D 转换完成后立即取消重置并重新启用模拟输入,在我的实现中这需要 ~20 ?s,这已经足够了,并且简化了代码。
A1 显示为 Microchip MCP6021(CMOS、RRIO、2.5–5.5 V、10 MHz GBW、<500 ?V 偏移)。MCP6001 更便宜,但规格较差。另外,双 MCP6022 非常适合 5 V 实验和原型设计,因为它采用 DIP-8 封装。
如图 1 所示,A1 可从 GPIO 引脚供电,从而允许它在 PIC 休眠时断电。这显然会将其 V DD限制为 PIC 的电源电压,从而限制如上所述的输入范围。如果您需要全范围并且有更高的开关轨可用,请使用它;如果不是,一个简单的电压倍增器(可能从 PWM 输出供电)可以解决问题。
MCP6021 的输出驱动至其 V SS的 ~5 mV 以内(8 位时 <1/2 LSB)。要直接接地,另一个电压倍增器可以提供升压负馈电,使用简单的调节器将其降低至 -0.6 V(适用于低压运算放大器)。确保 A1 两端的总电压在其限制范围内;可能需要在正倍增器中使用额外的二极管(图 3中的 D6 )来保证这一点。所有这些附加组件都集中在图 3 中。PIC 的引脚保护二极管额定电流为 25 mA,在任何故障条件下都应该能够安全承受增加的电压。虽然这些简单的 PIC 驱动电压倍增器仅适用于几毫安,但它们可以在需要时帮助为其他设备供电。
所有这些都提出了一个现实问题:上游电路的供电来源是什么?它真的能提供轨对轨信号吗?如果不是,我们也不必大惊小怪。
图 3提升运算放大器的供电轨可以实现真正的轨到轨操作,而额外的 MOSFET 可以“瞬时”重置 C1。
另一个现实问题是:如果两个升压轨都可用,为什么不使用更高电压的非 RRIO 运算放大器呢?那么负调节器 Q2/3 等就变得没有必要了。图 2 中显示的额外复杂性可能在这里不需要,但在其他地方可能会派上用场。
很大程度上,由于 PIC 的局限性,图 1 中的简单电路是准确的,但并非,但仍然被证明是可靠和有用的,特别是在电路板空间非常宝贵的情况下。它也可以用作外部峰值感应 A-D 外设的前端。基本原理也可以用于基于微处理器的套件中,以将信号线钳位到地,尽管串联的电阻大约为 100 Ω,但 MOSFET 可能会增加太多电容。