24位ADC芯片AD7190讲解和代码编写(基于STM32模板的硬件软件SPI)

1.芯片介绍

AD7190是一款适合高精密测量应用的低噪声完整模拟前端。它集成一个低噪声、24位Σ-Δ型模数转换器(ADC)。片内低噪声增益级意味着可直接输入小信号。下面是他的芯片框架介绍。

在这里插入图片描述
AD7190具有4路输入,可以设置为2组差分输入或者4组假差分输入。AD7190按顺序在各使能通道上执行转换,这可以简化与器件的通信。AD7190提供两种数字滤波器选项。滤波器的选择会影响以编程输出数据速率工作时的均方根噪声和无噪声分辨率、建立时间以及50 Hz/60 Hz抑制。针对要求所有转换均需建立的应用,AD7190具有零延迟特性。

2.硬件设计

AD7190的电路图设计如下。根据官方的应用可以知道外围只要简单的元器件。
在这里插入图片描述

3.程序设计

AD7190是通过片内的寄存器进行控制。

首先是通信寄存器。无论是写寄存器还是读寄存器,必须都是操作通信寄存器作为起始。其中CR4到CR2作为下一次操作的寄存器地址,由下表我们也可以看出AD7190的寄存器数量。
在这里插入图片描述
在这里插入图片描述
第二个寄存器为状态寄存器,顾名思义就是读取ADC的状态。
在这里插入图片描述
第三个寄存器位模式寄存器,他是24位寄存器,配置AD7190的ADC参数,分别有工作模式,时钟来源,斩波选择和使能,数据输出频率选择等等。
在这里插入图片描述
第四位是配置寄存器,也是一个24位的寄存器,配置AD7190的斩波选择和使能,基准电压,采集通道选择和放大倍数。
在这里插入图片描述第五位是数据寄存器,ADC转换完成后数据都是存放在这里。
在这里插入图片描述
接下来的ID寄存器和其他寄存器就比较简单了。

在这里插入图片描述
在这里插入图片描述
AD7190的使用方法可以按下面的步骤。首先是连续写40个脉冲进行复位,其次就是进行模式寄存器和配置寄存器的写入。最后在读取数据寄存器进行换算就可以。
AD7190是采用SPI通许,所以有硬件SPI和软件SPI。具体采用哪一种看个人的需求。

AD719通信层

INT8U AD7190_Wirte8=0X00;  //8位写
INT8U AD7190_Read8=0X00;  //8位读
INT32U AD7190_Wirte32=0X000000;  //32位写
INT32U AD7190_Read32=0X000000;  //32位读

//AD7190写1字节,高位先写
void AD7190_WriteByte(u8 data)
{
//  //硬件SPI
//	SPI2_send_byte(data);
    //软件SPI 
	AD7190_write_byte(data);
}

//AD7190读1字节
u8 AD7190_ReadByte(void)
{
u8 data;
//	//硬件SPI
//  data=SPI2_read_byte();
  //软件SPI
  data = AD7190_read_byte();
  return data;
}
//AD7190写3字节,高位先写
void AD7190_Write3Byte(u32 data)
{
	AD7190_WriteByte((data >> 16) & 0xFF);
	AD7190_WriteByte((data >> 8) & 0xFF);
	AD7190_WriteByte(data);	
}
//AD7190读3字节,高位先读
u32 AD7190_Read3Byte(void)
{
	u32 data;
	data = AD7190_ReadByte();
	data <<= 8;
	data += AD7190_ReadByte();
	data <<= 8;
	data += AD7190_ReadByte();	
	return data;
}

通信比较简单,就是读写的函数。接下来是初始化,首先是软件复位。

	  //软件复位AD7190
	  AD7190_Wirte8=0xff;
	  for(i=0;i<5;i++)
		{
		  AD7190_WriteByte(AD7190_Wirte8);
		  delay_us(5);
		}
	  //AD7190复位后必须等待500us
	  delay_ms(100);

复位后就是操作寄存器配置AD7190的参数,记得每一次写寄存器都要先发一个字节说明接下来是写还是读寄存器。

	  //打印ID
		AD7190_Wirte8=0x60;
		AD7190_WriteByte(AD7190_Wirte8);
		AD7190_Read8=AD7190_ReadByte();
        printf("AD7190_ID=%x\r\n",AD7190_Read8);
		
	  //写模式寄存器
      AD7190_Wirte8=0x08;
	  AD7190_Wirte32=0X080C05;
      //0000 1000  连续转换模式,时钟选择内部4.92MHZ
      //0000 1000  SINC4滤波器,0延迟,60Hz滤波
	  //0000 0101  240HZ输出频率
      AD7190_WriteByte(AD7190_Wirte8);
	  AD7190_Write3Byte(AD7190_Wirte32);
    
	  //读模式寄存器
	  AD7190_Wirte8=0x48;
	  AD7190_WriteByte(AD7190_Wirte8);
	  AD7190_Read32=AD7190_Read3Byte();
	  printf("mode_reg=%.6x\r\n",AD7190_Read32);


    //写配置寄存器
    AD7190_Wirte8=0x10;
	AD7190_Wirte32=0X800118;		
	//1000 0000  斩波使能,REF1电压基准
    //0000 0001  使能通道AIN1和AIN2
	//0001 1000  禁止激励电流,关闭基准电压检测,开启输入缓冲,单极性,放大倍数1
    AD7190_WriteByte(AD7190_Wirte8);
	AD7190_Write3Byte(AD7190_Wirte32);		


    //读取配置寄存器的数值
	AD7190_Wirte8=0x50;
	AD7190_WriteByte(AD7190_Wirte8);
	AD7190_Read32=AD7190_Read3Byte();
	printf("AD7190_con_reg=%.6x\r\n",AD7190_Read32);

