成都控制器定制:一个高精度24位ADC芯片ADS1222的使用方法及参考电路程序
前一段时间,在做单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统,物联网,电子产品,软件、APP开发设计定制定做开发项目时,有要求用到24位的高精度ADC,用于对外部信号采集。
经查阅,初步获得一款满足要求的芯片:ADS1222,本文就介绍该芯片及其使用方法。如有相关需求可:3w点yonko-tech点com,扣扣:二五三一26三七二六。
ADS1222是一个2通道、24位、Δ-∑-对数-数字(A/D)转换器。它在TSSOP-14封装中提供了出色的性能和低功耗。这个ADS1222非常适合要求苛刻的高分辨率测量,尤其是在便携式系统以及其他节省空间和功率受限的应用中。Δ-∑调制器和数字滤波器构成基础A/D转换器。模拟调制器具有±5V差分输入范围。输入多路复用器(mux)是用于在两个单独的差分输入之间进行选择通道。可以选择一个缓冲区来增加输入测量阻抗。一个简单的2线串行接口提供了所有必要的控制。数据检索、自校准和待机模式只需几个简单的波形。当仅需要单个转换时,ADS1222可以快速关闭(待机模式)在两次测量之间处于空闲状态时降低了整体功耗,ADS1222s可以连接在一起以创建同步采样多通道测量系统,ADS1222设计用于轻松连接诸如MSP430的微控制器。ADS1222支持2.7V至5.5V电源。在3V操作中功耗通常小于1mW,待机模式下为1µW。
主要特点有:
⭕带4MHz时钟的240SPS数据速率;
⭕20位有效分辨率;
⭕双差分输入复用器通道;
⭕引脚可选择,高阻抗输入缓冲器;
⭕±5V差分输入范围,建议在GND+0.05V至VDD−1.5V之间,超出会降低精度;
⭕0.0003%INL(典型值),0.0015%INL(最大值);
⭕自校准;
⭕简单的2线串行接口;
⭕片上温度传感器;
⭕待机模式下的单次转换;
⭕低电流消耗:300µA;
⭕模拟电源:2.7V至5.5V;
应用场景:
⭕手持式仪器;
⭕便携式医疗设备;
⭕工业过程控制;
⭕磅秤等。
1、 封装及引脚说明
2、 参考电路
ADS1222支持5V供电电源,将VDD接直流电源正极,GND接直流电源负极。
CLK给予一定频率的脉冲信号给ADS1222,为TTL电平,一般为2MHz.
一般不用片上温度传感器,那么TEMPEN接0 (0V),选择接入外部模拟量通道。
一般需要开启缓冲器以获得高输入阻抗,那么BUFEN接1(5V).
参考电压一般接高精度2.5V。
3、 使用说明
ADS1222输入的模拟量电压在GND + 0.05V to VDD − 1.5V范围内拥有较高的精度,超出这个范围则精度降低。
其一般使用流程如下:
(1) 通道选择
ADS1222是双通道的模数转换器,每个芯片里面有2路模拟量输入通道,在使用时,首先得选择通道,设置引脚MUX则可选择通道。
MUX接0(0V),表示选择通道1,MUX接1(5V),表示选择通道2.
(2)等待转换完成
将SCLK引脚拉低,并监测DRDY/DOUT引脚的电平,当其为0时,表示ADC转换完成。
(3)读取数据
a,只读取数据,需要24个脉冲
数据在串行时钟SCLK的驱动下输出,先输出数据的高位,然后输出数据的低位,直到把全部24位数据输出完。此时需在SCLK的下降沿后读取数据,ADS1222在每个SCLK脉冲时输出一位数据。
在第24个SCLK脉冲时SCLK保持为高,那么ADS1222则进入待机模式。
b,读取数据后强制DRDY/DOUT引脚为高,需要25个脉冲
在前面24位数据输出完后,SCLK再给一个脉冲,ADS1222将强制DRDY/DOUT引脚为高。
c,ADS1222自校准,需要26个脉冲
(4)数据解析
ADS1222的数据采用二进制补码的方式存储的,为24位,传输时高位在前。最高位为符号位,0为正数,1为负数。当获得的数据为正数时,原码即补码,当为负数时,原码等于除符号位以外的数据位全部取反后加一。
当模拟量输入电压为2倍参考电压(一般5V)时,输出的数据为(7FFFFFh,二进制为0111 1111 1111 1111 1111 1111),可知符号位为0为正数,正数的补码即原码,其余为全为1表示测量为正电压的最大值5V。
当模拟量输入电压为0V时,输出的数据为(000000h,二进制为0000 0000 0000 0000 0000 0000),可知符号位为0为正数,正数的补码即原码,其余为全为0表示测量为0V。
当模拟量输入电压约为2倍负参考电压时,输出的数据为(800000h,二进制为1000 0000 0000 0000 0000 0000),可知符号位为1为负数,将补码转换为原码,为1 1000 0000 0000 0000 0000 0000(对于此数,负数的补码求原码后,数据变成25位(1位符号位+24位数据位)),表示测量为负电压的最小值约-5V。
ADS1222说的是24位分辨率传感器,但是其最高位是符号位,实际来说只有23位分辨率。业务:3w点yonko-tech点com
4、 参考程序
一个单片机C语言的参考程序如下:
sbit DOUT=P1^0;
sbit SCLK =P1^1;
sbit MUX1222 =P1^2;
unsigned long adc_convert_ch0() //通道0的AD转换程序
{
unsigned long xdata adc_result=0;
unsigned char i=0;
unsigned char j=0;
//复位ADS1222
SCLK1222=0; //拉低SCLK
MUX1222=1;
delayus(1); //软件延时1us,其实延时100ns即可覆盖大部分场景
MUX1222=0; //复位并选择低位的通道(mux由1变为0,表示通道复位+选择通道0.假如是选择通道1,那么mux引脚先0后1即可)
delayus(1);
//等待转换完成。业务:3w点yonko-tech点com,扣扣:二五三一26三七二六
while(DOUT ==1) //当DRDY/DOUT =0时转换完成
{ delayms(1);
j++;
if(j>=20) break;//等了20ms还没转换完成,退出等待
}
if(j<20) //只有转换时间小于20ms的才正确,才读取
{
//获取数据
for(i=0;i<24;i++) //读取数据,0-23共24个数据位
{
SCLK1222=0; //拉低SCLK
delayus(1);
SCLK1222=1; //拉高SCLK
delayus(1);
adc_result=adc_result<<1;
if(DOUT==1)
{adc_result=adc_result | 0x00000001UL;}
else
{adc_result=adc_result & (~0x00000001UL);}
}
//输出第25个脉冲,强制DRDY/DOUT为高
SCLK1222=0; //拉低SCLK
delayus(1);
SCLK1222=1; //拉高SCLK
delayus(1);
SCLK1222=0; //拉低SCLK
delayus(1);
return adc_result;
}
}
//说明:以上程序是按照数据表编写的,还没来得及上芯片验证,仅供参考。
本文来自于对手册的解析,可能有误,详细的使用说明可查阅ADS1222的原版手册(ADS1222_datasheet)。
沙鸥 于 成都
参考文献:
[1] ADS1222数据表(ADS1222_datasheet)