脉冲式数字ESR表的设计

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究一

前面对供参考用的外国数字式ESR表(下称原型机)进行了深入的分析。现在,开始进入自行设计的环节。
一、关于设计目标等
根据本人多年使用指针式ESR表的经验,对于这个脉冲式数字ESR表,期望他具有如下功能和特点:
1、“在路测量”ESR值
这项功能,是用于电器检修时判断电解电容的好坏,外国原型机就具备。原型机的测试电平实际不足100mV,比我当年设计的指针式ESR表还低,远低于半导体的PN结导通阈值(大概300mV),符合“在路测量”需求。原型机的测量范围是0.01Ω~99Ω,能够满足绝大部分的实际检修需求。因此,这项功能的设计,大体上照搬原机即可。
2、“在路测量”薄膜电容容量
本人在设计制作成功指针式ESR表后,在使用过程中才发现这一项功能的重要性。因为日常的一些小家电中,那些“功率”型薄膜电容常常会因为失去部分容量而引发电器故障,这些电容的故障率还颇高。这些电容,包括家用电风扇的启动电容(常见是1.2u)、电磁炉的整流滤波电容(4u或5u)和高压谐振电容(1200V的0.027u)、洗衣机的马达启动电容(10多u)、廉价小电器(比如遥控落地电风扇、养生壶/煎药壶、LED灯等)的400V降压电容,等等。因为这些薄膜电容的故障表现均是失去部分容量的,测量其容量就能作出“好坏”的判断。如果具备“在路测量”的能力,就无需把电容拆下来测,会给电器检修工作带来很大的便利。
原型机本身并不具备这项测量功能,但既然由我来设计,我觉得照搬照抄原型机设计的这种仿制没有多大意思,要有所创新和突破才好,就像我当年参考外国原型机进行指针式ESR表的设计那样——我当年不拘泥于原型机设计,按照功能做得更完善、更符合我们实际应用需求的方向,最终设计出来的指针式ESR表具备很高的完成度,其中有3处地方超越了原型机:1、能直接利用万用表的欧姆刻度盘,不需自行制作,大大方便了同好者的制作;2、完善的保护功能,极其坚固耐操;3、自带自动关机功能。
因此,我在设计目标中,把“在路测量”薄膜电容容量这一项功能也加进来。根据实际电器的这些电容容值情况,把这项“在路测量”功能的测量范围确定为0.001u~99u。
3、分辨率获得提升的电池内阻测量功能
原型机具备一定的AC电阻测量能力,即是可以测量约50V以下的电池内阻。但他的最小读数是0.01Ω,对于我们常需要用来测试内阻的锂充电电池来说,分辨能力还不足够。把他扩展到0.001Ω(即1mΩ),那么,实用性就增强了很多——虽然本数字ESR表受两线测量方式限制,对于电池内阻的测量精度有限,但因为机子设有“归零”补偿校准按钮,可以即场抵消表笔电阻等的影响,所以,增加这一项扩展测量功能,还是有一定的实用意义。
考虑到有些用户可能需要用来测量电瓶车的电池组内阻,因此,这项功能定为能测90V以下的电池内阻、最小分辨阻值为0.001Ω(即1mΩ)。
4、完善的保护功能
专用的电容ESR表,最好是能做到在常见的检修情况下,面对任何意外情形都不会坏——主要是指误测带有300V高压电的大容量电解电容的情形。
检修开关电源220V市电整流侧电路时,即使是在关机的状态下,上述大电解带300V电的情形也是会有可能遇到的(我就遇到过三四次)。这是因为,有的故障机子会因为电路不振荡/开关管不工作,滤波大电解的300V电压不能及时得到泄放。如果这时去测这些电解的ESR值,就需要ESR表经受这样的考验。
我当年设计制作的指针式电容ESR表,其保护能力就达到此情形下不会坏的水平。原型机、大部分国外网友和个别国内网友设计的指针式ESR表,从其电路判断,都不具备这一能力。
而这一点,正是电容ESR表与普通LCR电桥的最大分野,或者说是,这是电容ESR表相对于LCR的最大优势(除了价钱方面有优势外)。虽然很多LCR电桥不具备“在路测量”能力(测试灌出电平太高),但是,有一些LCR还是具备“在路测量”能力的。从后面我写的本机设计内容中将会看到,保护电路器件的存在,会引致仪表的测量精度明显下降。可以说,商业LCR是因为与ESR表的设计取向不同,他更加追求精度,不得不降低其保护能力。也因此,我们的设计目标,就不能在保护能力这一方面作妥协,至少要达到指针式ESR表的水平。
5、电路应尽量使用通用元器件
我们合作设计的这个脉冲式数字ESR表,是打算作为开源项目公开给大家的。所以,也应该像我当年设计指针式ESR表那样,尽可能全部采用通用器件,以方便大家共享成果。

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究一
我提个建议,显示部分能否增加更加直接的“红”“黄”“绿”LED指示整列,其优点在于,平时测量的时候不用观察数码管显示的数值和表格去核对是否在规定范围内,因为一般人的潜意识,即绿色代表是可用的,黄色代表性能有衰减,红色则是彻底损坏的。(类似于数字万用表的下面有一行模拟指示带)
实际工作中存在大量的电容,大大小小,使用该主机进行筛查的时候可以根据颜色指示快速判断电容的品质。当然数码显示也应该存在,遇到一些要求精确的工况下就需要仔细测试对比数据,我觉得这样的方式,适用的更加广,高效

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究二

二、直接把原电路搬移过来
原机以6只AA电池(5号电池)作9V供电,用今天的观点看,已显得不合时宜,因为我们有方便好
用的3.7V锂充电电池可供选择。改为采用3.7V锂充电电池后,不仅可以令仪表体积缩小,而且,电池方面的使用体验感会有大幅提升。
鉴于当前的MCU、运放都能工作于3.0V或3.3V,又出于尽量把锂电池容量利用起来的考虑,决定把仪表的电源电压修改为3.0V供电。相应地,需要使用LDO(低压差)的稳压IC。至于IC的封装体积问题,这与功耗有关,而这里的电路实际耗电比较小(激励脉冲的占空比比较小),将会是mA级,因此,使用小体积的稳压IC即可。
于是,经简单计算后,将原电路搬移过来,得到如下的设计草图一:
(, 下载次数: 1)
这个电路,打算在后面的MCU部分,利用其ADC能力,以Abbey所称的“虚拟锯齿波”方法,来获得原型机的计数器读取ESR值的功能。至于容量测量功能,则初步打算用我前面曾构想的“反向锯齿波”方法,来读取容量值。
原机在比较器输入端处,检出的满量程信号电压FS2=1000mV,这个值对于我们现在的3.0V供电情况来说,仍是合适的。因此,电路中的AC放大器取为33倍的名义放大值,“虚拟锯齿波”仍取SR=10mV/0.5mS。
恒流源部分,仍采用原型机的高值限流电阻方法。但由于MCU的I/O引脚驱动能力通常最大约20mA,因此,量程1仍需采用BJT做电子开关的30mA恒流源,量程2、量程3则由I/O引脚直驱限流电阻。
1、对草图一电路ESR测量部分的验算,证实问题不大。
在测试端子处,FS1=30mV。
类似前面的“分析六”那样,“站在电阻两端电压的角度观察其恒流效果”是:限流电阻两端的电压约为电源电压的3V,负载电阻两端的电压最高是30mV,前者至少是后者的100倍。此情况与原型机一样都是“100倍”,表明这里存在的非线性误差,与原型机不相上下。
保护电容C3带来的附加误差,情况也类似,因为驱动电流与FS1都是同步下降的,驱动电流在C3的形成压降所带来的误差,也与原型机不相上下。
原机是3个量程各使用一只BJT作电子开关来控制恒流源,这样,加在限流电阻上的电压实际是“电源电压-BJT饱和电压”,由于BJT饱和电压相对比较固定(约为0.1V),因此,这就等效于电源电压稍下降了一些(由5V下降为4.9V)。由前面分析可知,这里的差异带来的是增益误差,而且3个量程的增益误差是一致的,可依靠CAL调回来。
现在的电路,这里只使用了一只BJT作为其中第1个量程(30mA对应的量程)的恒流源电子开关,其他2个量程是依靠MCU内部的MOS管来充当恒流源电子开关。因此,加在限流电阻上的电压会有差异,也即是,第1量程的增益误差会与第2、第3个量程不一致。这样,在以第3个量程作校准后,会导致第1个量程的误差会增大。
综上,第1量程的误差会比原型机大,第2、第3量程的误差与原型机比较接近。原型机的误差估摸是1%,现在约增大为2%,总体上,误差方面的问题不是很大。
2、对草图一电路容量测量部分的验算,发现存在着大问题。
验算容量测量部分的对应关系有:同一测试驱动电流下,1u电容有1个计数,100u电容对应有100个计数。但是,50u电容并非是原来预期的50个计数,而是99个计数。类似地, 10u电容并非是原来预期的10个计数,而是90个计数。
很显然,这里出了大问题,输出(计数值)与输入(电容值)之间不是线性的对应关系。虽然在采用“反向锯齿波”后,传输函数的单调性方向获得了修正,但没有改变其“非线性”的属性。从这些数据看,传输函数保留的是原来的倒数关系属性,当初本人直觉此方法可行,仅是一种假像。
这个容量测量问题,必须想办法解决。否则,就会像我们已放弃的上一个方案那样,需要MCU做除法运算,这样还需要MCU配有bit位数足够的ADC,显得很是臃肿累赘。
为解决这个大问题,就需要在模拟电路这一块,让输出(计数值)与输入(电容值)之间建立起真正线性的对应关系。这需要回到传输函数关系式这一基础层面去作研究。。。。。

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究三

三、实现容量测量功能的研究
(一)先从基础层面考察设计草图1的ESR测量功能与容量测量功能
1、ESR测量功能
(1)比较器处
对于比较器,前面的“分析三”已画出了他的工作波形分析图如下:
按照函数图像的途径将这个图改画一下(纵横坐标对调),得到的图形如下:
(, 下载次数: 0)
从上面这个图可看到,时间t(与脉冲计数值n成正比)是与检出电压Vo成线性的比例关系,即是有关系式:t=(1/SR)*Vo。令y=t,x=Vo,k1=1/SR,此关系式变为:
y=k1*x,其中k1是常数
这样就容易从关系式中看出,这是一个线性系统的传输函数。
(2)测试端子处
在测试端子处,前面的“分析一”得到他的检出电压关系式为:Vo=Idt/C+IdESR。当C足够大时,则得到原型机ESR测量原理的基础关系式:Vo=Id*ESR。同样地,令y=Vo,x=ESR,k2=Id,此关系式变为:
y=k2*x,其中k2是常数
可看出,这也是一个线性的传输关系。
(3)整个测量系统
由于测试端子的输出信号Vo(经过Av=20的AC放大器放大后)是比较器的输入信号,因此,整个测量系统是2级(加上AC放大器是3级)线性系统的串接,其总特性仍是线性的,总的传输关系是:
t=(k2Avk1)ESR=(Id20/SR)*ESR
另一方面,脉冲计数值n与时间t的关系为:n=t/T,其中T=0.5mS是激励脉冲的周期。如果令Id20=SRT(对于量程3来说,就是Id=0.5mA、SR=10mV/0.5mS、T=0.5mS),那么可得到如下的原型机量程3(0.5mA驱动)的测量关系:
n=t/T=[Id20/(SRT)]*ESR=ESR
类似地可得到,对于量程2(5mA驱动)有n=10ESR,对于量程1(50mA驱动)有n=100ESR
2、容量测量功能
我们前面的设计草图1此项功能出了大问题,现在需要深入研究一下其中的因由。
(1)比较器处
采用原来预想的“反向锯齿波”方法后,比较器的工作波形变成如下的样子:
(, 下载次数: 0)
图中可看出,电容容量C越大时,时间t就越大,似乎符合测量的需求。但是,这里的传输关系,仍然与检出电压Vo构成线性的传输关系(并不能对测试端子处的非线性传输关系作出补偿)。改画一下图形,可得到下图:
(, 下载次数: 0)
图中的函数关系可改写成如下样子:
y=kx+a,其中k=-1/SR,a=to
从此式也可看出,与ESR测量时一样,这也是线性系统的传输函数。区别仅在于这里有一个偏移项(to)、以及比例系数k为负数,但不改变其线性关系的属性。
(2)测试端子处
在测试端子处,前面的“分析一”得到他的检出电压关系式为:Vo=Idt/C+IdESR。当t/C远大于ESR时,得到容量测量需用到的基础关系式:Vo=Idt/C。像上一节一样,用令y代替Vo,k2代替Idt,此关系式变为:
y=k2/x,其中k2是常数
画出这个函数最简形式的y=1/x图像,是如下的样子(网上找来的图片):
(, 下载次数: 0)
从图像可看出,这是一条曲线,不是一条直线,表明y=1/x是非线性的传输关系。由于k2是常数,所以,在测试端子处的y=k2/x也是非线性的传输关系。
(3)整个测量系统
由于在测试端子处是非线性的传输关系,因此,他送出来的信号是“失真”的信号。后面AC放大器、比较器的传输关系是线性的关系,于是,经过这2个线性系统后,最终得到的仍是“失真”的信号。也就是说,总的传输关系是非线性的传输关系,脉冲计数值n不能与ESR值严格对应起来,不能获得原来预想的容量测量功能。
二、再从基础层面研究如何实现线性的容量测量关系
(一)从关系式入手进行研究
由上一节可知,在测试端子处,容量测量需用到的基础关系式是Vo=Id*t/C。把他改写一下,得到
C=Id*tc/Vo
就原型机的ESR测量工作方式来说,这里有tc=8uS(驱动电流的脉冲宽度)、Id=0.5mA(量程3时),即t、Id是固定值,而Vo是变量。若改为tc仍是固定值(比如tc=10uS),Vo是固定值(比如Vo=100mV,这个电压表征的是测试端子处的比较器翻转等效电平),Id是以SR的速率随时间而线性逐级增加的驱动电流,即Id=SR*t,那么,就可以得到:
C=SRttc/Vo
再改写一下这个关系式,可得到
t=kC,其中k是常数,k=Vo/(SRtc)
这时可以看出,这是一个线性的传输关系,时间t(与脉冲计数值成正比)与容量C构成正比例的线性关系。这样的线性关系,正是我们容量测量功能所需要的。
参照前面方式,也画出这里的比较器工作波形图(测试端子处的等效图):
(, 下载次数: 0)
(二)画出模型电路图并作数据核算
用电路图画出测试端子处的工作模型,是如下的样子:
(, 下载次数: 0)
若令Vo=100mV(测试端子处的比较器翻转等效电平,即图中的Vref)、SR=1mA/0.5mS(驱动电流逐级增大的速率)、T=0.5mS(测试驱动脉冲的周期)、tc=10uS(驱动电流的脉冲宽度),那么,由上一个关系式可得到
n=t/T=[Vo/(SRtcT)]C=10000000C=C*10^7
当C=0.1u时,脉冲计数是n=1。类似地,0.2u时有n=2,0.3u时n=3.......9.9u时有n=99。这样,就得到了我们所需的容量测量的其中一个量程(0.1u~9.9u)。
把SR改小为SR=0.1mA/0.5mS,可得到0.01u~ 0.99u量程。
把SR再改小为SR=0.01mA/0.5mS,可得到0.001u~ 0.099u量程。
保持SR=1mA/0.5mS不变,把tc改大为tc=100uS,可得到1u~ 99u量程。也即是,此量程需要将驱动电流的脉冲宽度tc扩展10倍。
(三)把模型电路变成设计草图
前面分析的是测试端子处的传输关系。实际电路中,还需把测试端子处的电压进行放大再送到比较器,以便为比较器的工作创造更好条件。
经过简单计算后,可得到如下的设计草图2:
(, 下载次数: 1)
有关这个设计草图2的说明及其存在问题的分析,留至下一节再介绍。。。。
(待续)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究四

上一节的研究(“设计研究三”)在原理层面取得了突破,令到本ESR表具备了电容容量的测量功能。这相当于,循着原型机的设计思路,我们发展出了一种工作方式相近的新仪表——电容表。前面的数据核算也表明,这个电容容量测量功能/电容表在理论上成立之余,还符合我们的测试需求。但如何把他变为现实,还要在细节上下功夫,上一节的设计草图2就是朝此目标推进的第一步。
设计草图2如下:
一、草图2的相关设计说明
设计草图2中最重要的计算,是围绕AC放大器与比较器在有关信号和参考电平上的配合,因为两种测量模式需要共用同一个AC放大器。
1、ESR测量模式
在ESR测量模式下,比较器的工作波形如下:
(, 下载次数: 0)
与我们最初的原型机分析图不同,这个图里,多了一个“计数器真正开始计数的时刻m“。这是由于AC放大器的固定偏置电压Vdc=300mV带来的,而不是由于输入检出信号电平带来的,因此,在0至m这段时间的脉冲计数值,仅是300mV的Vdc带来的,不能把他计入测量结果中,也即是,需要由MCU把他作为“偏移项”作扣除处理,所以有t-m=nT,n是最终的计数结果/测量结果。
在这里,比较器处的满幅信号电压是FS2=1000mV,作为参考信号的锯齿波电压Vref,仍取SR=10mV/0.5mS。在恒流驱动源处,激励脉冲串仍取原型机的tc=8uS、T=0.5mS。
2、电容容量测量模式
在电容容量测量模式下,比较器的工作波形如下:
(, 下载次数: 0)
在此工作模式时,送到比较器的信号,经过与ESR测量模式完全相同的AC放大器,其放大倍数为Av=10。由于上一个研究的基础模型电路中,比较器在测试端子处有固定的dc参考电压(翻转电平)Vref=100mV。因此,在比较器处,比较器的参考电压(翻转电平)应为Vref=FS2=100mV*Av=1000mV。又由于AC放大器的固定偏置电压Vdc=300mV,总是与信号电压叠加,所以,此工作模式下,比较器的参考电压端子应设置成Vdc+FS2=1300mV的固定电压,也即是,让比较器固定地在1300mV的dc电平处作翻转,才能得到所需1000mV的信号电平翻转目标。
为了让容量值与计数值对应起来,还需要令恒流源处的激励脉冲宽度固定为tc=10uS,而脉冲周期仍为T=0.5mS。
由于AC放大器固定偏置电压Vdc=300mV的精度,会给容量测量模式的测量准确度带来影响,因此,草图2的R10取值由原型机的100Ω减小为10Ω。
二、草图2的存在问题
草图2的恒流源部分,仅是简单地画出基础工作电路,期望他能按VCCS(压控电流源)那样获得我们的激励需求。
但进一步核算这部分电路,发现存在多个问题:
1、价格方面有优势的LMV358,虽然号称是RR(Rail to Rail 电源轨至轨)运放,但他只是输出上具备RR能力。我们这里主要需要的是运放具备在输入上的RR能力。LMV358的输入范围不能上摆至正电源的3.0V,仅为+Vcc-1V,即只能上摆至约2.0V。这样,驱动电流源就不能如期地输出小电流,这里必出问题。
2、即使使用符合要求的RR运放来做恒流源控制。这里的容量测量模式,需要VCCS作大跨度的电流变化。若像草图2那样仅用1个DAC、1个运放来应付4个测量量程,对DAC和运放提出的要求太高,变得很不现实。以草图2的R3检流电阻10Ω取值为例,常用RR运放的Vos(失调电压)是mV级水平,比如1mV。这个Vos下,产生的不可控电流已达到0.1mA,无法满足0.001u~0.099u量程的电流分级需求(该量程需要每个周期驱动电流增大0.01mA,即SR=0.01mA/0.5mS)。
因此,恒流源电路这部分,还需要作研究。。。。
(待续)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究五

