外设驱动库开发笔记41:ADS1256 ADC驱动

本文详细介绍了如何为ADS1256设计驱动程序,包括对象定义、寄存器操作、驱动实现,以及在STM32平台上使用驱动采集数据的实例。特别关注了模拟信号处理、寄存器配置和时序控制。

  我们经常会碰到多通道AD采集的需求,有时候甚至需要高精度的ADC器件。本篇我们将来设计并实现ADS1256模数转换器的驱动。并简单讨论该驱动使用方式。

1、功能概述

  ADS1256是TI公司推出的一款低噪声高分辨率的24位Sigma-Delta(E-v)模数转换器(ADC)。E-vADC与传统的逐次逼近型和积分型ADC相比有转换误差小而价格低廉的优点,但由于受带宽和有效采样率的限制,E-vADC不适用于高频数据采集的场合。该款ADS1256可适合于采集最高频率只有几千赫兹的模拟数据的系统中,数据输出速率最高可为30K采样点/秒,4路差分或8路伪差分输入,有完善的自校正和系统校正系统,SPI串行数据传输接口。其结构图如下所示:

  从结构图可以看出来,ADS1256是模拟区域与数字区域完全独立的ADC,即AVDD给模拟区域供电,DVDD给数字区域供电,在原理图设计方面按照官方指导文档,需要对两个区域做独立的布线与隔离处理,才能让信噪比最佳。
  ADS1256采用SSOP的封装形式,具有8个模拟输入通道,共28个引脚,与其类似的2通道产品ADS1255共有20引脚,其实两者操作相同,所以我们设计驱动也会考虑兼容性。其中ADS1256引脚排布和定义如下图所示:

  ADS1255和ADS1256的操作是通过一组寄存器来控制的。这些寄存器包含了配置部件所需的所有信息,如数据速率、多路复用器设置、PGA设置、校准等。这些寄存器的地址及结构如下表所述:

  我们知道了这些寄存器的定义,那么就可以操作ADS1256了。可是我们怎么来实现对这些寄存器的访问呢?这就涉及到操作命令的问题了。ADS1256有多个操作命令,具体如下表所示:

  在以上这些命令中,除了读写寄存器操作需要有第二个字节命令和数据外,其它命令都是独立使用的。

2、驱动设计与实现

  我们已经了解了ADS1256的相关结构、寄存器及操作命令。接下来我们就来考虑如何设计ADS1256的驱动程序。

2.1、对象定义

  与以往一样,我们依然是基于对象来实现ADS1256的驱动程序,所以我们需要抽象出ADS1256的对象类型。

2.1.1、抽象数据类型

  我们先来考虑一下ADS1256对象类型的定义问题。一个对象一般来说主要包括属性和操作两个方面的内容,我们也从这两个方面来分析ADS1256对象。
  首先我们来考虑ADS1256模数转换器对象的属性。这些属性必须能够标识ADS1256模数转换器对象的特征,或者是存储ADS1256模数转换器对象的某种状态。对于ADS1256模数转换器对象我们希望可以记录寄存器的状态,所以我们将各个寄存器定义为该对象的属性。
  接下来我们再来考虑一下ADS1256模数转换器对象的操作。一个对象有各种各样的操作,或者说他能实现很多的操作,但不是所有的操作都是我们要提取的。我们需要考虑的是那些对象所独有并且同类对象都必不可少的操作,以及那些不能由对象独自完成,依赖于具体平台但又决定对象的行为的必要操作。对于ADS1256莫数转换器,我们需要读写数据,操作片选信号,读取就绪信号等。但这些操作都依赖于具体的软硬件平台,我们将这些操作定义对象的操作,通过函数指针的方式将具体的操作函数传递给对象变量,以便于适用于不同的软硬件平台。此外,由于时序控制的需要我们需要在驱动中使用延时操作,而延时操作的实现依赖于具体的软硬件平台,所以我们也将其抽象为对象的操作。根据上述我们的分析,可以定义ADS1256模数转换器对象的类型如下:

/*定义ADS1256对象类型*/
typedef struct ADS1256Object {
  uint8_t Register[11];
  void (*ReadWrite)(uint8_t *wData,uint8_t *rData,uint16_t size);       //实现读写操作
  void (*ChipSelect)(ADS1256CSType cs);  //实现片选
  uint16_t (*GetReadyInput)(void);      //实现Ready状态监视
  void (*Delay)(volatile uint32_t nTime);       //实现ms延时操作
}ADS1256ObjectType;

2.1.2、对象初始化函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值