Blogs

公差分析

杰森萨赫斯5月31日,2020年

今天我们’再谈谈 公差分析。这是我在跳过的主题 一些 以前的 文章,但从来没有真正触动自己的权利。最接近的我’ve come is 保证金在那里我讨论了确定设计边缘的几种不同技术,并且通过一些计算来证明它是安全的,允许通过IRFP260N MOSFET获得一定量的电流。

在电子器件中使用公差分析来确定电路设计中某些数量的变化量。它可以是电压或电流或电阻或放大器增益或功率或温度。当您设计电路时,您使用的组件将具有一些标称值,如4.99kΩ电阻或33pf电容器或1.25V电压参考或3.3V调节器。那4.99k.Ω阻力只是标称值;实际上,制造商声称—我讨论了这意味着什么 关于数据表的文章 —阻力是4.99kΩ ±1%,即在4940和5040欧姆之间。实际上,大多数组件具有多个标称值来表征其行为;即使是一个简单的电阻有几个:

  • 抗性R.
  • 温度耐力系数
  • 热阻in.°C / W
  • 电阻上的最大电压
  • 操作和储存温度范围

更复杂的组件,如微控制器可能有数百个参数在其数据表中描述。

本文以PDF格式提供,便于打印

无论如何,您关心的是组件中的变化,而是电路中重要的变化:某些数量X.公差分析允许您组合组件值的变化并确定X的变化。这是一个例子:

示例:过压检测器,第1部分

我使用数字控制的电动机驱动器。它’通常是将硬件过压检测器放入电机驱动器中的一个好主意,使得如果直流链路两端的电压变得太大,则驱动器在连接到DC链路的组件(如电容器和晶体管)之前关闭,可能会受损。如果驱动器在再生中运行,则这是重要的,其中电动机用于向机械负载提供制动扭矩并将所得能量转换为直流链路上的电形式,在那里它必须去某个地方。在电动自行车或混合动力汽车中,这种能量将流回电池。在一些大型交流电源连接的系统中,它可能会流回电网。否则,它将导致DC链路电压上升,在DC链路电容器中存储一些能量,直到其中一个组件发生故障或电动机驱动器停止再生。 (提示:你不’T希望一个组件失败;您希望电机驱动器停止再生。)电机驱动器的控制通过固件完成,但您从不知道什么时候可能出错,而且’s why it’对于具有独立模拟传感器的重要性,如果直流链路电压变得太高,可以关闭电源晶体管的栅极驱动器。

所以在这里’对于24V标称系统的假设过电压检测器的目标:

  • Provide a 5V logic output signal that is HIGH if the DC link voltage \( V_{DC} < V_{OV} \) (normal operation) and LOW if \( V_{DC} \ge V_{OV} \) (overvoltage fault) for some overvoltage threshold \( V_{OV} \).
  • \(v_ {ov}>30V \)允许某些设计边际并避免虚假旅行
  • \(v_ {ov}<35V \)确保电容器和晶体管不经历电压过度电压。
  • 前面的阈值用于缓慢更改\(v_ {dc} \)的值。 (瞬时电压检测既不是可能也不理想:所有真实系统都有某种噪声和寄生滤波。)
  • 在所有情况下,\(v_ {dc} \ ge 0 \)
  • The logic output signal shall detect an overvoltage and produce a LOW value for any voltage step reaching at least 40V in no more than 3μ在步骤开始后。
  • 在\(v_ {ov} - 1.0v \)和40v之间的过压尖峰,它超过了每100个超过100ns脉冲的\(v_ {ov} - 1.0v \)μs, shall not cause a LOW value. (This sets a lower bound on noise filtering.)
  • 过电压检测器将位于-20之间的环境温度°C and +70 °C.
  • 5v.±5%模拟电源可用于信号调理电路。

暂时,忘记该电路的动态方面(不超过3个检测到的40V步骤μS,100ns的尖峰高达40V不会引起故障),并专注于直流精度,即电路应在30V和35V之间进行跳闸。

让’虽然,我们也假设我们有一个比较器电路,该电路完全驾驶2.5V。然后我们需要做的就是创建一个分压器,使得该2.5V比较器输入对应于30V和35V之间的直流链路电压。

我们可能希望选择电阻,使其标称值对应于我们允许电压范围的中点:即32.5V在2.5V外产生。那’S比率为13:1,所以我们可以使用R1 = 120k和R2 = 10k。除了你看看 标准1%电阻值( (所谓的 E96首选数字), 你’LL最接近R1 = 121K和R2 = 10K,比率为13.1:1。这让我们到了32.75V→ 2.5V out.

但如果这些是1%的电阻器,则它们的室温值可能会随着而变化±1%:

  • R1 = 121K标称,最小值119.79K,最大122.21K
  • R2 = 10K标称,最小值为9.9k,最大10.1k

如果我们想经历最差别的分析,电阻分压器比的极端情况最小为R1和最大R2,最小R2和最大R1:

  • R1 = 119.79K,R2 = 10.1K→ 12.86 : 1 →32.15V:2.5V
  • R2 = 122.21K,R1 = 9.9K→ 13.34 : 1 →33.36V:2.5V

通过手令人思想,可以帮助使用电子表格,或在Matlab / Mathcad / Scilab / Python / Puthon / Pulia / R的分析或您最喜欢的科学计算环境是:

import numpy as np

def resistor_divider(R1, R2):
    return R2/(R1+R2)

def worst_case_resistor_divider(R1,R2,tol=0.01):
    """
    Calculate worst-case resistor divider ratio
    for R1, R2 +/- tol
    
    Returns a 3-tuple of nominal, minimum, maximum
    """
    
    return (resistor_divider(R1,R2),
            resistor_divider(R1*(1-tol),R2*(1+tol)),
            resistor_divider(R1*(1+tol),R2*(1-tol)))

ratios = np.array([1.0/K for K in worst_case_resistor_divider(121.0, 10.0, tol=0.01)])

def print_range(r, title, format='%.3f'):
    rs = sorted(list(r))
    print(("%-10s nom="+format+", min="+format+", max="+format) % (title, rs[1], rs[0], rs[2]))
          
print_range(ratios, 'ratios:')
print_range(ratios*2.5, 'DC link:')
比率s:    nom=13.100, min=12.860, max=13.344
DC link:   nom=32.750, min=32.151, max=33.361

I’刚刚假设我们将在这里使用1%的电阻,因为我有挑选电阻。即便如此,它有助于双重检查假设,从而获得从数字键1000个数量的120k(5%)或121k(1%或更低)的最低成本芯片电阻器。价格是千万,所以\ $ 2.33‰= \ 0.00233美元。 (一世’m仰望120k / 121k而不是10k,因为10k是一个常见的污垢便宜的价值。)

这样的结果是,1%和5%的芯片电阻现在围绕相同的价格。您可以使用5%的电阻来节省青铜:\ $ 0.00233 VS \ 0.00262,每个电阻为0.00029次,或每千美元的29美分。这远小于拾取机器的成本,以在PCB上组装组件;它’难以获得良好的估计可能成本,但如果您查看估计的在线装配成本计算器,则可以获得一个想法。 这里’s one 其中1000个电路板的每张电路板10.73美元的装配成本,10个不同的独特组件,电路板一侧100个SMT零件;如果你增加到200个SMT零件’S \ $ 1.28每董事会,300个SMT零件’s \$1.76 per board — at that rate, you’看着大约半个月来放置每个部分,所以不要’T QUIBBLE在电阻器之间的差异,成本为0.233美分与0.262美分。有效5%和1%芯片电阻的价格相同;你’重新支付更多,让他们组装而不是购买它们。

因此,1%0603或0402电阻应为您的默认选择。一世’D可能为大多数板选择0603,自那里’没有太多的价格差异,并且在原型上我可以用手焊接那些,如果我真的需要; 0402和较小的需要比我能处理的技能更多。 (大学教师’T SNEEZE!)

0.5%的电阻器在每次约1.5-1.7美分的比例下更昂贵。

0.1%的电阻在4.6 - 4.7美分中仍然更昂贵,但这’如果你需要准确性,也不会太糟糕。

(1%和5%电阻器是厚膜芯片电阻器; 0.5%和0.1%的电阻器是薄膜。在大多数情况下,这只是内部施工细节,但更多关于这个主题有点。)

无论如何,我们 figured out that we could use 1% resistors and have our 2.5V threshold at the comparator equivalent to something between 32.15V and 33.36V at the DC link.

我们还完成了吗?

不,因为有一堆其他措施确定电阻值。让’看看数据表 koa sper rk73h. (\ $ 4.08‰,0603 1%rk73h1jttd1213f)和 松下erj. (\ $ 8.72千万千人0603 1%ERJ-3EKF1213V):

两者都具有温度系数±100ppm/°C.我们的-20的环境规范°C to +70°C偏离室温45°C. (Let’假设董事会没有’显着加热。)将另外增加4500ppm = 0.45%。

然后,所有这些塔拉斯都可以从过载,焊接热,温度快,水分快,70时耐力快速变化0.5% - 3%°C,或高温暴露。一个越严重的是焊接热量。

松下:

就是那个’右,当他们逃离时,您的电阻会符合其广告1%的规格’t连接到任何东西;如果您实际上想要将它们焊接到电路板,则其阻力值将改变。有些人正在读这个和思考,“当然,当然,阻力会改变,它’S温度R(t)的一些功能。”这意味着反向阻力变化,回到原始值后,部分冷却后。但阻力也可能发生 不可逆转 改变。其中一些可能是由于加热和冷却引起的电阻器中的微小物理或化学变化,并且其中一些是由于焊料固化的菌株放置在零件上。我在这个主题上找到了一些文件。来自A. Vishay应用笔记标题为“在电阻数据表之间的线路之间读取”

最终客户还必须评估制造商提供的公差是否真实 实际的。例如,一些表面安装薄膜芯片电阻非常紧 对极低电阻值的公差。那’在数据表上令人印象深刻,但不是 与装配过程兼容。由于这些电阻安装在板上有一个 由于焊热源的电阻变化。焊料终端熔化,流动,并重新固化 改变电阻值。对于低值电阻器,电阻变化量很大 大于指定的公差。为不切实际地支付了优质价格 宽容,客户一直以宽松的电阻最终’re assembled on the PCB.

一项研究, 基于商业制造商的电容器和电阻器安装指导调查’ Public Documents,提到硫磺污染:

硫污染主要与厚膜芯片电阻的使用和可靠性相关联 AG-System作为内终端。内终端中的银非常容易受到影响 通过硫污染,通过在芯片电阻中产生硫化银。银色是如此容易受到影响 与硫相结合,使硫漫射通过外终端层到内部 终止形成硫化银。硫化银遗憾的是使终端材料不导电,有效地提高电阻值,直到它基本上是开路的。反应 在这种情况下的速度受到硫的气体密度,温度和湿度的影响。这 在安装时可以通过热应力启动或抑制过程。

可以推荐惰性气体气氛安装(如上一章所述) 作为抑制硫化物污染问题的预防措施。

至于应变的影响,一个问题是 压阻性:你可以阅读另一个 Vishay应用笔记标题为“温度循环和PCB弯曲过程中SMT部件的机械应力和变形”。除了得出结论之外,这个没有良好的声音叮咬:

  • 压阻效应会造成显着的阻力 厚膜芯片电阻的变化,尤其是当 PCB弯曲,温度变化发生,或者 组件在嵌入时经历压力 或模塑。组成部分’S TCR也将受到影响。

  • 在薄金属膜芯片电阻器中没有看到这些效果。

以便’■为什么优于1%容差的SMT电阻是薄膜。这影响了SMT而不是穿孔部件,因为那里’对芯片组件的影响并不多;通孔部件至少有导致允许该部件避免当板弯曲一点时的机械应力。然而,我上面表现出的电阻数据表都不提及菌株对抗性的影响。

La La La La La,让’刚刚假装我们没有 ’听到所有那个,我们有±由于部分变化和温度系数,电阻耐受性为1.45%。

比率s = np.array([1.0/K for K in worst_case_resistor_divider(10.0, 121.0, tol=0.0145)])
print_range(ratios, 'ratios:')
print_range(ratios*2.5, 'DC link:')
比率s:    nom=13.100, min=12.754, max=13.456
DC link:   nom=32.750, min=31.885, max=33.640

现在我们’阅读31.89V至33.64V。仍然在我们30-35V的规范中,\(v_ {ov}})。我们还完成了吗?