一、电路图的修改
针对设计草图2的恒流源部分存在问题,进行了电路修改,得到如下的设计草图3:
(, 下载次数: 0)
此电路中,需要使用2个DAC。简单的计算表明,这里使用10Bit的DAC能达到要求。而运放Vos所带来的不良影响,尚在可接受范围。比如,COS722的典型Vos是+0.6mV或-0.6mV,对于要求最高的10mA(即是SR=0.1mA/0.5mS),刚好未达到恒流源分级变化的1级电流(即0.1mA)程度。但如果Vos恶化一些,会对测量精度带来影响,但也不致于太坏。先暂时放一放。
二、DAC、ADC的需求研究
因为不了解MCU的行情(内置DAC情况),上网查了一下资料。发现,现在流行的MCU,集成有ADC的较多,集成DAC的比较少,集成有2个DAC则更少。而MCU内部的ADC性能,能不能满足我们前面的容量测量功能需求,还要研究一下。
于是找了手头的书籍了解一下ADC方面的相关知识。只找到老旧的《微型计算机硬件软件及其应用》(清华大学出版社周明德编著),里面介绍了4种ADC工作方式,里面称,与MCU搭配使用的ADC以逐次逼近式的ADC速度较快。于是找来ADC0809(8bit并行输出ADC芯片)的datasheet,发现这种“较快”的ADC,不能满足我们这里的使用要求,因为他要求输入的模拟信号稳定时间需达到数十uS,而我们的ESR测量功能,模拟信号的稳定时间只有8uS,而容量测量功能这个稳定时间就更少,几乎是一瞬间。
ADC0809下面的时序图里,标出了“模拟信号稳定时间”(红色圆圈):
(, 下载次数: 0)
这种专用的ADC不能满足我们现在的要求,据此推断,那些廉价MCU内部的ADC也不会比他好多少。再查了一下STM32的资料,他内部的ADC最小取样时间为1uS,而这是以牺牲ADC分辨率性能为代价后才得到的。因此,我们不能依靠MCU内部ADC来完成测量工作。
从设计草图3的电路可看到,现在电路中只用上2块双运放中的3个,还剩有1个运放可作为比较器使用,这样,我们还可以采用类似原型机的工作方式来完成测量任务。
三、挖掘一下电路的潜力
在上一节的设计研究中,比较器在容量测量功能时,工作波形中出现的有效信号实际上是锯齿波,这是被测电容的充电波形(扣除Vdc部分后)。从上一节的比较器工作波形图来看,起决定作用的是这个信号的波形幅度——这个信号的波形幅度高低与脉冲计数值成正比。而我们在前面的分析中知道,电容充电后的电压幅度既是与充电电流Id成正比,也与充电时间tc成正比。如果我们把激励脉冲的宽度tc改成逐级可变、激励电流的Id幅度改为固定(见下面的附图),那么,将会获得与使用DAC方式一样的测量效果。这样一来,我们除了可以用运放做的比较器来代替ADC外,还能做到不使用DAC,令我们在“设计研究一”所提出的“尽量使用通用器件”目标更好地得到实现。
(, 下载次数: 0)
分析一下采用激励脉冲宽度可变的新方法后,比较器的工作波形如下。不仅波形很相近,所获得的测量结果也与原来DAC方式完全相同。
(, 下载次数: 0)
上面为测试容量为nu时的情况。为方便看帖者理解其中的容量测量工作原理,再多画出一个测试容量为1u时的比较器工作波形图(如下):
(, 下载次数: 0)
同样地,多画一下ESR测量功能时的比较器工作波形图,以方便大家理解。先是测量1Ω时:
(, 下载次数: 0)
下面是测量nΩ时的比较器工作波形图:
(, 下载次数: 0)
从以上4个比较器工作波形图可看到,Vref=Vdc+FS2=1300mV这个固定的DC参考电平,仅是容量测量功能时需使用到。ESR测量功能时,需要使用的重要参数是锯齿波的上升速度SR=10mV/0.5mS。
下一节我们将继续推进这个“不需使用ADC或DAC”方案的电路设计。
(待续)

一、电路图的修改
循着上一个“设计研究五”确定的方向,对电路细节作进一步完善,得到如下的设计草图4:
(, 下载次数: 0)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究六

一、相关的设计安排及计算
1、容量测量模式下各量程的激励电流安排及计算
上一节已计算出各个量程下采用脉宽固定、幅度逐级可变的恒流驱动电流安排。现在改用为脉宽逐级可变、幅度固定的恒流驱动,由于两者的脉冲周期相同(均是T=0.5mS),因此,只需让这两种不同的驱动方法在充电脉宽结束那一时刻的电容电压相等即可。
由恒流驱动下的电容电压计算公式Vc=SRtc=Idtc/C可知,因为电容容量C相同,因此,只需让两种不同驱动方法的Id*tc相等即可。因此有, 0.1u~9.9u量程需要使用10mA的固定驱动电流、1uS~99uS可变的脉宽(原为1~99mA幅度可变即SR=1mA/0.5mS每级1mA、脉宽固定为10uS)。
类似地,可得到:0.01u~0.99u量程需要使用1mA的固定驱动电流、1uS~99uS可变的脉宽,0.001u~0.099u量程需要使用0.1mA的固定驱动电流、1uS~99uS可变的脉宽,1u~99u量程需要使用100mA的固定驱动电流、1uS~99uS可变的脉宽。
由于自动量程的切换,本ESR表容量测量功能的各量程实际工作方式为:
0.001u~0.099u量程,使用0.1mA的固定驱动电流、1uS~100uS可变的脉宽(第100uS用于切换到
高一档量程)
0.10u~0.99u量程,使用1mA的固定驱动电流、1uS~100uS可变的脉宽(第100uS用于切换到高一档量程)
1.0u~9.9u量程,使用10mA的固定驱动电流、1uS~100uS可变的脉宽(第100uS用于切换到高一档量程)
10u~99u量程,使用100mA的固定驱动电流、1uS~100uS可变的脉宽(第100uS用于显示测量结果大于99u)
这样,电路安排上还需增加一个0.1mA的恒流源,刚好用1块双运放能满足以上4档恒流的需求。现在的电路中,是由MCU以他所擅长的时间控制方式来制造分级激励效果的,运放的Vos所带来的不良影响,将会比原先的驱动方法小,因为他不会“贪污”掉初期几个激励脉冲。
2、比较器参考电压信号的产生
图中的U2B是作为比较器使用,他的负输入端处,接的是参考电压信号。在ESR测量模式,此处需要接波形为锯齿波的参考电压信号(即设计草图3的SR=10mV/0.5mS的锯齿波),在电容容量测量模式,则需要接固定的DC电压(即设计草图3的Vref=Vds+FS2=1300mV)。
按道理,用模拟电路手段也能实现这样的需求:用原型机的锯齿波发生器电路来满足ESR测量模式需求,利用电源电压和电阻分压来获得电容容量测量模式所需的固定DC电压。但这样做会显得笨拙,而且参考DC电压被”固定死了“,缺乏柔性——后面的误差分析将表明,要想提高本机的电容测量精度,需要本机能够因应测试端子的寄生电阻情况,稍微改变这个参考DC电压。
不使用上述纯模拟手段,可以有2种方法:一是用DAC产生这两种工作模式所需的参考电压信号,二是使用PWM方式。
由于我们想尽量使用通用元器件,因此,这里重点研究PWM方式。我不玩MCU,没有接触过PWM。在了解PWM基本原理后,借助基础电路知识和Multisim软件尝试作一番如下的研究:
(1)生成锯齿波所需的PWM波形
为了生成所需的锯齿波,简单计算表明,如果要让PWM波形的周期、脉冲宽度合适(方便MCU生成及编程),那么,最佳的取值是SR=12mV/0.5mS。要获得这个SR=12mV/0.5mS的波形,需要生成周期为0.5mS、第1个脉冲宽度为1uS、第2个脉冲为2uS、以后每个脉冲宽度增加2uS的脉冲串波形——这是从0V起逐渐上升的锯齿波所需的PWM波形,如下图。
(, 下载次数: 0)
如果不需要“从0V起作变化”,仅需要实现SR=12mV/0.5mS,那么,还可以把PWM波形予以简化。可简化为周期为0.5mS、第1个脉冲宽度为2uS、以后每个脉冲宽度增加2uS的脉冲串波形,而我们的ESR表恰好不需要“从0V起作变化”。实际操作可使用的PWM波形如下:
(, 下载次数: 0)
假如把上图中的PWM波形作修改,周期由T=0.5mS改为T=0.25mS,脉冲宽度由依次的2uS、4uS、6uS、8uS的变化改为1uS、2uS、3uS、4uS的变化,那么,SR将变为SR=24mV/0.5mS,这会令比较器正输入端处的FS2=2400mV,他与电源电压3V之间仅有600mV的距离(扣除Vdc后仅有300mV的距离),留下的空间不足以供本机的测试端子“补偿”校准之用。
假如把上图中的PWM波形,保持周期T=0.5mS不变,只是将脉冲宽度由依次的2uS、4uS、6uS、8uS的变化改为1uS、2uS、3uS、4uS的变化,那么,SR将变为SR=6mV/0.5mS,这个SR值又偏低,白白浪费了电源电压所提供的动态空间,不利于比较器的工作。
(2)生成Vref=1500mV直流电压所需的PWM波形
由于ESR测量模式所需的SR,已由10mV/0.5mS变为12mV/0.5mS。相应地,FS2由1000mV变成1200mV,即变成FS2=1200mV。又由于ESR测量模式和容量测量模式共用同一个AC放大器,使用的是同一个FS2, 因此,容量测量模式需要的DC参考电压为Vref=Vdc+FS2=300mV+1200mV=1500mV。
  要用PWM波生成这个DC电压就比较简单,因为电源电压是3V,只需MCU生成占空比为50%的方波即可。比如,由MCU生成周期为2uS、脉冲宽度为1uS的方波,或者是生成周期为4uS、脉冲宽度为2uS的方波。
上一小节说到,为了提高容量测量的精度,需要微调Vref的DC电压。而要用PWM手段去微调这个电压,就没有那么简单。我对PWM不熟悉,也没有时间去深入研究如何实现这个微调。对于这个微调,我只能提供1个DC电压的目标值,实际工作主要靠MCU编程,就把这个当作是留给合作伙伴的一个作业吧。
(3)PWM用的RC滤波器
设计草图4的R21、C8构成简单的RC低通滤波器,用于把PWM输出波形平滑化。RC时间常数越大,平滑效果越好,但是,他会令到电压的建立(settling)时间延长。如果RC取值过大,会导致最终输出的电压波形SR小于目标值。我用很粗糙的手算方法,计得约取R21=25k、C8=0.01u时,是一个临界点。若小于此取值,则不会影响SR=12mV/0.5mS的输出,若大于此值,则会产生影响。
使用Multisim软件对这一部分PWM波形与RC滤波器的配合作仿真,得到结果如下:
(, 下载次数: 0)
上图为RC取值明显大于临界值时的结果。可看出,RC取值过大,会影响SR,但主要是集中在初始阶段。
(, 下载次数: 0)
上图为RC取值稍大于临界值时的结果。不影响到SR,斜线线条都较细,表明滤波效果好、纹波小。
(, 下载次数: 0)
上图为RC取值稍小于临界值时的结果。不影响到SR,斜线线条稍变粗,表明滤波效果变差、纹波增大。
(, 下载次数: 0)
上图为RC取值明显小于临界值时的结果。不影响到SR,斜线线条变粗了很多,表明滤波效果甚差、纹波相当大。
因此,设计草图4中,最终取为R21=47k、C8=0.01u。
另外,设计草图4中PWM端口旁边的Dch-2端口,是MCU内部MOS管以开漏方式工作,主要供ESR测量模式使用,用于泄放掉C8上的电荷(“开漏方式L电平”有效)。若不使用时(比如容量测量模式),则把此Dch-2端口设置成“开漏方式H电平”。
 
3、AC放大器的增益配合
比较器的参数设置好后,需要AC放大器在增益上来予以配合,即是需设置成名义上的Av=12(即12倍放大)。为了弥补前面电路上的信号损耗和作CAL校准,还需要将AC放大器的增益做成调节。
为此,把AC放大器自身电路的增益安排为AV=14,再在他与比较器之间插入一个含有VR1的衰减器,以这种方式来得到“名义”上的Av=12。衰减器的衰减比例做成可微调,是用于作CAL校准。在ESR模式下,利用这个VR1微调电阻作CAL校准后,就可以完成全机的硬件CAL校准。因为这个VR1控制了到达比较器U2B正输入端处的有效输入信号幅度,而对于比较器的工作来说,不管ESR模式还是容量测量模式,都是要求这里的有效输入信号幅度须符合FS2=1200mV的要求。
容量测量功能需要用到的Vdc=300mV这个参数,是由R14、R15从3V电源电压分压得到的。为了避免在调节VR1过程中,改变了Vdc这个对容量测量准确度有影响的参数,为此,设计草图4中安排了C7这只隔直电容,令到VR1的调节仅是对有效输入信号起作用。
4、保护电路
原型机的保护功能较弱,其套件手册称,如果用户需要增强保护能力,可将原型机电路的D3、D4两只1N4002二极管更换为电流规格更大的1N54XX,云云。实际上,即使是换上1N54XX,也承受不住误测带300V高压电的大电解时的考验。
在设计草图4中,我们直接把上一轮的研究成果搬移过来。因此,需要使用PPTC(自恢复保险丝)、TVS(瞬态抑制二极管)和SCR(单向可控硅)。上一轮的研究试验已表明,此保护电路能承受住误测300V高压电的大电解的考验(见下面帖子的635楼):
http://www.crystalradio.cn/forum.php?mod=viewthread&tid=2065408&extra=&page=43
二、还有待研究的项目
因篇幅限制(实情是本人精力有限),先写到这里。有些项目需留待后面再研究,包括:
1、电池内阻测量功能的实现
2、保护电路的优化(令其所用器件更通用)
3、电容容量测量功能的误差分析
(待续)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究七

上一个研究的设计草图4的保护电路部分,是直接搬迁过来的,并没有进行过验算。
验算后发现,草图4中的保护电路在容量测量模式(以及电池内阻模式)下,他对有效测试信号会产生限幅作用,会导致测试不正常。为此,作了一番计算。根据计算结果,证实通过适当调整保护电路元件的搭配,可以省去TVS和SCR这两种较为特殊的器件,从而令所订的“尽量使用通用器件”目标可以得到进一步实现。
再对AC放大器加入电池内阻测量所需的PGAX10(提升10倍的AC放大能力)后,得到了如下的设计草图5(也即是35楼交Abbey用于PCB制作的设计草图n):

一、保护电路的设计计算
计算用图如下:
(, 下载次数: 0)
本机在工作时,图中所列的各个电压的总和Vtot,不得超过电源电压+3.0V,否则,就会导致测试异常。
(一)电压计算
这些电压包括:
1、恒流源的检流电阻压降Vsen。机子工作时,最大的Vsen=1.0V。
2、给恒流源BJT管保留的压降Vsat,以免他进入饱和状态。此项要求Vsat=0.3V
3、激励电流在隔直保护电容C3上形成的电压Vc。其中包括C3自身的ESR形成的压降,即是有Vc=Idtc/C+IdESR。
本机电路运行时,最大激励电流为Id=100mA,激励脉冲宽度最大为tc=100uS(容量测量模式以及电池内阻模式时出现)。22u/400V高压电解的ESR,按ESR=5Ω来计算较为稳妥。
于是可计得Vc=454mV+500mV=954mV。其中ESR部分的压降比较可观,已达到500mV——前面我分析原型机时漏算了保护电容ESR压降部分引入的非线性误差。如果把他计算在内,那么,原型机在0.01~0.99Ω量程的误差就不会是原先估计的1%,而是会达到3~5%。
4、自恢复保险丝PPTC的压降Vp。设计时,特意选用了内阻较低的180mA/250V规格,其内阻为1~2.2Ω。按3Ω计,在100mA激励电流驱动下,有Vp=300mV。
须注意的是:金科的JK250系列自恢复保险丝datadheet显示,JK250-180T的内阻才符合设计要求,JK250-180U的内阻则偏高,为2~4Ω。我在淘宝买到的不知生产厂家的180mA/250V规格PPTC,实测与JK250-180T的内阻规格相一致。
5、测试检出信号Vo,包括2个部分。
一是FS信号,FS=100mV。
二是偏移信号Vos,由表笔引线、接触电阻等带来,最大有Vos=100mV。因为本机的表笔“补偿”功能,允许表笔引线、接触电阻等电阻Rc的最大值为1Ω(注:电池内阻测量模式的1mΩ档位,则只允许Rc的最大值为100mΩ)。
因此,Vo=200mV。
(二)核查电压总和情况并对保护二极管作出安排
由上面可计得,各个电压的总和为Vtot=2.754V,低于3.0V的电源电压,因此,不会出现信号削波的问题。
后3个电压Vc、Vp、Vo的叠加后的电压达到1.454V,如果保护二极管安排不恰当,那么,这个1.454V电压将会导致这些保护二极管产生预想外的导通。因此,安排了4只1N4004串在一直,在此处提供保护。
一只1N4004提供的“空间”约是400mV(本人实测400mV时1N4004的漏电流只有10uA级),4只一共可提供1.600V的空间(multisim仿真显示,4只1N4004串与1.6V相并接,漏电流也是10uA级)
——以上是保护电路的计算。实际上,本人的计算顺序是反过来的,也就是,先是确定电压要求,才决定C3隔直保护电容的取值,以及确定保护二极管串的数量。
二、电池内阻测量功能的实现
1、所需的PGAX10
原型机测试最小分辨阻值是0.01Ω。要满足电池内阻测量的需求,就需将最小分辨阻值提升扩展至0.001Ω(即1mΩ)。对于电路来说,把有效测试信号电平提升10倍,就可达到此目标。
这由草图5的PGAX10控制端口来执行此功能。PGAX10激活前,纯AC放大器部分的名义放大倍数为14倍(总体是12倍),PGAX10激活后,则提升为140倍(总体是120倍)。
图中R19的270Ω取值是借助Multisim仿真得到的。由于MCU的I/O引脚内部MOS管的导通电阻具体值不清楚,只能仿真出个大概来。
当MCU的此PGAX10引脚为“开漏方式L电平”时,PGAX10被激活,“开漏方式H电平”时则关闭PGAX10。
2、测试脉宽的安排
由于保护电路的限制,电池内阻测量模式的脉宽安排为100uS。
根据我的推算(见下一节的误差分析),这个脉冲宽度,大概相当于3kHz的测试频率。假如想按照通常的电池内阻测试方法,去取1kHz的等效测试频率,那么,脉宽就要安排为300uS。由上面可知,保护电路将会对有效信号产生限幅作用,会带来与草图4相同的容量测试功能不正常的问题。
(待续)

/* 以指定参数执行一次测量
excitI:指定电流档位,以0-3由小到大表示四个电流档位
curPGA:是否使用PGAX10(1为放大10倍,0为不放大)
*/
u16 Take_a_Measurement(u8 excitI,u8 curPGA)
{
u16 counter=0;
Vref_ReturnTo0; //参考电压泄放
DUT_DisChargeStart;//DUT残留电压泄放
delay_ms(10);
DUT_ChargeReady;//DUT准备充电
Vref_EstableReady;//参考电压准备启动
if(curPGA)PGAX10_Contrl=0;//放大10倍
else PGAX10_Contrl=1; //不放大
TIM1->CCR1=2;
TIM1->CNT=0;
TIM_Cmd(TIM1, ENABLE);//启动PWM建构锯齿波参考电压
//
while(1)
{
DUT_DisChargeStart;//DUT残留电压泄放
delay_us(492);
if(counter>=MAXMEAS_VAL)
{ counter=0; break;}//计数大于限定值,强制置为0退出
counter++;
DUT_ChargeReady;//DUT准备充电
TurnExcitCurr(excitI, T_ON);//开启激励电流给DUT充电
delay_us(7);
// TurnExcitCurr(excitI, T_OFF);//关闭激励电流
/ 在激励脉冲结束瞬间,检查比较器输出 /
if(IsVrefExceedVdut(5,3)) {/ 参考电压开始超出DUT电压 /
tim_ccr=TIM1->CCR1; break;}
TurnExcitCurr(excitI, T_OFF);//关闭激励电流
}
TurnExcitCurr(excitI, T_OFF);//关闭激励电流
TIM_Cmd(TIM1, DISABLE);//停止PWM锯齿波参考电压
Vref_ReturnTo0;//参考电压泄放
DUT_DisChargeStart;//DUT残留电压泄放
return counter;
}

