阻抗测量芯片AD5933及其应用
1 AD5933芯片概述
1.1 主要性能
AD5933是一款高精度的阻抗测量芯片,内部集成了带有12位,采样率高达1MSPS的AD转换器的频率发生器。这个频率发生器可以产生特定的频率来激励外部电阻,电阻上得到的响应信号被ADC采样,并通过片上的DSP进行离散的傅立叶变换。傅立叶变换后返回在这个输出频率下得到的实部值R和虚部值I。这样就可以很容易的计算出在每个扫描频率下的傅立叶变换的模和电阻的相角。其中模= ,相角= 。
AD5933主要具有以下特性:
l 可编程的频率发生器,最高频率可达100KHz
l 作为设备通过 口和主机通讯,实现频率扫面控制
l 频率分辨率为27位(<0.1Hz)
l 阻抗测量范围为100Ω到10MΩ
l 内部带有温度传感器,测量误差范围为±2℃
l 带有内部时钟
l 可以实现相位测量
l 系统精度为0.5%
l 可供选择的电源范围为2.7V到5V
l 正常工作的温度范围-40℃到+125℃
l 16脚SSOP封装
1.2 AD5933的引脚定义
图1给出了AD5933的封装图,表1给出了AD5933的引脚定义。建议在使用时把所有的电源脚9、10、11都连到一起,统一连接到电源上,同样所有的地引脚12、13、14也都连接到一起,统一连接到系统地上
图1 AD5933引脚排列
表1 AD5933引脚定义
引脚标号 |
引脚名称 |
引脚描述 |
1,2,3,7 |
NC |
空引脚,没有定义 |
4 |
RFB |
外部反馈电阻,连接在4和5之间来设置接受端电流电压转换放大器的增益 |
5 |
VIN |
输入到接受阻抗转换放大器,存在VDD/2的参考地 |
6 |
VOUT |
激励电压输出脚 |
8 |
MCLK |
芯片外部时钟输入,由用户提供 |
9 |
DVDD |
数字电源 |
10 |
AVDD1 |
模拟电源1 |
11 |
AVDD2 |
模拟电源2 |
12 |
DGND |
数字地 |
13 |
AGND1 |
模拟地1 |
14 |
AGND2 |
模拟地2 |
15 |
SDA |
数据输入口,需要10kΩ的上拉电阻连接到VDD |
16 |
SCL |
时钟输入口,需要10kΩ的上拉电阻连接到VDD |
1.3 主要应用
AD5933可以广泛的应用在电化学分析、生物电极阻抗测量、阻抗谱分析、复杂阻抗测量、腐蚀监视和仪器保护、生物医学和自动控制传感器、无创检测、原材料性能分析以及燃料和电池状态监测等众多领域。为阻抗的测量提供了很大的方便,单片集成技术大大的减小了仪器的体积,使得仪器使用更加方便。简单的I2C通讯方式,方便用户操作,减小了用户编程的困难。由于它给出的直接是变换后阻抗的实部和虚部数据,大大的简化了用户编程过程,节省了开发时间。
2 AD5933工作原理
2.1 AD5933的参数设置
AD5933片上带有一个27位的DDS来提供输出特定频率激励信号。输入到DDS状态寄存器的数据由AD5933片上地址为82h、83h、84h的起始频率寄存器提供。尽管状态寄存器提供27位的精度,但其实起始频率寄存器的高三位是被内部置零的,所以用户可以控制的只有起始频率的低24位。AD5933可以实现0.1Hz的频率分辨率,频率分辨率是通过片上24位频率增量寄存器来控制的。频率增量寄存器的地址为85h、86h、87h。起始频率和频率分量寄存器的代码的计算方法为要求的起始频率值或者频率增量值除以四分之一的系统时钟再乘以227。系统时钟可以通过控制寄存器来设置是选择外部时钟还是内部时钟,AD5933的内部时钟为16MHz。还可以在寄存器88h和89h中设置频率点个数。例如,如果用户想测量150个频率点,则用户给88h和89h中分别存入00H和96H。当这三个参数都设置好之后,可以通过给控制寄存器写入起始频率扫描命令来实现扫描初始化。当完成每个频率点的扫描后状态寄存器的第二位将自动置位,可以通过查询这位来判断是否测量完成,用户可以自行控制实现跳到下一个频率点。测量结果的实部保存在94h和95h中,虚部保存在96h和97h中,这个结果应该在跳到下一个频率点之前读出。如果想要多次测量同一个频率点的值,以使得测量结果更加精确,只需在一次测量完成之后在控制寄存器中写入重复当前频率命令字即可。当所有的频率点都扫描完时,状态寄存器的第三位将被自动置位。一旦这位被置位后,将不能进一步实现频率扫描。
频率扫描的具体过程包括三部分:
(1) 进入标准模式,在写入开始频率扫描控制字到控制寄存器之前,首先要写入
标准模式控制字到控制寄存器,在这个模式中VOUT和VIN引脚被内部接到地,因此在外部电阻或者电阻和地之间没有直流偏置。
(2) 进入初始化模式。在写入开始频率控制字到控制寄存器后将进入初始化模式。
在这个模式下,电阻已经被起始频率信号激励,但没有进行测量。用户可以通过程序设置在写入频率扫描命令到控制寄存器来启动进入频率扫描模式之前的时间。
(3) 进入频率扫描模式。用户通过写入频率扫描控制字。在这个模式中,ADC在
设定时间周期过去之后开始测量。用户可以通过在每个频率点测量之前设置寄存器8Ah和8Bh的值来控制输出频率信号的周期数。
片上DDS输出的信号通过一个可编程增益放大器,通过控制增益可以实现四个不同范
围的峰峰值输出。这个输出范围的控制是在控制寄存器的第9和第10位实现的。
在接收过程中,从电阻上得到的信号首先进入电流电压转换放大器,后面紧跟的是一个可编程增益放大器,这个放大器的增益有5和1两个值,可以通过设置控制寄存器的第8位来选择。经过可编程增益放大器之后的信号被ADC采样,采样得到的数据送DSP进行傅立叶变换。每个频率采样1024个点进行傅立叶变换,变换的结果存储在两个16位的寄存器中代表变换后的实部和虚部,每个16位的寄存器分别为两个8位的寄存器组成,这个将在下面的寄存器介绍中专门给出。
AD5933的系统时钟可以通过两个途径给出。用户可以在外部时钟引脚MCLK接入一个高精度稳定的时钟。另外也可以使用AD5933内部16.776MHz的时钟。具体选择哪个时钟可以通过设置控制寄存器的第3位来实现。系统上电默认为选择内部时钟。
2.2 内部寄存器定义及设置
AD5933片上有9个寄存器。这些寄存器分别实现不同的参数设置功能,表2中给出了它们的名称、地址和读写特性。
表2 内部寄存器
寄存器名称 |
地址 |
寄存器数据 |
读/写 |
控制寄存器 |
80h 81h |
D15到D8 D7到D0 |
读/写 读/写 |
起始频率寄存器 |
82h 83h 84h |
D23到D16 D15到D8 D7到D0 |
读/写 读/写 读/写 |
频率增量寄存器 |
85h 86h 87h |
D23到D16 D15到D8 D7到D0 |
读/写 读/写 读/写 |
频率点数寄存器 |
88h 89h |
D15到D8 D7到D0 |
读/写 读/写 |
输出设定周期数寄存器 |
8Ah 8Bh |
D15到D8 D7到D0 |
读/写 读/写 |
状态寄存器 |
8Fh |
D7到D0 |
只读 |
温度数据寄存器 |
92h 93h |
D15到D8 D7到D0 |
只读 只读 |
实部数据寄存器 |
94h 95h |
D15到D8 D7到D0 |
只读 只读 |
虚部数据寄存器 |
96h 97h |
D15到D8 D7到D0 |
只读 只读 |
其中大部分寄存器已经在上面提到过了。首先主要介绍一下控制寄存器。控制寄存器主要实现AD5933各参数的设置以及工作状态的设定。表3给出了控制寄存器各个位的功能定义。控制寄存器由两个8位的寄存器组成,地址分别为80h和81h,在使用时,用户可以只改变其中一个寄存器的值,而另外一个寄存器的值不变。当给控制寄存器写入复位命令时不会使得已经编程好的和频率扫描有关的设置复位,和频率扫描有关的值为起始频率,频率增量和频率点数。在复位命令之后,必须写入开始频率命令到控制寄存器来重新开始频率扫描过程。上电之后控制寄存器的缺省值为A000H。
表3 AD5933内部寄存器位定义
位 |
D15 |
D14 |
D13 |
D12 |
|
|
0 |
0 |
0 |
0 |
没有意义 |
|
0 |
0 |
0 |
1 |
用起始频率进行初始化 |
|
0 |
0 |
1 |
0 |
开始频率扫描 |
|
0 |
0 |
1 |
1 |
跳到下一个频率点 |
|
0 |
1 |
0 |
0 |
重复当前频率 |
|
1 |
0 |
0 |
0 |
没有意义 |
|
1 |
0 |
0 |
1 |
温度测量 |
|
1 |
0 |
1 |
0 |
掉电模式 |
|
1 |
0 |
11 |
1 |
标准模式 |
|
1 |
1 |
0 |
0 |
没有意义 |
|
1 |
1 |
0 |
1 |
没有意义 |
D11 |
|
|
|
|
不做设置 |
|
|
D10 |
D9 |
|
输出电压范围 |
|
|
0 |
0 |
|
范围1(峰峰值2V) |
|
|
0 |
1 |
|
范围4(峰峰值200mV) |
|
|
1 |
0 |
|
范围3(峰峰值400mV) |
|
|
1 |
1 |
|
范围2(峰峰值1V) |
D8 |
|
|
|
|
可编程增益放大器增益控制,0=×5,1=×1 |
D7 |
|
|
|
|
置零 |
D6 |
|
|
|
|
置零 |
D5 |
|
|
|
|
置零 |
D4 |
|
|
|
|
复位 |
D3 |
|
1 0 |
|
|
为1时选择外部时钟 为0时选择内部时钟 |
D2 |
|
0 |
|
|
必须为0 |
D1 |
|
|
|
|
置零 |
D0 |
|
|
|
|
置零 |
除了控制寄存器外,需要注意的还有状态寄存器,状态寄存器的地址是8Fh。状态寄存器来标志测量的结束。D7到D0各位分别表示AD5933的不同功能状态,其中D0、D4、D7没有实际意义,不表示任何测量状态。D1表示一个频率点的阻抗测量,当完成当前频率点的阻抗测量时,这位被置1,同时表明实部和虚部数据寄存器中已经存入测量结果。在接到开始,跳到下个频率点,重复当前频率或复位等命令时该位被自动复位,在上电时这位也被复位。D2表示频率扫描完成,当所有的频率点都测量结束时该位被置1,当接受到复位命令或上电时这位被复位。
2.3 AD5933与控制系统的数据传输
AD5933与控制系统的通讯是用 实现的,作为 设备使用,遵守 通讯的时序。它有一个七位的设备地址0001101。当控制系统写入到AD5933时没有什么特别说明的,当从AD5933读数据时,首先要写入B0h到AD5933,然后写入要读出数据的寄存器地址,读出寄存器的值。
2.4 温度测量实现
AD5933片上的温度传感器是一个13位的数字温度传感器,第14位是一个标志位。温度传感器可以精确测量周围器件的温度。温度传感器的测量范围是-40℃到+125℃,当温度达到+150℃时,当工作在电压和温度的最大规格时,结构完整性将受到破坏。测量温度的精度为±2℃。
温度测量过程的转换时钟由内部产生,只有从串口读取或写入数据才需要外部时钟。一般模式下,内部时钟自动完成转换过程。默认情况下温度传感器处于掉电状态,要启动温度测量需要在控制寄存器中写入温度测量控制字,在测量完成后温度传感器自动关闭,直到下次接受到命令再启动。用户可以通过读取状态寄存器的值来检查温度测量是否结束,温度测量的结果保存在92h和93h中。其中有14位是有用数据,最高两位没有意义。DB13是一个标志位。表4中给出了部分测量数据与实际温度的对应关系。对于具体的温度测量数据可以通过公式得到,如果测量温度为正,则等于所得数据的十进制表示值除以32。如果测量温度值为负,且把DB13的值也计算在内,则等于测得数据的十进制值减去16384后再除以32,若不把DB13的值计算在内,则等于测量数据的十进制值减去8192后再除以32。
3 阻抗测量过程实现
3.1 AD5933测量阻抗模值计算
上面已经提到在频率扫描过程中,各个频率点上都可以得到实部值R和虚部值I两个值,通过它们可以计算傅立叶变换之后的模值,模值= 。计算之前先把实部和虚部值用十进制表示。但这只是傅立叶变换后的结果,要想得到阻抗的实际值必须乘以一个校准系数,这里称这个系数为增益系数。
下面给出一个计算增益系数的例子。当输出电压范围为2V,标定电阻为200kΩ,可编程放大器设置为1,电流电压转换放大器增益电阻为200 kΩ,激励频率为30kHz,在这个频率点上得到的实部和虚部值分别为F064、227E,转换为十进制分别为-3996、8830,则傅立叶变换后的模值= ,则增益系数为标定电阻的倒数除以计算得到的模值,即(1/200kΩ)/9692.106=515.819E-12。
下面再给出一个已知增益系数、被测电阻的实部和虚部值计算被测电阻阻值的例子。假设被测电阻为510kΩ,激励频率为30kHz,测量得到的实部和虚部值分别为-1473和3507,则计算得到的模值为3802.863。电阻值=1/(增益系数×模值)=1/(515.819E-12×3802.863) =509.791kΩ。
对于不同的测量频率点增益系数是不同的,所以在不同的频率点上要分别计算增益系数。
在测量过程中可以通过限制电阻的测量范围来优化测量性能。表4给出6个不同的阻抗范围作为参考,它们所选择的输出电压范围均为2V,可编程增益放大器设置为1。
表4 测量阻抗范围设定
测量电阻范围 |
电流电压转换放大器增益电阻 |
标定电阻 |
0.1kΩ到1kΩ |
100Ω |
100Ω |
1kΩ到10kΩ |
1kΩ |
1kΩ |
10kΩ到100kΩ |
10kΩ |
10kΩ |
100kΩ到1MΩ |
100kΩ |
100kΩ |
1MΩ到2MΩ |
100kΩ |
100kΩ |
9MΩ到10MΩ |
9MΩ |
9MΩ |
3.2 相角计算及校准
在阻抗测量过程中不仅仅要关注电阻的模值,还要知道相角的大小,相角值= 。和模值一样相角也要进行校准。首先对标定电阻进行测量,得到标定电阻的相角,测量电阻的实际相角等于测量计算得到的值减去标定电阻的相角值。值得注意的是测量时通过 得到的相角是在-90º到+90º之间的,所以要根据R和I所决定的象限来把相角变换到所在象限内。如果R<0,I>0则说明在第二象限,所以计算时要把相角加上180º;如果R<0,I<0则是在第三象限,计算时要把相角减去180 º。
4 单片机控制的阻抗测量系统
本文设计了一个用单片机控制AD5933实现阻抗测量的系统。单片机选择的ADI公司的ADμC848。单片机和AD5933通过 串口实现通讯,单片机控制对AD5933的工作模式设置,控制测量过程,读取测量结果,并通过串口传输到PC机。
4.1 硬件电路
系统采用电池供电,又MAX603实现把四节1.5V电池串联后的电压变到5V。在AD5933
的RFB和VIN之间接入电流电压转换电阻,这个电阻的值是可以按照上面提到的设置测量电阻的范围的方法来设定的。在VIN和VOUT之间接入的是被测电阻,测量之前先大致估计一下测量电阻的范围,然后来选择相应电流电压转换电阻的大小。在测量被测电阻之前,首先要用已知阻值的电阻进行标定,得到模值和相角的基准。单片机把从AD5933读到的阻抗测量结果的实部和虚部通过串口传到上位机,又上位机根据上面提到的公式,计算得到阻抗值。图2中给出了电路连接的原理图。
图2 系统硬件电路图
4.2 系统软件设计
图3中给出了系统测量的软件流程图。这是完成单个阻抗测量的过程。测量后得到的
实部和虚部结果都是十六进制表示。用单片机传输到上位机后进行后续的处理。每个频率点上都要首先对标定电阻进行测量和计算,然后再以此为标准计算被测电阻。
写入频率扫描参数到相应寄存器 (1) 起始频率寄存器 (2) 扫描频率点数 (3) 频率增量 |
设置AD5933进入标准模式 |
写入开始频率命令到控制寄存器初始化系统 |
在足够的建立时间之后开始频率扫描 |
从实部和虚部寄存器中读取数据 |
测量结束 |
写入跳到下个频率或者重复当前频率命令到控制寄存器 |
N |
Y |
程序入口 |
DFT是否完成? |
频率扫描 完成? |
N |
Y |
图3 系统软件流程
5 小结
本文介绍了阻抗测量芯片AD5933,它是一款可以实现精确测量的高集成度的芯片,大大简化了测量系统的电路和数据处理过程。本文对其性能、参数设置和具体测量实现进行了较为详细的介绍,并设计实现了单片机系统对其控制。为阻抗测量提供了一个比较方便、使用的解决方案。
参考文献:
[1] 李刚,林凌,粟田禾. 易学易用高性能SoC单片机ADμC848[M]. 西安:西安电子科技大学出版社,2006.
[2] 董艳阳. 自动阻抗测量仪工作原理及阻抗测量方法[J]. 现代电子技术, 2002. 5: 24-26.
[3] 刘立新,赫建国. 基于DDS芯片AD9854的信号发生器设计[J]. 西安邮电学院学报,2004. 9(3):64-68.
[4] http://www.analog.com/UploadedFiles/Data_Sheets/AD5933.pdf
[5] http://www.analog.com/UploadedFiles/Data_Sheets/30849145182541ADuC845_7_8
_a.pdf