No —我们需要剩下的电路,它’不仅仅是一个分压器。

但在我们去那里之前,让’S查看电阻器公差如何影响分压器比。

import matplotlib.pyplot as plt
%matplotlib inline

alpha = np.arange(0.001, 1 + 1e-12, 0.001)
Rtotal = 10e-3   # this doesn't matter
R1 = alpha*Rtotal
R2 = (1-alpha)*Rtotal
for whichfig, ytext, ysym in [(1,'Ratio','\\rho'),
                              (2,'Sensitivity','S')]:
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    for tol in [0.1, 0.05, 0.01]:
        r_nominal, r_min, r_max = worst_case_resistor_divider(R1, R2, tol)
        S = np.maximum(r_nominal-r_min, r_max-r_nominal) / tol
        y = S if whichfig == 1 else S/alpha
        ax.plot(alpha, y, label='$\\delta = $%.1f%%' % (tol*100))
    ax.grid(True)
    ax.legend(loc='best', fontsize=11, labelspacing = 0)
    ax.set_xlabel('$\\alpha$',fontsize=14)
    ax.set_ylabel('$%s$' % ysym,fontsize=14)
    nt = np.arange(11)
    xt = nt * 0.1
    ax.set_xticks(xt)
    ax.set_title(('%s $%s(\\alpha, \\delta) = (V - \\bar{V})/(%s\\delta\\cdot V_{\\rm in})$\n'
                +'$R_1=\\alpha R, R_2=(1-\\alpha R), V = \\alpha V_{\\rm in}$') 
                 % (ytext, ysym, '' if whichfig == 1 else '\\alpha \\cdot'));

好的,我们在看什么?顶部图形,\(\ rho(\ alpha,\ delta)\)是电压分配器误差与电阻容差的比率,其中\(\ alpha = \)标称分压器比,\(\ delta \ )是电阻器耐受性。底图,\(s(\ alpha,\ delta)\)是分压器输出的灵敏度;我们只是通过名义分压器比例分割,所以\(s = \ frac {\ rho} {\ alpha} \)。

这里 are three concrete examples:

  • \(r_1 = r_2 = r \)和\(\ delta = \)1%。然后\(\ alpha = r_1 /(r_1 + r_2)= 0.5 \),输出可以从0.99 /(0.99 + 1.01)= 0.495至1.01 /(1.01 + 0.99)= 0.505。这是一个±0.005输出错误,如果我们划分\(\ delta = 0.01 \)我们得到\(\ rho = 0.5 \),然后\(s = \ rho / \ alpha = 1. \)

  • \(r_1 = r,r_2 = 4r \)和\(\ delta = \)1%。然后\(\ alpha = r / 5r = 0.2 \),输出可从0.99 /(0.99 + 4.04)= 0.1968至1.01 /(1.01 + 3.96)= 0.2032。这是一个±0.0032输出错误,如果我们划分\(\ delta = 0.01 \)我们得到\(\ rho = 0.32 \),然后\(s = \ rho / \ alpha = 1.6。\)

  • \(r_1 = 4r,r_2 = r \)和\(\ delta = \)1%。然后\(\ alpha = 4r / 5r = 0.8 \),输出可以从3.96 /(3.96 + 1.01)= 0.7968至4.04 /(4.04 + 0.99)= 0.8032。这是一个±0.0032输出错误,如果我们划分\(\ delta = 0.01 \)我们得到\(\ rho = 0.32 \)然后\(s = rho / \ alpha = 0.4。\)

一些重要的外卖:

  • 比率\(\ rho \约2 \ alpha(1- \ alpha)\)和灵敏度\(s \约2(1- \ alpha)\)。
  • 电压分频器输出中的绝对误差与\(\ alpha \)对称,并且达到最大\(\ alpha = 0.5 \),并且对于0或1附近的\(\ alpha \)非常低。
  • 电压分频器输出的灵敏度\(\ Alpha<<1 \)近似\(s = 2 \)。如果我将更高的电压划分为较低的电压,这意味着我使用1%电阻,我可以预期大约2%的增益错误,或者我使用0.1%电阻,我可以预期约0.2%的增益错误。
  • 电压分频器输出的灵敏度\(\ beta<<1 \)其中\(\ beta = 1- \ alpha \)大约\(s = 2 \ beta \)。这意味着如果我想要一个非常接近1的分压器比,并且我使用1%的电阻,我可以期望更低的增益误差。在我之前的一个文章中 临时等同物 我使用了r1 = 2.10k的例子Ω, R2 = 49.9Ω其中\(\ alpha = 0.9768,\ beta = 0.0232 \),这意味着1%电阻,我可以期望收益误差仅为0.0464%。
比率s = np.array([1.0/K for K in worst_case_resistor_divider(2100, 49.9, tol=0.01)])
print_range(ratios, "比率s", '%.5f')
print "sensitivity S", ratios[1:3] - ratios[0]
比率s     nom=1.02376, min=1.02329, max=1.02424
sensitivity S [ 0.00048004 -0.00047053]

过电压检测器,第2部分:DC的其他东西

这里’我们的整个电路’再看:

选择2.5V电压参考

首先,我们需要2.5V源,所以我们可以将我们的分压器的输出进行比较。

TL431

理论上,我喜欢TL431类型的分流电压参考。它’S一个三终端设备’S的样式类似于精密晶体管:如果参考终端小于其2.5V阈值,则不会从阴极到阳极进行;如果它 ’s大于其2.5V阈值,它确实进行了。

TL431S廉价且无处不在。您希望0.5%-TOLERANCE 2.5V参考数量1000少于10美分吗?你说对了。这 Diodes Inc.. AN431 提供0.5%级别 从Digi-Key的数量为1000。这是针对TL431的引脚和功能兼容。 (搞砸了绑栏?那里’s the AS431,相同的价格,互换和阴极引脚,与TL432兼容。)

