编者注:该设计实例(DI)分为两部分,这是第一部分,展示了如何通过修改振荡器来产生有用且不寻常的脉冲发生器;第二部分则将其扩展为阶跃函数。
测试电路脉冲响应的原理很简单:用尖锐的脉冲冲击电路,看看会发生什么。像往常一样,维基百科有一篇文章详细介绍了这个过程。这篇文章指出,理想脉冲——单位脉冲或狄拉克δ函数——无限高、无限窄,其下方面积为1,考虑到它会对从保护二极管到压摆率等所有方面产生影响,因此生成它非常棘手。幸运的是,它只是正态分布、高斯分布或钟形曲线的一个极端情况,生成或至少模拟起来稍微容易一些,而这个DI展示了如何做到这一点。
在现实世界中,最好的测试脉冲来自任意波形发生器。而有一种较老的技术是对窄矩形脉冲进行滤波,但如果改变脉冲宽度,滤波器的特性也需要改变以保持脉冲形状。本文详述的方法通过生成升余弦脉冲(不要与升余弦滤波器混淆)来避免该问题,这些脉冲足够接近理想值,因此非常有趣。但说实话,简单的矩形,稍加调整以避免压摆率问题,通常就足够了。
我们通过采用压缩三角正弦波振荡器的核心,并添加一些逻辑和门控来产生脉冲,从而在触发时产生单周期,这些周期从基线上升到峰值,然后再次回落,遵循余弦曲线。图1中的示意图显示了基本原理。
图1:一个简单的振荡器加上一些附加的逻辑,在触发时会产生单脉冲。
振荡器的核心与原版几乎完全相同,但重新绘制后看起来有所不同。其基本形式是一个带施密特的积分器,其中C1通过电阻R2和R3充电,直到其电压达到由D3定义的正阈值,这会翻转A1b的极性,因此C1开始向D4的负阈值放电。D1/D2提供自举以实现线性充电/放电斜坡,同时补偿D3/D4的正向电压随温度(和电源电压,尽管我们不必担心)的变化。A2输出上产生的三角波通过R7馈入D5/D6,将其压缩为合理的(余弦)正弦波(<0.5%THD)。二极管对的正向电压需要匹配以保持对称性,从而最大限度地减少偶次谐波失真。A4通过D5/6放大信号,使得脉冲刚好跨过电源轨,热敏电阻Th1对温度变化提供足够的补偿。
如果A2的输出直接连接到R1的输入,电路就会自由振荡(稍后我们会允许它这样做),但现在我们需要它从最低点开始,完成一个完整的周期,然后停止。
在静止状态下,U2a清零,A1b输出高电平,在D3上产生正参考电压。(相对于公共半电源内部轨,该电压为正。)该电压由A2a反相并通过U1a施加到R1,从而在电路中形成负反馈,并稳定在负参考电压上。(使用4053作为U1可能看起来有点浪费,但它的其他部分将在第2部分中派上用场。)
当U2a的D输入端收到(正向)触发时,其输出端会改变状态。这样,U1a将R1连接到A1b的(仍然为高电平)输出端,启动循环,反馈现在为正。经过一个完整循环后,A1b的输出端再次变为高电平,触发U2b并重置U2a,从而停止循环并将电路恢复到静止状态。相关波形如图2所示。
图2:图1中电路的一些波形。
将升余弦与理想的正态分布脉冲进行比较很有启发性,图3显示了两种情况。虽然大多数曲线都相当匹配,但底部三分之一左右有些不足,尽管可以通过增加一些额外地复杂处理来改进,但那是后话了。
图3:理想正态分布曲线与升余弦的比较,包括图1的输出。
如前所述,从原理图可以看出,如果通过抑制触发输入并阻塞其预设输入低电平以强制其Q输出为高电平来禁用U2a的操作,则该电路可作为一个简单的振荡器工作。U1a现在将A1b的输出连接到R1,电路便可自由运行。除了作为一项有用的功能外,这还有助于我们进行设置。
需要在振荡器模式下进行一些微调才能获得最佳效果。
一旦调整为振荡器,它就可以用作脉冲发生器,它依赖于完全相同的设置,以便每个脉冲都是余弦波的单个周期,偏移其幅度的一半。
图1中的原理图给出了电路的基本结构,将在第2部分文章中详细说明。使用的运算放大器是Microchip MCP6022,它们是双路、5V、10MHz CMOS RRIO器件,输入偏移小于500µV。电源为5V,中央“公共”轨来自另一个用作轨分离器的运算放大器:如图4所示,还有一个合适的输出缓冲器。
图4:一个简单的轨分离器,用于获得2.5V的“公共”轨,以及具有交流和直流耦合输出的输出电平控制和缓冲器。
C1可以切换以提供多个量程,允许使用从超过20kHz(对于25µs脉冲,在其一半高度处测量)到您想要的任意低的频率。然后还需要切换R3,参见图5了解三量程版本。(最低量程可能不需要HF微调。)虽然三波性能在1MHz左右时良好,但压缩二极管的电容在此之前就开始引入波形失真,至少对于1N4148或类似器件而言是如此。
图5:对于多量程使用时,定时电容器C1是可切换的。为了调整每个量程的HF响应,R3也必须变化。
现在,为了改善脉冲形状,我们还需要做一些额外的复杂工作。简单地说,所需脉冲的上半部分看起来是(余)正弦波,但下半部分则更具指数性,如果我们想要更好的拟合,那部分必须进一步压缩。我们可以通过将D6与一对肖特基二极管D7和D8串联来实现这一点。波形产生的不对称需要抵消,这需要在缓冲级A2b中稍微提高增益并进行不同的温度补偿。这些修改如图6所示。
图6:使用一对肖特基二极管桥接D6可以更好地拟合所需曲线,但增益和偏移需要调整。
在此模式下,R16设置偏移,R9A设置增益。U3的三个部分将:
图7显示了修改后的脉冲形状。不同的二极管或其组合可以很好地改善拟合效果,但这似乎已经足够接近了。
图7:由图6得到的改进脉冲形状。
要进行设置,请调整R16和R9A(它们相互作用),使波形底部为0V,而峰值略低于5V。由于每个脉冲的上半部分和下半部分依赖于不同的二极管,因此它们的温度系数会略有不同。0V基线现在已经稳定,但峰值高度会随着温度略有增加。
到目前为止,我们可能已经过了这样的阶段:使用微控制器(Arduino?RPi?)并添加DAC(或者在这些低频率下仅使用PWM输出),为其配备查找表(可能使用Python计算和格式化,就像这些图中的参考曲线一样),然后再考虑如何连续控制重复频率和脉冲宽度,这样做更简单、更便宜、更精确。或者干脆买一个廉价的AWG,虽然实用,但有点作弊的感觉。
但所有这些都是另一种乐趣,当然我们还没有完全完成这种方法。第2部分文章将展示如何添加更多调整,以便我们也能生成表现良好的阶跃函数。
(原文刊登于EDN美国版,参考链接:How to control your impulses—part 1,由Ricardo Xie编译)