AD5933阻抗模块测量值校正

article/2025/3/15 1:35:25

 

■ 前言


在博文 使用AD5933测量元器件的谐振特性 推导了测量阻抗校正公式。

为了简便起见,下面的分压电阻 R 1 , R 2 R_1 ,R_2 R1,R2取值相同,与待测元器件阻抗大体相同。

测量分为两步:

  • 第一步:先使用分压电路测量各个频率的测量值: R c + j ⋅ I c R_c +j\cdot I_c Rc+jIc
  • 第二步:将 R 2 R_2 R2替换成待测元器件( R t + j ⋅ I t R_t + j \cdot I_t Rt+jIt),测量结果 R m + j ⋅ I m R_m + j \cdot I_m Rm+jIm

▲ 测量实验电路基本结构

▲ 测量实验电路基本结构

根据第一步的分压,可以知道,输入交流复矢量:
U ˙ I N = 2 ⋅ U ˙ c = 2 ( R c + j ⋅ I c ) \dot U_{IN} = 2 \cdot \dot U_c = 2\left( {R_c + j \cdot I_c } \right) U˙IN=2U˙c=2(Rc+jIc)

根据第二步,可以知道待选器件复阻抗 X ˙ = R t + j ⋅ I t \dot X = R_t + j \cdot I_t X˙=Rt+jIt与测量结果 U ˙ m \dot U_m U˙m之间的关系为:

X ˙ R + X ˙ ⋅ U ˙ I N = U ˙ m ⇒ X ˙ R + X ˙ = U ˙ m U ˙ I N = a ˙ {{\dot X} \over {R + \dot X}} \cdot \dot U_{IN} = \dot U_m \,\,\,\, \Rightarrow \,\,{{\dot X} \over {R + \dot X}} = {{\dot U_m } \over {\dot U_{IN} }} = \dot a R+X˙X˙U˙IN=U˙mR+X˙X˙=U˙INU˙m=a˙

那么,元器件的复阻抗为::

X ˙ = R a ˙ 1 − a ˙ = R ⋅ U ˙ m U ˙ I N − U ˙ m = R ⋅ ( R m + j ⋅ I m ) ( 2 R c − R m ) + j ⋅ ( 2 I c − I m ) \dot X = {{R\dot a} \over {1 - \dot a}} = {{R \cdot \dot U_m } \over {\dot U_{IN} - \dot U_m }} = {{R \cdot \left( {R_m + j \cdot I_m } \right)} \over {\left( {2R_c - R_m } \right) + j \cdot \left( {2I_c - I_m } \right)}} X˙=1a˙Ra˙=U˙INU˙mRU˙m=(2RcRm)+j(2IcIm)R(Rm+jIm)

复阻抗的的幅值和幅角计算公式如下:

X ˙ = x + j ⋅ y , ∣ X ˙ ∣ = x 2 + y 2 , ∠ X ˙ = arctan ⁡ ( y x ) \dot X = x + j \cdot y,\,\,\,\,\,\left| {\dot X} \right| = \sqrt {x^2 + y^2 } ,\,\,\,\angle \dot X = \arctan \left( {{y \over x}} \right) X˙=x+jy,X˙=x2+y2 ,X˙=arctan(xy)

a = R ⋅ R m , b = R ⋅ I m , c = 2 R c − R m , d = 2 I c − I m a = R \cdot R_m ,\,\,b = R \cdot I_m ,\,\,c = 2R_c - R_m ,\,\,d = 2I_c - I_m a=RRm,b=RIm,c=2RcRm,d=2IcIm

x = a c c 2 + d 2 + b d c 2 + d 2 , y = − a d c 2 + d 2 + b c c 2 + d 2 x = {{ac} \over {c^2 + d^2 }} + {{bd} \over {c^2 + d^2 }},\,\,y = - {{ad} \over {c^2 + d^2 }} + {{bc} \over {c^2 + d^2 }} x=c2+d2ac+c2+d2bd,y=c2+d2ad+c2+d2bc

 

01实验测量


1.测量校正数据

(1) 测量条件

  • R = 10 k R = 10k R=10k
  • 描频率范围: 500 H z − 5000 H z 500Hz\,\, - 5000Hz 500Hz5000Hz
  • AD5933:工作频率: f o s c = 1 M H z f_{osc} = 1MHz fosc=1MHz
  • 扫描模式:SWEEEP(1)