唯一的缺点是其电压精度在10mA处指定,因此’S的一个力量猪。您可以将其降低至1mA,但是您必须使用动态阻抗的规范,\(z_ {ka} \)来弄清楚电压在1ma上变化了多少。对于AN431,它’s a maximum of 0.5Ω,因此,从10mA降至1mA(ΔI的-9mA),电压可能降低多达4.5mV,从而增加了0.18%的有效精度。

低电流TL431

那些来自那些的下一步 在半导体NCP431B上 你可以买到 从Digi-key达到9.9美分,每个数量1000。这些工作到至少60μA,并且它们的电压精度在1mA处指定。动态阻抗\(z_ {ka} \)在1mA和100​​mA之间指定(相同0.5Ω最大),但没有60的规格μA to 1mA —他们确实显示了图36(“Knee of Reference”)声称典型的4.5a / v = 0.22Ω,你可以决定使用0.5Ω最大值和双倍效果:1欧姆次(100μA - 1MA)= 0.9mV,小于2.5V的0.04%。但是在那里 ’没有规格,所以如何知道您是否可以信任那些低电流的电压准确性?您可以在100次监管2.45V的部分μa,它会符合规范,但代表名义上的50mV错误。

Diodes Inc.有 AP431 为了 来自Digi-Key的8.6美分(数量1000) with similar specs: ±在1mA时0.5%,工作至100μ阴极电流,动态阻抗\(z_ {ka} \)< 0.3Ω从1mA到100mA。但对于确定1mA以下的电压精度没有任何有用。

diodes inc也有 ZR431 它继承了它 Zetex.,在10mA中指定,没有以下规格10mA。

TI.有类似的 ATL431LI. 为了 17美分(数量1000)来自Digi-Key, ±在1mA时0.5%,工作至100μ阴极电流,动态阻抗\(z_ {ka} \)< 0.65Ω从1MA到15mA,没有任何关于1mA的电压精度。

这些家伙要么互相复制’S集体空白,或者’是一个阴谋,一种迷你 - Phoebus Cartel. 在指定1mA以下的电压精度方面。叹。 我的猜测是它是Zetex’S Zr431的具体声明的故障,然后每个人都刚刚复制了数据表的一般形式,而无需打扰对低电流电压精度的任何要求。

LM4040 / LM4041.

下一步是LM4040和LM4041电压参考;这些在100时具有指定的电压精度μ操作,并且可以从许多制造商中获得。 LM4040是固定电压参考,LM4041是基于1.23V带隙电压的可调参考,种类的倒置TL431。对于精密电路,除非您需要可调节性,否则LM4040是更好的选择;否则,你’LL需要添加自己的电阻分压器,这将提高有效的耐受性。对于LM4040,如果您获得年级版本,它’S为0.1%的准确性,但是你’LL为此付出额外费用。以下是C级(精度0.5%)的一些选项,Digi-key的价格为1000件数量:

TI.也有 TL4050 这有一些很好的规格’s more expensive.

系列参考资料

最后,如果您正在使用微功率设计,并且您真的需要保证低电流,或者您需要最小化零件数量,那么有些参考资料将为您提供缓冲的电压参考,如下面列出的电压参考,但您’LL为它们支付更多,通常在1000次数量的50-60美分中。

使用2.5V分流引用设计

I’m将粘在半ncp431b上,只需在1ma处使用它—虽然我仍然认为’你可以的悲剧’t依赖于1mA以下的电压规格。

对于NCP431BI,其温度范围内的1MA电流下的电压规格为2.4775V至2.5125V。

我们的5V.±5%供应量可低至4.75V。我们’ll use a 2.00kΩ分流电阻使其保证(4.75V - 2.5125V)/(2.00K的最小阴极电流Ω ×1.0145)= 1.103mA。 (请记住:由于100ppm /,1.0145的因子来自4500ppm挥杆顶部的1%电阻范围°C tempco and ±45°C摆动。这略高于1mA电压规格,叶103μ以上规格,远远超过190na的最大栅极电流。)

在公差范围的另一边,我们可以拥有5.25V,阴极电流高达(5.25 - 2.4775)/(2.00KΩ ×0.9855)= 1.41mA。动态阻抗的规范\(z_ {ka} \)< 0.5Ω告诉我们我们可能会看到(1.41 - 1mA)* 0.5Ω由于最坏情况的阴极电流公差,= 0.205mV增加,使我们的总电压参考范围:

  • 2.500V名义
  • 2.5127V最大(2.5125V + 0.205mV)
  • 最少2.4775V

选择比较器

我们还需要一个比较者。重要的系统要求是我们想要一个可以在-20到+70的环境温度下供电的一个。°C,有足够短的响应时间,并没有’T引入了很多电压误差。我们的系统要求为40V 1的最多5微秒响应时间μ乍一看,脉冲意味着我们’LL可能需要快速响应,比如左右1μS或更少,但有一些因素可以努力和反对我们履行系统要求。

除此之外,它’判断和节俭的问题。到目前为止,最便宜的比较器是LM393品种。 1000数量的数字价格大致相同;最低的是 在Semi LM393DR2GH上 在SOIC-8包中,在左右 8.4美分。来自TI,St和Diodes Inc.的其他人在8.5 - 10美分。

他们如此便宜,你不能购买单一的比较器以获得较少的钱; LM393是一个双比较器,开放集电极输出,如果您’RE不会使用第二个比较器,您必须阅读数据表中的精细打印,这表示应接地未使用的引脚。

那里 are a couple of important specs in the LM393 datasheet to note:

  • 偏移电压。 This is ± 5mV max at 25°C and ±全温范围内9mv max;这有效地增加了2.5V参考容差;±9mV为2.5V的0.36%

  • 响应时间。 这通常是1.3μS为100MV的步骤,使用5MV过驱动器改变,这意味着将比较器从输出高输出低电平,我们从VIN-95MV开头,然后在VIN +下方增加到5MV以上VIN +。将此设备视为平衡标尺:如果两个输入差距等于,则输出可以缓慢变化,而如果它们足够不同,则余额将快速注意到这一点。比较器数据表通常具有显示典型响应时间与过驱动级别的图表。 ON SEMI LM393没有,这是选择另一部分可能更好的一个原因。以下是来自的响应时间图 TI. LM393数据表 —我更喜欢从TI获得的国家半导体的原始,但不幸的是Ti Hasn’t保持早期的变体,所以我们’陷入困境,更令人困惑的是:

    您将注意到从高到低电平的输出转换比低到高转换更快。如果我们查看简化的等效电路,这可能是更清晰的—这是为什么这些部件如此便宜的一部分。他们’re simple!

    我们真正拥有的是达林顿双极差分对(Q1-Q4),由电流镜(Q5和Q6)加载,开放集电极输出级(Q7和Q8)。

    • 当正输入大于负输出时,然后超过100的一半μ电流源流过Q3而不是Q2; Q2,Q5和Q6具有流过它们的相同电流,因此更多电流流过Q3而不是Q6,并且转动Q7的Q8关闭,并且输出是开路集电极。

    • 当负输入大于正输出时,反向为真:100多个以上μ电流源流过Q2而不是Q3,这意味着更多的电流流过Q6而不是Q3,并且转动Q8的Q7 ON,并且输出被拉低。

    原因高→低过渡比低过渡更快→高转换是因为输出晶体管Q8具有饱和度的存储时间。它’有点困惑为什么国家没有’t制作LM393比较器的版本 贝克夹 在输出晶体管上加速这一次。它’S也太糟糕了LM393’T具有单独的规格,用于开启和关闭转换时间— although since they’典型而不是最大规格,您可以只使用图形信息。 (或使用像这样的部分 在半TL331上 其中列出了规范表中的典型值。)

    无论如何,这很重要,因为我们有一个系统要求在有界时间内检测从高到低电平的过压和过渡,但没有时间要求在另一个方向上过渡。因此,在我们的特定应用中,我们关心高低响应时间。

确保为我们的申请工作的其他重要性是:

  • 共模电压范围:下降到零(由于PNP输入阶段),最多可在全温范围内(VCC - 1.5V)上的VCC - 2.0V°C) —我们需要在2.5V输入下工作,VCC可以低至4.75V,因此我们可以支持输入电压范围,高达4.75 - 2.0 = 2.75V。表示四分之一伏(2.75V-2.5V)的电压裕度。

  • 输入偏置电流 (400na max)和 输入偏移电流 (150NA MAX):LM393是双极器件,而不是CMOS,因此输入不完全高阻抗。输入偏置电流是流过每个输入的电流。输入偏移电流是两个输入偏置电流之间的差异。如果输入源有足够低的阻抗,则可以忽略输入偏移电流并刚刚分析输入偏置电流;否则,您可以尝试匹配源阻抗,因此源阻止的电压降在某种程度上取消。在任一情况下的电压误差的上限是\(\ delta r i _ {\ textrm {bias}} + ri _ {\ textrm {ofs}}。\)

    在这个申请中,我们’使用R1 = 10k,R2 = 121K,因此源阻抗是10k || 121k = 9.24k,比较器输入的电压误差为9.24k×最多400na = 3.7mV。这很小(0.15%)但不是零。它’不难将输入阻抗匹配到10k || 121k。在这种情况下,比较器输入的最坏情况电压误差是\(\ delta r i _ {\ textrm {bias}} + ri _ {\ textrm {ofs}}} = 9.24k× 0.02 × 400nA + 9.24K × 150nA = 1.46mV.

  • 工作温度范围: 在这里,我们’陷入困境。 LM393的工作范围为0 - 70°C,但我们需要一个工作的电路,下降到-20°C.