各档计数记录如下:
可能有些元件,如2.7MΩ没有按设计图,
你试验板的pwm波形纹波比仿真结果大很多的问题搞好没有?
看你给出的这几组数据,似乎在80欧(整个量程1~99欧)起的这个量程末段,锯齿波的SR有突然减少的现象。而80欧以下这一大段,则正常。
我回头查了一下我设计时的PWM仿真文件,发现是我当时在来回改参数作偿试的过程中,最后把PWM模块的1个关键参数搞错了。所以才得到纹波情况与实际相差甚远的结果。
这个关键参数是PWM模块的时钟频率,正确的时钟应该为2kHz。我仿真时误设置为20kHz,因此,仿真的效果与实际相差10倍。
改回正确的2kHz时钟后,设计草图n的RC取值(47k/0.01u)下,仿真出来的锯齿波结果如下图,纹波相当大,达100mV的Vpp值。
(, 下载次数: 0)
这个纹波太大,会导致测量工作不正常。
你们可以先把R或C的取值增大至原来的10倍作试验,此情形下的仿真结果如下图。
(, 下载次数: 0)
下图显示了纹波情况的细节,可看到,纹波的Vpp值不到10mV。
(, 下载次数: 0)
把R或C的取值增大至原来的10倍后,锯齿波的SR会在初始阶段变得不佳。现在这个锯齿波波形,不影响ESR和R测量模式的工作,足以供目前的试验之用。但是,容量测量模式需要锯齿波波形的SR一直保持固定,只有这样,才能得到准确的增益校准用参数,否则,会带来一定的误差。
如果改用DAC输出替代PWM,以此来生成锯齿波,应该就能迅速解决这里的问题。
容量测量模式因为此问题而增加的误差是否可接受,还是要将锯齿波的生成方案由PWM改为DAC?待我再考虑考虑。

我到时计算一下,也给出一个用DAC生成锯齿波的备用方案(或许会成为正选方案)。
改成DAC方案的话, 又得选用更好的MCU, DAC产生高频模拟信号, 对MCU也有较大的负担, 基本上又回到了老的思路。 还不如回到我提过的方案, 锯齿波电路和比较器省去, 锯齿波由MCU虚拟, 采用软件比较。 从ESR测量来看, 采样那8us持续时间的信号, 还是很轻松的, 并且可以做到减少测量时间, 重复采样十来次信号取平均就可知ESR了。
用adc代替比较器,需要uS级的能力。用dac代替pwm,则不需要这么高速的能力。两者不可同日而语。
就目前的电路来说,仅需要dac有数百uS的能力即可,这很轻松。即使是我前段时间构思好的四线版数字esr表也只需要数十uS级的能力,这应该也没有问题。
—— 所构思的四线版esr表,采用四线测量方式,因为能有效消除接触电阻的不良影响,可以大幅提升低阻档以及最大容量(10u~99u)档的测量精度,电池内阻/电阻档扩展至1000字。但这个也仅是纸面上的设计,一切还得待当前的两线版试验成功再说。
实际上,还有第三个锯齿波生成方案,即是采用原型机的模拟电路生成方案。但电路略显复杂,而且因为电源电压比原型机低,受到了更多的不利因素影响,采用简单电路形式时,在精度方面可能不是很理想。
我觉得您进入了误区,
从ESR目前的测量来看,ADC足以应付。
8us的信号持续时间,相当于8*14=132个ADC时钟,
而ADC的采样时间可设定为1.5、7.5、13.5、28.5、41.5.……直到239.5个时钟
当设置为41.5以下各档采样时间,
则完全有充足的时间实现正确采样,
可安排ADC在8us的尾段开始采样。
只要采样精度优于1%
就可以和理论值进行比较获得ESR,
并且无论ESR处于1-99内的何值,
都可以重复任意次数,
对采样进行平均值或中值滤波,
即使对于ESR值小于10
而DAC首先是低档MCU没有这东西,
即使有可能也比较费资源。
从ESR目前的测量来看,ADC足以应付。
8us的信号持续时间,相当于8*14=132个ADC ...
esr/r模式,检出信号至少有数uS的稳定dc电压时间,对于速度快adc,当然不是很成问题。
我说adc的能力成疑,是容量测量模式。此模式下,最短的检出信号是波形宽度为1uS宽度的信号,这个信号没有1个稳定dc电压的时间(倒是有一个为600mV的平均电压),因为他是一个从0到1200mV急剧上升的锯齿波。
如果你的方案能搞定他,那就最好。但我还是比较怀疑。
esr/r模式,检出信号至少有数uS的稳定dc电压时间,对于速度快adc,当然不是很成问题。
我说adc的能力 ...
能否从ADC需求的角度,
描述一下容量测量时的待检波形,
我看目前这块MCU能否解决。
esr/r模式,检出信号至少有数uS的稳定dc电压时间,对于速度快adc,当然不是很成问题。
我说adc的能力 ...
试验了一下ADC测试方法,
采样原比较器的正输入端,
线性还可以,
验证此方法是可行的。
另外,为便于比较,
原有计数方法也并存。
(滤波又并联了一个104电容后效果改善)
结果列于附表中
10mA档,DUT为纯阻。

上一个研究的设计草图4的保 ...

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究八

本节主要研究当前设计的脉冲式数字ESR表的测量误差问题。
一、电池内阻/电阻模式和ESR模式的测量误差
(一)ESR模式的特有误差
ESR模式的误差,包含2部分。第1部分是他的特有误差,也即是受测量原理的限制,由被测电容容量而引入的误差。这部分误差在前面7楼帖子的“分析四”中作过分析,当激励脉冲宽度为8uS时,1u电容容量带来的、不能被消除的偏移性误差为8Ω,等等。现把这部分分析抄录如下:
“测量原理的Vo检出电压关系式是:Vo=Idt/C+IdESR。此式两边除以Id,可得到检出的总阻抗是Rt=t/C+ESR。
此式表明,本仪表实际检测出来的阻值,包含有电容的“容抗”t/C。电容容量越小,这个容抗就越大,由此带来的测量误差就越大。由于此表设定充电脉冲宽度为t=8uS,因此,对于容量为1u的电容来说,他的“容抗”为8Ω。也就是说,在理论上,本仪表测量1u电容时,他测出来的ESR值总是比真实值高出8Ω。类似地,测10u电容测得的ESR值总是比真实值高出0.8Ω,测100u电容测得的ESR值总是比真实值高出0.08Ω。”
假如我们把激励脉冲宽度缩短为3uS,那么,原来的8Ω偏移性误差将降为3Ω。激励脉冲宽度还可以进一步缩短,这相当于把测试频率提高,从而降低了电容容量给测量结果带来的影响。但是,这会对AC放大器和比较器的性能提出更高的要求。
综合考虑,如果要减小这个特有误差,以取3uS的激励脉冲宽度会较佳,其测试等效频率大致为100kHz。
注:激励脉冲宽度为8uS的原型机,套件手册声称其测试等效频率为100kHz,但根据本人的推导(见本节后半部分“测试等效频率的推导”),其测试等效频率应为40kHz左右。
(二)电池内阻/电阻模式和ESR模式的误差
ESR模式的第2部分误差,与电池内阻/电阻模式的误差完全相同。其误差主要来源包括:
1、Vref锯齿波的线性度
2、恒流源(激励电流)的准确度
3、AC放大器的增益误差
4、测试表笔、引线电阻、测试接触电阻等(总值称为Rc)带来的偏移误差
5、PGAX10的误差(仅限于电池内阻/电阻模式的0.001Ω~0.099Ω量程)
Vref锯齿波的线性度,是由MCU控制的PWM波形各个时间点的准确度决定的,而MCU擅长对时间的准确控制,因此,这个准确度比较有保障,不会成为主要的误差来源。
我们前面的“分析七”分析过,第3、第4项的增益误差和偏移误差,是可以通过校准来消除的(理论上)。在我们现在这个机子里,这2个误差不是最主要的误差来源。但需注意的是,由于接触电阻(10mΩ级)具有不确定性,且本机采用的是两线测量,期望通过偏移校准来消除Rc所带来的偏移误差的实际效果总是不如意。
第5项的PGAX10误差,仅给电池内阻/电阻模式的0.001Ω~0.099量程带来影响。他属于增益误差性质且不可消除,其误差大小由设计草图n(见下面附图)的R19取值决定,如果R19取值符合PGAX10的提升10倍增益要求,则误差就小,但这个误差与偏移校准的实际效果(用于消除Rc所带来的偏移误差)一样,不方便预先估定。
本机的最主要误差来自于恒流源运放的Vos。100mA及1mA激励电流时,情况尚好,因为检流电阻(10Ω和1k)上的受控压降达到1V。10mA/0.1A激励电流时,情况较差,检流电阻(10Ω和1k)上的受控压降只有100mV。假如运放的Vos为1mV,那么,10mA/0.1A这2个激励电流的误差将为1%。虽然从整体上讲,他属于增益误差这一类,可通过增益校准来消除,但是,我们的增益校准只能照顾4个激励电流档中的其中2个。因此,当我们用100mA或1mA激励电流来作校准后,10mA/0.1A这2个激励电流对应的测量误差将为1%。
我们选用的运放,其Vos典型值不到1mV。因此,可以预估,整机电池内阻/电阻模式和ESR模式的测量误差通常将略小于1%。而对于经过增益校准的那2个激励电流档对应的量程来说,电池内阻/电阻模式和ESR模式的测量误差将明显低于1%。
二、电容模式的测量误差
(一)电容模式测量误差的主要形式是增益误差
虽然电容模式也有偏移误差(测量端子的分布电容带来),但这个偏移误差(pF级)与本表的最小分辨电容量(0.001uF即1nF)相比,完全可以忽略。
就误差来说,电容模式与电池内阻/电阻/ESR模式之间的最大不同,就是电容模式的误差大部分以增益误差形式出现。尤其值得注意的是,测试表笔和引线电阻、测试接触电阻等(总值为Rc)带来的误差,以及被测电容的ESR带来的误差,都不再是偏移误差,而是增益误差。这些可以从他的测量关系式出发得到证明。
由“设计研究三”可知,本机的测量原理基础关系式是:
Vo=Id*tc/C,其中Vo为检出电压。
相应读取电容容量的关系式是C=Id*tc/Vo。
当考虑测量误差时,应使用Vo的精确式,即是有:
Vo=IdESR+IdRc+Id*tc/C,其中,Rc为测试表笔和引线电阻、测试接触电阻等的电阻总值,ESR为被测电容的等效串联电阻。对于薄膜电容来说,ESR值通常是数mΩ~数十mΩ。
相应地,精确读取电容容量的关系式为C=tc/(Vo/Id-ESR-Rc),与前面(即实际工作时使用)的读取电容容量关系式C=Id*tc/Vo相比,分母项由原来的Vo/Id变为(Vo/Id-ESR-Rc)。
由于ESR、Rc总是大于零,因此,实际工作时,由上面这2个读取电容容量的关系式可知,ESR、Rc总是会引入增益误差Err,而且引入的都是正误差(测量结果大于真实值的误差)。
(二)“非在路测量”时的测量误差
不进行“在路测量”时,机子处于比较理想的测量环境,此时的测量误差纯是机子本身的“原始”误差。本机电容模式“原始”误差的来源包括有:
1、Vref的DC电压准确度
本机实际工作时,固定地将Vref的DC电压取为Vref=Vdc+FS2=300mV+1200mV=1500mV。如果要准确测量容量,就需要FS2准确等于1200mV、Vdc准确等于300mV。
由于FS2的准确度可通过CAL硬件校准来获得保证,因此,主要是Vdc会给Vref的DC电压准确度带来问题。
Vdc是由设计草图n(见上面附图)的R14(2.7M)和R15(300k)从3V电源电压以10:1的比例分压得到,但电源电压要先经过R16(10Ω)这只电阻。R16一直有运放U2的工作电流流过,假定运放的工作电流达到5mA(实际比此数低,COS722和TSV912都不到2mA),这样,R16上的压降为50mV,经R14、R15分压后,在300mV的Vdc上产生了5mV的偏差。而总的Vref是1500mV,因此,Vdc给Vref的DC电压带来的误差是0.33%,不足1%。所以,不是主要的误差来源。
2、恒流源(激励电流)的准确度
前面已作分析。对于整机来说,这部分引入的误差约1%,对于经过增益校准的那2个激励电流档对应的量程(即是0.1u~0.99u量程和10u~99u量程)来说,这部分引入的误差明显低于1%.
3、ESR、Rc引入的增益误差Err
这个是电容模式测量误差的很重要来源。
根据上面2个读取电容容量的关系式,ESR、Rc引入的增益误差Err,用公式表达就是:
Err=(Vo/Id)/(Vo/Id-ESR-Rc)-1,即是Vo/Id除以(Vo/Id-ESR-Rc)之后再减去1。
由于Vo固定,由上式可知,Id越小,ERR误差就越小。但是,如果Id取值过小,根据容量测量关系式,就需要使用更长的激励脉宽tc来进行测量,这样,就会引致下面的“在路测量时由并联电阻(与被测电容并联的电阻)引入的误差”太大、变得不可接受。
目前的Id取值,是在“非在路测量”与“在路测量”两种误差之间取舍折衷后的结果。记得老外有句“名言”:“(电路)设计是折衷的艺术”,此话在这里得到了充分体现。
回到具体的误差。由于Id越大Err误差越大,故从100mA激励电流时的量程(即10u~99u量程)的Err误差开始考察,并分开研究ESR、Rc带来的影响。
(1)ESR引入的增益误差Err
ESR是电容自身固有的,且不能为我们预知。因此,ESR引入的这个增益误差是无法消除的。这与ESR模式下电容容量所带来误差的情形很相似,只不过,前者是增益性质的误差,后者是偏移性质的误差。
容量测量模式时,在测试端子处,检测电平等效为Vo=FS1=100mV。因此有:
对于100mA档(即10u~99u量程),C=tc/(Vo/Id-ESR-Rc)=tc/(1Ω-ESR-Rc)。因为仅考察ESR引入的增益误差,故有Rc=0,若ESR=100mΩ,可得ESR单独引入的误差为Err=(Vo/Id)/(Vo/Id-ESR-Rc)-1=1Ω/(1Ω-0.1Ω)-1=0.1111=11.11%。
同样地,可得到
对于10mA档(即1u~9.9u量程),C=tc/(Vo/Id-ESR-Rc)=tc/(10Ω-ESR-Rc)。当ESR=100mΩ时,ESR单独引入的误差为Err=1.01%。
对于1mA档(即0.1u~0.99u量程),C=tc/(Vo/Id-ESR-Rc)=tc/(100Ω-ESR-Rc)。当ESR=100mΩ时,ESR单独引入的误差为Err=0.1%。
对于0.1mA档(即0.001u~0.099u量程),C=tc/(Vo/Id-ESR-Rc)=tc/(1000Ω-ESR-Rc)。当ESR=100mΩ时,ESR单独引入的误差为Err=0.01%。
从以上数据可看到,本机测量10uF以下容量的薄膜电容时,由ESR单独引入的误差最高约1%,还是比较小的。
而10u~99u量程的这部分测量误差较大,ESR=100mΩ时达到11%。不过,这是按ESR值偏高的情形来计算的。由于我们测量的对象通常是“功率型”的薄膜电容,这种类型电容的ESR值往往会更低一些,因此,可以期望,实际使用时10u~99u量程的这部分误差能做到在5%以下(对应的ESR<50mΩ)。
下面是网上找到各种类型10uF电容的ESR值图表,显示10uF薄膜电容在3kHz频率以上时(本机的测试等效频率最低约为3kHz)的ESR值约在数mΩ~30mΩ之间。
(, 下载次数: 0)
(2)Rc引入的增益误差Err
在上面的容量C关系式和增益误差计算式中,Rc是与ESR相同的身份出现的。因此,Rc引入的增益误差,必定是与ESR引入的增益误差相类似,也是以100mA档(即10u~99u量程)的误差为最大。
对于100mA档(即10u~99u量程),C=tc/(Vo/Id-ESR-Rc)=tc/(1Ω-ESR-Rc)。由于是仅考察Rc引入的增益误差,因此,ESR=0,容量C的关系式可改写为C=tc/(Vo/Id-ESR-Rc)=tc/(1Ω-Rc),误差计算式为Err=1Ω/(1Ω-Rc)。
若果Rc=300mΩ(这是现实中不难出现的情形),那么,可计得误差为Err=42.9%,达到了不可接受的程度。
但是,我们有一个有利条件,那就是,Rc是测试表笔、引线电阻、测试接触电阻等的总和,我们可以借助本机的电阻测量功能,通过偏移/补偿校准小程序来预先测知Rc值。在真正进行容量测量时,再按这个Rc值对测量结果数据予以修正,然后把修正后的测量结果数值作为正式的测量结果输出(显示在屏幕上)。这就是容量测量模式下对测试端子起补偿作用的增益校准,与电池内阻/电阻模式和ESR模式下对测试端子起补偿作用的偏移校准相对应。
综上,容量测量模式下Rc引入的增益误差是可以消除的(理论上),但不是以扣除偏移项的方式(即偏移校准方式)来消除,而是以增益校准方式(对测量结果乘以一个系数的方式)来消除。实际情况下,这些误差并不能完全消除,但可以做到让他不再成为最主要的误差来源。
——附上本人研究这些误差时的一部分手稿
(, 下载次数: 0)
(三)在路测量时由并联电阻(与被测电容并联的电阻)引入的误差
本机在进行“在路测量”时,有时需要测的是电机启动电容(比如电风扇的1.2u薄膜电容),这时候,本机需要面对与被测电容并联的电机绕圈绕组DC电阻所带来的不利影响,如果要准确测量,就不能依靠测试电平低于200mV的设计,而是要依靠其他方面的设计安排。
同样的测试情形下,指针式ESR表比我们现在这个脉冲式数字ESR字有优势。因为在指针式ESR表的100kHz测试频率下,电机绕组的感抗非常高,所以,与并测电容并联的电机绕组不会给指针式ESR的测量结果带来明显的不利影响。
由最早期对原型机工作原理的分析可知,测试端子处的电感是不会给本机的测量结果带来影响的,因
此,此情形下最成为问题的是电机绕圈绕组DC电阻。这个DC电阻会将被测电容的充电电流分走一部分,从而影响测量结果。
下面展开这部分的研究与误差计算。
1、理想情况的被测电容检出信号情况
如下图。
(, 下载次数: 0)
这是恒流源I驱动电容C的情形,其输出电压(电容两端电压Vc)的关系式是:
Vc=I*t/C,其中t为充电时间。
当t=10uS,C=1uF时,可计得 Vc=10mV
当t=10uS,C=10uF时,可计得 Vc=1mV
2、被测电容有电阻R并联时的检出信号情况
当电容两端并联有电阻R时,如下图左侧。
(, 下载次数: 0)
根据诺顿定理作等效变换,可得到上图右侧的电路。这是一个标准的RC电路。其关系式是:
Vc=Vs{1-exp[-t/(R*C)]}
Vs=I*R
同是t=10uS、C=1uF的情形。当R=200Ω时,Vc=9.75mV,与理想情况的10mV相差0.25mV,即是误差为-2.5%。类似地,可计得,当R=600Ω时,Vc=9.917mV,误差为-0.83%。
同是t=10uS、C=10uF的情形。当R=200Ω时,Vc=0.9975mV,与理想情况的1mV相差0.0025mV,误差为-0.25%。当R=600Ω时,Vc=0.99916mV,误差为-0.084%。
上述的计算颇为复杂繁琐。观察上述数据,似乎存在下面这样一个测试等效频率(可用于计算电容C的等效电阻)关系式:
feq=1/(Pi*t),其中Pi是圆周率,t是电容充电时间。
若果确认这个测试等效频率关系式成立,那么,就大大方便了这里测量误差的估算。
3、测试等效频率的推导
先看下图。
(, 下载次数: 0)
图左侧上方是本机容量测试时的情形,即是恒流源I对电容C充电,充电时间为t秒,在t秒那一时刻电容两端的输出电压为Vo。其关系式为:
Vo=I*t/C.
由于我们的容量测试模式时,受并联DC电阻R影响的时间是从0秒起至t秒止(即是在此期间电阻R分流了一部分充电电流I),因此,我们要考察的对象不是在t秒那一时刻电容两端的输出电压(Vo),而是从0秒起至t秒止这整个时间段的电压,也即是平均电压Vav。又由于电容两端电压的波形是锯齿波,因此,平均电压Vav是峰值电压Vo的一半,即是有:
Vav=0.5Vo=It/(2*C)
再看恒流源I驱动纯电阻R的情形,即图左侧下方的电路。这个R代表的是电容的等效阻抗Xc。图中有:
Vav=Vo=I*R
我们知道,电容C的阻抗计算式是:
Xc=1/(2Pif*C),其中Pi是圆周率,f是测试信号频率
由以上2个Vac关系式可得,IR=It/(2*C),R代表的是电容的等效阻抗Xc。因此,有
Xc=R=t/(2*C)
又由电容C的阻抗计算式得测试等效频率feq为
feq=1/(2PiXc*C)
代入上一个Xc关系式,可得到测试等效频率为
feq=1/(Pi*t)
用这个关系式代入前面的多个数据,计得由并联200Ω电阻所带来的误差数据结果,与前面通过较为复杂的计算所得结果完全一致,证明此测试等效频率关系式具有可信性。
4、误差的估算
上一个图中显示的仿真结果,表明1uF电容在10mA恒流源的驱动下、10uS的充电时间内,输出的平均电压(50mV)与换为5Ω电阻时的输出平均电压(50mV)相同。即是表明,此情形1uF电容的等效阻抗为Xc=5Ω。
我们只使用上面推导出来的测试等效频率关系式,再代入10uS的充电时间,也能计得1uF电容的等效电阻为5Ω[但最简单的计算方法是使用前面的计算式 Xc=R=t/(2*C)]。如果代入100uS的充电时间,则可得到1uF电容的等效阻抗为Xc=50Ω。
对于在路测量时由并联电阻R引入的误差来说,被测电容的等效阻抗Xc相对于R越大,则这个误差就越大。另一方面,测试的激励脉冲宽度越宽(即t越大),被测电容的等效阻抗就会越大。
而本机的4个容量测量量程,他们的激励脉冲宽度都是1uS~100uS逐级增宽的,对应的被测电容容量也是1~100逐级增大的,因此,同一量程下,即使被测电容的容量不同,等效阻抗也是相同的。运用上面最简单的计算式 Xc=R=t/(2*C)可得:
100mA驱动的量程(10u~99u),整个量程的被测电容等效阻抗都是Xc=t/(2C)=99uS/(299uF)=0.5Ω。
10mA驱动的量程(1u~9.9u),整个量程的被测电容等效阻抗都是Xc=t/(2C)=99uS/(29.9uF)=5Ω。
1mA驱动的量程(0.1u~0.99u),整个量程的被测电容的等效阻抗都是Xc=t/(2C)=99uS/(20.99uF)=50Ω。
0.1mA驱动的量程(0.001u~0.099u),整个量程的被测电容等效阻抗都是Xc=t/(2C)=99uS/(20.099F)=500Ω。
实际在路测量时有DC电阻并的可供参考的数据,我只知道一个。也即是,家用电风扇的启动电容为1.2u,与这只电容并联的电机绕组DC电阻是600多Ω。按最坏的情况估算,即是把他当作为1uF、并联的DC电阻为500Ω,并且需使用1mA驱动的量程(0.1u~0.99u)来测试,那么,因为1mA驱动量程被测电容的等效阻抗50Ω,在500Ω的并联电阻影响下,会变成45.45Ω,也即是,产生的误差为10%。
另一方面,根据实际检修经验,这些“功率型”薄膜电容因容量减小而造成机器出现故障的,其容量减小的程度远不止10%。
所以,可以期望,本机容量模式的在路测量功能还是具备较好的实用性的。
5、减小在路测量误差所需的设计安排
由上面的计算可知,只有把充电时间(激励脉冲宽度)控制得足够小,才能让被测电容等效阻抗变得足够低,从而能抵御并联电阻R所带来的不利影响,确保在路测量误差不致太坏。
就目前我了解的情况来看,市面上那些不是LCR电桥的电感电容表、专用电容表或万用表的电容档,都不具备在路测量能力。因为他们的测试电平都太高(高于半导体PN结导通电压),又或者是测试激励时间太长,无法为在路测量提供足够精度。
PS:本人设计此ESR表的容量测量功能时,实际上,第1个方案是现在的方案,但因为当时担心ADC或比较器不能快速准确地对检出信号作出反应,激励脉冲宽度取得过大,为现在的10倍(即10uS~1mS逐级增宽)。在核算在路测量误差后,发现太大,不具实用性。于是,转向研究DAC方案,发现可行性也不佳。最后才又转了回来。
——以上分析了本机的误差。可看到,一部分误差是可以通过校准来予以消除,另一部分是无法消除的,上面内容均已写明。关于本机的校准,以后再写
(待续)