▲ 校正电阻10kΩ测量数据

▲ 校正电阻10kΩ测量数据

2.测量电容阻抗

测量条件与上面相同,将R替换成电容:2.2nF。
▲ 电容222测量数据

▲ 电容222测量数据

由于测试是电容,上面的结果显示相角随着不同的频率呈现逐步变化的情况。并不是呈现基本上90°的超前特性。

之所以造成这个错误,主要是因为扫描电压过高了,超过了16238(0x4000)。

下面重新使用扫描模式SWEEP(7),也就是将输出激励信号幅值降低一倍,重新进行校正和测量,下面是测量后的结果。
结果显示相位基本上呈现90°。

▲ 使用SWEEP(7)扫描计算结果

▲ 使用SWEEP(7)扫描计算结果

电容 C C C在频率 f f f下的容抗公式为:
X c = 1 2 π j ⋅ f ⋅ C X_c = {1 \over {2\pi j \cdot f \cdot C}} Xc=2πjfC1

利用上面的电容阻抗模型计算出对应的容抗,与测量数值进行对比如下,可以看到它们基本上相符。
▲ 对比测量与计算模型

▲ 对比测量与计算模型

3.测量电感

电感使用GX913GX9/3型十进制电感箱测量。测量条件和上面相同。测量结果如下:
▲ 测量电感100mH的数据

▲ 测量电感100mH的数据

电感 L L L在频率 f f f下的感抗为:
X ˙ L = 2 π ⋅ f ⋅ L \dot X_L = 2\pi \cdot f \cdot L X˙L=2πfL
具体测量数值与计算感抗对比:
▲ 电感测量值与理论计算值之间的关系

▲ 电感测量值与理论计算值之间的关系

4.压电陶瓷片

▲ 带有谐振腔的压电陶瓷片的阻抗

▲ 带有谐振腔的压电陶瓷片的阻抗

▲ 不带有谐振腔的压电陶瓷片

▲ 不带有谐振腔的压电陶瓷片

▲ 大型带有谐振腔的压电陶瓷蜂鸣器

▲ 大型带有谐振腔的压电陶瓷蜂鸣器

▲ 低频压电陶瓷蜂鸣器

▲ 低频压电陶瓷蜂鸣器

5.高频测量

  • 高频校正数据
  1. AD5933工作频率:10MHz
  2. 频率范围:50k~500kHz

▲ 高频校正数据,R=10k

▲ 高频校正数据,R=10k

测量455kHz中周频率特性

▲ AM中周455kHz的测量特性

▲ AM中周455kHz的测量特性

▲ 时钟晶体校正数据

▲ 时钟晶体校正数据

▲ 时钟晶体测量数据

▲ 时钟晶体测量数据

▲ 时钟晶体测量数据,SettingTime=100

▲ 时钟晶体测量数据,SettingTime=100

▲ 时钟晶体测量数据,SettingTime=500

▲ 时钟晶体测量数据,SettingTime=500

▲ 时钟晶体测量数据,SettingTime=500

▲ 时钟晶体测量数据,SettingTime=500

▲ 时钟石英阻抗测量结果

▲ 时钟石英阻抗测量结果

▲ 时钟石英阻抗测量结果

▲ 时钟石英阻抗测量结果

 

※ 结论