C,I,M(温度额定值)

对于那些年龄的美国工程师的人来说,CIM的字母意味着什么:

  • C =商业(0 - 70°C)
  • 我=工业(“cold” - 85°C) where “cold”由制造商变化:例如,-40°C对于Ti和摩托罗拉,-25°C对于国家半导体
  • m =军事(-55°C - 125°c),通常在陶瓷而不是塑料包装中

TI.使用CIM刻字系统,有时CIM或CIMQ;看看 TLC272TLC393 —TLC393数据表状态

TLC393C的特征在于在TA = 0的商业温度范围内操作°C to 70°C. The TLC393I的特点是在TA =的扩展工业温度范围内操作−40°C to 85°C. TLC393Q的特点是在TA =的完整汽车温度范围内操作−40°C to 125°C. TLC193M和TLC393M的特征在于对全部军用温度范围的操作 TA = −55°C to 125°C.

“E”(延长)有时-40°C to +125°C.大概覆盖-55°C to -40°C范围难以设计和测试,除了军事和航空航天的使用之外,在电路设计中不是常客。

在半导体上似乎使用类似的东西,至少对于NCP431:

  • c = 0到+70°C
  • i = -40到+85°C
  • v = -40至+125°C

国家半导体使用部件号表示温度范围:例如,LM393数据表包括LM193(军用TEMP系列),LM293(工业)和LM393(商业),因此LM3XX系列是商业,LM2XX是工业的,LM2XX是军人。

其他厂商喜欢Burr-Brown和Linear技术只是为了设计一切--40°C to +85°C默认情况下,有时用军用级变体覆盖-55°C to +125°C范围。现在这是大多数制造商的更多最近设备的典型行为。而不是看到3或4个温度等级,新设备可能只有1或2,而不同的规格覆盖0到70或-40至+85范围。

LM293

无论如何,覆盖我们的-20°C to +70°C范围,我们需要LM293,而不是LM393。 (以及参考,我们’ll需要ncp431bi。)这是不是’现在是大量的(它在10到20年前的重要程度上很重要;工业和军事范围设备更昂贵,不那么常见):Digi-Key销售 lm293adr. 在1000次以上的10美分。

更好的比较器

我们还可以使用TI LM393B或LM2903B比较器,这基本上是LM293,几乎每个区域都有更好的规格(它’s part of the 相同的数据表):

  • 温度范围(LM393B = -40°C to +85°C; LM2903B = -40°C to +125° C)
  • 偏移电压:25次2.5mV°C,4MV超过温度范围
  • 输入偏置和偏移电流:50NA最大输入偏置电流,25NA最大输入偏移电流(VS. 400NA,LM193 / 293/393的150NA)
  • 电源电压:3-36V操作,与LM193 / 293/393相比2-30V(注意,我们必须放弃超低电源电压,但是’我们的申请中的好的)
  • 响应时间:1μs typ. (vs. 1.3μs for LM393)
  • 静态电流:800μ最坏情况(LM393的比例为2.5mA)
  • 输出低电压:4mA水槽的550mV Max(4mA水槽为LM393的VS 700mv Max)

共模输入电压是相同的。

1000数量的Digi-key成本是关于 LM393B的9.4美分LM2903B为9.0美分。由于LM2903B具有相同规格的更宽温度范围,并且略便宜—价格反演的一个例子!— we’ll use the LM2903B.

更昂贵的比较器中可用的其他种类包括:

  • 较低的偏移电压(罕见)
  • 推挽输出而不是开放式收集器
  • 轨到轨输入
  • CMOS输入,用于支持高阻抗应用
  • 更快的反应
  • 微电机
  • 内置电压参考

我们不’需要他们的申请—虽然如果我们可以找到与2.5V参考和比较器具有大约相同总价格的部分,但内置电压参考将是具有成本效益—但是,如果您需要这些东西,您应该了解它们。只是几个例子,你可以看看 在半NCS2250上 或者 ti lmv762. 或者 ti tlv3011. 或者 最大限度im max40002。具有我可以找到的内置电压参考的最小昂贵的比较器是 微芯片 MCP65R41T-2402E 为了 Digi-Key的33美分,并且该成本超过了我们挑选的电压参考和比较器;对于尺寸约束的应用程序,这种设备可能是合适的。

滞后

为了帮助比较器开关快速,避免当其输入围绕电压阈值时噪声灵敏度,我们需要添加一些正反馈。我们不’需要很多;只有几毫伏就足够了。最简单的方法是在我们的2.5V来源和比较器之间放出稍微的阻力’S +输入。也许1K.Ω. Then add 1MΩ from the comparator’s输出到+输入。这将形成1001:1分压器,如果输出处于5V,则添加大约2.5mV,如果输出处于0V,则减去大约2.5mV。

现在,实际上我们不’t达到5V或0V输出:在顶端,它取决于我们的开放电路的上拉电阻与1M串联Ω resistor — the LM2903B’S规范列于5.1KΩ上拉电阻,所以而不是1001:1分压器,我们’LL有效地具有1006:1分压器,为阈值添加至少大约2.49mV的滞后,以使比较器输出低。

如果您真的想在温度范围内融合电阻容差的影响,则运行数字(1MΩ+5.1kΩ)×(1±0.0145) and 1kΩ × (1∓0.0145):

hyst = np.array([K*2500 for K in worst_case_resistor_divider(1005.1, 1, tol=0.0145)])
          
print_range(hyst, 'hysteresis (mV):')
hysteresis (mV): nom=2.485, min=2.414, max=2.558

那’s only about ± 72μ与2.5V阈值相比,与2.5V阈值相比的误差率小于0.003%,与主导误差源相比是微不足道的—即参考本身的0.5%精度。

在关闭点处,其中输出从低电平转换到高电平,LM2903B的输出电压为0.55V的最大值规格,电流为4mA或更小; 1001:1分压器将大致(2.5-0.55)/ 1001给我们,减去至少大约1.95mV的滞后,以转动比较器输出高。

由于抗性对关断滞后的影响小而对我们的应用不是至关重要,因此我们’ll ignore it.

使用LM2903B设计

这里 are the error sources for the LM2903B:

  • 偏移电压:4mV最大温度
  • 输入偏置电流:超过温度50NA—使用我们的121K / 10K输入分压器在负输入上,这导致额外的有效偏移电压至多50NA×(121k || 10k)= 0.46mV,足够低,我们不’T必须关注匹配对位输入的输入电阻,只要其源电阻较小即可。

那’s的总输入电压偏移误差为4.46mV。

把它整合在一起

好的,所以在这里’我们的全电路设计:

  • R1 = 121K.Ω
  • r2 = 10.0k.Ω
  • R3 = 2.00K.Ω
  • R4 = 1.00K.Ω
  • R5 = 1.00m.Ω
  • r6 = 5.1k.Ω
  • U1 = 1/2 lm2903b
  • U2 = NCP431B.
  • C1 = 56pf.
  • C2 = 100pf.

We’LL讨论在下一节中选择这些电容值的原因。

  • R1和R2设定分压器比,以便与电压参考产生VThresh = 2.5V的比较。
  • R3将分流电流设置为NCP431B至至少1.1mA最坏情况,因此它绝对比指定电压参考的1MA电平
  • R4和R5设置近似滞后级别=≈ R4/R5 × (Vout - Vthresh)
  • R6设置输出低时的下拉电流;这个值恰好匹配5.1kΩ数据表中引用的价值。 (如果该值太低,则它会增加电流消耗,并且可能违反输出电压电平的比较器规范,这对于4mA或更低;如果该值太高,则切换速度将受到影响,并且在极端的情况下,可能无法达到有效的逻辑高)

我们现在可以通过组合我们之前完成的公差分析来确定比较器输出切换的最坏情况DC阈值:

  • 电阻分压器比率R1 / R2:标称= 13.100,最小= 12.754,最大= 13.456
  • 电压参考:标称= 2.500V,最小= 2.4775V,最大= 2.5127V
  • 比较器:
    • 总输入电压误差(包括输入偏移电压+输入偏置电流)最多为4.46mV
    • 滞后转动输出低:添加≈2.49mv到+输入(这粗略±由于电阻容差,3%变化,但该误差约为72μV)
    • 滞后转动输出高:减去1.95mV和2.5mV之间的减去

因此,输入电压电平:

打开:(没有过压→ overvoltage)

  • 32.783V标称= 13.1× (2.500V + 2.49mV)
  • 31.572V最小= 12.754× (2.4775V − 4.46mV + 2.49mV − 72μV)
  • 33.905V最大= 13.456×(2.5127V + 4.46mv + 2.49mv + 72μV)

