ADS1118调试指南和寄存器解析

ADS1118基本功能

ADS1118是TI的16位ADC,内置1MHz晶振和参考电压源,转换速度8~860次每秒可调,量程±0.256V到±6.144V可调,可选单端输入或差分输入,内部集成温度传感器。

ADS1118寄存器

ADS1118的寄存器非常简单,只有2个16bit的寄存器。其中一个为只读寄存器,保存ADC转换后的值;另一个为配置寄存器,配置采集通道、正负量程、采集模式、采集速率、采集源(电压或温度)等。

ADS1118的转换寄存器

ADS1118的转换寄存器长度为16位,以补码的形式编码,用来保存每次AD转换后的结果。

ADS1118的配置寄存器

名字 读写类型 初始值 描述
15 SS 读写 0h 单次转换开始,只用于单次转换模式,没有转换时写入1表示开始转换,写入0没有作用,正在转换时写入1也没有作用,此位永远读取为0
14~12 MUX 读写 0h 选择电压的输入通道: 000=Ain0+ Ain1-(差分);001=Ain0+ Ain3-(差分);010=Ain1+ Ain3-(差分);011=Ain2+ Ain3-(差分);100=Ain0+(单端);101=Ain1+(单端);110=Ain2+(单端);111=Ain3+(单端) 单端输入负参考为GND
11~9 PGA 读写 2h 量程选择:000=±6.144V;001=±4.096V;010=±2.048V;011=±1.024V;100=±0.512V;101=110=111=±0.256V;
8 MODE 读写 1h 选择转换模式,0=连续转换模式,1=单次转换模式(单次转换完成后变为掉电状态)
7~5 DR 读写 4h 转换速率:000=8;001=16;010=32;011=31;100=128;101=250;110=475;111=860(次每秒)
4 TS_MODE 读写 0h 0=采集电压;1=采集内部温度传感器
3 PULLUP_EN 读写 1h 控制是否使能DOUT/DRDY引脚的内部弱上拉:0=不上拉,1=上拉(推荐)
2~1 NOP 读写 1h 确定此次参数设置是否有效:01=设置生效,其他皆为使ADS1118忽略此次设置
0 保留 只读 1h 保留位,写0或写1没有任何影响,读取永远为1

ADS1118读写时序分析

ADS1118共有两种读写模式:32-Bit模式和16-Bit模式,两种模式均为高位在前。32-Bit模式用于CS(片选)引脚始终为低的情况,16-Bit模式用于片选引脚由单片机IO控制的情况。

32-Bit模式

32-Bit模式下CS引脚可以一直保持为低,节省一个IO口。32-Bit模式可以细分为两种,一种是把设置寄存器(16bit)写入两次,一种是写入一次后第二次(后16bit)写0。
ADS1118调试指南和寄存器解析_第1张图片
读取到的数据只有一种格式,前16位为转换寄存器中储存的上次转换的值,后16位为刚才写入的寄存器设置。在每次完成32-Bit通信后,DOUT/DRDY引脚再次拉低时代表下一次AD采集已完成,可以读取数据。

16-Bit模式

16-Bit模式要求在每两次通信之间CS(片选)引脚要拉高一次。每次通信可写入16bit的配置寄存器值和读取到16bit的转换寄存器值。
ADS1118调试指南和寄存器解析_第2张图片

ADS1118数据格式

电压采集数据格式

ADS1118采用补码的数据格式,采集电压时,读取到的16bit数据可以直接赋给C语言中的short(有符号16bit整数)类型然后根据量程乘以比例系数得到电压值。量程和比例系数表如下。

量程 比例系数
±6.144V 187.5μV
±4.096V 125μV
±2.048V 62.5μV
±1.024V 31.25μV
±0.512V 15.625μV
±0.256V 7.8125μV

温度采集数据格式

ADS1118通信得到的16位温度数据中只有高14位有效(低两位永远为0),为一个14位有符号整数。在处理过程中可以将数据先按照无符号数向右位移(>>)2位,再判断第14位是否为1(1则表示温度为负),若为1则减一转化为反码,在将低13位按位取反得到原码,再取负,就能将其转化为16位有符号整数(short)直接进行下一步运算。参考C语言程序如下:

val = ((unsigned short)val) >> 2;//温度数据高十四位有效
if(val & 0x2000){//温度数据第十四位表明是否为负数
	unsigned short temp = ((unsigned short)val) ^ 0x2000;//第十四位清零
	temp = temp-1;//转换为反码
	temp = (~temp)&0x1FFF; //低十三位按位取反得原码
	val = -temp; //重新取负转换为十六位的补码格式
}

测试代码

包含ADS1118.c和ADS1118.h,封装了4个通道单端采集函数和温度采集函数,采用模拟全双工SPI,STM32 HAL库风格,移植的朋友需要改一下ADS1118_ReadWrite。

你可能感兴趣的:(嵌入式,ADC)