ADS8326采样原理分析+驱动代码

一、芯片信息

ADS8326 是TI设计的一款 16 位采样模数转换器,属于SAR型ADC。电源电压范围为 2.7V ~5.5V。
优点是低功耗,高速率,有效速率范围是24kHz~6MHz。
ADS8326 提供出色的线性度和极低的噪声和失真,INL仅有±1 LSB,DNL仅有±0.4 LSB。数据传输采用串行(SPI/SSI 兼容)接口和差分接口。参考电压可设置为 0.1V 至 VDD 范围内的任何电平。低功耗和小尺寸使 ADS8326 在用便携式和电池供电系统种成为理想之选。此外,也非常适合远程数据采集、隔离数据采集、工控、机器人和数据分析。 有MSOP-8 和 SON-8两种封装。
Alt

二、典型应用电路

在这里插入图片描述
选择双端输入,输入信号接在正端+IN和负端-IN两端,之间要加个1nF的电容,然后输入信号得正负端对地都要接1000pF的滤波电容。
选择单端输入,输入信号对地借一个1000pF的滤波电容即可。

三、时序图分析+软件实现

1.IO口设置

我们只需要用到ADS8326的5、6、7号引脚,对应封装图的CS/SHDN、DOUT和DCLOCK。
CS/SHDN和DCLOCK是MCU输入给ADS8326的,故设置为推挽输出;而DOUT是ADS8326的输出引脚,因为MCU需要读取其bit数据,所以设置为浮空输入,片选位拉高,ADS8326默认状态为失能模式。代码如下:

// An highlighted block
void ADS8326_IO_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;		//DOUT是ADS8326的数据输出口,故PA6设置为浮空输入
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_SetBits(GPIOA, GPIO_Pin_4);		//片选先拉高
}

2.采集信号

代码的编写需要根据时序图。这里给出了两种时序方式,我用第一种。
在这里插入图片描述
先把CS拉低,再给个下降沿的时钟脉冲信号,开始采集。

ADS8326_CS = 0;				//片选拉低,使能模块
//起始信号
ADS8326_DCLK = 1;
delay_us(1);
ADS8326_DCLK = 0;
delay_us(1);

下列是采集的实现。根据手册数据,采集过程标准是5个时钟周期(上升沿),那么代码内为何多了一个周期呢?因为第6个周期内,DOUT电平从高到低变化,准备进入转换模式,所以整个采集过程需要耗费6个时钟周期。

//发送6个时钟周期,进行采样
for(u8 i=0; i<6; i++)
{
	ADS8326_DCLK = 0
	delay_us(1);
	ADS8326_DCLK = 1;
	delay_us(1);
}

3.转换信号

采集结束后,需要转换为Code。由下图可见,一个转换过程需要16个时钟周期,每个上升沿期间DOUT输出一个bit,最高位MSB最先输出,最低为LSB最后输出。数据处理时需要把最高为左移至最高,最低为放在最低。
在这里插入图片描述
代码实现如下:

//再发送16个时钟周期,转换数值
for(u8 a=16; a>0; a--)
{
	ADS8326_DCLK = 0;
	delay_us(1);
	ADS8326_DCLK = 1;
	delay_us(1);
	temp = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);	//读取每个时钟周期的数据位
	data |= temp<<(a-1);			//第一个得到的bit为MSB,放在最高位;最后一个是LSB,放在最低位
}
//结束信号
ADS8326_DCLK = 0;
delay_us(1);
ADS8326_DCLK = 1;
delay_us(1);
ADS8326_CS = 1;				//片选拉高,失能模块

return data;

如果在转换结束时保持低电平,则新的数据流以 LSB 优先的数据移出,然后无限输出零,所以,采集结束后需要把片选置高,结束采集过程。整个16 位转换至少需要 22 个时钟周期。

四、实际测试

ADS8326的VREF和VDD相连,3.3V供电。之后用开关电源给一个2.55V的电压到ADS8326,万用表测量值如下,保证精确度。

实际测量电压
下列是ADS8326实际采集到的电压值,误差特别小,代码运行成功!
在这里插入图片描述

五、资源

完整版代码点此链接下载!(注意:代码内的6个采样周期是下降沿,需要自行改为上升沿,虽然两者对采集的正确性没有影响,但还是要严格按照时序来)。
ads8326驱动代码下载地址

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
ADS8326是一种高速、低功耗的12位ADC芯片,主要用于模拟信号的数字化转换。为了让ADS8326能够正常运行,需要开发相应的驱动程序,以便与控制器进行通讯和数据传输。 ADS8326驱动程序的主要任务包括:初始化ADC芯片、配置寄存器参数、进行数据转换、读取转换结果、处理数据等。一般情况下,ADS8326驱动程序需要针对不同的应用场景进行优化,以满足CPU的运行速度和功耗要求。 具体来说,ADS8326驱动程序需要完成以下工作: 1. 设置IO口:将ADC芯片的控制引脚(CS、CLK、DIN、DOUT)连接到控制器的相应IO口,进行IO口的初始化和配置。 2. 配置寄存器参数:根据应用场景的需求,设置ADS8326的寄存器参数,包括采样速率、参考电压、转换精度等。 3. 进行数据转换:通过启动转换命令,将模拟信号转换成数字信号,并将结果存储到转换结果寄存器中。 4. 读取转换结果:通过读取转换结果寄存器,获取数字信号的值,然后进行数据处理和转换。 5. 处理数据:根据应用需求进行数据处理,包括滤波、校准、补偿等,以达到更高的精度和稳定性。 总体来说,ADS8326驱动程序对于数字信号的获取和处理起着至关重要的作用,因此需要根据具体应用场景进行优化和调整,以满足信号采样的要求。同时,ADS8326驱动程序也需要考虑功耗的消耗和CPU的运行速度等因素,以保证系统的稳定性和准确性。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hex囧雪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值