■ 前言


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

01电路设计


1.原理图设计1

▲ 实验电路板 原理图

2.PCB版图

▲ 实验电路板PCB

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

管脚(从右到左) 符号 功能
1 MCLK 转换时钟。从DS345给出
2 VOUT 激励信号。从板上AD8606运放输出
3 GNDA 模拟地
4 VIN 信号输入。进入板上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倍。比如给定了foscf_{osc}fosc​,那么激励信号的范围:


其中foscf_{osc}fosc​的单位是MHz。

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

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

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

2.一些典型的测量数据

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

工作条件:fosc=1MHzf_{osc} = 1MHzfosc​=1MHz;扫频范围:(100,5100);扫描模式:SWEEP_MODE:1
输出信号的幅值:Vpp=2V

▲ 输出信号的波形和幅值

下面是采集到的在10kΩ分压下的采集信号。

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

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

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

▲ 测量电容222对应的结果

▲ 测量电感的感抗0.1H

3.测量一些低阻器件

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

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

▲ 测量3Ω扬声器的数据

▲ 测量低音扬声器的阻抗

▲ 测试51欧姆电阻

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

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

▲ 对于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 * ↩︎

AD5934阻抗变换模块实验电路板相关推荐

  1. 浅谈VVC(H.266)的变换模块

    转自:https://zhuanlan.zhihu.com/p/108792210 本文将分为四个部分对下一代视频编码标准Versatile Video Coding(VVC)的变化模块进行介绍.第一 ...

  2. 变压器的阻抗变换关系

    变压器的阻抗变换关系 如图6-3 所示,当变压器的次级负载阻抗Z2 发生变化时,初级阻抗Z1会立即受到次级的反射而变化.这种阻抗的变化关系,可以通过下面公式的推导得出. 根据欧姆定律,下式成立: 如果 ...

  3. Matlab的alpha-Beta to dq变换模块到底选哪一种变换方式?

    Clake变换我们一般选择等幅值变换 (VαVβ)=23(1−12−12032−32)(VaVbVc)(式6)\left(\begin{array}{c}V_{\alpha} \\V_{\beta}\ ...

  4. matlab阻抗测量模块,基于matlab技术实现频谱分析仪测量阻抗

    技术创新 中文核心期刊< 微计算机信息>(测控自动化)2006 年第 22 卷第 12-1 期 360元 / 年 邮局订阅号:82-946 < 现场总线技术应用 200 例> ...

  5. 为什么使用RLC表测量电感在不同的频率测量值不同呢?

    ■ 问题的提出 为什么 使用RLC表测量电感在不同的频率下所测量得到的电感不同呢? . ▲ TH2821A RLC表以及测量电感|电感来自于一个继电器的线圈 选取了 一个继电器线圈 使用便携RLC表 ...

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

    ■ 简介 AD5933阻抗变换模块 是基于AD(ANALOG DEVICES)公司 的 AD5933 芯片的阻抗转换器.网络分析仪.此外,AD公司还提供了一款小型的 AD5934 . ▲ AD5933 ...

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

    ■ 前言 在博文 AD5933不同频率下转换结果 中分析了 AD5933阻抗变换模块 使用内部时钟(fosc=16.776MHz)时,测量结果受到采集时间窗口的影响,所能够达到的最低阻抗激励正弦信号频 ...

  8. HC-SR501 人体红外感应模块

    资料下载:http://pan.baidu.com/s/1bnkxeoR 完美版HC-SR501是基于红外线技术的自动控制模块,采用德国原装进口LHI778探头设计,灵敏度高,可靠性强,超低电压工作模 ...

  9. [转载]HC-SR501 人体红外感应模块

    热释电红外感应模块 原文地址:HC-SR501 人体红外感应模块作者:XingHeStudio 技术参数: 1.工作电压:DC5V至20V 2.静态功耗:65微安 3.电平输出:高3.3V,低0V 4 ...

最新文章

  1. 26期20180716 iptables规则备份恢复 firewalld zone
  2. [PHP] 访问MySQL
  3. Kafka manager安装 (支持0.10以后版本consumer)
  4. python中的del,remove,pop有什么区别
  5. 大数据 互联网架构阶段 电商项目简介
  6. MySQL 高级 —— MVCC 多版本并发控制
  7. linux多线程学习(六)——信号量实现同步
  8. socket编程---SCTP
  9. nodepad++通过正则表达式,删除带有特殊字符的某一行
  10. HTC扣动板机出现射线。获得射线与VR中物体的交点并用linerender表示出来
  11. java项目报告书_Java项目报告模版.doc
  12. 计算机网络重置点命令,WinXP系统如何通过cmd命令对网络进行重置
  13. 《金融的本质》书中的精髓:金融危机是如何产生的?以及美联储是如何应对金融危机的?
  14. 几款永久免费内网穿透,好用且简单
  15. Github+Typora+PicGo+Jsdelivr 实现白P图床
  16. 计算机组成原理(九)
  17. MMDetection 2.0安装笔记
  18. 算法设计7-数字迷问题
  19. True Type 文件格式规范
  20. 怎样在ipad安装ipa文件

热门文章

  1. 禁止直接在浏览器输入网址访问的代码
  2. 听妈妈的话-07年感动的延续
  3. Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四)...
  4. CALayer的基本操作
  5. WCF第一个Demo
  6. 给jqGrid数据行添加修改和删除操作链接
  7. 软件工程 之 动物世界
  8. WindML相关知识和图形设备驱动程序开发(一)
  9. C#实现的正余玄函数图象
  10. gitee项目能用SVN拉取吗_用好 Git 和 SVN,轻松驾驭版本管理