我前帖所附的ADC试验数据不知看到没有,
其中的ADC测试电压数据的具体值可能受系数的影响不一定准确,
但测量线性度感觉还是可以的。
关于电容容量的测试方法,
刚才简单看了一下您的设计思路,
大致是激励源采用ESR测量各档的电流幅值恒定,
周期为0.5ms, 而脉宽为1us-100us以步进1us递增,
假如仍以ADC方法进行测量,
则需要最快要在1us脉冲结束时采样DUT的电压,
如果达到1300mV, 则此时对应该档的最小电容(1个电容单位)。
考虑了一下,1us对应14个ADC时钟,
拟采用的F030的ADC最小采样时间为1.5个ADC时钟,
次之为7.5也可以选择。 应该可以应付。
2us则对应28个ADC时钟,就更没有问题了。
为权衡精度,可考虑采样时间可变的方法,
将1us--100us各脉冲对应于不同长度的采样时间。
这样的话,可能在各档的初段由于采样时间短相应损失精度,
从这次8us信号脉宽采样试验来看,
精度的损失最多发生在示值为5以下的各档小电容,
初步感觉还是可行的。

我前帖所附的ADC试验数据不知看到没有,
其中的ADC测试电压数据的具体值可能受系数的影响不一定准确,
但 ...
adc在你的方案里面,实际担当的是一个裁判员,不需要太高的精度(尤其是容量测量模式,即使4线
版也只是100字)。有这个有利条件,你的方案的可行性又增大了许多。
adc的作用,是判断检出信号的锯齿波顶端处的电压是否超过FS2(即1200mV,加上300mV的Vdc则是1500mV)。只要adc能完成此任务即可,不需要他输出数据(只需要他能准确地告诉计数器何时停止计数)。
实际行不行,可以通过做试验来验证。拿你现在的试验板pcb来改一下接线就可以启动试验。
如果你的方案可行,现在的2线版电路还可以省去一块运放。因为你这里不用比较器,这样已省一个运放,而我可以用一只bjt代替恒流源部分负责小电流的那个运放。