通过实验结果,验证了通过分压方式测量复阻抗的公式。并对于一些具有典型特性的复阻抗元器件进行测量。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-06-25
#
# Note:
#============================================================from headm import *
import ad5933
from tsmodule.tsstm32       import *
from tsmodule.tsvisa        import *
from tsmodule.tsdraw        import *#------------------------------------------------------------
printf('Begin testing:\a')calflag = 1
calname = 'clk32768'
SWEEP_MODE = 7Resistor=10e3
fosc = 10startf = 32760
stepf = 0.02
numf = 500#------------------------------------------------------------
if calflag == 0:f1, R1, I1, A1 = tspload(calname, 'f', 'R', 'I', 'A')R1 = list(R1)I1 = list(I1)if len(f1) != numf+1:printf("NUMF is not equal to calibrate length:(%d,%d)"%(len(f1), numf))exit()#------------------------------------------------------------
ad5933.init(500, 1)while True:f = ad5933.setsweep(startf, stepf, numf, oscf=fosc)time.sleep(2)ad5933.sweep(SWEEP_MODE)while True:time.sleep(.5)val = stm32val()if val[12] > 0: breakprintf('\a')R,I = stm32memo(2)if len(R) == len(f): break#------------------------------------------------------------
A = [sqrt(r**2+i**2) for r,i in zip(R,I)]if calflag == 1:tspsave(calname, f=f, R=R, I=I, A=A)#------------------------------------------------------------
if calflag != 0:plt.plot(f, R, label="Real")plt.plot(f, I, label="Imaginary")plt.plot(f, A, label='Amplitude')plt.xlabel("Frequency(Hz)")plt.ylabel("Value")plt.grid(True)plt.legend(loc="upper right")plt.show()exit()#------------------------------------------------------------
Xabs = []
Xphase = []
for Rc,Ic,Rm,Im in zip(R1,I1,R,I):a = Resistor * Rmb = Resistor * Imc = 2*Rc - Rmd = 2*Ic - Imccdd = c*c+d*dx = a*c/ccdd + b*d/ccddy = -a*d/ccdd + b*c/ccddXabs.append(sqrt(x*x+y*y))Xphase.append(arctan2(y, x)*180/pi)tspsave('Impedance',f=f, xabs=Xabs, xphase=Xphase)#------------------------------------------------------------
plt.subplot(311)
plt.plot(f, R, label="Real")
plt.plot(f, I, label="Imaginary")
plt.plot(f, A, label='Amplitude')
plt.xlabel("Frequency(Hz)")
plt.ylabel("Value")
plt.grid(True)
plt.legend(loc="upper right")plt.subplot(312)
plt.plot(f, Xabs)
plt.xlabel("Frequency(Hz)")
plt.ylabel("Amplitude(ohm)")
plt.grid(True)plt.subplot(313)
plt.plot(f, Xphase)
plt.xlabel("Frequency(Hz)")
plt.ylabel("Phase")
plt.grid(True)#------------------------------------------------------------
plt.show()#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# AD5933.PY                    -- by Dr. ZhuoQing 2020-06-25
#
# Note:
#============================================================from head import *
from tsmodule.tsstm32       import *#------------------------------------------------------------def init(settletime=100, extclock=0):if extclock > 0:stm32cmd('writeb 81 8')else:stm32cmd('writeb 81 0')time.sleep(0.02)stm32cmd('writeb 80 b1')    # Enter standby modestm32cmd('writei 8a %x'%settletime)time.sleep(0.02)def temperature():data = stm32cmdata('readt', wait=200)if len(data) > 0:return data[0] / 32else: return 0def setsweep(startf, incf, num=100, oscf=16.557):startn = int(startf * (2**27) * 4 / (oscf*1e6))incn   = int(incf * (2**27) * 4 / (oscf*1e6))#    printff('%x %x %x'%(startn, incn, num))stm32cmd('writel 82 %x'%startn)time.sleep(.02)stm32cmd('writel 85 %x'%incn)time.sleep(.02)stm32cmd('writei 88 %x'%num)time.sleep(.02)#    stm32cmd('writeb 81 0')         # D3: 0:Internal system clock 1:External
#    time.sleep(.02)stm32cmd('writeb 80 b1')        # Standbytime.sleep(.02)stm32cmd('writeb 80 11')time.sleep(.02)fdim = []for n in linspace(startn, startn + incn * num, num+1, endpoint=True):fdim.append(n * oscf * 1e6/4/(2**27))return fdimdef startf(resultflag = 0):if resultflag > 0:stm32cmd('writeb 80 21 1')else:stm32cmd('writeb 80 21')def incf(resultflag = 0):if resultflag > 0:stm32cmd('writeb 80 31 1')else:stm32cmd('writeb 80 31')def repeatf(resultflag = 0):if resultflag > 0:stm32cmd('writeb 80 41 1')else:stm32cmd('writeb 80 41')def readdata():return stm32cmdata('readd', wait=100)def sweep(code=0x1):stm32cmd('CLEAR')time.sleep(.02)stm32cmd('sweep %x'%code)#------------------------------------------------------------if __name__ == '__main__':tdim = []for i in range(10):data = temperature()tdim.append(data)time.sleep(.1)printf(tdim)#------------------------------------------------------------
#        END OF FILE : AD5933.PY
#============================================================

 