整体耐受性约为3.4-3.7%,而且大约包括:

  • ±电阻分压器的2.7%耐受性
  • −0.9%,+ 0.5%的电压参考公差
  • ±从比较器的输入电压误差0.18%容差

:(过电压→ no overvoltage)

  • 32.717V标称= 13.1× (2.500V − 2.5mV)
  • 31.508V最小= 12.754× (2.4775V − 4.46mV − 2.5mV − 72μV)
  • 33.846V最大= 13.456× (2.5127V + 4.46mV − 1.95mV + 72μV)

滞后:

  • 65mv标称= 13.1× (2.49mV + 2.5mV)
  • 57mv最小= 12.754× (2.49mV − 72μV + 1.95mV)
  • 67mV最大= 13.456× (2.49mV + 72μV + 2.5mV)

这些级别在我们的30V-35V的DC电压跳闸阈值中均可良好。

过压检测器,第3部分:动态

电子没有’T立即回复变化,因此我们必须考虑到我们输入和电路的动态。这涉及选择电容值和可能的比较器。

NCP431B绕过

电容器C2只是用于NCP431B的旁路电容,用于抑制高频噪声。大多数TL431式分流引用具有一种抗金姑娘行为,当并联电容小或大时,参考是稳定的,但是当电容恰到好处时,它可能振荡。图19来自 NCP431B数据表 shows this:

因为我们’重复使用它的分压器,以将阴极到阳极电压\(v_ {ka})超出2.5V值,我们’用曲线A粘在一起,这表示平行电容应低于约1nf或更高10μf 400以上的阴极电流μ答:(图18显示了0-140mA范围内的阴极电流,但它’基本上是不可能读取1mA阴极电流的限制—这是相当不幸的,因为该部分的电压规格是1mA;图18或19都不有助于1-10mA范围内的电流。)

无论如何,我们’LL选择C2 = 100pf,其足够低,以保持低于较低的电容限制,但足够高,以保持高频率下的输出低阻抗。就像一个双重检查:在f = 10mHz时,电容阻抗是\(z = 1 / j2 \ pi fc \ lightarrow \ left | z \ light | = 159 \ omega \)。数据表中的图13显示了典型的动态输出阻抗与频率,约0.5Ω at 1MHz and about 4Ω在10MHz,所以一个100pf isn’T将改变大大,甚至在稳定性边缘的1000pf仍然具有比图13中的曲线更高的阻抗。但是被动组件是便宜的保险;它’难以达到100%,硅会抑制噪音,没有某种电容悬挂在输出上。

其他设备,例如LM4040,设计与任何电容负载稳定,但是您’LL通常支付更多。

比较器响应时间

好的,就比较器响应时间来,我们必须查看LM2903B数据表。图30,31,36和37帮助表征典型的比较器响应时间作为过驱动的函数。



现在,我们对40V输入瞬态有响应时间要求。这是我们比较器电路的DC阈值之路。当公差处于最坏时,输入分压器是13.456:1,电路的最大阈值为33.905V,或比较器2.520V“−”输入。如果我们有超过33.905V的输入电压,它将最终绊倒比较器,但可能需要很长时间。为了确保更快的响应,我们需要超过一些标称数量的最坏情况比较阈值:这是过载级别。数据表指定典型的响应时间为5mV或更高。在5MV处,典型的传播延迟是1000ns。

(有趣的是,虽然高低输出延迟 能够 低于低到高,看起来非常低的过载水平,低到高的输出延迟较低。)

I’M将从+85中读取这些数字°图30的C图:

  • 1000ns为5mv.
  • 620ns 10mv.
  • 410ns为20mv.
  • 260ns为50mV.
  • 200ns持续100mv.

和这里’s how we’ll利用过载曲线:i’LL为C1选择几个电容值,我们’LL查看RC放松曲线,用于0V的步进输入→40V。 (在其最差分频器的输出处产生2.973V,在其最差的情况下为13.456:1)

通过这种最坏情况的分压器,the the等效电阻(121K + 1.45%)|| (10K.− 1.45%) = 9.12kΩ. Let’如果我们使用c1 = 47pf,则看到会发生什么。

def scale_formatter(K):
    def f(value, tick_number):
        return value * K
    return plt.FuncFormatter(f)

def show_comparator_response(R1nom, R2nom, C, Rtol, Ctol):
    tmax = 4e-6
    t = np.arange(-0.1,1,0.001) * tmax
    ovtresp_comparator=np.array([(5e-3,1000e-9),
                      (10e-3,620e-9),
                      (20e-3,410e-9),
                      (50e-3,260e-9),
                      (100e-3,200e-9),
                      (200e-3,165e-9),
                      (300e-3,155e-9),
                      (400e-3,150e-9),
    #                  (500e-3,145e-9),
    #                  (1000e-3,135e-9)
                                ])
    ov_comp = ovtresp_comparator[:,0]
    t_comp = ovtresp_comparator[:,1]
    tresp_requirement = 3e-6
    Vthresh_max = 2.520
    R1 = R1nom*(1+Rtol)
    R2 = R2nom*(1-Rtol)
    Rth = 1.0/(1.0/R1 + 1.0/R2)
    RC = Rth*C*(1+Ctol)
    K = R2 / (R1+R2)
    # Driving signal
    Vin_end = 40
    y_end = Vin_end*K
    u = (t >= 0) * y_end
    y = (t >= 0) * y_end * (1-np.exp(-t/RC))
    # time for RC filter to reach a particular overdrive level above Vthresh_max
    y_ov = Vthresh_max+ov_comp
    t_ov = -RC*np.log((y_ov-y_end)/(0-y_end))

    fig = plt.figure(figsize=(7,4))
    ax = fig.add_subplot(1,1,1)
    ax.plot(t,u)
    ax.plot(t,y)

    xlim = [-0.1*tmax, tmax]
    ylim = [0,3]
    ax.plot(xlim, [Vthresh_max, Vthresh_max],color='red',dashes=[3,2],linewidth=0.8)
    ax.plot([tresp_requirement, tresp_requirement], ylim, color='red',dashes=[3,2],linewidth=0.8)
    ax.plot(t_ov+t_comp, y_ov, '-', color='red')
    tresp_min = (t_ov+t_comp).min()
    #for t1,t2,y1 in zip(t_ov,t_comp,ov_comp):
    #    print t1*1e6,t2*1e6,y1
    ax.fill_betweenx(y_ov, t_ov, t_ov+t_comp, color='red', alpha=0.25)
    ax.xaxis.set_major_formatter(scale_formatter(1e6))
    ax.set_xlabel(u'time (\u00b5s)')
    ax.set_xlim(xlim)
    ax.grid(True)
    ax.set_ylabel(u'Voltage (V)')
    
    ax.annotate(u"$t_\\min = $%.2f\u00b5s" % (tresp_min*1e6), 
                  xy=(tresp_min, Vthresh_max), xycoords='data',
                  xytext=(0,-50), textcoords='offset points',
                  size=14, va="center", ha="center",
                  bbox=dict(boxstyle="round", fc="w"),
                  arrowprops=dict(arrowstyle="-|>",
                                  connectionstyle="arc3",
                                  shrinkA=0
                                 ),
                  )
    
    ax.set_title(('Comparator response to RC filter; steady-state voltage = %.2fV (%.3fV @comp)\n'
                  +'thresh voltage = %.2fV (%.3fV @comp), R1=%.1fK+%.0f%%, R2=%.1fK-%.0f%%, C=%.0fpF+%.0f%%')
                 % (Vin_end, y_end, Vthresh_max/K, Vthresh_max, 
                    R1nom/1e3, Rtol*100, R2nom/1e3, Rtol*100, C*1e12, Ctol*100),
                fontsize=9)
    
show_comparator_response(121e3, 10e3, 47e-12, 0.0145, 0.05)

这里 a little explanation is needed.

  • 蓝色步骤是从输入步骤从0V到40V的分开电压,在DC链路中,没有电容负载。
  • 绿色曲线是比较器的电压“−”输入,由RC滤波引起的。
  • 2.52V的水平虚线代表了最坏情况最高电压“−”输入比较器的输入。 (名义为2.5V + 2.49mv = 2.502V,记住?)
  • 垂直虚线3μS代表了我们对此步骤响应的时间限制。
  • 红色曲线是添加到绿色曲线的典型比较器响应时间。

对于那个红色曲线,想象一些案例:

  • 绿色曲线达到2.52V的比较阈值并留在那里。没有过载。这需要0.85μS,但比较器可能永远携带,因为没有过载。 (没有overdrive =永久服用。)

  • 绿色曲线达到2.525mV,然后停止增加。这代表5MV过驱动,也在T = 0.85周围μS在输入步骤之后,它通常需要另一个微秒用于比较器输出以用5MV过驱动器切换,总共约为1.85μs

  • 绿色曲线最高达到2.92V并留在那里,400MV过载。这次,使用400mV过驱动它仅需要150ns,使比较器开关,但绿色曲线需要1.82μs达到这一点,总共1.97μs。 (高overdrive =比较器快速开关,但电容器将永远达到该点。)

  • 最后,在大约100mV过载的甜点左右,绿色曲线达到0.96左右μS,且100mV过驱动典型的响应时间为200ns,总共1.16μs.