adc在你的方案里面,实际担当的是一个裁判员,不需要太高的精度(尤其是容量测量模式,即使4线版也只是10 ...
既然我已经输出了数据,
当然ADC连接比较器正端的接线已改好了,
ESR测量部分实际已经可以输出ESR测量结果,
把ADC电压数据(其实无须换算成真正的电压)与理论值进行比较即可。
表中给出实际的电压值,
主要是想让您看看,
这样的电压值是否合理?
理论是满度电压设计为1200mV,
ADC在正端采集的电压
是不是最高应为1.2V(对应各档最大ESR)
但我采集到的电压较高。
从实测来看,
采集到的ADC电压值还是比较稳定的,
大部分可稳定在0.3%以内。
另外,就目前的实验板,
如果我前帖的理解正确的话,
也可以进行容量测试试验。

2024-1-24 21:17
小鬼头 发表于 2024-1-24 20:56
adc在你的方案里面,实际担当的是一个裁判员,不需要太高的精度(尤其是容量测量模式,即使4线版也只是10 ...
方案可行的话,
不光可以省运放,
还可以省掉两个IO口, PWM和Dch-2

既然我已经输出了数据,
当然ADC连接比较器正端的接线已改好了,
ESR测量部分实际已经可以输出ESR测量 ...
看数据,没发现有明显问题。
但我最担心的是容量测量模式。需要构造出峰值约100mV、宽度为合适的锯齿波信号,看看你的dac能不能顺利读取数据:
1、可以用1mA的固定电流,以1uS的脉冲宽度、周期为500uS的周期去驱动0.1u的被测电容,看看能不能在这个周期性检出信号中读到数据,是不是每个周期都读到,读到的数据是否稳定,与理论值相差多少。
2、再用1mA的固定电流,以2uS的脉冲宽度、周期为500uS的周期去驱动0.05u(2只0.1u串联)的被测电容,也看看能不能读到数据….等等。
3、同样的3uS、3只0.1u串联….
如果每个周期都能读到数据,数据也稳定,那么基本就ok(与理论值的差额,如果不是太大,即使这3种情况不一致,也可以通过调试,令其的裁判员作用变成一致)。

看数据,没发现有明显问题。
但我最担心的是容量测量模式。需要构造出峰值约100mV、宽度为合适的锯齿 ...
“用1mA的固定电流,以1uS的脉冲宽度、周期为500uS的周期去驱动0.1u的被测电容”
我想了一下,在时间参数中,周期为500uS并不重要,
起作用的只是以1uS的充电时间,
其它时间都是放电,
只要放电时间足够,
多少时间都是没有关系的。
之所以有这个周期为500uS,
是当初为配合锯齿波参考电压的特性延伸而来的,
现在采用软件的话,
ESR测量也不用强调500uS
只须要放电充分即可。
事实上要达到放电充分,
大电容需要比小电容更长的放电时间,
以此为基础,
我们这个装置应该不一定受此局限,
可以测量更大的电容,
反正就是充电时间已知,
用ADC采样DUT电压计算就可以了。
不知我的理解是否正确。

看起来,
这个简单的RC滤波好像不行。
你这个波动有好几百mV了,
我也是卡在这,没有继续下去。想改一下这个锯齿波电路,奈何学艺不精,目前还没有想到好的方法。

我回头查了一下我设计时的PWM仿真文件,发现是我当时在来回改参数作偿试的过程中,最后把PWM模块的1个关 ...
上面这个回帖里的最后一个仿真图,本人对仿真结果的判读,匆忙中还是出了错。
PWM输出波形是探针PR2采集的,如下图的蓝色圈数据,因此,纹波Vpp粗算应为1616mV-1536mV=80mV(扣除正常SR引致的7.2mV偏移差距也有73mV的Vpp纹波)。之前判读时误用了红色圈数据,误读为Vpp小于10mV。
(, 下载次数: 0)
由于FS2=1200mV,而我们的计数是100个(即100字),因此,每个计数/每个字对应的信号电平为1200mV/100=12mV,即是1LSB=12mV。现在的80mVpp纹波,按Vp计算为40mV,已大于1LSB的电平,会造成计数结果出错。
因此,还要加强PWM的滤波才行。
暂时发现RC改为下面的样子,可以满足目前测量的要求。
(, 下载次数: 0)
上图中,正常的SR带来的偏移差额(红色圈数据)是1518.9mV-1511.5mV=7.4mV。蓝色圈数据即输出波形的粗算纹波数据是1414.9mv-1403mV=11.9mV,扣除7.4mV正常偏移差额后,实际纹波Vpp=11.9mV-7.4mV=4.5mV,按Vp计则为2.3mV,与1LSB的12mV相比,已足够低。
下图是采用上述双重RC滤波后的SR整体效果仿真效果:
(, 下载次数: 0)
从图中看,初始段的SR也不太理想。如果把RC参数改小一些,则SR情况有改善,但纹波又会恶化。
“用1mA的固定电流,以1uS的脉冲宽度、周期为500uS的周期去驱动0.1u的被测电容”
我想了一下,在时间参 ...
你的理解基本正确。
实际上,你的adc方案,1次测量就能通过adc的数据得到结果,不需像现在的电路那样需要n次激励才能通过计数器得到结果。也就是,你的adc方案的刷新率很高,测量速度快。
现在计数器方案,其实是自造一个adc,利用测量操作时对时限要求低的特点,通过多次重复测量,降低了对器件的要求。
至于测量电容容量的问题,确实是,把激励时间延长,可以将测量范围扩展到更大的容量。但就我们的机子用途而言,主要是供检修之用,大容量的电容(即电解电容),宜使用esr方法进行检测。另一方面,激励时间延长后,保护电路的隔直电容电压会同步上升,很快就会超过允许值而导致机子测量不正常。

现在准备抛开这个锯齿波。
您用的是哪一款MCU?
他使用的是内置有比较器的mcu。
我们的电路也可以考虑使用这种mcu。因为这样能省一个运放,可利用他来搭建一个有源滤波器,加强对pwm的滤波。
到时我研究一下这种配置,如果滤波效果能达到纹波小于1mV,那么,还可用于4线版方案中——如果你的adc方案不能搞定,可能要使用12bit的dac才能满足4线版方案的锯齿波生成要求。

你的理解基本正确。
实际上,你的adc方案,1次测量就能通过adc的数据得到结果,不需像现在的电路那样 ...
我现在的ESR的ADC测量方案,
利用了连续激励30次取平均值的方法,
得到的数据还是比较稳定的。
小电容容量的测量,
对ADC时序控制比较高,
有没有什么别的方法来降低要求,
并得到更可靠的结果呢?
那个TT,我实测几个pF的电容都可以得到基本正确的结果,
现在看来,
目前板上的硬件(包括比较器)都已具备,
能否找到类似的方法结合起来。

我现在的ESR的ADC测量方案,
利用了连续激励30次取平均值的方法,
得到的数据还是比较稳定的。
不考虑增加小电容测量功能。
因为在维修实践中,小电容出现故障的机会甚少,即使出故障,大多也不是容量方面出问题,而是其他方面出问题(比如漏电)。

我回头查了一下我设计时的PWM仿真文件,发现是我当时在来回改参数作偿试的过程中,最后把PWM模块的1个关 ...
刚才我核算了一下,不需要做过多的修改,只要按照我前面的双重RC滤波器参数来做(取值分别是2.2k、1u、220k、0.01u),就能满足当前2线版机子的要求,而且不怎么影响容量模式的测量精度。你俩可以继续按此路线做试验。
1、采用双重RC滤波后,纹波已低于12mV(1LSB),解决了纹波过大造成测量数据不准确的问题。
2、现在的锯齿波波形,主体部分的SR仍是很不错的,不一定要使用很理想的锯齿波波形。我已证实,锯齿波波形的初段SR不理想,可通过对容量模式的补偿校准用数据做相应的调整即可,基本不影响容量模式的测量精度。
3、我原来担心需要作2次的补偿校准,才能获得容量模式所需的补偿数据(表笔、接触电阻等的Rc数据)。现在通过计算,表明像原型机那样做1次补偿校准即可。因为理想锯齿波波形与现在的锯齿波波形之间的“差额”,是比较固定的——只要RC滤波器的参数固定,这个“差额”就固定。这样,就可以用一个固定值对校准程序读到的Rc值作修正,用于给容量模式作增益校准,令容量模式的测量精度没有明显下降。
我找个时间,也把这部分内容也写进“设计研究”系列帖子之中。

看数据,没发现有明显问题。
但我最担心的是容量测量模式。需要构造出峰值约100mV、宽度为合适的锯齿 ...
感觉这个是不是说反了,
1mA档,在比较器正向端要得到1300mV的电压
0.1uF电容脉宽取1us,
0.2uF电容脉宽取2us
电容越来越大,应该并联吧。

感觉这个是不是说反了,
1mA档,在比较器正向端要得到1300mV的电压
0.1uF电容脉宽取1us,
噢,是应该2只并联。

esr的测量分辩率就是按原型机来做,只分辨到0.01欧。
把他提高一些,不是不可以(——计划中的四线版,其电池内阻档初定能分辨至0.1m欧,用他来测电解,也能测出esr值来,但因工作原理限制,会附加上容量所带来的偏移误差)。而根据指针式esr表的使用经验看,这样的分辨率已能充分满足绝大部分的检修需求。

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究八

本节主要研究当前设计的脉 ...
脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究九
在完成本机容量测量模式基本工作原理的研究后,我才想起手头有一本早年国内盗印、台湾翻译出版的《99种简易自制测试仪器理论与实作》一书,里面也有采用脉冲计数法的数字电容计设计。该书没有给出原著的信息,但估计是源自欧美国家。
(, 下载次数: 1)
(, 下载次数: 0)
为了进一步确认本机的容量测量是否行得通,也为了加深对这种脉冲计数法测量容量原理的理解,于是找来该书仔细阅读。通过阅读和分析,证实本机的基础工作原理,与书中的2种数字电容计完全一致,都是通过使用“时钟闸门”(书中原文为“时钟闸”),来建立起脉冲计数值与被测电容容量值之间的正比例线性关系,从而实现容量的测量。
本节的研究内容主要围绕本机的容量测量模式,与同是采用脉冲计数法的这2种数字电容计作比较。
一、书中的2种数字电容计资料
(一)、书中的《数位电容测试器》
具体见下面图片:
(, 下载次数: 0)
这个电容计,是以单稳态电路来构造“时钟闸门”的。“时钟闸门”的时间长度由单稳态电路的RC决定,其中,C是被测电容,R是固定电阻(为了提高测量精度,这个R是经调试后确定的固定电阻)。
单稳态电路控制“时钟闸门”开启与关闭。当“时钟闸门”开启时,允许计数脉冲送到后面的计数器电路,显示屏上的计数数值会随着计数脉冲数量的增加而增加。当“时钟闸门”在单稳态电路控制下变为关闭状态后(相当于我们机子MCU收到“停止计数”信号),显示屏上的计数数值将不再变化,此期间会一直显示这个计数数值(这个计数数值就是被测电容C容量值的测量结果)。
计数脉冲(时钟脉冲)是由晶振电路产生的,其周期远小于“时钟闸门”的时间长度,两者构成固定的比例。又由于“时钟闸门”的时间长度与被测电容的容量C构成正比例关系,因此,整体上,建立起脉冲计数值与被测电容容量值之间的正比例线性关系,从而实现容量的测量。
此电容计设置有复位、重启功能,,因此,能够周期性地对被测电容进行测量,并周期性地刷新所显示的测量结果,这一点,与我们机子相同。该机还采用分频的方法来实现测量量程的切换。
2、书中的《简易的数位电容测试器》
具体见下面图片:
(, 下载次数: 0)
这个电容计的“时间闸门”更接近于我们的机子。他是以标准RC电路、加上比较器(741运放)来构建“时钟闸门”。
开关打至测量功能后,计数脉冲电路开始工作,电源电压经R向被测电容C充电。充电初期,比较器一直输出H电平,即是这个“时钟闸门”一直处于开启状态,允许计数脉冲送到后面的计数器电路和显示电路。直到电容电压超过所设定的DC电压值(该机设为电源电压的0.63倍,这也是比较器的Vref电压),比较器状态翻转,“时钟闸门”改为进入关闭状态,即是“时钟闸门”关闭,显示屏上的计数数值将不再变化。
该机之所以要将比较器的Vref设为电源电压的0.63倍,是因为在这个取值下,“时钟闸门”的时间长度t刚好为t=RC(可通过标准RC电路的关系式求解得到)。这样一来,就允许R取为1k、10k欧姆这样方便的取值,否则,就有可能需要取比较特殊的电阻值,才能让显示屏上的计数结果与被测容量值之间构成准确的对应关系。
该电容计没有复位、重启功能,拨动一次测量开关,只作一次性的测量,而且在下次测量之前,显示屏将一直显示此次的测量结果。因此,这个电容计被称为“简易型”。
二、我们机子与上述2种电容计的比较
(一)相同点
1、都是使用“时钟闸门”
2、时钟闸门的开启时长与容量值成线性的正比例关系
(二)不同点
1、测试电平。这2种电容计的测试电平都很高,至少达到电源电压的一半。这个测试电平远超半导体PN结的导通电压,不能用于在路测量。
2、测试充电时长。这2种电容计在测试期间,被测电容的充电时间相当长,因此,若采用在路测量的方法,把他用于测量电机启动电容的容量,会受并联DC电阻(电机启动线圈的DC电阻)的影响而产生巨大的测量误差。
3、保护电路。这2种电容计都没有保护电路,毫无自我保护能力,属于“裸奔”。
三、参照《简易的数位电容测试器》工作原理可发展出的MCU电容计设计
《简易的数位电容测试器》仅使用RC电路(再加运放做的比较器),就构建出容量测量所需的“时钟闸门”。这个C是被测电容,如果使用MCU,那么,就可以发展出仅需1只外接电阻的数字电容计(仅有1个测量量程时)。以此为基础,还可以根据需求来增强功能。下面,简单就此作一番纸上谈兵式的研究
(一)最简洁的MCU电容计
MCU外面只需外接1只电阻R,利用MCU内部的门电路作为比较器,就能构建出容量测量所需的“时钟闸门”。由于门电路的翻转电平约是电源电压的一半,因此,需要使用合适阻值的电阻R,或者是通过设定合适“时钟脉冲”周期来予以配合。在不考虑在路测量需求时,就没有了对测试充电时长的限制,被测电容充电时长可以是1uS起、至数百mS甚至是1S。这样,一个量程就可以覆盖很大的容量范围。
其他方面,都可以通过MCU内部作好相关安排,这样就能做出一个电容计来。
我估计那些TT(晶体管测试仪)的容量测量功能,基本就是采用这一类模式,所以能够实现外围电路的超简洁化。
(二)扩展量程
当1个量程不能满足要求时,可通过增加电阻R来扩展。
(三)降低测试电平以实现基本的在路测量能力
测试电平不高于半导体PN结的导通电压,这是具备在路测量能力的基本要求。
如果要满足这个要求,测试电平(测量期间电容充电后的电压)就需要控制至足够低,比如200mV。这样,单靠MCU就做不出符合要求的“时钟闸门”。需要外接一个Vref=200mV的比较器,或者是像我们机子那样,把测试电平信号放大(需要外接一个运放)。
(四)增强保护能力
如果要提升保护能力,就要像我们机子那样增加数量不算少的箝位/限流器件。
(五)减小被测电容并联有DC电阻时的测量误差(前面所述的电机启动电容在路测量情形)
要减小这种测量误差,就需要控制测试充电时长。当测试充电时长缩短后,单个量程的覆盖范围就会大大缩小。这样一来,就只有2种选择,一是以增加元件的代价(增加量程)来保证原来的测量范围能力。二是放任让机子的测量范围能力减小。
------------------------------
可看到,当把原来只有1只外接电阻的超简洁MCU电容计作了后面4个项目的功能强化后,其复杂程度,已跟我们现在的机子相差不远。而我们机子的容量测量功能,细究之下,是在没有增加任何1只元件开销的情况下额外获得的。也就是,我们的机子即使取消掉容量测量功能,他也不能减小任何1只元件,因为我们在原型机基础上发展起来的ESR、电池内阻测量功能都需要用到机上所有元件,没有1只元件是多余的。
(待续)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究九

 
在完成本机容量测量模式基本工作原理的研究后,我才想起手头有一本早年国内盗印、台湾翻译出版的《99种简易自制测试仪器理论与实作》一书,里面也有采用脉冲计数法的数字电容计设计。该书没有给出原著的信息,但估计是源自欧美国家。

为了进一步确认本机的容量测量是否行得通,也为了加深对这种脉冲计数法测量容量原理的理解,于是找来该书仔细阅读。通过阅读和分析,证实本机的基础工作原理,与书中的2种数字电容计完全一致,都是通过使用“时钟闸门”(书中原文为“时钟闸”),来建立起脉冲计数值与被测电容容量值之间的正比例线性关系,从而实现容量的测量。

本节的研究内容主要围绕本机的容量测量模式,与同是采用脉冲计数法的这2种数字电容计作比较。

一、书中的2种数字电容计资料

(一)、书中的《数位电容测试器》

具体见下面图片:









这个电容计,是以单稳态电路来构造“时钟闸门”的。“时钟闸门”的时间长度由单稳态电路的RC决定,其中,C是被测电容,R是固定电阻(为了提高测量精度,这个R是经调试后确定的固定电阻)。

单稳态电路控制“时钟闸门”开启与关闭。当“时钟闸门”开启时,允许计数脉冲送到后面的计数器电路,显示屏上的计数数值会随着计数脉冲数量的增加而增加。当“时钟闸门”在单稳态电路控制下变为关闭状态后(相当于我们机子MCU收到“停止计数”信号),显示屏上的计数数值将不再变化,此期间会一直显示这个计数数值(这个计数数值就是被测电容C容量值的测量结果)。
计数脉冲(时钟脉冲)是由晶振电路产生的,其周期远小于“时钟闸门”的时间长度,两者构成固定的比例。又由于“时钟闸门”的时间长度与被测电容的容量C构成正比例关系,因此,整体上,建立起脉冲计数值与被测电容容量值之间的正比例线性关系,从而实现容量的测量。
此电容计设置有复位、重启功能,,因此,能够周期性地对被测电容进行测量,并周期性地刷新所显示的测量结果,这一点,与我们机子相同。该机还采用分频的方法来实现测量量程的切换。

2、书中的《简易的数位电容测试器》

 具体见下面图片:








这个电容计的“时间闸门”更接近于我们的机子。他是以标准RC电路、加上比较器(741运放)来构建“时钟闸门”。
开关打至测量功能后,计数脉冲电路开始工作,电源电压经R向被测电容C充电。充电初期,比较器一直输出H电平,即是这个“时钟闸门”一直处于开启状态,允许计数脉冲送到后面的计数器电路和显示电路。直到电容电压超过所设定的DC电压值(该机设为电源电压的0.63倍,这也是比较器的Vref电压),比较器状态翻转,“时钟闸门”改为进入关闭状态,即是“时钟闸门”关闭,显示屏上的计数数值将不再变化。   
该机之所以要将比较器的Vref设为电源电压的0.63倍,是因为在这个取值下,“时钟闸门”的时间长度t刚好为t=RC(可通过标准RC电路的关系式求解得到)。这样一来,就允许R取为1k、10k欧姆这样方便的取值,否则,就有可能需要取比较特殊的电阻值,才能让显示屏上的计数结果与被测容量值之间构成准确的对应关系。

该电容计没有复位、重启功能,拨动一次测量开关,只作一次性的测量,而且在下次测量之前,显示屏将一直显示此次的测量结果。因此,这个电容计被称为“简易型”。

 二、我们机子与上述2种电容计的比较

(一)相同点

1、都是使用“时钟闸门”

2、时钟闸门的开启时长与容量值成线性的正比例关系


(二)不同点

1、测试电平。这2种电容计的测试电平都很高,至少达到电源电压的一半。这个测试电平远超半导体PN结的导通电压,不能用于在路测量。

2、测试充电时长。这2种电容计在测试期间,被测电容的充电时间相当长,因此,若采用在路测量的方法,把他用于测量电机启动电容的容量,会受并联DC电阻(电机启动线圈的DC电阻)的影响而产生巨大的测量误差。

3、保护电路。这2种电容计都没有保护电路,毫无自我保护能力,属于“裸奔”。



三、参照《简易的数位电容测试器》工作原理可发展出的MCU电容计设计

《简易的数位电容测试器》仅使用RC电路(再加运放做的比较器),就构建出容量测量所需的“时钟闸门”。这个C是被测电容,如果使用MCU,那么,就可以发展出仅需1只外接电阻的数字电容计(仅有1个测量量程时)。以此为基础,还可以根据需求来增强功能。下面,简单就此作一番纸上谈兵式的研究


 (一)最简洁的MCU电容计

 MCU外面只需外接1只电阻R,利用MCU内部的门电路作为比较器,就能构建出容量测量所需的“时钟闸门”。由于门电路的翻转电平约是电源电压的一半,因此,需要使用合适阻值的电阻R,或者是通过设定合适“时钟脉冲”周期来予以配合。在不考虑在路测量需求时,就没有了对测试充电时长的限制,被测电容充电时长可以是1uS起、至数百mS甚至是1S。这样,一个量程就可以覆盖很大的容量范围。
 其他方面,都可以通过MCU内部作好相关安排,这样就能做出一个电容计来。
 我估计那些TT(晶体管测试仪)的容量测量功能,基本就是采用这一类模式,所以能够实现外围电路的超简洁化。

 (二)扩展量程
 当1个量程不能满足要求时,可通过增加电阻R来扩展。

 (三)降低测试电平以实现基本的在路测量能力
 测试电平不高于半导体PN结的导通电压,这是具备在路测量能力的基本要求。
 如果要满足这个要求,测试电平(测量期间电容充电后的电压)就需要控制至足够低,比如200mV。这样,单靠MCU就做不出符合要求的“时钟闸门”。需要外接一个Vref=200mV的比较器,或者是像我们机子那样,把测试电平信号放大(需要外接一个运放)。

 (四)增强保护能力
 如果要提升保护能力,就要像我们机子那样增加数量不算少的箝位/限流器件。

 (五)减小被测电容并联有DC电阻时的测量误差(前面所述的电机启动电容在路测量情形)
 要减小这种测量误差,就需要控制测试充电时长。当测试充电时长缩短后,单个量程的覆盖范围就会大大缩小。这样一来,就只有2种选择,一是以增加元件的代价(增加量程)来保证原来的测量范围能力。二是放任让机子的测量范围能力减小。
  

------------------------------

可看到,当把原来只有1只外接电阻的超简洁MCU电容计作了后面4个项目的功能强化后,其复杂程度,已跟我们现在的机子相差不远。而我们机子的容量测量功能,细究之下,是在没有增加任何1只元件开销的情况下额外获得的。也就是,我们的机子即使取消掉容量测量功能,他也不能减小任何1只元件,因为我们在原型机基础上发展起来的ESR、电池内阻测量功能都需要用到机上所有元件,没有1只元件是多余的。

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究十

 本节主要针对锯齿波的PWM纹波问题作研究,并对设计电路图作相应的调整。


 一、设计草图n存在的PWM纹波太大的问题  

   之前,经abbey、daw85试验,发现前面设计草图n的锯齿波波形纹波太大,远高于当初的仿真结果,会导致测量出错。本人核查发现,是由于前期设计阶段的疏忽,误用20kHz时针频率的PWM波形来作仿真,而且也没有对纹波的幅度进行仔细核查,使用了滤波效果远达不到要求的1级RC滤波器,从而导致出了问题。这些内容见前面回帖。

  为了生成锯齿波,我们打算让MCU在PWM引脚输出的波形是下面的样子:



   这是一个重复周期T=0.5ms(即500uS)、脉宽增大的步长tc=2uS、脉冲总数250个(对应输出的DC电压为3000mV)的连续脉冲串形式的PWM波形。
   由于上述PWM波形的周期是T=0.5mS,所以,时针频率f=1/T=2kHz。仿真时,所用的PWM模块应取为2kHz的时针频率,但我实际使用了20kHz的时针频率。

 注1:上面打算使用的PWM波形,由于其时针频率低,因此,对MCU的速度要求极低,几乎所有MCU都能胜任。

 注2:若果MCU的速度性能允许(即是能够生成最窄脉宽为tc的脉冲方波),那么,我们可以使用时钟频率更高的PWM波形,这样,就可以简化RC滤波电路(本文不对此作展开研究)。

 注3:若MCU允许PWM波形取更高的时钟频率,为了得到我们机子所需的SR=12mV/0.5mS锯齿波,需要对MCU生成PWM波形的参数作调整:

(1)若MCU允许PWM波形取4kHz的时钟频率,则这个PWM波形应是T=0.25ms(即250uS)、脉宽增大的步长tc=0.5uS、脉冲总数500(对应输出的DC电压为3000mV)的连续脉冲串。
(2)若MCU允许PWM波形取8kHz的时钟频率,则这个PWM波形应是T=0.125ms(即125uS)、脉宽增大的步长tc=0.125uS、脉冲总数1000(对应输出的DC电压为3000mV)的连续脉冲串。

附上本人研究PWM波形时钟与其他参数关系的手稿图:





 二、加强滤波的方法及仿真研究

 1、纹波情况。

 用仿真波形观察,锯齿波上升波形的中间区域纹波最大,如下图:



从图中可看出,在PWM方波占空比为50%(纵坐标1.5V)附近时产生的纹波幅度最大。因此,我们研究纹波问题时,可使用幅度为3V、占空比为50%的方波来作为最坏情况的研究对象。

2、纹波的控制需求。

  由于本ESR表两线版的计数是100个,FS2信号电压为1200mV,因此,1个LSB=12mV(四线版采用1000字计数时则是1.2mV)。要让本机这个自制的ADC能正常工作,需要让纹波幅度低于0.5个LSB,也即是,最终产生的纹波幅度应低于6mV。

3、对RC滤波器的需求。

 由于PWM方波的幅度为3Vpp,纹波幅度需减小至6mV以下,因此,可计得,RC滤波器对2kHz信号的衰减能力需达到1.5Vp/6mV=48dB(1000字计数的四线版则是68dB)。这个48dB,是对RC滤波器滤波能力的最低需求。实际使用的RC滤波器,其滤波能力宜应留出足够的余量。

4、RC滤波器的仿真。

(1)最初的一级RC滤波器

这是前面设计草图n所用的RC滤波器。仿真结果显示,滤波能力仅达到15.5dB,远达不到48dB的最低要求。



(2)二级RC滤波器

这是前几个帖子我建议Abbey他们可作试验用的2级RC滤波器。仿真结果显示,滤波能力达到57.5dB,能达到48dB的最低要求,且留有足够的余量。



但这个滤波器需要使用1u的电容,成本上较高。我通过仿真发现,2只电容统一采用0.01u的取值,也能获得完全相同的滤波效果。如下图:


注:这2个二级滤波器,RC时间常数相同。前1个滤波器的前后2级RC取值不同,通过这样的搭配,可以减轻通带频响曲线的“溜肩膀”现象,也即是,具有通带内频响曲线比后1个滤波器更为平直的优点(模拟电路常有这样的需求)。但我们这里,恰好没有这种通常频响曲线平直的需求,因此,允许取相同的RC取值,从而可以降低元件成本。

(3)三级RC滤波器

在前期的仿真中,锯齿波生成波形的仿真显示,RC滤波器的时间常数越大,锯齿波的起始段SR情况越差。由于担心锯齿波起始段SR情况不能满足使用需求,因此,仿真了一个时间常数较小的三级RC滤波器。

其滤波效果如下图。滤波能力达到56.5dB,也能达到48dB的最低要求,且留有足够的余量。

其锯齿波SR情况的仿真结果如下图。上图是整体效果,下图是局部效果。

图中,上方的斜直线是理想的SR波形线,下方的斜直线是经过RC滤波器后得到的SR波形线。最平直的水平线,是理想SR线与实际SR线的差额(即是理想SR线的电压值减去实际SR线的电压值,通过设置好瞬态仿真的后处理数据而得到),由这条水平的平直程度,可知道实际SR线与理想SR线的接近程度。

由图可知,横坐标(时间坐标)的10mS开始,水平线就相当平直,这表明,实际SR线的SR这项参数在10mS以后就相当理想。

回头再看一看前面第2个二级RC滤波器的SR情况的仿真结果。




同样地,由图可知,约从横坐标(时间坐标)的15mS开始,水平线就相当平直。这表明,这个二级RC滤波器的起始段SR情况比上述三级RC滤波器差一些。但是,他的实际SR线的SR这项参数在15mS以后就相当不错。

而我们机子设置成Vdc=300mV,意味着上面这些SR效果图中,纵坐标300mV以下的自制ADC计数都是无效计数。也即是,我们机子实际用到的SR波形是从300mV这个点开始的。 观察上面最后的SR效果图,可看到,300mV这个纵坐标点对应的时间横轴点是18mS,已大于15mS,这表明,使用这个二级RC滤波器,我们机子要用到的SR波形仍是具备良好的SR值准确度的。

综上,上面这个二级RC滤波器,能满足现在这个两线版ESR表的使用要求。不需使用更为复杂的三级RC滤波器。

  (3)未来四线版ESR表的RC滤波器

在这一轮仿真中,还针对未来四线版(1000字计数)的PWM滤波需求作了仿真。仿真结果表明,使用如下的3级RC滤波器,就能达到1000字计数的68dB滤波能力需求,如下图。

这个3级RC滤波器的锯齿波SR情况的仿真结果如下面2个图。也能基本满足机子的使用要求。

 三、锯齿波起始段SR情况不佳引发的特有问题及其解决办法

本机工作时,ESR/R模式只使用到300mV以上区间的锯齿波SR波形,而容量模式则干脆只使用Vref=1.5V的DC电压。按道理,这2个模式都不受锯齿波起始段SR情况不佳的影响。但是,容量模式需要做补偿性质的校准(做的是增益校准而不是偏移校准),才能提升精度,否则,会由于表笔引线等内阻Rc的存在而令测量精度明显变差(见前面的设计研究八帖子)。

而要知道Rc值,在目前锯齿波为非理想的斜直线时(即起始段有弯曲),会比较棘手。因为短接表笔,虽然可以得到一个补偿用的测量值k1,但这个k1不是Rc的直接值,而是含有Vdc等无效的计数,仅可供ESR/R模式使用——ESR/R模式使用的是偏移校准(或者称为归零校准,即俗称的“去皮”功能),实际测量时得到一个数据k2,MCU将k2减去K1后,就可以得到真正的测量结果。

容量模式一定要得到Rc的直接值,才能做提升精度用的增益校准。这可以有2种办法。

1、利用理想SR斜直线与实际SR斜直线之间比较固定的时间差来做文章

由前面的多个锯齿波效果图可知,理想SR斜直线与实际SR斜直线之间的时间差,是由RC滤波器的时间常数决定的。滤波器的RC时间常数越大,前面的效果图中,实际SR斜直线离开理想SR斜直线向右平移的距离越大。如果RC时间常数固定,那么,这个时间差(若干mS)就固定。

这样,在设计阶段,就可以通过仿真等手段,知道这个时间差是多少mS。将这个mS值转换为自制ADC的脉冲计数值,就得到一个无效计数值J1,再加上AC放大器DC固定偏置的Vdc=300mV对应的无效计数值,得到总的无效计数值J=J1+J2。然后,通过补偿/校准小程序,得到短接表笔时的测量值K1。编程时,用k1减去这个J,就可以得到容量模式所需要知道的Rc值。

但上述方法存在多个弊端:一是时间差的mS值不易计算得到,需要借助仿真才能得到。二是实际滤波器的RC时间常数会与仿真的理论值有偏差。三是只要改动滤波器的设计,就必须对编程的程序作修改,不具灵活性,太过死板。比如,我们如果改用更高时钟频率的PWM波形后简化了RC滤波器,又或者用DAC来生成锯齿波,这个时候,就要对程序做修改。

2、利用驱动电流明显不同的2个量程分别测1次来得到Rc值

其原理是:

(1)本机允许表笔等内阻的Rc最大值为1Ω。假定Rc的实际值(真正值)为0.99Ω

(2)那么,用100mA驱动的量程去测量,MCU可得到测量值m1(即m1个计数)。m1里面既含有真正Rc值所对应的99个有效计数,还含有前面所述的J1和J2个计数。即是,m1=Rc+J1+J2.

(3)换用1mA驱动的量程去测量,MCU得到第2个测量值m2(即m2个计数)。同样地,m1里面含有J1和J2这2个计数。但.由于驱动电流仅为第1次的1/100,那么,真正Rc值所对应的有效计数为0.99个,即不足1个。于是,有m2=J1+J2

(4)由上面可知,m1-m2=Rc。编程时,由MCU把m1减去m2,就可以消除由锯齿波起始段SR情况不佳引发的不良影响(以及Vdc带来的无效计数影响,从而可以得到容量模式所需的Rc值。

 我们的机子准备采用第2种办法。

四、更新后的设计电路图

到目前为止,基本完成了模拟电路部分的电路图设计。为方便识别,更新后的电路图给予版本号名称。先贴使用两块运放的版本(即V1.0a)电路图,待下一节的设计研究十一再上单块运放的版本(即V1.0b)。

 更新后的设计电路图V1.0a如下:

(待续)

脉冲式数字ESR表(带薄膜电容容量、电池内阻测量功能)的设计研究十一

本节研究ESR表设计上的剩余问题,主要是核查所用运放的工作速度能不能达到要求,以及研究DAC替代PWM的锯齿波生成方案,并公布只使用1块双运放的本机电路设计(V1.0b版)。


一、核查运放的工作速度

对于本ESR表来说,ESR模式和电容模式对于运放的速度性能需求是有所不同的。这是因为,ESR模式下,运放放大的输入信号是一个方波信号,电容模式下,运放放大的信号是锯齿波信号。相同的是,MCU检测运放输出信号电平的时间点,都是位于方波、锯齿波波形顶部的下降沿之处。

(一)ESR模式对运放的速度性能要求

ESR模式下,运放输入的信号是方波,而方波信号对运放提出的速度要求,主要集中在大信号即SR方面。如果运放的SR(转换速率)性能不佳,那么,他输出的方波会变成一个三角波(或是向三角波的波形靠拢)。由于MCU检测信号的时间点是方波顶部下降沿之处,因此,即使输出的信号是三角波,只要其顶部的电平与输入方波波形经理想放大后顶部下降沿之处的电平相同,那么,就不会出现问题。也由此可见,允许运放的速度性能差一些。但具体放宽要求到何种程度,可以利用下面的方波/三角波波形图来计算得到:


须注意的是,计算SR=V/tw时,不能使用运放输入处的方波信号电平(幅度)FS1=100mV作为V来计算,而应该使用运放输出处的电平FS2来计算。把这里的区别引申出来,就是:某一个运放,用他制作音频前置放大器时,能符合SR要求、不产生SR失真(即不产生摆率失真或不产生转换速率失真),但不代表用他作为电压放大级来制作功放,就不会出问题。这是因为,后者的信号电平比前者高出10倍以上,意味着SR性能要求也比前面高出10倍以上,把他用到功放里,还是有可能会产生SR失真的。

另一方面,本机在运放输出处设有衰减器(用于作仪表校准),因此,计算V时,不能直接按FS2=1200mV来计,应该按运放的实际输出电平(比FS2略高一些)来计,即是近似有V=1.4V。

假如我们编程时,按原型机那样取tw=8uS的ESR模式测试激励脉宽,那么,可计得,运放的SR参数至少要达到:SR=1.4V/8uS=0.175V/uS。这是很低的SR性能要求,只要是常用运放,通常就能满足,比如LM358,SR=0.5V/uS。

(二)电容模式对运放的速度性能要求

电容模式下,运放输入的信号是锯齿波信号,他不同于方波。研究他对运放速度方面提出的需求,可以分为大信号(SR参数)、小信号(运放频响)2个方面。

1、SR方面的需求

电容模式下,最窄的输入信号锯齿波宽度为1uS,他对应的计数值是1(注:最宽的是100uS,对应的计数值是100)。这时候,对运放的SR性能要求最高。可计得,这个锯齿波在运放输出端处的SR约是:SR=1.4V/uS。

因此,像LM358这些低速运放(SR通常是1V/uS的水平),就不能满足要求。而我们目前打算使用的TSV912和COS722则能满足要求,其中,TSV912的SR为4.5V/us,COS722为7.5V/us。

2、运放频响给测量信号波形带来的影响

我们打算使用的TSV912和COS722,算是速度比较快的了。因此,要研究一下,他速度方面给输出波形带来的“失真”(变形),对测量造成的影响是否还落在我们可以接受的范围。

如果使用计算的方法,会有难度和比较麻烦。我是不懂具体怎么算,也不会使用Matlab软件来帮助计算。但我估计,大概可以这样计算:一是求出输入锯齿波信号的傅立叶级数的表达式,二是根据运放的闭环频响得到运放的传输函数,三是用输入信号表达式乘以传输函数得到输出信号,四是对输入、输出信号进行分析,看一看锯齿波波形顶峰处的电平前后变化了多少(与理想放大器放大后的电平作比较)。

为了核查这个锯齿波波形在经过运放后的顶峰电平变化程度,我使用了Multisim软件来进行分析:

(1)先构建出与电容模式检出信号相同的锯齿波信号。

如下图。利用1个方波电流源、1个方波电压源和1个理想二极管,来制造出所需的锯齿波输入信号。同步改变2个方波源的占空比,可以得到同期相同、宽度不同的锯齿波。

(2)使用与我们所用运放速度性能相近的RR运放模型来搭建ESR表的AC放大器

Multisim软件中,没有我们所用的TSV912和COS722运放。因此,使用了软件中已有的RR运放MCP6292来代替。他的频响为GBW=10Mhz(SR为7V/uS),与TSV912(GBW=8Mhz)和COS722(GBW=10Mhz)比较接近。

(3)输入不同宽度的锯齿波信号,通过瞬时仿真方式观察运放输出波形。

将输出的波形貌与理想输出作比较,看一看锯齿波波形顶峰电平的差异程度。经过以上的仿真,得到如下的仿真结果:

1uS宽度的锯齿波,电平误差为-21.8%,
2.5uS宽度的锯齿波,电平误差为-16.2%,
5uS宽度的锯齿波,电平误差为-4.74%,
10uS宽度的锯齿波,电平误差为-2.60%,
100uS宽度的锯齿波,电平误差为-1.15%,

以上仿真结果表明,我们作电容容量测量时,绝大多数情况下,运放这方面性能所带来的误差,是在-2.60%及以下。这是因为,本机仅是在测量0.001u至0.009u容量的电容时,才会出现1uS至9uS宽度的锯齿波(对应的计数是1至9个计数)。其他容量(0.001u至99u,对应的计数是10至99个计数)测量时,检出的锯齿波信号宽度都是在10uS至100uS之间。

另一方面,这里产生的误差是负误差,与电容本身ESR带来的正误差极性相反,两者不是“叠加”关系,而是存在着相互抵消的关系——这是对我们机子有利的。

因此,运放这方面速度性能对测量造成的影响,还落在我们可以接受的范围之内。

二、使用DAC生成测试所需的锯齿波(用DAC方案取代PWM方案)

本人现在设计的这个ESR表电路,采用PWM生成锯齿波的方案,目的是降低对MCU的要求,让几乎所用MCU都能用于制作这个ESR表(只要电源电压合适、I/O引脚足够)。若果实际使用的MCU内置有DAC,则可以简化电路中的这部分设计。

1、纹波方面的核算

我们前面的研究表明,本机要求锯齿波的“纹波”幅度小于本机自制ADC的1个LSB,即12mV(未来的四线版是1.2mV)。现在使用DAC生成这个锯齿波,其“原生纹波”也可以计算得到。

8bit的DAC有255级变化,因此,“原生纹波”=1LSB=3000mV/255=11.765mV。

10bit的DAC有1023级变化,因此,“原生纹波”=1LSB=3000mV/1023=2.93mV。

12bit的DAC有4095级变化,因此,“原生纹波”=1LSB=3000mV/4095=0.7326mV。

由于原生纹波足够小,因此,电路可作如下改进:

(1)使用8bit的DAC时,可以采用最简单的RC滤波器(可取R=10k,C=0.01u),以此来代替原设计图的的两级RC滤波器(V1.0a版电路图中的R21、R22和C8、C9)。也即是,可省去R、C元件各1只。

(2)使用10bit或12bit的DAC时,可直接省去原设计图的两级RC滤波器(即是可省去R、C元件各2只),DAC的输出引脚直接与比较器U2B的负输入引脚相连。若是用于未来的四线版电路,则12bit DAC仍可按这样处理,但10bit DAC则要像8bit DAC用于现在的两线版电路那样,还要使用一级RC滤波器(可取R=47k,C=0.01u)。

(3)以上情况,均可省去Dch-2引脚。也即是,本机不需使用Dch-2引脚来给原PWM滤波器的电容放电(这样,就可以减小了MCU的1个引脚的开销)。这是因为,即使DAC需配用一级RC滤波器,其时间常数已足够小。但需注意的是,若电路中还有一级RC滤波器存在,那么,DAC的输出端仍需像PWM方案的Dch-2引脚那样,输出一个0V电压去对给电容放电。

2、DAC生成锯齿波的时序计算

本机测试所需要的锯齿波,其SR=12mV/0.5mS。这个数值的SR,是要求这个锯齿波的波形在0~125mS这个时间段里,电压由0mV上升为3000mV。如下图:

(1)对于8bit的DAC来说,波形逐级上升的每一级时长(与PWM波的周期相对应)是T=125mS/255=490.196uS,可取T=490uS。这与理论的SR=12mV/0.5mS仅相差0.04%。

(2)对于10bit的DAC来说,波形逐级上升的每一级时长(与PWM波的周期相对应)是T=125mS/1023=122.19uS,可取T=122uS。这与理论的SR=12mV/0.5mS仅相差0.155%。

(3)对于12bit的DAC来说,波形逐级上升的每一级时长(与PWM波的周期相对应)是T=125mS/4095=30.525uS。

若MCU的速度允许,那么,可以取T=30.5uS,这是最理想的情况,与理论的SR=12mV/0.5mS仅相差0.106%。

若MCU的速度不允许,则比较尴尬:如果取T=30uS,与理论的SR=12mV/0.5mS相差1.72%。如果取T=31uS,则与理论的SR=12mV/0.5mS相差-1.56%。无论哪种选择,误差都嫌偏大,但这些误差不会对ESR/R两种测量模式带来影响,因为SR的值属于测量“增益”的一部分,在对AC放大器作CAL校准后,就能在总体上予以消除。但是这里的误差会对容量测量模式带来影响(带来的是增益误差),这是因为,容量测量模式没有自己的CAL校准,全靠电路参数以及通过ESR/R模式的校准来获得校准。

这2种选择产生的误差,反射到容量模式,取T=30uS时的误差与本节研究的运放放大锯齿波时的电平误差是相同极性的。因此,可能以取T=31uS会较佳。如果不能忍受这里的误差,还是有办法的,可以在DAC生成容量模式所需的Vref电压上做文章:没有这里的误差时,Vref=FS2+Vos=1200mV+300mV=1500mV。有正误差(取T=30uS)时,应将FS2减小相同的比例,即Vref=1200mV*98.28%+300mV=1479.4mV,也就是,理论上生成这样的Vref电压后,就能抵消掉这里产生的误差。有负误差(取T=31uS)时,应将FS2增大相同的比例,即应让Vref=1200mV*101.56%+300mV=1518.7mV。

如果MCU的速度不允许、又想在保持Vref=1500mV的同时减小这里的误差,还有一种方法。那就是:把这个12bit的DAC完全按照11bit的DAC来使用。可计得,T=125mS/2047=61.065uS,取T=61uS,与理论的SR=12mV/0.5mS仅相差0.106%。但需注意的是,按11bit使用后,其“原生纹波”会增大一倍。

三、只使用1块双运放的本机电路方案(V1.0b版本)

V1.0a版本使用了2块双运放,而运放的价钱比较高。有些MCU内置有比较器,若使用这种MCU,就可以省去半块双运放。假如真要降低成本,则还需要多省去半块双运放。

整个电路中,唯有小电流(1mA和0.1mA)的激励恒流源电路有潜力可挖,也即是,有机会改为使用BJT,也能得到基本符合本机性能需求的激励恒流源。为此,借助Multisim软件来进行仿真,得到如下的电路和仿真结果:



上面这个BJT电路,是一个简单的镜像恒流源电路,图中的47Ω电阻是模拟MCU引脚对地的导通电阻。他的恒流稳定度并不好,因为图中的Vbe电压会随温度而变(约每1个摄氏度下降2mV),从而改变输出电流的大小。但总体而言,其输出电流的误差也不算是很高(图中显示,1mA恒流源误差是1%,0.1mA恒流源误差是3%)。

基于这个仿真,得到了只使用一块双运放的V1.0b版本电路。该电路比V1.0a版少用了1块双运放,但需要使用内置有比较器的MCU。与使用2块运放的V1.0a版本,此版本的测量误差性能显然要差一些,但作为检修工具使用,应该能满足实际测量需求。

V1.0b版本电路如下:






——到本节为止,已全部写完了设计部分有实质性的内容。为了方便后面的编程工作,准备最后写一节总结性的东西,介绍与MCU连接的各个“引脚”的设置要求、3种测量模式下这些“引脚”的工作安排等。

(未完待续)

脉冲式ESR表的原理分析

脉冲式ESR表的功能说明

1、ESR测量功能。
即是可测电解电容的ESR,最小显示0.01Ω,最大显示99Ω,用于维修时通过测量对电解电容的好坏作出判断ESR分3个量程,量程一为0.01Ω~0.99Ω,量程二为1.0Ω~9.9Ω,量程三为10Ω~99Ω。
2、CAP测量功能
即是可测薄膜电容容量,最小显示0.001u,最大显示99u,用于维修时通过测量对薄膜电容的好坏作出判断容量测量分4个量程,量程一为0.001u~0.099u,量程二0.10u~0.99u,量程三为1.0u~9.9u,量程四为10u~99u。
3、RES测量功能
即是可测电压在90V以内的电池内阻(以及普通电阻),最小显示0.001Ω,最大显示99Ω, 电池内阻(电阻)测量分4个量程,量程一为0.001Ω~0.099Ω,量程二0.10Ω~0.99Ω,量程三为1.0Ω~9.9Ω,量程四为10Ω~99Ω。
注:由于本脉冲式ESR表采用双线测量,会受接触电阻的明显影响,因此,测量低阻时精度有限。
4、ESR、CAP、RES三项测量功能均为自动切换量程
5、ESR和容量CAP测量均具备“在路测量”能力。
即是,只要关掉电源,无需把待测电容从PCB上拆下来就可以进行测试。
其中ESR部分,激励信号电平不超过200mV,因此,不受PN结影响。容量测量部分,当用他测量电风扇的1.2u启动用薄膜电容时,受并联的电机绕组DC电阻(约600多Ω)影响而带来的误差预计不超过10%,具备实用性。
6、具备足够的耐操度,其自我保护能力足够强大。即是,误测储有300V电的大电解、甚至是300V的DC电源,此脉冲式ESR表也不损坏。

数字式电容ESR表电路原理分析之一

一、测量模型
如下图。由一个脉冲式的恒流源作驱动,图中的R代表的被测电容C的ESR,Id是驱动源的恒流值。ESR表测量时,检出的信号是Vo。
二、测量原理分析
1、先看纯电容C被恒流源驱动时的情形
如下图的中间波形。由于是恒流驱动,电容C两端电压会随着时间的增长而线性上升。这时电容电压Vc的上升速率为SR=Id/C,其中Id是驱动电流,C是电容容量,SR的计算单位是V/S(以伏/秒为单位)。
因为是由时间长度为t的脉冲电流驱动,所以,经过t秒后,电容Vc在到达t秒那一时刻,他的电压上升为Vc=SR*t。
2、电容的ESR可看作是纯电阻R,因此,他产生的压降为Vr=Id*R.
3、检出的电压Vo是Vr与Vc的线性叠加——(不是矢量叠加,我在那个帖子曾称为检出的是“矢量和”并不正确)。因此有 Vo=Vr+Vc=IdR+SRt
4、当电容容量C足够大、充电时长t足够短时,SR*t这一项可以忽略,这时近似有:ESR=R=Vo/Id。由于Id是已知且固定的,因此,只要检出Vo,就可以通过线性转换得到ESR的测量结果。
5、类似地,当电容容量C足够小、充电时长t足够长、ESR足够小时(测量薄膜电容时可符合这一条件),SRt这一项将在Vo中占主导地位,IdR这一项可忽略。因此近似有 C=Id/SR=Id*t/Vo。这个式子表明,采用同一个测量模型(使用目前电路)再加上MCU能作除法运算,则可以增加一项功能,即能测出”电容的容量C。
以上的手工分析见下图:

数字式电容ESR表电路原理分析之二

三、与指针式ESR表测量原理的对比
1、指针式ESR表测量模型
指针式ESR表测量模型如下图。
由频率为f的正弦波AC电流源驱动。检出的电压Vo是AC电压,因此,他是Vc与Vr两个AC电压的矢量叠加(即矢量和),存在着开平方与取平方根的关系,见下图(而外国ESR表的测量模型是在时域内工作,检出的Vo是DC电压,所以,Vo是Vc与Vr两个DC电压的线性的简单叠加)。
2、指针式ESR表测量原理
简单分析如下图
由分析可知:
(1)当Vc足够小(即电容容量C足够大、测试频率f足够高时)时,近似有:ESR=R=Vo/Id。这个近似式与外国ESR表相同,这也是指针式ESR表测量的基本关系式。
(2)当Vr明显小于Vc时(需要让ESR足够小、测试频率足够低、待测电容的容量不至于太大),近似有:Xc=Vo/Id。由Xc计算公式Xc=1/(2pif)可知,C=Id/(Vo2pif)。这表明:一是指针式ESR表具有测量容量的能力(适合于测薄膜电容)。二是测量关系式与外国ESR表甚为接近。若把外国ESR表此情形时的电容容量测量关系式 C=Idt/Vo中的t视为是1/f,则两块表的测量关系式仅相差了一个2*pi的常数。
(3)根据以上两项,从整体上来看,把外国ESR表视为采用与指针式ESR表相同的“容抗法”是没有问题的。
(4)测量容量时,由于ESR引致的误差,指针式ESR表在理论上会更小(比线性叠加关系的数字式ESR表小)。但实际制作中,指针式ESR表不方便改变测试频率,而数字式ESR表则可以通过改变脉冲宽度来扭转这一局面。
四、两种ESR表测量模型有关检出电压Vo的简单仿真验证
1、ESR表的检出电压Vo
用Multisim的瞬态仿真功能得到如下结果。可看出,Vo是Vc与Vr两个DC电压的线性叠加,即Vo=Vr+Vc.
2、指针式ESR表的检出电压Vo
用Multisim的交互仿真功能得到如下结果。可看出,Vo是Vc与Vr两个AC电压的矢量叠加,即Vo=sqt(Vr^2+Vc^2).

数字式电容ESR表电路原理分析之三

五、利用MCU计数器获得ESR阻值读数的原理
这款外国数字ESR表,通过采用脉冲激励检出DC电压的方法(注:这个检出电压是周期性获取的,实际输出到比较器的是脉冲串形式的AC电压波形,因此,可以使用AC放大器进行放大),避开了AC/DC转换的麻烦,让电路得以简化。另一方面,他还采用这里要分析的方法,只需使用MCU最擅长的计数器功能,而不需使用ADC芯片,就能得到测量结果数值(ESR值)。
其具体方法总体上是:启动计数器计算检出电压波形的脉冲个数,同时利用Vref随测试时间渐变的电压比较器,与检出电压进行比较;一旦检出电压低于Vref电压,比较器的输出状态出现翻转,MCU即时停止计数,并将计数的结果作为ESR值作显示。
下面用画出波形图的方法来进行分析。
1、比较器的输入波形1(检出电压的波形)
比较器获得的检出电压Vo波形,是持续的一连串极接近方波的脉冲串波形,如下图。
在这款外国ESR表中,一个周期里有T=tc+td,tc是恒流源驱动的充电时长8uS,td是放电时长492uS。因此,一个周期为0.5mS。
这个波形的脉冲幅度为Vo,即前面683楼的检出电压Vo。为方便理解,先假定ESR=100欧姆时的检出电压为Vo=1000mV——如果不符合,可通过合理设置AC放大器的放大倍数令其符合。
2、比较器的输入波形2(渐变的Vref波形/锯齿波波形)
比较器另一个输入信号是Vref,他的电压幅度渐变的,即是随时间线性增长。这可以用电流为I的恒流源驱动容量为C的电容来获得,其电压上升的速率为SR=I/C。此款ESR表设定为SR=10mV/0.5mS。
由这个SR值可计得,从启动开始,经过40.5mS后,Vref上升为410mV=40mV。类似地有,经过500.5mS后,Vref上升为500mV;经过1000.5mS后,Vref上升为1000mV。
3、比较器的工作波形
如下图。
图上方画出了检出电压Vo的脉冲串波形,以及用虚线表示的锯齿波Vre波形。图下方则画出了比较器的输出电压波形,可见到,在Vo电压幅度刚好低于Vref那一时刻,比较器的输出状态产生翻转,由H变为L。
从启动时刻的0秒起,MCU开始计数,到达这个比较器翻转时共耗用的时间为t。而在比较器翻转的同时,MCU停止计数。在t这段时间里,计数器的累计数值将与Vo的电压幅值对应了起来————只要令Vo幅值合适(通过调整AC放大器的增益),就可以把计数器的结果作为ESR值进行显示。
其对应关系大致如下图:
六、原机电路比较器部分的实际运作分析
1、之前的分析
在676楼给出的那个帖子7楼,我从电路运作角度进行过分析,现转录过来(稍修改原来明显有误的地方):
http://www.crystalradio.cn/forum.php?mod=viewthread&tid=2106940&extra=page%3D2
---------------------------------------------------------
p27引脚控制锯齿波发生器电路,以SR=I/C的电压速率产生随时间而线性上升的斜坡波形。其电压通过p33输送给比较器,与p31的电压进行比较。
p31检测的电压近似为esr*Ic(经过放大后的),Ic是mcu控制选择的固定恒流充电电流。这个电流分3档,分别对应3个测试量程(实际上是控制led数码管的小数点显示位置)。
单次测量过程是:
1、mcu控制开启恒流源,以固定电流给被测电容充电。这个充电是周期性的,一个周期里充电数us,放电(大电流放电)数百us。这样一来,无论经过多少个周期,电容两端的电压,纯电容部分的升压很少(因为仅充电数us),与esr压降相比,基本可以忽略(电容容量太小时则不能忽略,见后述)。
2、mcu在开启恒流源进行充电的同时,也开启锯齿波的产生。
3、mcu通过比较器监测p31、p33的电压,同时开启内部计数器(计算第1项的恒流充电的周期数)。当监测到p33的电压升高至高于p31电压时,比较器翻转,就停止计数,把这个计数结果作为esr数值直接显示在led数码管上,并让计数器和锯齿波电路复位,以准备下一次测量。
4、如果在第3步过程中,计数器的计数超过某个值,还没出现比较器的翻转,那么,mcu就控制改换恒流充电电流,再重新作测量。这也是此电路的自动切换量程的操作。
从整个电路的esr检出方式来看,他在本质上,与指针表esr一样,基本同属于容抗法。因此,将会呈现出指针式esr表的测量特点:当电容容量足够大时,测到的是esr,容量足够小时,测到的是容抗。
这个电路设计比较聪明,运用了类似icl7106双斜积分ad的方法,无需使用专门的AD器件,就能获得普通电路所需的电压测量功能。
-------------------------------------------------------------
2、相关的AC放大器分析
此机Q7、Q8构成一个约20倍的AC放大器。其输入采用AC耦合,输出采用DC耦合。
(1)此放大器设有微调电阻VR2,用于调整增益,以获得前面所述的合适Vo幅度。此为gain校准(增益校准)。
(2)由于此AC放大器的输出端有固定的DC电压(不能为零电位,否则电路不能正常工作),即offset电压/偏移电压,因此,比较器输入端信号总是叠加了有这个DC电压,与前面分析内容并不吻合。但可以通过MCU软件的方式予以扣除(舍弃初期的若干个计数)的方式,让其与前面分析内容相一致。实际电路中,是通过S1这个ON/OFF/ZERO多功能键来执法此项校准。此为offset校准(偏移校准)。
实际上,执行此校准时,还把测试端子附带的引线、接触电阻一并扣除掉,实现了“调零”,因此,原机用ZERO(归零校准)来作按键的功能标示。

数字式电容ESR表电路原理分析之四

在此,先对前面分析三的疏漏作出更正。
分析三的第3张图(即下图),相关表述不准确。此图中画出的比较器输出波形,其实只是MCU“看到”的波形。
比较器的实际输出波形,应为下图上方的样子。由于MCU是在充电脉冲结束、放电即将开始那一瞬间(即图上方的多个小箭头所指),对比较器的输出状态进行检测的,其他时间里MCU被遮住了眼睛,因此,MCU“看到”的波形是本图下方的样子。下方的波形,可视作为经MCU“处理”后的比较器输出等效波形。
七、基本测量模型的误差分析
1、电容容量(容抗)带来的误差影响
由分析一可知,测量原理的Vo检出电压关系式是:Vo=Idt/C+IdESR。此式两边除以Id,可得到检出的总阻抗是Rt=t/C+ESR。
此式表明,本仪表实际检测出来的阻值,包含有电容的“容抗”t/C。电容容量越小,这个容抗就越大,由此带来的测量误差就越大。由于此表设定充电脉冲宽度为t=8uS,因此,对于容量为1u的电容来说,他的“容抗”为8Ω。也就是说,在理论上,本仪表测量1u电容时,他测出来的ESR值总是比真实值高出8Ω。类似地,测10u电容测得的ESR值总是比真实值高出0.8Ω,测100u电容测得的ESR值总是比真实值高出0.08Ω。
以上是考虑电容容量(容抗)带来的误差影响。下面,再研究一下电容的等效串联电感ESL带来的误差影响
2、电容的等效串联电感ESL带来的误差影响
由电路知识可知,用一个脉冲驱动一个电感,他将在脉冲的上升沿和下降沿激发出一个尖峰电压。如下图
再用仿真软件看一看加入了ESL后的测量模型检出电压Vo的情况。如下图
可看到,在我们MCU检测比较器输出状态时的那一瞬间附近,出现了一个向下的电压尖峰。这个尖峰往往是呈阻尼衰减的,其尖峰幅度是由电感量、脉冲下降沿的陡峭度(下降沿时间tf)、电感的Q值等一系列因素决定的,计算起来可不容易。但幸运的是,MCU是在尖峰出现之前那一刻进行检测的,因此,这个尖峰不会给测量带来实际影响。退一步来说,纵使有影响,我们可以让MCU将检测时间稍稍提前一些,这样,就能让其影响变为零。
综上所述,ESL带来的误差为零,不会给测量结果造成影响。
八、充电脉宽参数的设定及其影响
这块外国数字式ESR表,将充电脉宽设为tc=8us,是综合考虑的结果。
1、现在充电脉宽为8uS,对AC放大器、比较器速度性能所提出的要求,大致上等同于周期为16uS、即频率为62.5kHz的方波信号。如果将tc时间缩短,就会对AC放大器、比较器的速度性能提出更高的要求。
2、如果将tc时间延长,就会相应增加前面所述的“容抗”所带来的影响,令ESR表的适用范围变小。根据我常用的普通电解ESR值参考极限值表,1u电解的极限参考值是50Ω(50u是20Ω,100u是10Ω),现在tc=8us的设定下,实际测量结果所附带的8Ω误差值,已离这个极限值不远,但属于尚可使用。因此:
(1)tc=8us的设定下,决定了此表仅适用于检测容量为1u以上的电解。
(2)tc的时长不宜再增加,否则,在检测小容量电解(好坏)时,容易造成误判。

数字式电容ESR表电路原理分析之五

九、其他重要电路参数的设定与影响
1、恒流充电电流
本机共设3档ESR测量量程,由MCU控制切换恒流源来得到。分别是:
(1)0.01Ω~0.99Ω量程。使用50mA的恒流电流来进行激励
(2)0.1Ω~9.9Ω量程。恒流电流为5mA。
(3)1Ω~99Ω。恒流电流为0.5mA。
这3档量程不论是哪一档量程,当电容的ESR被恒流电流激励时,ESR上的压降(即灌出的测试信号幅度)最大仅为50mV,这个测试信号的幅度远低于PN结的导通电压,因此,能充分满足“在路测试(不需将电容从PCB上拆下即可进行测试)”的要求。
若将上述3档的测试恒流电流适当增大(比如分别改为100mA、10mA、1mA),也是能够满足“在路测试”的要求,而且,可以让AC放大器的承担放大任务减轻(放大倍数相应减小)。但这样一来,对电源提出更高的要求,测试时这一部分的耗电也相应增大。
2、锯齿波电压的上升速率SR
本机设定为SR=10mV/0.5mS。
因为一个档位的量程有100个计数,因此,锯齿波电压的幅度最小为100*10mV=1V。由于AC放大器的DC输出offset电压约为1V,这个电压将与检出电压Vo叠加在一起送往比较器。所以,未计其他需要作offset校准补偿的因素,仅这一项,锯齿波电压的幅度还需要提高,至少为2V。
由于电源电压是5V,这样安排的SR速率,已利用了电源电压所提供的至少40%的动态范围。
若将SR提高,则容易令锯齿波电压超出动态范围,导致工作不正常。如果将SR降低,则不利于比较器的工作。
实际电路中,由于元件值的偏差,SR并不会精确等于10mV/0.5mS的目标值。上面的恒流充电电流也一样,总是与目标值有偏离。这里的误差属于gain(增益)误差,可通过微调AC放大器的放大倍数来予以矫正。后面的研究将对此作进一步分析。
3、AC放大器的放大倍数
在设定好锯齿波电压的上升速率SR、各档的恒流充电电流值之后,根据比较器的工作要求,AC放大器的放大倍数的设定目标值自然就是20倍放大,即AC gain=20X.
也由于前述的其他2项重要参数及前端电路的“增益”总是有偏差,因此,把AC放大器的放大倍数设计成可以进行微调,以便作gain(增益)校正。另外,从本机的整体电路看,也是在这里设gain(增益)校准相对较为方便——把SR改成可微调也能获得类似的效果(我们重新设计数字式ESR表时可在此作文章)。
4、充电脉冲周期
本机的充电脉冲周期设为T=tc+td=0.5mS,其中,充电脉冲宽度为tc=8uS,一个周期内的放电时长是td=492uS。
这个周期的设定,与本机测量读数的刷新率(或者称每秒钟的测量/读取结果的次数)密切相关。
由于本机有3档量程,最大的测量读数是99Ω,量程采用自动切换方式。当测量99Ω时,需要跨越3个量程。前面切换的2个量程最小要计100个脉冲数,转换为时间是100*0.5mS=50mS。这种测量显示
99Ω结果时,最少要耗用250mS+990.5mS,即近似为150mS。而这还是没有考虑机子需要作offset校准时的耗时。
由前面可知,扣除offset误差部分(至少1V的DC电压),至少要增大1倍的测量耗时,因此,测量测量99Ω时,其总耗时约为300mS,即刷新率约为3.3次/秒,这与采用ICL7106芯片的常见数字万用表相近。
可见,若把充电脉冲周期设得过长,将会降低本机测量读数的刷新率。若把充电脉冲周期设得过短,则会增大机子的耗电(测量充电脉冲的占空比增大),对电路其他方面的性能提出了更高要求。

数字式电容ESR表电路原理分析之六

本节主要是对原机测量部分的电路进行分析。
一、整机测量部分的电路框图
全机的完整电路见下图:
其测量部分的电路,可画成如下的框图:
这个框图,主要是用于交代各个功能块电路之间的连接关系。
由框图可看到,测量电路共分为4个功能块,分别是: 1、恒流源电路。 2、AC放大器。 3、锯齿波发生器。 4、比较器(内置在MCU里面)。
(一)功能块电路的连接关系和参数设置
恒流源的电流是固定的,分为50mA、5mA、0.5mA共三档,工作时,由MCU选通其中一档。这三档电流与量程的对应关系分别是0.01Ω~0.99Ω@50mA、1.0Ω~9.9Ω@5mA、10Ω~99Ω@0.5mA。无论哪一档,在被测ESR(DC电阻)上形成的FS电压(满量程电压)均为50mV,即名义上有: FS1=50mV。
——比如,50mA档的满量程ESR值是1.0Ω,因此,检出的DC电压为1.0Ω*50mA=50mV。5mA
档的满量程ESR值是10Ω,因此,检出的DC电压为10Ω5mA=50mV。0.5mA档的满量程ESR值是100Ω,因此,检出的DC电压为100Ω0.5mA=50mV。
AC放大器的名义放大倍数为20倍。他将检出电压进行放大后送至比较器的正输入端(图中误画为负输入端),在比较器的正输入端处有: FS2=1000mV。
比较器除了输入经过放大的检出电压Vo信号外,他的另一个输入端还输入上升速率为SR的锯齿波参考电压Vref信号。这个锯齿波参考信号Vref,名义上有SR=10mV/0.5mS。比较器的输出经MCU“处理”后,作为“停止计数”的信号,对MCU内部的计数器执行停止计数的操作。
MCU的控制脉冲,既送往恒流源,又同时作为计数脉冲送往内部计数器的输入端。
注1:
(1)本回帖写到一半时才发现,此款外国ESR表的计数器连接关系,比我所画的框图要简单。实际上,他不是上文所述的“把MCU的控制脉冲作为计数器的计数脉冲”,而是直接把比较器输出的信号作为计数脉冲,这样一来,就不需要用到”停止计数“信号,也不需要输入恒流源的控制脉冲信号(作为计数脉冲)。
这是因为,比较器的实际输出波形是若干个数的一串脉冲,脉冲的个数与阻值严格对应,所以,直接对这个输出波形的脉冲数进行计数即可。比较器的实际输出波形,我在前面的分析四中已画出,如下:
(2)下面是原机资料有关”计数“测量原理的解说图。从中也可间接看出,计数器连接关系是很简
单的(仅把比较器输出的信号作为计数脉冲):
(3)虽然上文对这部分电路的分析内容、以及前面分析四对“计数器工作”原理的分析内容,与原机实际情况有偏差,但两者都能获得相同的ESR测量效果。更重要的是,对于本人正在设计的脉冲式数字ESR表的容量测量功能来说,只有采用这种与原机不符的计数器工作方法才能进行准确测量,原机的这种接法和计数器工作方法则不可行。因此,就不对上述有偏差的内容作出更正。
(二)CAL校准
前面的FS电压、AC放大倍数、上升速率SR这3个参数设置,均用“名义”来称呼,是因为这只是设计时的大致安排。实际电路中,这3个参数总是与名义值有偏离。但是,只要偏离程度不太大,是可以通过CAL校准来实现精确测量的。而要获得精确的测量,需要满足如下的关系式:
FS2电压/SR=100*T
上式中,FS2电压是经过AC放大后的、出现在比较器信号输入端处的FS电压,T是恒流源激励脉冲的周期(0.5mS)。对于本机来说,是通过调节AC放大倍数来实现CAL校准的。
比如说,测试端子两端的FS1实际只有40mV,SR实际只有9mV/0.5mS。那么,只要把AC放大倍数调节为22.5倍,就可以令FS2=900mV,相应有FS2电压/SR=100*0.5mS,即是符合上式关系式,可以实现精确测量。
注2:这里的CAL校准,实际上只属于gain(增益)校准。真正的校准,除了要作gain(增益)校准之外,还需要作offset(偏移)校准。有关gain(增益)校准和offset(偏移)校准的问题,将在下一个分析内容中再作研究。
二、各功能块的具体电路
1、恒流源电路
这部分电路见下图:
其中,Q5是50mA恒流源的电子开关管,Q4是5mA的电子开关管,Q3是0.5mA的电子开关管。这3只BJT的开(导通)与关(截止)均由MCU控制,而且,他们的接法并非是常见的半导体恒流源电路形式。
这里能产生“恒流”的效果,是依靠限流电阻的阻值远高于负载电阻(即被测ESR)来获得的,恒流效果相对较差,但胜在够简单。这里会产生非线性的误差————下一个分析将对本机具体电路偏离于理想电路所带来的误差进行分析。
比如,0.5mA档,限流电阻R6阻值为10k,负载电阻(被测ESR)则是1~99Ω,限流电阻至少是负载电阻的100倍,因此,能获得还算是较为良好的恒流效果。站在电阻两端电压的角度观察其恒流效果则是,限流电阻两端的电压约为电源电压的5V,负载电阻两端的电压最高是50mV,前者至少是后者的100倍。也因此,假如本机改选为100mA/10mA/1mA的恒源电流设置,那么,负载电阻两端的最高电压将增大1倍(为100mV),因此,预期引入的非线性误差将增大1倍。
Q6是恒流源功能块电路的放电管。每当激励结束,就由MCU驱动,对被测电容进行放电,以免被测电容的纯电容部分累积DC电压而影响测量精度。
D3、D4和C6(及C5)是保护用器件,防止误测带电的电解时造成机内元件损坏。其中C6需取47U的较大值,是因为这个隔直保护电容的存在,会给简单的恒流源电路带来新的误差。这个新误差在50mA档时影响最大,8uS的脉宽、50mA的电流驱动下,此电容两端的电压大致上升为80mV,给恒流源带来的恒流误差已大于负载为该档最高的1Ω时的误差(1Ω负载时的压降为50mV)。因此,C6不能取太小的值。
由于C6是47U的无极性电解,耐压有限,而且这里没有串上限流电阻(也不允许串上限流电阻,否则会给简单恒流源带来难以承受的恒流误差),在误测带高压电的大电解时,瞬时有很大的电流冲击D3、D4而容易造成D3、D4损坏。即便是D3、D4能承受住这一波冲击,冲击过后,还需要C6隔直电容来承担未放电大电解的高压,这会导致C6因过压而受损甚至损坏。因此,这个机子有一定的保护能力,但保护能力有限。
2、AC放大器
这部分电路见下图:
AC放大器主要由Q7、Q8构成,这两只管子均接成共E极放大。由于C极负载电阻阻值较小,因此,开环增益不会太高,闭环后容易稳定。R17、R16和VR2是负反馈网络的电阻,调节VR2,可小量改变闭环后的放大倍数,实现CAL校准。大致上,这个AC放大器的放大倍数可在20~30倍范围内调节。
R12、D5、D6是保护用器件。因为有R12作为串联的限流电阻,加上耦合电容C7的容量小,这里的保护能力是相当充分的。
R23是用于给C6隔直保护电容(以及被测电容)作放电用的,以免测试端子之间有高压而令使用者遭到电击。R23阻值高达10k,比最高的100Ω被测电阻高100倍,因此,不会给测量精度带来明显影响。
3、锯齿波发生器。
在这里,是依靠恒流驱动,来获得电容C10电压随时间线性地(线性度很高)上升的锯齿波信号。因为这里的恒流源性能,决定了整块表测量的线性度,而且,电容C10的电压将会升至2V,所以,就不能采用像第1个功能块那种的简单恒流源架构。为此,这里使用了Q9、Q10构成镜像电流源。
在MCU控制P27引脚为低电平时,Q9这一侧,流过的电流大约为:
I=(5V-Vbe)/(R20+R22)=5-0.6V/(10k+470k)=9.17uA
而且由于5V电压和Vbe电压相对“恒定”,所以,这个电流也一直比较“恒定”。 在镜像电流源构架的作用下,Q10这一侧电流也比较“恒定”,且大致也是9.17uA这个数,因此有
SR=I/C10=9.17uA/0.47uF=19.5mV/1mS=9.76mV/0.5mS
这与“名义”值SR=10mV/0.5mS相当接近,不会因为偏差过大而造成CAL校准调不过来。
Q11由MCU的P27驱动,是用于泄放C10上电荷的放电管(P27为高电平时有效),能令C10的电压(即锯齿波电压)回复为零,以便作下一轮“测量”。

数字式电容ESR表电路原理分析之七

原机的具体电路与测量所需的理想电路形式有差异,本节主要是对这些差异所带来的误差进行分析。这里不包括“分析一”所指出的电容容量C给ESR测量带来的误差,换言之,这2部分的误差是共同存在的。
一、增益误差、偏移误差及其校准
通常来说,非线性误差是不能通过校准来消除的,但增益误差(gain error)、偏移误差(offseterror)则不同,是可以通过校准来消除的。
理想的测量关系式(传输函数)是:y=x。
画成函数图像,如下图:
但现实中的线性电路(或者说是线性测量系统),往往是如下的关系式:y=kx+a。
画成函数图像,如下图:
其中,k是不为1的固定值,a是不为0的固定值。
在这里,k与1之间存在的偏差,称为增益误差(gain error),a与0之间存在的偏差,称为偏移误差(offset error)。
像上面图片中手写的内容那样,通过校准,是能够把传输关系变成 y=x 这样的理想关系。也就是在理论上,通过针对这2种误差的校准,能把这些误差完全消除掉。
其中,乘以1/k这一步,是进行增益校准(gain CAL)。把a/k这一项扣除掉,是进行偏移校准(offset CAL).
以上有关增益、偏移的关系,可以用常见的运放电路来加以理解。如下图:
从图中最后给出的关系式可看出,所谓的增益误差,就是与运放电路放大倍数有关的误差,所谓的偏移误差,是由于运放内部存在的Vos(失调电压,即英文的offset voltage——实际上可以翻译为"偏移电压“)所引致。调整运放的放大倍数,做的是增益校准的工作。调整运放的外接调零电位器把输出dc电压调为0,做的是偏移校准的工作。
二、恒流源电路的误差
本机采用串“高值”限流电阻Ro的方法来代替恒流源,必然会存在误差。如下图:
这个电路的测量关系式(即检出电压Vo与被测对象ESR之间的关系式)是:Vo=ESR*Vd/(Ro+ESR)
由于分母项中存在着ESR,画出来的函数图像必然是一条曲线,而不是一条直线。若Ro为无穷大,则函数图像会变成一条直线,而这也是真正恒流源的情形。Ro相对于ESR越小,图像就越弯曲,意味着非线性程度越严重。
正因为函数图像是曲线,所以,这里存在的是非线性误差,不能用常用的校准手段予以消除。
上一个分析六,曾分析到:“ 比如,0.5mA档,限流电阻R6阻值为10k,负载电阻(被测ESR)则是1~99Ω,限流电阻至少是负载电阻的100倍,因此,能获得还算是较为良好的恒流效果。站在电阻两端电压的角度观察其恒流效果则是,限流电阻两端的电压约为电源电压的5V,负载电阻两端的电压最高是50mV,前者至少是后者的100倍”。
用这些数据可计得,本机恒流源电路的非线性误差约是50mV/5V=1%(此为在量程底端或量程顶端
作校准的情况)。若在量程中间作校准,则是顶、底端分别为+0.5%或-0.5%的误差。
三、AC放大器“滤波器效应”引致的误差
本机检出的是DC电压,本来应该使用DC放大器来进行放大,但实际电路却采有AC放大器形式。这样的安排也必然会带来误差。
现在先分析一下AC放大器输入端处的情形。因为涉及到RC电路,所以,需从RC电路的电压关系分析开始,如下图:
由图可知,RC电路中,电容两端的电压Vc=K1*U,即是输入电压U的k1倍。
再分析AC放大器输入端处的电压关系,如下图:
手工分析如下:
由最后得出的关系式可知,在AC放大器输入端处,由于AC耦合而带来的误差,主要是增益误差,也即是:信号幅度仍与输入成正比,但略有衰减。从电路角度来理解其中的物理意义是:在脉宽t秒那一时刻的DC电压,可视为一个等效频率的AC电压,经过AC放大器输入处这个RC高通滤波器的作用,被线性地衰减(衰减程度与RC滤波器的转折频率有关)。更简洁的理解则是,这里的电路仍然全部是线性电路,不会产生非线性误差。
从上一段可知,原机AC放大器负反馈网络的C8电解电容的存在,其带来的误差也只是增益误差,而不是非线性误差。因此,AC放大器这部分电路,仅引入了增益误差——可以通过校准予以消除的误差。
四、本机的偏移误差
本机有2处存在着偏移误差。这些误差,可采用MCU在计数结果中扣除“偏移项”数据的方法,来实现校准。也即是,不需用模拟电路手段来做这项工作,用MCU代劳即可。
由常见线性测量系统/线性电路的关系式y=kx+a可知,在完成增益校准后,关系式变成y=x+a。这个时候,给测量系统送入为0的信号(对于本机测量ESR则是短路2支测试表笔),仪表输出的结果为a,这个a就是“偏移校准”后所需要知道的“偏移项”。从操作角度看,是归零校准。从效果看,是让短接表笔时的ESR表显示数(底数)变为0。
1、AC放大器固定偏置dc电压带来的偏移误差
如下图。
AC放大器的固定偏置dc电压,将会一直叠加在输出的dc电压上(本机测量的是dc电压)。从图中可看到,只要这个固定偏置dc电压是“恒定”不变的,那么,就可以通过偏移校准予以消除。
2、测试接触电阻、表笔引线电阻等带来的偏移误差
如下图:
测试接触电阻、表笔引线电阻带来的误差,也是偏移误差。他会跟AC放大器的偏置dc电压所带来的误差一起,被偏移校准所消除。但是,由于接触电阻等这部分的阻值存在着不确定性,会随时间而变,因此,本机设了ZERO归零按钮,通过执行偏移校准来消除这部分误差。
原机英文资料称,机上的ZERO归零按钮,是用于对表笔/引线起“补偿”作用,但内部操作,实际上做的仍是偏移校准。

另外,关于比较器,
您的手工绘图有像有误。
比较器的输出不应该是高电平翻转为低电平,
它输出的前段应该也是脉冲,
锯齿波大于V0后转为恒低电平。
根据英文资料,
我理解比较器的正相输入、反相输入
以及输出波形如下图:

估计你是想了解电容ESR表的用途和特长。
我在13年前发表在《无线电》杂志上那篇指针式esr表设计制作的专题文章,曾就此做过比较详细的介绍。这篇文章应该是国内书刊中第一个推介电容esr表的,在本坛下面的帖子里可看到全文:
http://www.crystalradio.cn/forum.php?mod=viewthread&tid=148682
我收藏的百度文库中此专题文章(如下链接的),前些年不收费,现在已变成收费:
https://wk.baidu.com/view/4d33b0fd814d2b160b4e767f5acfa1c7aa0082ec?_wkts_=1703929935028

你理解的没有错。比较器的波形、以及正负输入端安排,应该就是你现在说的样子。
我在“分析六”手工画的框图中,比较器的正负输入端标反了。但“分析六”的文字部分,已就此做了声明,可能你没看到。

英文的程序流程有一处细节没有展现出来,
它应该是在每个充电8us延时后的时刻,
查询比较器的输出电平,
如果为高,就控制S1放电进入下一脉冲周期。
如下图所示:
(, 下载次数: 0)
我上次提过,
实际的锯齿波是固定的线性增高函数,
完全可以以软件形式变成一张数值表。
通过ADC采集V0,与这张表进行比较,
这样就可以省去锯齿波发生器,
另外,更关键的是可以使用不带比较器的MCU(STM32没有内置比较器)。
不过,这样对MCU的实时性有了较高的要求,

STM32的采样最快可以1M,
采样这个500us一次,持续8us的信号好像可以试一下。

我在“分析六”里,曾自我更正说他是“简单的连接”,其实也不对。他编程用的流程图里,显示出他的实际工作方式,还是我所画的手工框图那样子,即是,把比较器的输出信号作为“停止计数”使用(在查询比较器的状态后)。
因为已更正过一次,不想再更正,以免显得啰嗦。不更正,也基本不影响对其原理的理解、以及我们后面的设计。

我在“分析六”里,曾自我更正说他是“简单的连接”,其实也不对。他编程用的流程图里,显示出他 ...
再看一下我上楼的补充建议。
对于STM32来说,
ADC的最大工作时钟为14MHz,
单次ADC包括采样时间+转换时间
其中转换时间为固定的12.5个时钟
采样时间则可设定为1.5、7.5、13.5、28.5、41.5.……直到239.5个时钟,
采样时间越长精度越高,
8us的信号持续时间,相当于8*14=132个ADC时钟
取28.5为采样时间,加上12.5个转换时间共41个ADC时钟
应该可以兼顾速度与精度。

我的电路设计已基本定案,现在可以拿来做实物调试。元旦上班后我可以发给你,用来制作pcb和编程调试。
这个电路,不需mcu有adc,也不需mcu有dac(或比较器),对mcu的要求很低。主要使用2块RR双运放,比如用cos722或tsv912。其中一块负责ac放大器、比较器,另一块负责做驱动的恒流源。
虽然我知道,现在内含adc的mcu也贵不了多少,但对于这个esr表,mcu里的adc实在是帮不上忙:平价mcu里的adc,无法担负起这里的dc电压检测任务。即使是stm32,其adc也仅能担负起esr测量需要,不能担负起容量C测量的需要。
容量测量时需要检测脉宽仅1uS的锯齿波、而且是锯齿波顶端处的dc电压。这显然不是adc所擅长的,用比较器才合适。

干脆把目前定案的电路图贴在下面,不另外发给你了。有了这个电路图,你可以提前做一做前期的PCB设计制作的工作。至于整个仪表的编程协作,可能还得等一段时间才行。
目前我正在画编程用的流程草图(虽然我不懂MCU,但当年学过BASIC,没有全忘掉)。这部分内容,可能会在我写完电路设计部分的内容后,才能贴上来,因此,如果你需要我在编程上提供帮助,还需要等一等。但有关ESR测量这一部分,相对比较简单,你可以按你的理解,自己先行编程试一试。

下图中的红圈圈住的电阻R19可能最后需要调整(该电阻的取值合适与否,会影响电池内阻档低阻测量精度,但如果要求不高,不调整也行)。而且,在排布PCB时,这只R19电阻应靠近电解电容C5.

软件代码(软件编程)不是关键。对电路的原理及其运作过程的认识,才是关键。
没有原机的软件代码,可以在吃透电路原理后,自行编写出来。这也是目前我们正在做的,因为原机的代码我们找不到。
如果仅是有软件代码,不理解其中的原理,只要是把电路稍为改变一下(比如我上面的电路,已改为3V供电),可能就会出问题。

合宙 Air001 到货

支持Arduino、Keil,主频高、资源大、接口全 ——合宙Air001是一款TSSOP20封装国产MCU,采用高性能32位ARM®Cortex®-M0+内核,内置32K Flash+4K RAM;高集成化通讯外设,开发简单使用便捷,具备超高性价比。

6.4x6.5mm迷你小尺寸,应用设计更灵活。

微信图片_20230729142101.jpg微信图片_20230729142101.jpg

SQLAlchemy Admin for Starlette/FastAPI

Build Status Publish Status Coverage Package version Supported Python versions


SQLAlchemy Admin for Starlette/FastAPI

SQLAdmin is a flexible Admin interface for SQLAlchemy models.

Main features include:


Documentation: https://aminalaee.dev/sqladmin

Source Code: https://github.com/aminalaee/sqladmin

Online Demo: Demo


Installation

$ pip install sqladmin

Screenshots

sqladmin-1
sqladmin-2

Quickstart

Let's define an example SQLAlchemy model:

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base


Base = declarative_base()
engine = create_engine(
    "sqlite:///example.db",
    connect_args={"check_same_thread": False},
)


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String)


Base.metadata.create_all(engine)  # Create tables

If you want to use SQLAdmin with FastAPI:

from fastapi import FastAPI
from sqladmin import Admin, ModelView


app = FastAPI()
admin = Admin(app, engine)


class UserAdmin(ModelView, model=User):
    column_list = [User.id, User.name]


admin.add_view(UserAdmin)

Or if you want to use SQLAdmin with Starlette:

from sqladmin import Admin, ModelView
from starlette.applications import Starlette


app = Starlette()
admin = Admin(app, engine)


class UserAdmin(ModelView, model=User):
    column_list = [User.id, User.name]


admin.add_view(UserAdmin)

Now visiting /admin on your browser you can see the SQLAdmin interface.

Related projects and inspirations

  • Flask-Admin Admin interface for Flask supporting different database backends and ORMs. This project has inspired SQLAdmin extensively and most of the features and configurations are implemented the same.
  • FastAPI-Admin Admin interface for FastAPI which works with TortoiseORM.
  • Dashboard Admin interface for ASGI frameworks which works with the orm package.

使用示例清晰解释正则表达式

使用示例清晰解释正则表达式

说实话,它们看起来非常令人生畏,尤其是当你第一次遇到它们时。我的意思是,一串字符连在一起,似乎没有任何逻辑可言 —— 没有人有时间处理这些东西!而事实证明,一旦你理解了基础知识,它其实并不那么糟糕。

因此,在本文中,我将解释什么是正则表达式,介绍一些基本的正则表达式字符,最重要的是,使用几个实际示例演示如何使用 R 编程语言执行正则表达式。具体来说,我们将讨论正则表达式中捕获组的概念。

如果你更喜欢 Python,可以在我的 GitHub 上找到代码的 Python 版本 这里

什么是正则表达式?

正则表达式既不是库,也不是编程语言。相反,正则表达式是一系列字符,它们指定了任何给定文本(字符串)中的搜索模式。

文本可以包含从字母到数字、从空格字符到特殊字符的任何东西。只要字符串遵循某种模式,正则表达式就足够强大,能够捕获该模式并返回字符串的特定部分。

你需要了解的基本正则表达式字符

现在,在我们深入了解细节之前,我认为首先重要的是我们先了解一些正则表达式的基础知识。

本文稍后的示例将建立在这里阐述的一些主要概念上,即:字符、分组和量词。

字符

  • 转义字符: \
  • 任何字符: .
  • 数字: \d
  • 非数字: \D
  • 字符或数字: \w
  • 非字符或数字: \W
  • 空格: \s
  • 非空格: \S
  • 字边界: \b
  • 非字边界: \B
  • 字符串开头: ^
  • 字符串结尾: $

分组

  • 匹配方括号内的字符: [ ]
  • 匹配不在方括号内的字符: [^ ]
  • 或: |
  • 捕获组: ( )

量词

  • 0 或更多: *
  • 1 或更多: +
  • 0 或 1: ?
  • 精确数量的字符: { }
  • 字符数量范围: {最小值,最大值}

正则表达式示例

不要担心,如果你现在还不理解上面的正则表达式字符 —— 它们只是我们即将讨论的示例的参考。

在本节中,我们将关注 6 个不同的示例,这些示例将有助于加强你对正则表达式的理解。实际上,我们将关注:

  • 2 个数字示例(电话号码和日期)
  • 2 个字母示例(姓名和 URL)
  • 2 个数字和字母的示例(电子邮件地址和地址)

1. 电话号码

假设我们有一个名为 phone 的数据框,其中包含如下电话号码列表:

original_number
(541)741 3918
(603)281-0308
(814)-462-8074
9704443106

我们希望将这些电话号码分解为 3 个单独的组件:区号(前 3 个数字)、交换机(接下来的 3 个数字)和线路号码(最后的 4 个数字)。

正如我们所看到的,这里的数字模式并不总是一致的,即它们具有不一致的括号、连字符和空格。然而,借助正则表达式的帮助,我们可以轻松地捕获数字组。

首先,我们需要定义一个正则表达式模式。

pattern <- "\\(?\\d{3}\\)?[[:punct:]]?\\s?\\d{3}[[:punct:]]?\\d{4}"

我们如何逐步解释这个模式?我们一步一步来,从左到右:

.? 0 或 1 个字符,以适应可选的左括号
(\d{3}) 3 个数字字符(第一个捕获组,即前 3 个数字)
.* 0 或更多个字符,以适应可选的右括号、连字符和空格字符
(\d{3}) 3 个数字字符(第二个捕获组,即接下来的 3 个数字)
.* 0 或更多个字符,以适应可选的连字符和空格字符
(\d{4}) 4 个数字字符(第三个捕获组,即最后的 4 个数字)

然后,我们可以使用 str_match 函数使用我们定义的正则表达式模式检索捕获组,并将它们放入数据框中的单独列中。

library(tidyverse)

phone %>%
  mutate(matches = str_match(number, pattern)) %>%
  mutate(area_code = matches[, 2],
         exchange = matches[, 4],
         line_number = matches[, 6])

输出如下:

original_numberarea_codeexchangeline_number
(541)741 39185417413918
(603)281-03086032810308
(814)-462-80748144628074
97044431069704443106

2. 日期

假设我们有另一个名为 date 的数据框,其中包含带有不一致分隔符的日期,我们想要提取天、月和年。

original_date
20-02-2019
15/07/2020
14.09.2021

使用与我们刚才在电话号码中看到的非常相似的方法,我们需要首先定义一个正则表达式模式,然后将模式与原始日期列进行匹配,最后为每个捕获组创建一个新列。

首先,定义日期的正则表达式模式。

pattern <- "(\\d{2}).(\\d{2}).(\\d{4})"

代码解释:

(\\d{2}) 2 个数字字符(第一个捕获组,即天)
. 单个字符,用于考虑所有特殊字符
(\\d{2}) 2 个数字字符(第二个捕获组,即月)
. 单个字符,用于考虑所有特殊字符
(\\d{4}) 4 个数字字符(第三个捕获组,即年)``` 现在,我们可以匹配模式并为日期创建单独的列,包括日、月和年份。
original_datedaymonthyear
20-02-201920022019
15/07/202015072020
14.09.202114092021

3. 姓名

到目前为止,我们已经探索了两个只包含数字和特殊字符的字符串示例。现在让我们学习如何捕获单词和字母。

这里有一个名为“names”的数据框,包含人们的姓氏、头衔和名字。

full_name
Smilth,Mr.John
Davis,Ms Nicole
Robinson,Mrs.Rebecca
Armstrong,Dr Sam
Downey,Mr.Robert

让我们将它们分开,使它们各自拥有自己的单独列。

(\\w+) 一个或多个单词字符(第一个捕获组,即姓氏)
, 逗号字符
\\s 一个空格字符
(Mr|Ms|Mrs|Dr) 先生、女士、夫人或博士(第二个捕获组,即头衔)
.? 标题后面的0或1个句号字符
\\s 一个空格字符
(\\w+) 一个或多个单词字符(第三个捕获组,即名字)

现在,将它们放入单独的列中。
| full_name | family_name | title | given_name |
| ---------------- | -------- | --- | -------- |
| Smilth,Mr.John | Smilth | Mr | John |
| Davis,Ms Nicole | Davis | Ms | Nicole |
| Robinson,Mrs.Rebecca | Robinson | Mrs | Rebecca |
| Armstrong,Dr Sam | Armstrong | Dr | Sam |
| Downey,Mr.Robert | Downey | Mr | Robert |

4. URL

让我们看另一个包含单词和字母的字符串示例。

到现在为止,你应该已经熟悉了这个过程。

(https?) http或https(第一个捕获组,即架构)
:// 特定的特殊字符串
(www)? 可选的www(第二个捕获组,即子域名)
.? 0或1个句号字符
(\\w+) 一个或多个单词字符(第三个捕获组,即二级域名)
. 一个句点字符
(\\w+) 一个或多个单词字符(第四个捕获组,即顶级域名)
/? 0或1个反斜杠字符
(\\w+)? 可选的一个或多个单词字符(第五个捕获组,即子目录)

将捕获组分成单独的列,我们得到:

url_out.pngurl_out.png

5. 电子邮件地址

利用我们已经掌握的有关正则表达式的知识,现在让我们看看包含字母和数字的两个最终字符串示例。

假设我们在一个名为“email”的数据框中有一个电子邮件列表。

现在,生成一个正则表达式模式来匹配用户名、域名和域名。

([a-zA-Z0-9\\_\\-\\.]+) 一个或多个小写字母、大写字母、数字和特殊字符,包括下划线、连字符和句点(第一个捕获组,即用户名)
@ 符号
([a-zA-Z]+) 一个或多个小写和大写字母(第二个捕获组,即域名)
. 一个句点字符
(.+) 一个或多个字符(第三个捕获组,即域名)

然后,将此正则表达式模式应用于电子邮件列表:

email_out.pngemail_out.png

6. 地址

当然,我留下了最好的例子供你参考。这个例子与我在工作中所做的相同。

为了重新创建那个工作片段,我创建了一个名为“address”的数据框,其中包含虚构地址。目标是检索房屋编号、街道名称、郊区、州和邮政编码。

像往常一样,我们需要首先定义一个正则表达式模式。

(\\d*) 0或多个数字字符,因为有些地址没有房屋编号(第一个捕获组,即房屋编号)
\\s? 0或1个空格字符
(.+) 一个或多个字符(第二个捕获组,即街道名称)
, 逗号
\\s 一个空格字符
(.+) 一个或多个字符(第三个捕获组,即郊区)
\\s 一个空格字符
([A-Z]{2,3}) 2或3个大写字母(第四个捕获组,即州)
\\s 一个空格字符
(\\d{4}) 4个数字字符(第五个捕获组,即邮政编码)

将此模式与地址列表匹配,我们得到:

address_out.pngaddress_out.png

我希望通过本博客文章中演示的6个示例,你不仅能够更好地理解正则表达式的工作原理,更重要的是,能够欣赏其在匹配复杂字符串模式方面的灵活性。

译自:https://towardsdatascience.com/regular-expressions-clearly-explained-with-examples-822d76b037b4

Medium article

Link to full write-up on Towards Data Science here.

Additional resources

Follow me