ADS1018编程步骤

一.明确ADS10182个寄存器的作用,并对其进行正确配置

一般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

 

至此,完成了基本功能,实际测量电压就正确的读取出来了,满足了一些基本要求,

实际使用过程中,要随着实际使用情况,加一些偏移,以使读取结果更加准确.

================================================我是分割线======2017-9-2增加以下内容=====================================

自己按上述步骤编写程序,调试过程中出了点小问题,现在将问题现象总结一下,

自己用了一路SPI和多路ADS1018芯片进行通信,靠CPU控制ADS1018的CS信号,选择指定ADS1018进行通信,

首先读取单个ADS1018的转换结果时,没有问题,读取结果都正确,

问题来了,当读分时读取多个ADS1018的转换结果时,读取的转换结果在正确值和0之间跳动,

使用示波器测量发现读取多个芯片转换结果时,如读取芯片1的结果,此时芯片2的SDA管脚给出了低电平,导致芯片1的结果被影响,仔细阅读手册,发现这样现象的原因是对芯片使用方法的理解的不透彻,其过程应该是先发送读取指令,然后再读取结果,而不是自己一开始的发送指令的同时读取结果。

按上述方法修改程序,即可得到正确结果,分时读取多个ADS1018转换结果,也都能得到正确值了。遇到同样问题的小伙伴,可以按上述方法去解决。

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值