提问与回答


师您好,我还想请教您一个关于AD5933的问题,就是我从数据寄存器中读取到了实部和虚部,但是非常大,短接的时候差不多是20000,但是我把一个100K的带测电阻放上之后还是很大,变成了19000左右,请问老师您遇到过这种问题吗?

1.这种情况我并没有碰到过。2. 猜测的AD5933的接受端的运放已经饱和了。

好,就是关于这个量程的问题,为什么最大值不是65535呢?

▲ d

▲ d

于AD5933内部的DSP引擎的细节,在其数据手册上也没有透露的特别清楚,所以有些结论我只能根据实际读出的数据进行测测。其中0x4000(16384)就是根据读出猜测其内部在不饱和情况下实际输出的最大值; 猜测原因:1)内部使用了二的补码表示测量的整数数据,所以正弦波的不失真的峰值只能是0x7fff;2)经过内部DFT变换的时候,又将有效范围减少了一半(这个原因不知道为何?),最终确定下来该芯片表示正弦波最大值对应的输出结果为0x4000左右。


http://chatgpt.dhexx.cn/article/Dg8DaUlr.shtml

相关文章

AD5933阻抗转换器、网络分析仪初步实验

■ 简介 AD5933阻抗变换模块 是基于AD(ANALOG DEVICES)公司 的 AD5933 芯片的阻抗转换器、网络分析仪。此外,AD公司还提供了一款小型的 AD5934 。 ▲ AD5933阻抗转换器 该模块在TMALL上的零售价格为¥188。 D5933是一款高精度的阻…

阻抗转换器AD5933使用总结及分析(2)

电路小白 微信公众号:实在太懒于是不想取名 前言: 上一篇制作完AD5933的使用后,成功的使用AD5933完成RCL负载网络的测试以及网络类型的判断。重新研读AD5933的数据手册时,我们产生了一个大胆的想法——即利用AD5933的硬件资源直…

高等数学同济第七版课后答案下册

高等数学同济第七版课后答案下册 高等数学课后答案同济第七版下册 下载地址: 链接:https://pan.baidu.com/s/185C8RB4Y9pYO84V4Rup1Wg 提取码:p7o4 如果链接失效扫一扫右侧,回复 高等数学答案 即可免费获取 百度文库所有文档原格…

高等数学习题全解指南下册同济第七版课后习题答案

高等数学习题全解指南下册同济第七版课后习题答案 原创bookanddream 最后发布于2020-03-16 12:30:11 阅读数 9 收藏 展开 高等数学同济大学七版课后习题答案习题全解指南下册PDF下载 习题8-1 向量及其线性运算 习题8-2 数量积 向量积 *混合积 习题8-3 同济大学平面及其方程高…

高等数学同济第七版下册期中复习提纲思维导图知识体系

大家好呀!刚刚期中考完我就来更新啦! 我整理了第8章到第11章的提纲,以及我自己体会到的一些好的做题习惯,百度链接放到下面了,需要的小伙伴自取哦~ 为了简洁性和可读性,我略去了一些简单的知识点&#xf…

java中jsp是什么_JSP是什么?

JSP(Java Server Pages),即Java服务器界面,是指: ●在HTML中嵌入Java脚本代码 ●由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码 ●然后将生成的整个页面信息返回给客户端 一个JSP页面分为以下五个部分: 一、静态内容:HTML静态文本 HTML标签内容请点击:HTML常用…

java web 和js区别_jsp和javascript之间有什么区别?

很多人都把jsp和javascript混为一谈,都以为jsp和javascript是一个东西,其实jsp和javascript是有很大的区别的。下面本篇文章就来给大家介绍一下jsp和javascript的区别,希望对大家有所帮助。 jsp和javascript之间的区别 名字: JS:JavaScript JSP:Java Server Pages 本质的…

JSP引入JS/CSS路径到底怎么写才好

缘起 在某些项目中可能会采用相对路径或者绝对路径方式来引入js或css文件&#xff0c;这在某些情况下会出现问题。下面我们就来说说问题出在哪里&#xff0c;我们先将以下所有的例子中的页面设定为a.jsp。 相对路径存在的问题 采用相对路径的写法如下两种 <script type&…