因此,我们可以预期比较器将输出低大约1.16μ在输入电压步骤发生后,由于输入未开始,可能有点早’留在那里,但不断增加。

这个总响应时间为1.16μS很快,我们之间有很多边缘和我们的3μ要求。何时提高电容一点点,到68pf:

show_comparator_response(121e3, 10e3, 100e-12, 0.0145, 0.05)

不错,大约需要2.2μS总响应。约150分钟?

show_comparator_response(121e3, 10e3, 150e-12, 0.0145, 0.05)

Um…刚过我们3的边缘μs deadline.

I’d可能选择120pf,它产生大约2.56的总响应时间μ在其公差的高端,仍然有一些空间来容纳杂散电容:

show_comparator_response(121e3, 10e3, 120e-12, 0.0145, 0.05)

你最便宜的120pf.±Digi-Key的1000件数量下的5%NP0 50V 0603电容是 Waisin 0603N121J500CT. 每次约1.1美分。如果你’愿意使用0402电容,选择 Waisin 0402N121J500CT., 在每分钟下面0.77美分。 (0201甚至更便宜,每次为约0.66美分 Murata Grm0335C1H121JA01D。如果我们可以居住100pf,因为它’我们可以找到更标准的值,我们可以找到0402 yageo cc0402jrnpo9bn101 电容器每次0.55美分。)

C0G / NP0电容器 比X5R / X7R / Y5V电容器更稳定。它们在高电容上花费更多,但如果您’在1000pf下,一般在那里’■使用C0G / NP0电容器没有显着的成本溢价。这是您应该用于密切滤波的电容器;选择±如果可以的话,5%。在那里120pf’■使用5%容差的额外保费。最后,50或100V的电压额定值是“free”如果您处于这些低电容值,所以唐’T T Foreat尝试优化和购买10V或25V部分以降低成本。

过滤的侧面:忽略瞬间尖峰

我们还需要防止从\(v_ {ov} - 1.0v \)到40V到达\(v_ {ov} \)并导致过电压的脉冲。让’检查以确保我们的120pf滤波器电容器执行诀窍—实际上,要确定,我们’LL使用电容器公差的低侧,120pf− 5% = 114pF:

t = np.arange(-0.25,3,0.001)*1e-6
dt = t[1]-t[0]
u1 = (t >= 0)*1.0
tpulse = 100e-9
u2 = (t >= tpulse) * 1.0

R1 = 121e3
R2 = 10e3
Rth = 1.0/(1.0/R1 + 1.0/R2)
RC = 120e-12 * 0.95 * Rth

fig = plt.figure(figsize=(7,7))
for row in [1,2]:
    ax = fig.add_subplot(2,1,row)

    for V_OV, label in [(31.572,'minimum $V_{OV}$'),
                        (32.783,'nominal $V_{OV}$'),
                        (33.905,'maximum $V_{OV}$')]:
        v_pre_spike = (V_OV - 1.0)
        v_in = v_pre_spike + (40-v_pre_spike)*(u1-u2)
        dV1 = (40-v_pre_spike)*u1*(1-np.exp(-tpulse/RC))
        y = (v_pre_spike 
           + (40-v_pre_spike)*(u1-u2)*(1-np.exp(-t/RC))
           + dV1*u2*(np.exp(-(t-tpulse)/RC))
             )
        y2 = (v_pre_spike 
           + (40-v_pre_spike)*u1*(1-np.exp(-t/RC)))
        hl = ax.plot(t,y-V_OV,label=label)
        c = hl[0].get_color()
        ax.plot(t,y2-V_OV, dashes=[4,2],color=c)
        ax.plot(t,v_in - V_OV, linewidth=0.5, color=c)

    ax.plot(t,t*0,'--',color='black')
    if row == 1:
        ax.set_ylim(-1.5,9.5)
    else:
        ax.set_ylim(-1.2,0.5)
    ax.grid(True)
    ax.set_xlim(t.min(), t.max())
    ax.legend(loc='lower right', fontsize=11, labelspacing=0)
    ax.xaxis.set_major_formatter(scale_formatter(1e6))
    ax.set_ylabel(u'$V_{in} - V_{OV}$ (V)', fontsize=13)
    if row == 2:
        ax.set_xlabel(u'time (microseconds)')
fig.suptitle(u'Short pulse rejection: RC=%.2f$\mu$s' % (RC/1e-6),y=0.93);

它确实如此,但没有大量的保证金。 (最初我认为从\(v_ {ov} -0.5v \)到40v但不起作用的脉冲要求。)

那里’在这里有一个细线:我们需要一个过滤器,足够慢,它会阻挡这些尖峰,但快速足以让过电压在不到3的时间内跳闸μs.

其他想法

最糟糕的情况与根和正方形

我在任何地方都有最糟糕的情况做我的大部分工作。这就像墨菲’S类固醇的法律:R1处于低端的耐受性限制, R2位于高端的公差限制, U2’S引用位于其容差限制的边缘,所有这些因素都有正确的方向,以便对我进行密谋并给我一个最坏的输出。

总的来说,这真的不太可能,比任何一个不同的组件都不太可能在他们的极限边缘…它可能过于悲观。

另一种方法是使用各个组分公差的根和平方。这是一个小天真的,因为并非所有公差重量同样在确定系统变异性的限制时。但是您可以使用Monte Carlo分析,在那里模拟大量的值。例如,让 ’S刚刚采用分压器,假设这一位1%的电阻具有高斯分布,具有标准偏差,例如0.2%。然后我们可以尝试一百万个样本:

np.random.seed(123)

Rstd = 0.002
N = 1000000
R1 = 121e3 * (1 + Rstd*np.random.randn(N))
R2 = 10e3 * (1 + Rstd*np.random.randn(N))
fig = plt.figure(figsize=(7,11))
ax = fig.add_subplot(3,1,1)
ax.hist(R1/1000, bins=100)
ax.set_xlabel('$R_1$',fontsize=13)
ax = fig.add_subplot(3,1,2)
ax.hist(R2/1000, bins=100)
ax.set_xlabel('$R_2$',fontsize=13)
a = R2/(R1+R2)
ax = fig.add_subplot(3,1,3)
ax.hist(a, bins=100)
ax.set_xlabel('$a=R_2/(R_1+R_2)$',fontsize=13)
import pandas as pd

def get_stats(x):
    x0 = np.mean(x)
    s = np.std(x)
    dev = max(np.max(x-x0), np.max(x0-x))
    return dict(mean=x0, max=np.max(x), min=np.min(x),std=s,
               normstd=s/x0, normdev=dev/x0)

df = pd.DataFrame([get_stats(x) for x in [R1, R2, a]], index=['R1','R2','a'],
                 columns=['mean','min','max','std','normstd','normdev']).transpose()
def tagfunc(x):
    return pd.Series([('K' 
                       if x.name.startswith('R') and not k.startswith('norm')
                       else 'ratio',
                       x[k])
                       for k in x.index], x.index)
def formatfunc(x):
    tag, v = x
    if tag == 'K':
        return '%.3f K' % (v*1e-3)
    else:
        return '%.5f' % v
    
df.apply(tagfunc).style.applymap(lambda cell: 'text-align: right').format(formatfunc)
R1 R2 a
mean 121.000 K 10.000 K 0.07634
min 119.885 K 9.908 K 0.07542
max 122.120 K 10.097 K 0.07729
std 0.242 K 0.020 K 0.00020
normstd 0.00200 0.00200 0.00261
normdev 0.00925 0.00973 0.01245

上表有点简洁:

  • a 是分压器比率
  • 吝啬的 是所有样本的平均值\(\ mu_x \)
  • 是所有样本的最小值\(x_ \ min \)
  • 最大限度 是所有样本的最大值\(x_ \ max \)
  • STD. 是所有样本的标准偏差\(\ sigma_x \)
  • 诺斯特德 是标准化的标准偏差(\(\ sigma_x / \ mu_x \))
  • 诺维德夫 是归一化的最坏情况偏差=(\ max(x_ \ max- \ mu_x,\ mu_x-x_ \ min)/ \ mu_x \)

对于该组样品,R1的最坏情况偏差为0.925%,R2的最坏情况偏差为0.973%,以及最坏情况偏差 a is 1.245%.

如果有人告诉我们R1具有0.925%的耐受性,R2具有0.973%的耐受性,请将这些结果与最坏的情况进行比较

R1_nom = 121e3
R2_nom = 10e3
a_nom = R2_nom/(R1_nom+R2_nom)
def showsign(x):
    return '-' if x < 0 else '+'
for s in [-1,+1]:
    R1 = R1_nom*(1+s*0.00925)
    R2 = R2_nom*(1-s*0.00973)
    a = R2/(R1+R2)
    print "R1=121K%s0.925%%, R2=10K%s0.973%% => a=%.5f = a_nom*%.5f (%+.2f%%)" % (
        showsign(s), showsign(-s), a, a/a_nom, (a/a_nom-1)*100
    )
R1=121K-0.925%, R2=10K+0.973% => a=0.07768 = a_nom*1.01767 (+1.77%)
R1=121K+0.925%, R2=10K-0.973% => a=0.07501 = a_nom*0.98260 (-1.74%)

