本帖最后由 qiangxiaochen 于 2017-8-15 14:09 编辑
一.明确ADS1018其2个寄存器的作用,并对其进行正确配置
一般SPI芯片编程步骤都是如此,先明确哪个是要读取数据的寄存器,哪个是用来起配置作用的寄存器,ADS1018就是一个典型的例子,其有2个寄存器,
1.Conversion Register转换结果寄存器
转换结果寄存器里有12位有效数据,左对齐格式,低4位预留,
2.Config Register配置寄存器
配置寄存器有15位有效数据,具体每位的功能,详见其手册描述,下面主要讲几个重要的配置位:
MUX[2:0]:采样通道选择配置模块,
序号 MUX[2:0] 手册描述 解释
1 000 AINP is AIN0 and AINN is AIN1 (default) AIN0管脚作为测量正极,AIN1作为测量负极
2 001 AINP is AIN0 and AINN is AIN3 AIN0管脚作为测量正极,AIN3作为测量负极
3 010 AINP is AIN1 and AINN is AIN3 AIN1管脚作为测量正极,AIN3作为测量负极
4 011 AINP is AIN2 and AINN is AIN3 AIN2管脚作为测量正极,AIN3作为测量负极
5 100 AINP is AIN0 and AINN is GND AIN0管脚作为测量正极,测量负极是GND
6 101 AINP is AIN1 and AINN is GND AIN1管脚作为测量正极,测量负极是GND
7 110 AINP is AIN2 and AINN is GND AIN2管脚作为测量正极,测量负极是GND
8 111 AINP is AIN3 and AINN is GND AIN3管脚作为测量正极,测量负极是GND
PGA[2:0]:最大测量量程选择配置模块
根据检测电路能够检测到的最大电压值,配置该寄存器,
学会上述2个配置模块后,其它配置采用另默认,基本就可以满足基本采样功能的使用了.
二.转换结果换算成真实采样电压值
FS表示最大测量量程值,下面以FS等于2.048V为例进行举例,
根据上表可知,当测量最大量程电压时,其转换结果寄存器值7FF0(HEX),由于其转换结果寄存器是左对方格式,所以其实际CODE应该是7FF0(HEX) >> 4 = 7FF(HEX) = 2047(DEC),
当测量电压值2.048/211= 0.001V=1mv时,其转换结果寄存器值0010(HEX),实际CODE是2;
测量电压值是0时,其转换结果寄存器值是0,
所以测量0~2.048V的电压时,其实际CODE值随着测量电压成正比增长,实际范围是:0~2047,OCDE范围:0~7FF0(H);
当测量电压值负2.048/211= -0.001V=-1mv时,其转换结果寄存器值FFF0(HEX),实际CODE是 4095;
当测量电压值是负的最大量程电压时,其转换结果寄存器值8000(HEX),实际CODE是 2048
所以测量0~-2.048V的电压时,其CODE值随着测量电压变大而变小,实际范围是:4095~2048,OCDE范围:FFF0~8000(H);
那么实际测量电压值的计算方式如下:
设转换结果寄存器CODE是X1;X1右移4位后的CODE值是X2,
最大测量量程电压值是V1,当前测量电压值是V2,
如果X2小于等于2047(测量电压是正电压)
V2 = (X2 * V1)/(7FF0 >> 4),即
V2 = (X2 * V1) / 2047
如果X2大于2047(测量电压是负电压)
V2 = ((4095 - X2) * V1)/(7FF0 >> 4),即
V2 = ((4095 - X2) * V1)/2047
至此,完成了基本功能,实际测量电压就正确的读取出来了,满足了一些基本要求,
实际使用过程中,要随着实际使用情况,加一些偏移,以使读取结果更加准确
昨天使用上述步骤完成了基本功能,可能今天测试时发现一个问题,就是读取出来的参数,会在0和正确值之间跳动变化,哪位大神知道怎么回事?
.
|