jsp和js区别 一

最近很多同学在纠结于名词缩写之间的相似性&#xff0c;因此本人也来写一篇&#xff0c;讲讲JS和JSP的区别。 SUN首先发展出SERVLET&#xff0c;其功能比较强劲&#xff0c;体系设计也很先进&#xff0c;只是&#xff0c;它输出HTML语句还是采用了老的CGI方式&#xff0c;是一句…

JAVASCRIPT、JSP、JS有什么区别和联系

感谢大佬&#xff1a;https://www.cnblogs.com/xiaojizhualaoying/p/10662410.html js是javascript的缩写。以下是JSP与JS的区别和联系&#xff1a; 名字&#xff1a;JS&#xff1a;JavaScriptJSP&#xff1a;Java Server Pages 执行过程&#xff1a;JSP先翻译&#xff0c;翻译…

【Java】Java、JavaScript、JSP、JScript,傻傻分不清楚

不怕大家笑话&#xff0c;曾经在大学期间就做过**一次**web相关的工作&#xff0c;也就是自己《软件工程》的项目作业&#xff0c;初步接触了一些CSSDIV的工作。但是依然不是很深入&#xff0c;都称不上前端工作&#xff0c;因为js是小组内其他成员负责调的&#xff0c;自己最多…

scc4查看系统安装了多少个client

give two screen shot to get more sense. 转载于:https://www.cnblogs.com/LearnSap/archive/2008/07/10/1239873.html

Client copy

我在IDES的800Client作练习,如果改来改去改滥了怎么办?我参考了南的这篇文章的第二部分。 http://blog.chinaunix.net/u2/65985/showart_1003707.html 方法是将800作个备份就可以了,也就是作Client Copy。那怎么做Client Copy呢? 我们需要先用SCC4创建一个新Client号。 在…

SAP R3 Create Client: T-code:SCC4

group number from 002-999(066 for system use). below picture is client,company codes,plants ,storage location, puchasing releationship. 也可以从以下的路径进入&#xff1a; 配置路径&#xff1a;SPRO-企业结构-定义-后勤常规-定义&#xff0c;复制&#xff0c;删除&…

SAP ABAP ZBA_R005获得事务代码分段,完成关键用户参数权限

ERP项目有这样一个场景&#xff1a; 我们需要在SAP_ALL全部的授权中&#xff0c;只拿掉BASIS相关和SPRO后台配置入口的权限&#xff0c;剩下99%的权限给关键用户使用。 我们需要在10万个事务代码中&#xff0c;把BASIS的几个TC和SPRO按分段剔除出来。 下面程序就帮助得到剔除…

SAP ABAP 生产机设置标准配置表为可直接维护 例子为:V_T499S

本人诚心接ABAP远程开发任务&#xff0c;价格公道&#xff0c;有需要的联系我&#xff0c;欢迎个人&#xff0c;甲方爸爸&#xff0c;乙方私信联系。 因公司业务需求&#xff0c;V_T499S 需经常手动新增&#xff0c;故将sm30权限放开给用户自增&#xff0c;节省每次用户传输的…

传输请求K汇总

1、SCC1传输请求(同系统跨Client) abap开发中会涉及到一些配置的,也会生成定制请求,比如说BTE中的配置,webservice中的端口配置。 这些配置并不是跨client的,通常一个SAP系统内会有多个client,比如,开发机系统内存在两个client,100和200,100下是纯开发client,200下…

SCC1传输请求(同系统跨Client)

SCC1 是用于在同一系统下不同clients之间传输内容&#xff0c;内容通过传输请求打包&#xff1b;SCC4 是关于同一系统下不同clients的管理&#xff0c;里面有各个client的设定。 先在SE10释放&#xff0c;再到SCC1传输。

数据字典、透明表

SE16N缓存 比如SE11改了字段长度&#xff0c;SE16N没有变化&#xff0c;需要清缓存 /$SYNC 查看表对应的文本表 直接se16n输入表名&#xff0c;就能看到文本表了&#xff0c;比如ska1 数据元素 描述&#xff1a;在表dd04t中 修改记录 在数据元素勾更改文档&#xff0c;表修…