0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32和AD5791的转换

jf_26147162 来源:jf_26147162 作者:jf_26147162 2023-02-15 17:44 次阅读

现在很多智能测量仪表要求具有超高精度的电压信号,同时要求高稳定性、高线形度和低噪声、低温度漂移。这样的模拟系统设计面临复杂的工程技术挑战,常规的方法是采用多个较低分辨率的DAC和大量分立元件与支持IC整合在一起,同时伴随着相当大的开发风险和高代价的修改时间,才能优化电路参数、减小误差和设计出复杂的自动校准电路,这样不仅增加了硬件设计的复杂性,通常达到的精度也不是很高。本系统设计的基于STM32微处理器AD5791的20位超高精度测量系统中,实现了单路超高精度可调电压信号的输出,输出电压信号的幅值可以通过软件来设置。该系统可靠性高,不需要校准电路。

STM32F2, STM32F4, STM32F7, STM32H7,STM32L0, STM32L1,ST,STM32F0,STM32F1,STM3,STM32F407IG,STM32F103ZET6单片机解密


AD5791是美国ADI公司推出的一款高性能的单路20位电压输出数模转换器, 它是业界首款具有真正1 ppm(百万分之一)分辨率和精度的DAC器件 [1-2] 。双极工作电压高达33 V。同时AD5791具有1 ppm的分辨率和精度、低噪声(l ppm以下)、快速刷新率(1 us)和非常低的输出漂移(在l ppm以下)。该器件采用了多功能三线串行接口,并与SPI、QSPI TM 、microWIRE TM 和DSP接口标准兼容。该器件集成了一个上电复位电路,以确保DAC输出能达到0V,并保持在已知输出阻抗状态,直到有效写入为止。该器件还提供了一个输出钳位功能,这使得其输出在一个限定的负载状态。综上知,采用该款芯片,减少了复杂校准算法的必要性,能极大地简化设计任务、减少开发和维护成本,同时降低风险。国内相关学者在精密电压源和医疗仪器中也得到了应用 [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到0 V,本测试系统中使用了-5 V的参考电压。AD5791的工作电压为3.3 V。+5 V参考电压由参考电压产生芯片REF02AZ产生,负电压是通过由OP177构成的单位增益反向放大器来实现。

pYYBAGPsqWqAEONaAAA7dHap6GQ968.jpg

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引脚上,只要做相应配置就可以。其中,AD8675构成电压跟随器,作为AD5791的输出缓冲。硬件电路上模拟地和数字地分开,并在一点接地,同时各个

电源

都加有滤波电容,以消除干扰。

2 软件设计

系统采用模拟SPI总线

通信

,软件的关键是STM32处理器和 AD5791之间的时序匹配,输出电压值到AD5791的DAC寄存器的值的计算,下面分别进行详细介绍。

2.1 AD5791芯片配置

AD5791的配置,主要在于AD5791的控制寄存器的配置。为了使得AD5791和STM32处理器匹配使用,需要做如下配置,具体控制寄存器相关介绍和操作参见手册。DBn(n=1…9)代表控制寄存器的第n位。

DB1 RBUF=1 内部运算放大器关闭

DB2 OPGND=0 将DAC输出下拉到地的功能切换掉,使得DAC处于正常模式

DB3 DACTRI=0 使DAC处于正常操作模式

DB4 BIN/2sC=1 使用直接二进制编码,不使用二进制补码编码的形式

DB5 SDODIS=0 SDO数据输出使能

DB6-DB9 LIN_COMP=0 参考电压输入范围选择为10 V

按照上述的配置,将相应配置字写入到AD5791的控制寄存器内部,AD5791就可以正常工作了。此处值得注意的是DB4位,一定要选择好相应的编码形式,否则输出电压会和计算值不符合。

2.2 ST M 32接口配置

STM32处理器的SPI 发送和接收都采用的是I/O口模拟的方式,因此I/O的初始化比较简单,除了DAC1_SDO网络标号的引脚设置为输入模式外,其他通讯用的引脚都设置为输出模式。

poYBAGPsqWyAIAQ5AAFYZ5aVSoU039.jpg?x51947

2.3 数模转换输出

数模转换输出,主要涉及3个子程序,芯片上电初始化子程序,芯片控制寄存器初始化子程序和电压输出子程序3个部分。下面给出AD5791读写函数和测试的例子。

u32 AD5791_Read(void)//读取的24bit的数据

{

unsigned int i,j;

u32 data,c;

data=0;

AD5791_sync_0();

AD5791_sclk_0();

for(i=0;i<24;i++)

{

j=3;

data=data<<1;

AD5791_sclk_1();

while(j--);

c=GET_AD5791_SO();

AD5791_sclk_0();

data=data|c;

}

AD5791_sclk_0();

AD5791_sync_1();

return(data);

}

void AD5791_Write(unsigned long OutData) //写一

个24 bit的数值

{

unsigned char i;

unsigned long value;

value = OutData & 0x00ffffff; //取低24bit

value = value<<8; //左移8位,ok

AD5791_ldac_1();

AD5791_sclk_1();

AD5791_sync_1();

AD5791_sync_0();

for ( i = 0; i < 24; i ++ )

{

AD5791_sclk_1();

ad5791delay();

if((value & 0x80000000) == 0x80000000)

{

AD5791_sdin_1();

}

else

{

AD5791_

sdin_0();

}

ad5791delay();

AD5791_sclk_0();

ad5791delay();

value = value << 1;

}

AD5791_sync_1();

ad5791delay();

AD5791_ldac_0();

ad5791delay();

AD5791_ldac_1();

ad5791delay();

}

/*入口参数:outvalue 输出的电

压的值*/

void test_ad5791(double outvalue)

{

double temp=0.0;

long temp1=0;

Ad5791_gpio_init(); //AD5791 I/O口初始化

Ad5791_clr_init();//AD5791 清零

Reset_ad5791(); //AD5791 复位

Write_ad5791_control_register();//写AD5791的控

制寄存器

temp=((outvalue+5.0)*1048575.0)/10.0;//计

算DAC输出值

temp1=(long)temp | 0x00100000;

Write_ad5791_dac_register(temp1);//写AD5791的

dac寄存器,同时输出相应电压

}

程序中对AD5791芯片进行相应初始化以及写AD5791的相应寄存器都采用I/O模拟相应时序的方法。其中写模式的时序如图3所示。写数据时,注意先写高位,再写低位,必须严格按照时序来写入。

本系统成功实现了基于STM32处理器和AD5791的20位高精度电压输出系统,给出了全新实用的硬件和软件设计,适用于对输出高精度模拟电压有需要的智能仪表场合中。该系统精度高,漂移低,可靠性高,可以应用于医疗仪器、测试测量仪表、工业控制以及高端科学和航空航天仪器中,具有很好的应用前景。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18288

    浏览量

    222176
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348809
  • AD5791
    +关注

    关注

    0

    文章

    8

    浏览量

    12550
收藏 人收藏

    评论

    相关推荐

    ad5791一直没有输出

    我对ad5791的控制寄存器和写入寄存器进行配置了,之后用eval-5791进行测试,在供电的时候Vdd是15v,Vss是-15v,数字电压是5v,时序用逻辑分析仪看了也没啥问题,现在就是不知道问题出在了哪
    发表于 04-23 15:57

    EVAL AD5791 输出问题

    利用FPGA后接AD5791,设定的参考电压值为0~10V,但是AD5791上电后就有1.3V的输出,且保持不变,FPGA代码波形图如下。请问是什么地方有错误需要修改。寄存器我只写了控制寄存器和数据寄存器。
    发表于 12-10 15:26

    STM 32和AD 5791转换

    微处理器和AD5791的20位超高精度测量系统中,实现了单路超高精度可调电压信号的输出,输出电压信号的幅值可以通过软件来设置。该系统可靠性高,不需要校准电路。STM32F2, STM32
    发表于 03-15 11:26

    ad5791没有输出?

    请问大家,我用zynq和verilog驱动ad5791,硬件上没有问题,但是Vout一直没有输出,这可能是因为什么问题呢? 附上我的时序图,谢谢各位大佬!
    发表于 09-14 22:38

    AD5791工作时发热的问题怎么解决?

    关于AD5791工作时发热的问题 我在130mmX170mm的PCB板上用了8片AD5791,工作都很正常,但是连续工作1个小时左右的时间,PCB板的温度达到了50度左右,这种现象是否属于正常状态。是否需要安装散热装置?
    发表于 12-15 08:08

    如何判断AD5791是否损坏?

    使用AD5791将单片机计算的数字信号转模拟,模拟信号输出电平范围为0-10V,之前测到的输出精度能够到0.1mv(受测量仪器精度所限),现在输出的精度只能到几个mv,而且输出的模拟信号电平比之前大了2V,请问这有可能是AD5791坏掉了吗?应该如何确定是否损坏呢?
    发表于 12-18 06:22

    AD5791,pdf,datasheet,1PPM DAC

    The AD5791 is a single 20-bit, unbuffered voltage-output DAC that operates from a bipolar supply
    发表于 03-16 19:24 33次下载

    AD5791应用电路

    AD5791应用电路 Figure 14 shows a typical
    发表于 03-17 00:04 1216次阅读
    <b class='flag-5'>AD5791</b>应用电路

    AD5791数据转换器的优势及应用

    AD5791代表着一种突破性的数据转换器技术,可为精密电子设备的系统架构师和设计师提供无与伦比的优势。该器件具有名符其实的1ppm分辨率和精度。
    的头像 发表于 07-17 06:02 3266次阅读

    AD5791参考代码

    AD5791参考代码
    发表于 03-18 08:24 26次下载
    <b class='flag-5'>AD5791</b>参考代码

    AD5791 ACE遥控器-线性分析示例

    AD5791 ACE遥控器-线性分析示例
    发表于 03-23 07:33 10次下载
    <b class='flag-5'>AD5791</b> ACE遥控器-线性分析示例

    AD5781/AD5791快速发射指南

    AD5781/AD5791快速发射指南
    发表于 05-14 17:45 17次下载
    AD5781/<b class='flag-5'>AD5791</b>快速发射指南

    EVAD5791 AD5791 评估板

    用户轻松评估 AD5791 电压输出 20 位数模转换器 (DAC) 的所有功能而设计。可以在板载连接器处操作 AD5791 的引脚,以进行外部连接。可以通过两种方式来控制该评估板:通过板载连接器 (J
    发表于 06-03 09:08 4次下载
    EVAD<b class='flag-5'>5791</b> <b class='flag-5'>AD5791</b> 评估板

    AD5791 IBIS型号

    AD5791 IBIS型号
    发表于 06-06 18:46 2次下载
    <b class='flag-5'>AD5791</b> IBIS型号

    AD5791评估软件

    AD5791评估软件
    发表于 06-07 14:16 8次下载
    <b class='flag-5'>AD5791</b>评估软件