换句话说,蒙特卡罗分析给了我们一个界限±1.245%的分压器比,但最坏的情况分析给了我们一个界限±分压器比为1.77%。

最糟糕的分析总是悲观(假设您’考虑到产生错误的所有可能因素—这不容易,甚至是实际的…但主要的是要分量容差和温度系数,而且’关于你能做的最好)和蒙特卡罗分析是…乐观的?实际的?问题是你可以’t tell 除非您知道错误分发.

如果我买卷轴±1%表面贴装芯片电阻器, 我绝对不知道他们的抵抗力分配是什么, except they’LL所有人都可能在25岁的标称值的1%以内°C,因为这是制造商声称的。假设我’ve得到了5000 10k的卷轴Ω电阻器。然后2500人可以测量10.1kΩ和2500可以测量9.9kΩ。或者他们可能都是10.1kΩ。或者它们可能均匀分布在9.9k之间Ω and 10.1kΩ。或者他们可能会在9.93K左右的正常水平较小Ω(例如,平均值为9.93kΩ和标准偏差2.4Ω) for 卷轴,但如果我买 其他 卷轴由不同批次的原材料制造,然后它们可能具有约10.02k的类似紧密正常分布Ω。也许周四晚上制造的电阻通常比其他制造商大20欧姆,因为工厂工厂是一个愚蠢的混蛋,并喜欢他厂的温度比20更温暖的温暖°C ± 1°C由公司指定’S的工程人员,并略微抛出一些制造过程....最有可能仍然通过1%的公差测试,尽管应该被解雇,以添加不必要的错误来源。

分布是 可能 有点高斯。它’s just that you can’坚决认为是这种情况。那里’S一个浮雕故事,我读到某处,但找不到,并且可能是假的,即,只要1%的电阻和5%的电阻是来自相同制造过程的两种不同的等级,换句话说:

  • 测量每个电阻
  • 如果电阻在标称值的1%范围内,它进入1%的桩
  • 如果电阻不在标称的1%范围内,但在标称的5%范围内,它进入了5%的桩
  • 如果电阻不在名义上的5%范围内,它进入了垃圾

这种案例可以产生一些奇怪的分布:

np.random.seed(123)

Rnom = 10e3
R = Rnom * (1 + 0.015*np.random.randn(N))

bin_size = 0.002
bins = np.arange(0.92,1.08001,bin_size) * Rnom
counts, _ = np.histogram(R,bins=bins)
bin_center = (bins[:-1] + bins[1:])/2.0

selections = [('1%', 'green',lambda x: abs(x-1) <= 0.01),
              ('5%', 'yellow',lambda x: ((0.01 < abs(x-1)) & (abs(x-1) <= 0.05))),
              ('reject', 'red',lambda x: 0.05 < abs(x-1))]

fig=plt.figure(figsize=(7,4))
ax=fig.add_subplot(1,1,1)
for name, color, select_func in selections:
    ii = select_func(bin_center/Rnom)
    ax.bar(bin_center[ii], counts[ii], width=bin_size*Rnom,
           color=color, label='%s (N=%d)' % (name, sum(counts[ii])))
ax.set_xlim(0.92*Rnom, 1.08*Rnom)
ax.legend(fontsize=12, labelspacing=0)
ax.set_title('Distribution of resistors selected from $\\sigma=0.015$')
ax.set_xlabel('resistance (ohms)')
ax.set_ylabel('count')
<matplotlib.text.Text at 0x10e44d610>

这里 we have a normal distribution with \( \sigma=0.015 R \) (150 ohms).

  • 其中大约一半是具有绿色分布的1%的电阻:主要是均匀分布在围绕标称的轻微聚类
  • 大约一半是黄色分布的5%电阻:中心的正态分布,中心间隙;大多数是在1-2%的容差范围内
  • 其中约0.08%被拒绝,因为它们被拒绝’从名义上超过5%

这种高斯分布的数值答案—而不是来自蒙特卡罗过程的样本—可以使用累积分布函数来确定 scipy.stats.norm.cdf:

import scipy.stats

stdev = 0.015
def cdf_between(r1, r2=None):
    cdf1 = scipy.stats.norm.cdf(r1/stdev)
    if r2 is None:
        return 1-cdf1
    else:
        return scipy.stats.norm.cdf(r2/stdev)-cdf1

# the 2* is to capture left-side and right-side distributions
N1pct = 2*cdf_between(0,0.01)
N5pct = 2*cdf_between(0.01,0.05)
    
ranges = [0, 0.005, 0.01, 0.02, 0.05]
for i, r0 in enumerate(ranges):
    cdf0 = scipy.stats.norm.cdf(r0/stdev)
    try:
        r1 = ranges[i+1]
        tail = False
    except:
        r1 = None
        tail = True
    fraction = 2*cdf_between(r0,r1)   
    if not tail:
        print "%.1f%% - %.1f%%: %.6f (%.2f%% of %d%% tolerance)" % (r0*100,r1*100,fraction,
                                                         fraction/(N1pct if r0 < 0.01 else N5pct)*100,
                                                         1 if r0 < 0.01 else 5)
    else:
        print "     > %.1f%%: %.6f" % (r0*100,fraction)
        
print "%.6f: 1%% tolerance" % N1pct
print "%.6f: 5%% tolerance" % N5pct
0.0% - 0.5%: 0.261117 (52.75% of 1% tolerance)
0.5% - 1.0%: 0.233898 (47.25% of 1% tolerance)
1.0% - 2.0%: 0.322563 (63.98% of 5% tolerance)
2.0% - 5.0%: 0.181564 (36.02% of 5% tolerance)
     > 5.0%: 0.000858
0.495015: 1% tolerance
0.504127: 5% tolerance
  • 49.50%的这些肩胛电阻分别为1%
    • 其中52.75%少于标称的0.5%
    • 其中47.25%在0.5%和1%的耐受性之间
  • 50.41%的这些翼耳电阻分别为5%
    • 其中63.98%在1%至2%的耐受性之间
    • 其中36.02%在2%和5%之间的耐受性
  • 0.09% of these apocryphal resistors we从名义上超过5%

对于某些电子元件(可能是电压参考或OP-AMP),仍可能进行评分,但它’不是一个很好的制造策略。对不同等级的需求可能随着时间的推移而波动,并且不太可能与各种等级的产量完美地相匹配。假设您是Danalog Vices,Inc。的制造副总裁,它在两级中生产DV123 OP-AMP:

  • an “A”等级OP-AMP,输入偏移电压小于1mV
  • a “B”具有1MV - 5MV输入偏移的级别OP-AMP。

也认为制造过程最终占40.7%“A”等级,57.2%“B”等级和2.1%作为产量失败。

也许在2019年,有65万DV123A OP-AMPS的订单和80,000 DV123B OP-AMPS。为了满足这一需求,Danalog恶魔制造了足够骰子的晶圆,骰子为180万份:732,600 DV123A,1,029,600 DV123B和37,800个产生的失败,满足需求和额外的额外费用。在今年年底,库存中有82,600多个多余的DV123A和229,600多个DV123B在库存中。

现在在2020年,预测订单为90万DV123A和720,000 DV123B OP-AMPS。 (一些主要客户认为他们需要更高的精确度。)你不要’这里有很多选择 …制作220万骰子将生产895,400 DV123A OP-AMP和1,258,400 DV123B OP-AMPS。结合上一年’S库存,这足以满足需求加上78,000额外的DV123A OP-AMP和768,000 DV123B。大量的多余B级OP-AMPS。

那’不太努力工作。如果级别部件的客户订单的分数远高于等级零件的天然产量,则将存在超过B级零件。如果我们有太多的AP-AMPS,Danalog恶习可以将其包装并作为B级OP-AMPS销售,但多余的B级OP-AMPS将最终作为报废库存。

那里’在单独分级的情况下,改变制造过程的现实方式来改变制造过程。我们可以添加一个 激光修剪 步骤在生产线上,以改善B级骰子,直到它们符合A级规格,这增加了一些成本。

要跳出这个分级Quagire并回到我试图制作的总体点:您无法确定组件的错误分配。能’t can’t can’T。您可能能做的最好的是从制造商获取特征数据,但这将是一个样本批处理,并且可能不代表通过产品代表制造过程’s full life cycle.

特征数据

您是否会在数据表中找到此特征数据真的是命中或错过。一些数据表唐’坚持不懈。有些信息有限,如LM2903B数据表:

数据表列出了一个规范±2.5MV偏移电压为25°C.表征图显示了62个样本±1.0mV偏移电压,在温度差异几乎没有变化。

此类表征数据的更详细示例来自 MCP6001 OP-AMP数据表,其显示输入偏移电压,偏移电压TEMPCO,偏移电压曲率或二次温度系数(!)的直方图,以及输入偏置电流。

这里’S图2-1,显示偏移电压直方图约为65000个样本:

