在产品设计过程中,很多时候都会用到ADC器件,而在一些特殊场合还需要一些特别的ADC器件。我们在这篇中将讨论常用于医疗器件方面的,DDC114这款电流输入ADC,并为其设计一个驱动程序。
1、功能概述
模数转换器DDC114是一款电流输入型ADC,通过对微小电流信号采用电荷积分的方式进行模数转换。包括4路输入,每路输入有2路积分电容;有2路AD转换器,每2路输入共用1个AD转换器。其内部结构框图如下:

DDC114采用48脚QFN封装,其量程范围、数据格式、转换周期、操作模式等都是通过配置硬件引脚来实现配置的。其封装样式及引脚定义如下:

DDC114通过SPI接口输出数字化的结果,该SPI接口由一组数据时钟(DCLK),一个有效数据引脚(DVALID),一组串行数据输出引脚(DOUT),和一组串行数据输入引脚(DIN)组成。DDC114电流积分型AD芯片各路交叉积分与转换,积分与转换过程以及数据输出基本是独立进行的。DIN只在多个转换器级联时使用,否则应该绑定到DGND。当移位寄存器包含有效数据时,DVALID输出变低。相应的逻辑时序如下:

DDC114存在连续模式和非连续模式两种。当积分时间大于数据转换时间时就切换到了连续模式,当积分时间小于数据转换时间时就转换到了非连续模式。有关连续与非连续模式的所需时钟周期如下:

为了获得最好的噪声抑制特性,一般来说,我们需要将CONV转换信号与CLK时钟的上升沿同步。
2、驱动设计与实现
我们已经了解了DDC114电流输入型ADC的基本特性,接下来我们就依据这些特性和要求实现DDC114电流输入型ADC的驱动程序。
2.1、对象定义
与前面一样,我们依然是基于对象的思想来实现DDC114电流输入型ADC的驱动。所以我们首先来考虑DDC114电流输入型ADC作为对象的基本属性和操作。
首先我们来考虑DDC114对象的属性,我们使用DDC114的目的就是获取各通道的数据,所以我们将当前时刻的数据作为属性记录下来。数据格式虽然是通过硬件管脚来设置的,但在不同的数据格式下解析数据的方式也是不一样的,所以我们将当前配置的数据格式当作属性记录下来。同样的,不同数据格式下量程和零点的设置也是不一样的,所以我你们将其作为属性记录下来,方便完成数据解析。我们知道DDC114连续工作时需要控制转换信号CONV,我们需要记录他每一时刻的状态,以便控制CONV信号的切换,所以我们将器状态也定义为对象的属性。
而DDC114对象所需要进行的基本操作,主要有控制CONV信号、控制RESET信号、控制TEST信号、获取DVALID状态并从SPI获取,这些操作都依赖于具体的平台,所以我们将其定义为对象的操作,这样可以通过函数指针的方式方便操作。还有基于时序控制的需要,我们需要微秒延时函数,而延时函数也依赖于具体的软硬件平台,所以我们将其定义为对象的操作。综上所述,我们可以定义DDC114的对象类型如下:
/*定义DDC114对象类型*/
typedef struct Ddc114Object {
uint32_t dCode[4];
Ddc114PinSetType convStatus;
Ddc114FormatType format; //数据输出格式
uint32_t codeRange; //输出量程编码
uint32_t codeZero; //输出零点编码
void (*GetDatas)(uint8_t *rData,uint16_t rSize);
uint8_t (*GetValid)(void);
void (*SetConv)(Ddc114PinSetType conv);
void (*SetReset)(Ddc114PinSetType reset);
void (*S

本文详细介绍了DDC114电流输入型ADC的特性,包括其4路输入、2路AD转换器的结构,以及SPI接口的工作原理。接着,文章阐述了驱动程序的设计思路,定义了DDC114对象类型,并提供了初始化函数和数据获取函数。在实际应用中,驱动程序用于采集光度数据,通过SPI接口读取转换结果并进行数据解析。测试结果显示驱动程序运行正确,但使用时需要注意SPI速度、积分时间和MCU配置等问题。
最低0.47元/天 解锁文章
7685





