这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 开源硬件 » 一种采集0-10mv和0-5V电压信号的原理图及软件经验分享

共3条 1/1 1 跳转至

一种采集0-10mv和0-5V电压信号的原理图及软件经验分享

助工
2024-11-20 14:13:05     打赏

在工业控制中,经常会使用到数字信号或者模拟信号,比如0-5V,0-10mv,或者是4-20ma等等,而主控cpu,在采集这些信号的时候,需要使用单片机内的ADC功能,或者是外扩AD芯片,对外部的信号进行采样、分析,今天就和大家分享一个采集电压信号的方式方法:

首先简答看一下原理图:

image.png

PCB的效果图

image.png

实物图片:

1730332273999.png

首先简单看一下这个原理图,这里主要是使用外扩AD芯片的方式,对信号进行采集、处理。这里使用到的芯片一一进行分析。

ADS8341芯片介绍:ADS8341是一款高性能、低功耗的16位、4通道采样模数转换器,适用于多种应用场景。在使用时,应注意电源管理、信号输入、通信接口和工作环境等方面的问题,以确保器件的正常工作和长期稳定性

芯片的主要特性

具有高分辨率的优点:16位的高分辨率,采样值在0-65535 之间变化,根据硬件设计可以支持单通道、双通道的采集方式,芯片能够提供高精度的模拟信号到数字信号的转换。

支持多路信号采集:最大支持4路通道,采用轮询式方式采集,可以独立进行采样和转换。不过在使用过程中为了防止通道之间的串扰,对于没有使用到的压力通道,在硬件设计时候,可以直接接入AGND。

简单的串行接口通讯方式:内置同步串行接口(SPI),方便与cpu或其他数字设备进行通信。

具有低功耗的优点:在典型工作条件下(100kHz速率和+5V电源),功耗仅为8mW。

监测范围广:基准电压(VREF)可以在500mV和VCC之间变化,提供0V至VREF的相应输入电压范围。


AD620:高精低失调电压和低失调漂移、低噪声、低功耗、易于设置增益、宽电源电压范围、低输入偏置电流的特点,该芯片是一款低成本、高精度仪表放大器,其特性和应用广泛

运放芯片的主要特性:

高精度:AD620具有高精度特性,最大非线性度为40ppm,能够确保信号的准确放大和传输。

低失调电压和低失调漂移:其最大失调电压为50μV,最大失调漂移为0.6μV/°C,有助于保持信号的稳定性和准确性。

低功耗:AD620的功耗较低,最大电源电流仅1.3mA,非常适合电池供电的便携式或远程应用。

宽电源范围:其电源范围宽(±2.3V至±18V),适用于多种供电环境。

差分放大功能:AD620具有差分放大功能,能够抑制共模信号而仅放大差模信号,提高信号的抗干扰能力。

外部电阻设置增益:仅需要一个外部电阻来设置增益,增益范围为1至10000,方便用户根据需求进行调整。

使用时候的注意事项:

供电电源:应确保供电电源的质量稳定,避免在电源不稳定的情况下使用AD620,以免影响其性能。

增益设置:在设置增益时,应根据实际需求选择合适的外部电阻值,并确保增益设置在AD620的允许范围内。

信号输入:输入信号应保持在AD620的输入范围内,避免输入过大的信号导致器件损坏或性能下降。

工作环境:应避免在高温、高湿度或强磁场等恶劣环境下使用AD620,以免影响其性能和寿命。

TLE2072:

低噪声:适合对噪声敏感的应用,如音频放大和信号处理。

高速:具有较高的带宽,能够处理高频信号。

FET输入:采用FET(场效应晶体管)输入,提供高输入阻抗和低输入偏流。

双路运放:内部包含两个独立的运算放大器,可用于多种电路配置。

ADS8341芯片软件采集示例代码:

/**
  * 函数功能: 往串行ADS8341读取写入一个字节数据
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明: 无
  */
uint8_t ADS8341_WriteReadByte(uint8_t byte) 
{
	uint8_t d_read,d_send = byte;	
		if(HAL_SPI_TransmitReceive(&hspi3,&d_send,&d_read,1,1000) != HAL_OK)
		d_read = 0xFF;

	return d_read; 
}
/**
  * 函数功能: 得到ADS8341采样数据
  * 输入参数: uCH: 通道号
  * 返 回 值: 采样数据
  * 说    明: 无
  */
int Get_SampleData(uint8_t uCH, uint16_t *ReadSample)
{
	uint16_t uOvertimes;
	uint8_t iREADH;
	uint8_t iREADM;
	uint8_t iREADL;
	uint16_t iTempData;	
		ADS8341_CS_LOW;	
		switch(uCH)
	{
		case 0:		ADS8341_WriteReadByte(0x97);
			break;
		case 1:		ADS8341_WriteReadByte(0xD7);
			break;
		case 2:		ADS8341_WriteReadByte(0xA7);
			break;
		case 3:		ADS8341_WriteReadByte(0xE7);
			break;
		default:
			break;
	}
	uOvertimes = 0;
	while(HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_15) == 0) //这里是为了等待ADS8341转换完成,否则不能读取芯片的通道数据
	{
		uOvertimes++;
		if(uOvertimes > 100)
		{
			ADS8341_CS_HIGH;			
						return 0;
		}
	}
	iREADH = ADS8341_WriteReadByte(0);
	iREADM = ADS8341_WriteReadByte(0);
	iREADL = ADS8341_WriteReadByte(0);	
	ADS8341_CS_HIGH;
	iTempData = iREADH;
	iTempData = (iTempData<<8) | iREADM;
	iTempData = (iTempData<<1) | (iREADL>>7);
		*ReadSample	= iTempData;	
		return 1;
}





关键词: ADS8341     0-10mv     芯片    

工程师
2024-11-22 12:57:04     打赏
2楼

666666


院士
2024-11-22 14:11:24     打赏
3楼

SPI接口的ADC,16位精度。

羡慕一下,我的模拟电路的水平实在是太低了


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]