基于STM32和AD5791的高精度数模转换电路设计
2020-07-24崔海朋
摘要:现在很多智能仪表中,要求有超高精度的电压信号输出,而且要求刷新率高、噪声低,常规的处理电路比较复杂,难以实现自动校准。为了解决该问题,采用了20位的高精度数模转换器( DAC) AD5791,并应用于基于STM32的测量仪表中。本文详细介绍了软硬件设计。此系统实现了超高精度的单路可调电压输出,精度高和噪声低。
关键词:数模转换器;STM32;AD5791
0 引言
现在很多智能测量仪表要求具有超高精度的电压信号,同时要求高稳定性、高线形度和低噪声、低温度漂移。这样的模拟系统设计面临复杂的工程技术挑战,常规的方法是采用多个较低分辨率的DAC和大量分立元件与支持IC整合在一起,同时伴随着相当大的开发风险和高代价的修改时间,才能优化电路参数、减小误差和设计出复杂的自动校准电路,这样不仅增加了硬件设计的复杂性,通常达到的精度也不是很高。本系统设计的基于STM32微处理器和AD5791的20位超高精度测量系统中,实现了单路超高精度可调电压信号的输出,输出电压信号的幅值可以通过软件来设置。该系统可靠性高,不需要校准电路。
AD5791是美国ADI公司推出的一款高性能的单路20位电压输出数模转换器,它是业界首款具有真正1 ppm(百万分之一)分辨率和精度的DAC器件[1-2]。双极工作电压高达33 V。同时AD5791具有1 ppm的分辨率和精度、低噪声1 ppm以下)、快速刷新率(1 us)和非常低的输出漂移(在1 ppm以下)。该器件采用了多功能三线串行接口,并与SPI、QSPITM、MICROWIRE TM 和DSP接口标准兼容。该器件集成了一个上电复位电路,以确保DAC输出能达到OV,并保持在已知输出阻抗状态,直到有效写入为止。该器件还提供了一个输出钳位功能,这使得其输出在一个限定的负载状态。综上知,采用该款芯片,减少了复杂校准算法的必要性,能极大地简化设计任务、减少开发和维护成本,同时降低风险。国内相关学者在精密电压源和医疗仪器中也得到了应用[3-4]。
本系统的Cortex- M3处理器为意法半导体公司推出的32位RISC处理器STM32F103VCT6,主频最高可达72 MHz,应用也比较广泛[5]。该处理器具有256KB的程序存储器,48 KB的RAM,同时它有8个定时器、5路串口、3路SPI、2路I2C,具有独立看门狗和窗口看门狗,非常适合于与AD5791构成高精度的测量系统。
1 硬件电路设计
数模转换电路中采用了1片参考电压基准产生芯片REF02AZ、1片超高精度双路轨至轨输出运算放大器AD8676、1片高精度单路轨至轨输出运算放大器AD8675和20位超高精度数模转换芯片AD5791构成。该电路性能稳定,运行效果非常好。下面对电路进行详细分析。
AD5791中,VDD为+15 V,VSS为-15 V。VREFPS和VREFPF用以提供AD5791的正参考电压输入,输入范围5V到VDD-2.5 V,本测试系统中使用了+5 V的参考电压。VREFNS和VREFNF用以提供AD5791的负参考电压输入,输入范围VSS+2.5到OV,本测试系统中使用了-5 V的参考电压。AD5791的工作电压为3.3 V。+5 V参考电压由参考电压产生芯片REF02AZ产生,负电压是通过由OP177构成的单位增益反向放大器来实现。±SV电压产生电路如图1所示。
AD5791有7个用于与STM32处理器进行通讯的引脚,下面逐一作详细介绍:
RESET/:复位引脚,可以实现AD5791的复位;
CLR/:清零引脚,可以将AD5791内部DAC寄存器的值恢复到用户定义的值,并更新DAC的输出;
LDAC/:用于更新AD5791内部DAC寄存器的值,并更新DAC的输出;
SDO:串行数据输出引脚;
SDIN:串行数据输入引脚;
SCLK:串行通讯时钟信号输入引脚,最高频率可高达35 MHz;
SYNC/:串行輸入数据的帧同步信号;
由于STM32处理器采用了I/O口模拟SPI通讯的方式,所以通讯控制引脚可以连接到空余的STM32处理器的任何一个I/O引脚上,只要做相应配置就可以。AD5791的应用电路图如图2所示。其中,AD8675构成电压跟随器,作为AD5791的输出缓冲。硬件电路上模拟地和数字地分开,并在一点接地,同时各个电源都加有滤波电容,以消除干扰。
2 软件设计
系统采用模拟SPI总线通信,软件的关键是STM32处理器和AD5791之间的时序匹配,输出电压值到AD5791的DAC寄存器的值的计算,下面分别进行详细介绍。
2.1 AD 5791芯片配置
AD5791的配置,主要在于AD5791的控制寄存器的配置。为了使得AD5791和STM32处理器匹配使用,需要做如下配置,具体控制寄存器相关介绍和操作参见手册。DBn( n=l¨-9)代表控制寄存器的第n位。
DBl RBUF=1 内部运算放大器关闭
DB2 0PGND=O将DAC输出下拉到地的功能切换掉,使得DAC处于正常模式
DB3 DACIRI=O使DAC处于正常操作模式
DB4 BrN/2sC=I使用直接二进制编码,不使用二进制补码编码的形式
DB5 SDODIS=O SDO数据输出使能
DB6-DB9 LrN—COMP=O参考电压输入范围选择为10 V
按照上述的配置,将相应配置字写入到AD5791的控制寄存器内部,AD5791就可以正常工作了。此处值得注意的是DB4位,一定要选择好相应的编码形式,否则输出电压会和计算值不符合。
2.2 STM 32接口配置
STM32处理器的SPI发送和接收都采用的是I/O口模拟的方式,因此I/O的初始化比较简单,除了DACISDO网络标号的引脚设置为输入模式外,其他通讯用的引脚都设置为输出模式。
2.3 数模转换输出
数模转换输出,主要涉及3个子程序,芯片上电初始化子程序,芯片控制寄存器初始化子程序和电压输出子程序3个部分。下面给出AD5791读写函数和测试的例子。
u32 AD579I_Read(void)//读取的24bit的数据
{
unsigned int ij;
u32 data.c;
data=0;
AD579l_sync_0();
AD579l_sclk_0();
for(i=O;i<24;i++)
{
j=3;
data=data《l;
AD579l_sclk_l();
while(j--);
c=GET—AD579I_SO();
AD579l_sclk_0();
data=datalc;
)
AD579l_sclk_0();
AD579l_sync_l();
retum(data);
void AD579I_Write(unsigned long OutData) //写-个24 bit的]数值
unsigned char i;
unsigned long value;
value = OutData & OxOOffffff;
/ /取低24bit
value = value《8;
//左移8位,ok
AD579l_ldac_l();
AD579l_sclk_l();
AD579l_sync_l();
AD579l_sync_0();
for (i= 0; i< 24; i++ )
AD579l_sclk_l();
ad579ldelay();
if《value & Ox80000000) == Ox80000000)
{
AD5791 sdin_l();else
AD5791sdin_0();
ad579ldelay();
AD5791 .sclk_0();
ad579ldelay();
value = value《 l;
AD579l_sync_l();
ad579ldelay();
AD579l_ldac_0();
ad579ldelay();
AD579l_ldac_l();
ad579ldelay();
/‘入口参数:
outvalue输出的电压的值*/
void test ad579l(double outvalue)
double temp=0.0;
long templ=0;
Ad579l_gpio_init(); //AD5791 110口初始化
Ad5791一clr_init();//AD5791清零
Reset_ ad5791(); //AD5791复位
Write—ad5791一control_register();//5AD5791的控制寄存器
temp=((outvalue+5.0) *1048575.0)/10.0;//计算DAC输出值
templ=(long)temp l Ox00100000;
Write—ad5791一dac_register(templ);//寫AD5791的dac寄存器,同时输出相应电压
)
程序中对AD5791芯片进行相应初始化以及写AD5791的相应寄存器都采用I/O模拟相应时序的方法。其中写模式的时序如图3所示。写数据时,注意先写高位,再写低位,必须严格按照时序来写入。
3 结束语
本系统成功实现了基于STM32处理器和AD5791的20位高精度电压输出系统,给出了全新实用的硬件和软件设计,适用于对输出高精度模拟电压有需要的智能仪表场合中。该系统精度高,漂移低,可靠性高,可以应用于医疗仪器、测试测量仪表、工业控制以及高端科学和航空航天仪器中,具有很好的应用前景。
参考文献:
[1]AD5791 Datasheet Rev.E[EB]. Analog Devices, Inc,2018.
[2]AD5791:20位电压输出数模转换解决方案[J]世界电子元器件,2011(2):15-16.
[3]薛巨峰,李壮,鲁志军,基于20位DAC-AD5791的高精度电压源的设计[J].电子技术,201 5,44(09):59-62.
[4]Jan-Hein Broeders.采用ADI 20位DAC设计医疗成像系统[J].电子设计技术2011(7):58,
[5]王永虹,徐炜,郝立平.STM32系列ARMCortex-M3微控制器原理及实践[M].北京:北京航空航天大学出版社,2008.
作者简介:
崔海朋(1982-),男(汉),山东人,硕士,主要从事嵌入式系统研究、工业自动化系统设计。