MCP6001数据表索赔±4.5mV maximum at 25°C.我根据读取直方图嘎吱作响的一些数字,并提出了一种意思−0.3mV标准偏差σ= 1.04mv;如果这是一个整体人口的代表,那么局限±4.5mV are roughly −4σ and +4.6σ,并且对于正常分布,预期在下面的32ppm大约32ppm的屈服失败−4.5mV and 2ppm above 4.5mV. (These are just the results of scipy.stats.norm.cdf(-4)scipy.stats.norm.cdf(-4.6).)

表征图的主值(对我而言,至少)不是我可以直接取决于我可以依赖的数字数据,而是他们展示了大致高斯分布(而不是说,统一分布)并显示如何保守制造商在鉴于此表征数据时选择最小/最大限制。你听“six sigma”绑了很多—可以以一种方式解释,因为限制等于与平均值的六个标准偏差— and for a Gaussian distribution, this represents about 2 failures per billion samples covering both low-end and high-end tails. (2*scipy.stats.norm.cdf(-6))

但请注意,MCP6001数据表的典型性能曲线开头的精细打印:

本说明下面提供的图表和表是基于有限数量的统计摘要 样品并仅提供信息目的。本文列出的性能特征 没有测试或保证。在某些图形或表格中,所示的数据可能在指定的范围内 操作范围(例如,在特定电源范围内),因此在保证范围之外。

所以使用规格!我建议您只忽视您自己的危险。

减轻策略

We’谈论了很多关于如何不同的错误来源—电阻耐受,比较器输入偏移电压,温度系数等。—有助于电路参数的总不确定性,如阈值电压。它描绘了一个严峻的图片;您会发现除了最简单的电路外,很难提供小于1%的整体误差。

那里 are, however, ways to compensate for the effects of component tolerances. I count at least three:

  • 我们可以使用比率的设计技术来降低某些错误源的效果
  • 我们可以校准我们的电路
  • 我们可以使用数字信号处理来减少具有容差的组件的需求

比例设计

比率设计是一种电路设计方法,其中测量是由 比率 两个数量而不是它们的绝对价值。如果它们共享一些常见的错误来源,那么该错误将取消。我谈到了这个 热敏电阻信号调理的文章。如果我有3.3V电源供给分压器,并且用于模数转换器的相同3.3V电源,则ADC读数将是分压器比率\(R2 /(R1 + R2)\)—加上ADC增益/偏移/线性误差—并且不会受到3.3V供应本身的任何变化。

或者,假设有一些原因避免了分压器配置,而是我需要电流源来驱动电阻传感器,如下面的左电路所示:

这里的ADC读数(作为FullScale电压\(V_ {REF} \)的分数)是\(i_0r_ {sense} / v_ {ref} \),这对当前\(i_0 \)和的错误敏感电压参考\(v_ {ref} \)。

我们可以通过使用参考电阻\(R_ {ref} \)和一对模拟多路复用器U1,U2,用右侧的电路几个地处理该电阻传感器。在这里,我们必须采取两个读数,\(x_1 = i_0r_ {sense} / v_ {ref} \)和\(x_2 = i_0r_ {ref} / v_ {ref} \);如果我们划分它们,我们得到\(x_1 / x_2 = r_ {sense} / r_ {ref} \),它只敏感到两个电阻中的容差;当前\(i_0 \)和电压\(v_ {ref} \)的变化消除。

校准

校准 涉及测量准确,已知的参考。如果我有一些具有一致的测量错误的设备—例如增益和偏移量—然后我可以在校准步骤期间测量一个或多个已知输入,并使用这些测量来补偿设备错误。

一个非常常见的校准实例是使用a 皮重的重量 with a scale —平台或容器的重量不重要,因此当该平台或容器是空的,我们可以称重并使用测量作为参考,从第二次测量中减去减去。当您在超市的Deli柜台上达到半磅或200g切片的土耳其时,首先将刻度自动校准到空测量;然后使用相对于空测量的测量确定土耳其的重量。

那 kind of measurement calibrates out the offset but not the gain; a gain calibration would require some standard weight to be used, like a standard 1kg weight.

校准可以在制造外部设备(1kg重量,电压或温度标准等)期间进行—这可能有点耗时或昂贵。制造后,这种测量只能在有限的时间内并且具有大量费用。

依赖校准最重要的方面是确保校准测量保持有效。

如果电路容易偏移电压,并且我们希望使用校准来补偿该偏移,我们需要确保在使用时确保偏移不会显着变化:由于时间和温度变化,漂移可以消除效益校准。实际上,过度漂移可以使用校准进行测量 更差 而不是没有那个校准—假设一些设备测量电压并具有2mV的最坏情况。校准期间的电压偏移可能是+ 1.4mV;如果它漂移到−1.4MV然后产生包括校准的最终精度为2.8mV误差。因此测量漂移是一个严重的问题。皮重的是一种容易的环境,避免漂移的影响:在皮重步骤校准偏移后几秒钟可以测量人们或切片的火鸡或卡车,这通常太短暂,不能变化温度或时间漂移。另一方面,像示波器或万用表这样的实验室测试设备通常在校准之间使用12个月,因此他们需要设计用于低漂移和低温系数。

数字信号处理

DSP还可以帮助删除对引入错误的模拟组件的需求。模拟信号调节仍然需要处理低电平放大和高频问题,但可以在数字域中完成平方或对数或滤波或滤波或施加温度补偿等其他操作,其中可以任意小。

DSP的主要成就之一已进入 均衡 在通信中。 56K拨号调制解调器DSL. 在模拟信号处理的局限上代表DSP的胜利。我们现在认为我们有40Mbps的互联网带宽。我记得旧的声学耦合的300-Baud调制解调器:想象一下,每秒将文件发送30个字节。那’S约2.6兆字节 每天。那里’在您遇到组件公差的挑战之前,才能使用模拟信号调节。 DSP消除了所有这些 —假设您可以快速对数据进行采样和处理数据。

只需确保避免使用软件作为过度使用的拐杖 — the mantra of “哦,我们可以在软件中修复它”让我畏缩。如果模拟域中有设计错误,则可以在数字域中修复(并验证!)更复杂和昂贵。组件或噪声耦合中的不匹配是在进入微控制器之前应该处理的问题。我的一个宠物Peeves是在电机驱动器中使用单端电流检测放大器。这些天电流检测电阻相对便宜:你可以买 10MΩ1%1W 1206芯片电阻量为1000的数量小于10美分 这将产生高质量的电流感测信号,而不会增加大量额外的电压下降。但他们应该与a一起使用 差分放大器 除了寄生电路电阻和电感产生的共模电压的影响。这种共模电压很难(如果不是不可能)“just fix in software” —它可以随温度变化,导致模拟过电流检测中的不良误差,并且可以在电路中的电流路径之间引入耦合。

测量误差来源需要得到很好的理解。我在本文中讨论的过压电路是一个很好的例子;如果我只是设计一个电路并建立它并考虑完成它,因为“好吧,它似乎有效”然后,每个错误源代表我的设计中的潜在风险。理解和限制这些风险是成功设计的关键。

包起来

今天我们 went through a grand tour around the idea of component tolerances.

我们看了这个过电压检测电路:

  • R1 = 121K.Ω
  • r2 = 10.0k.Ω
  • R3 = 2.00K.Ω
  • R4 = 1.00K.Ω
  • R5 = 1.00m.Ω
  • r6 = 5.1k.Ω
  • U1 = 1/2 lm2903b
  • U2 = NCP431B.
  • C1 = 56pf.
  • C2 = 100pf.

我们检查了各种组件公差误差的来源,包括:

  • 静态错误
    • r1 / r2不匹配
    • 除此之外的其他错误源“1%”材料上列出的耐受性(例如,温度系数和机械应变)
    • 电压的精度参考U2
    • 比较器输入偏移电压和输入偏置电流
  • 动态错误
    • C1噪声滤波
    • 比较器响应时间与过驱动

我们讨论了选择电压参考和比较器的一些方面,以及关于比较器滞后。

我们探讨了使用统计分析(Monte Carlo方法)作为更乐观的替代替代案例分析,并调查了组件错误分布的问题。

最后,我们研究了缓解组件错误的方法:

  • 比例测量
  • 校准
  • 数字信号处理

一路上,我们触动了许多小切线:

  • 5%/ 1%/ 0.5%/ 0.1%芯片电阻的价格
  • 在焊接到PCB时,不可逆的电阻会改变
  • 电压分配器误差灵敏度对电阻容差,作为标称分压器比率\(\ alpha \)的函数,即\(s \大约2(1- \ alpha)。\)所以1附近的分压器比几乎没有误差,而小的分压器比率几乎双电阻容差:a 10:1使用1%电阻的分压器可以具有约2%的最坏情况误差。
  • LM393比较器的内部架构
  • 基于测量值的组件分级

我希望您携带一些有用的技术来管理下一个项目中的组件错误。

谢谢阅读!


©2020 Jason M. Sachs,保留所有权利。


要发布回复评论,请单击连接到每个注释的“回复”按钮。发布新的评论(不是回复评论),请在评论的顶部查看“写评论”选项卡。

注册将允许您参加所有相关网站的论坛,并为您提供所有PDF下载。

注册

我同意 使用条款隐私政策.

尝试我们偶尔但流行的时事通讯。非常容易取消订阅。
或登录