配置好AD7190后就是读取24位数据,然后根据这个数据算出差分输入的电压,计算公式就是REF脚位的电压分成16777216份(单极性和双极性的份数不一样)。得到的24位数据乘以这个数值就是差分电压。

	  //读ADC数据
	  AD7190_Wirte8=0x58;
	  AD7190_WriteByte(AD7190_Wirte8);
	  AD7190_Read32=AD7190_Read3Byte();
	  printf("AD7190_DATA  =%.6x\r\n",AD7190_Read32);

float AD7190_AIN1=0;//AIN1输入电压
float AD7190_AIN2=0;//AIN2输入电压
float AD7190_REF=3300;//参考电压3.3V
float Get_AD7190_AIN(void)
{
     float temp;
	 AD7190_Read32=AD7190_ReadAdc();//得到data
	 temp=AD7190_Read32;
	 AD7190_AIN1=temp*((double)(AD7190_REF/16777216));//差分输入
	 uprintf("AD7190_AIN=%lfmV\r\n",AD7190_AIN1);
	 AD7190_AIN1=AD7190_AIN1+AD7190_AIN2;
	 printf("AD7190_AIN1=%lfmV\r\n",AD7190_AIN1);

}
  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: STM32F407是意法半导体(STMicroelectronics)推出的一款32ARM Cortex-M4内核的微控制器。它具有高性能和低功耗的特点,广泛应用于工业自动化、通信、电力电子等领域。AD7606是ADI(Analog Devices)生产的一款高速16通道的24模拟输入型模数转换器。SPI是一种串行外设接口,用于在微控制器和外部设备之间进行通信。 STM32 407和AD7606可以通过SPI接口进行通信。STM32 407可以充当主设备,与AD7606建立通信链接。通过发送命令和接收数据,STM32 407可以控制AD7606进行转换数据的采集和传输。 对于实现STM32 407和AD7606之间的SPI通信,首先需要配置STM32 407的SPI外设。具体而言,需要设置SPI的时钟分频、数据数、数据传输模式等参数。然后,需要设置GPIO引脚,将其与SPI的时钟线(SCLK)、数据线(MISO、MOSI)以及片选线(CS)连接起来。 一旦SPI配置完成,STM32 407可以通过发送特定的命令和数据来与AD7606进行通信。例如,可以发送读取数据的命令,并接收AD7606转换的模拟信号。STM32 407可以通过查询状态寄存器来检查数据是否准备好。一旦数据准备好,就可以使用适当的数据结构接收和处理AD7606的转换数据。 总而言之,STM32 407可以通过SPI接口与AD7606进行通信,实现数据的采集和传输。通过合理配置SPI的参数和GPIO引脚,STM32 407可以有效地控制和监控AD7606的转换过程,并获取所需的模拟输入数据。 ### 回答2: STMicroelectronics的STM32F407微控制器与AD7606 ADC器件通过SPI接口进行通信。 STM32F407是一款高性能的32微控制器,配备ARM Cortex-M4内核。它具有丰富的外设集成,包括多个通用定时器,通用串行接口(USART,SPI,I2C等),通用输入/输出引脚,以及用于存储和调试的Flash和SRAM。 AD7606是一种16通道、16、250kSPS(采样率)的模拟到数字转换器(ADC)。它具有高精度、低功耗和全差分/单端输入功能,适用于多种工业和医疗应用。 两者之间通过SPI(串行外设接口)进行通信。SPI是一种用于设备间通信的串行协议,它支持全双工通信,并使用主从架构。在此架构中,STM32F407作为主设备发送命令和控制信号,并从AD7606读取数据。 为了实现通信,首先需要配置STM32F407的SPI控制器,以设置时钟频率、数据宽、模式和架构等参数。然后,可以使用SPI发送数据包含命令和参数到AD7606,同时接收来自AD7606的数据。 具体流程如下: 1. 初始化STM32F407的SPI控制器,设置合适的时钟频率和模式。 2. 配置STM32F407的GPIO引脚,以便将其连接到AD7606的相应引脚(如SCLK,MISO,MOSI等)。 3. 在STM32F407中编写相应的代码,以发送SPI命令和参数给AD7606,并从AD7606接收数据。 4. 解析AD7606返回的数据,以获取采集到的模拟信号信息。 5. 根据应用需求进行进一步的处理和分析,如滤波、数据保存等。 通过使用STM32F407和AD7606,您可以实现高性能、高精度的模拟信号采集和处理系统,适用于各种应用领域,如工业自动化、医疗诊断等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的王大胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值