AD5934阻抗变换模块实验电路板

article/2025/3/14 23:15:50

 

■ 前言


本文讨论了基于AD5934构建阻抗变换模块。并对于它测试相应的阻抗进行实验。

 

01电路设计


1.原理图设计1

▲ 实验电路板 原理图

▲ 实验电路板 原理图

2.PCB版图

▲ 实验电路板PCB

▲ 实验电路板PCB

电路板输出接口从右到左,前四个的功能定义如下表。后面四个是用于调试使用。

管脚(从右到左)符号功能
1MCLK转换时钟。从DS345给出
2VOUT激励信号。从板上AD8606运放输出
3GNDA模拟地
4VIN信号输入。进入板上AD8606跟随

3.C51程序

  • 时钟频率35MHz, UART:460800

C51程序以及Python程序详见后面的附录。

▲ 基于面包板进行测试和实验

▲ 基于面包板进行测试和实验

 

02测试结果


1. AD5934与AD5933区别

  • 1. AD5934只能使用外部时钟信号
    如果没有外部时钟信号,AD534将不会工作。Init(10,1)与init(10,0)作用是相同的;

  • 2.时钟设置是,需要使用DIV=16
    在吊桶setsweep()时,需要提供div=16(缺省为4)。这使得AD5934的AD采样速率也比起AD5933减少了4倍;

  • 3.激励信号扫描范围比起AD5933降低4倍
    使用AD5933分析复阻抗的时钟频率设置 给出了扫描时钟工作的范围。相遇AD5934需要将所有的时钟频率降低4倍。比如给定了 f o s c f_{osc} fosc,那么激励信号的范围:


其中 f o s c f_{osc} fosc的单位是MHz。

DS345时钟幅度设置:Amplitude:2Vpp; Offset:1V。

▲ MCLK时钟的波形:Amplitude=2Vpp, Offset=1V

▲ MCLK时钟的波形:Amplitude=2Vpp, Offset=1V

在博文 AD5933阻抗模块测量值校正 给出了校正与计算相关的公式。

2.一些典型的测量数据

  • 校正电阻采集数据和测量数据

工作条件: f o s c = 1 M H z f_{osc} = 1MHz fosc=1MHz;扫频范围:(100,5100);扫描模式:SWEEP_MODE:1
输出信号的幅值:Vpp=2V

▲ 输出信号的波形和幅值

▲ 输出信号的波形和幅值

下面是采集到的在10kΩ分压下的采集信号。▲ 使用两个10kΩ电阻进行的校正数据。

▲ 使用两个10kΩ电阻进行的校正数据。

▲ 对校正电阻自身测量的结果

▲ 对校正电阻自身测量的结果

▲ 测量带有谐振腔的压电陶瓷蜂鸣器

▲ 测量带有谐振腔的压电陶瓷蜂鸣器

▲ 测量电容222对应的结果

▲ 测量电容222对应的结果

▲ 测量电感的感抗0.1H

▲ 测量电感的感抗0.1H

3.测量一些低阻器件

▲ 使用51欧姆的分压采集到的校正数据

▲ 使用51欧姆的分压采集到的校正数据

▲ 对于51欧姆校正电阻的测量数据

▲ 对于51欧姆校正电阻的测量数据

▲ 测量3Ω扬声器的数据

▲ 测量3Ω扬声器的数据

▲ 测量低音扬声器的阻抗

▲ 测量低音扬声器的阻抗

▲ 测试51欧姆电阻

▲ 测试51欧姆电阻

4.测量一些高阻谐振器件

▲ 使用100kΩ采集到的校正数据

▲ 使用100kΩ采集到的校正数据

▲ 对于20kHz工字电感谐振电磁传感器的测量

▲ 对于20kHz工字电感谐振电磁传感器的测量

 

※ 结论


通过上面的实验,可以看到模块设计达到了对应的功能。

#!/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 = 0
if len(sys.argv) > 1:calflag = int(sys.argv[1])calname = 'testcal'
SWEEP_MODE = 1Resistor=100e3
fosc = 10startf = 15e3
stepf = 20
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(20, 1)#------------------------------------------------------------while True:f = ad5933.setsweep(startf, stepf, numf, oscf=fosc, div=16)time.sleep(1.5)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): breakelse:printf('ERROR: %d != %d.\a'%(len(R), len(f)))if len(R) < len(f) / 2: continue;if calflag == 0:f = linspace(f[0], f[-1], len(f1))R = linspace(R[0], R[-1], len(f1))I = linspace(I[0], I[-1], len(f1))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, div=4):startn = int(startf * (2**27) * div / (oscf*1e6))incn   = int(incf * (2**27) * div / (oscf*1e6))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 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/div/(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
#============================================================

  1. AD工程文件:AD\Test\2020\AD5933\AD59348G1k.PcbDoc * ↩︎


