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