http://chatgpt.dhexx.cn/article/8yARdbT3.shtml

相关文章

使用AD5933测量元器件的谐振特性

■ 前言 元器件的谐振特性 使用 使用AD5933测量电子器件复阻抗 测量元器件的谐振特性。这里记录了一些相应的的电子实验的数据。以备之后进行复习和参考。 01测量电路 在 使用AD5933测量电子器件复阻抗 中给出了直接测量一些元器件&#xff08;电阻、电容&#xff09;的结果。…

AD5933测量容性负载时的神秘振荡信号

■ 问题简介 在博文 使用AD5933测量电子器件复阻抗 中&#xff0c;对于电容负载进行测量的时候&#xff0c;发现测量的结果与理论值严重不符。 除了出现了增大的测量输出值&#xff08;与前面电阻相对比&#xff09;&#xff0c;还有一些非常不规则的输出结果。 计时在小信号…

使用AD5933分析复阻抗的时钟频率设置

作者:卓晴博士&#xff0c;清华大学自动化系 更新时间&#xff1a;2020-07-29 Wednesday ■ 前言 使用 AD5933分析复数阻抗 时&#xff0c;由于受到内部离散傅里叶变换&#xff08;DFT&#xff09;所带来的以下限制&#xff1a; 由于采集信号可能带来的频率 频率混叠 现象由…

使用AD5933测量电子器件复阻抗

■ 前言 下面使用 AD5933阻抗转换器、网络分析仪初步实验 对一些典型的器件测量相关的阻抗。分析测量所对应的工作频率&#xff0c;工作量程等问题。 相关的文献参阅&#xff1a; AD5933阻抗转换器、网络分析仪初步实验AD5933不同频率下的转换结果AD5933使用外部时钟获得更低…

AD5933不同频率下的转换结果

01简介 AD5933阻抗转换模块 是一款基于AD公司的 AD5933 芯片的测量 复阻抗 的电路模块。在 AD5933阻抗转换器、网络分析仪初步实验 中对该模块进行了初步的实验。 由于该芯片的基本原理是采集有芯片内部产生的正弦波电压信号激励下复阻抗相应的正弦电流信号&#xff0c;经由芯…

AD5933使用外部时钟获得更低的分析频率

■ 前言 在博文 AD5933不同频率下转换结果 中分析了 AD5933阻抗变换模块 使用内部时钟&#xff08;fosc16.776MHz&#xff09;时&#xff0c;测量结果受到采集时间窗口的影响&#xff0c;所能够达到的最低阻抗激励正弦信号频率。 那么&#xff0c;在有些应用中&#xff0c;对象…

基于AD5933 生物复阻抗

1、基于AD5933的生物复阻抗测量仪 - 百度文库 2、参考设计&#xff1a;基于AD5933的生物复阻抗测量仪 | 亚德诺半导体 3、使用AD5933分析复阻抗的时钟频率设置_卓晴的博客-CSDN博客 4、AD5933设计阻抗测量系统小总结 - ADI参考电路 - 电子工程世界-论坛 5、AD5933阻抗测量…

2019年电赛D题简易电路特性测试仪试题ad5933测量小阻抗值

ad5933 继上一篇的文章&#xff0c;我后面才发现一个大问题&#xff0c;就是上一次计算的增益系数其实不能测量其他小的阻抗值&#xff0c;在参考手册里面就有一章讲的就是小阻抗的 这一个小阻抗的扫描频率范围是在《500欧的范围内 当然手册里面也是讲到不同的阻抗值是对应的…

最小采样频率计算公式_AD5933使用外部时钟获得更低的分析频率

■ 前言 在博文 AD5933不同频率下转换结果[1] 中分析了 AD5933阻抗变换模块 使用内部时钟(fosc=16.776MHz)时,测量结果受到采集时间窗口的影响,所能够达到的最低阻抗激励正弦信号频率。 那么,在有些应用中,对象的带宽和工作频率会很低,那么如果能够使用AD5933对这些对象进…

阻抗测量单芯片方案AD5933 芯片使用方法

庆祝一下&#xff1a;作者设计的生物阻抗分析设备与万通桌面版电化学工作站精度对比&#xff0c;最大误差≤3%&#xff1b; 内容安排&#xff1a; AD5933 大概的工作原理&#xff1b;作者再使用AD5933 的注意事项&#xff1b;驱动代码与验证方法&#xff1b; 注意事项 1&a…

AD5933阻抗模块测量值校正

■ 前言 在博文 使用AD5933测量元器件的谐振特性 推导了测量阻抗校正公式。 为了简便起见&#xff0c;下面的分压电阻 R 1 , R 2 R_1 ,R_2 R1​,R2​取值相同&#xff0c;与待测元器件阻抗大体相同。 测量分为两步&#xff1a; 第一步&#xff1a;先使用分压电路测量各个频率…

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

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

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

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

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

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

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

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

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

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