打印
[数据转换器-信号链]

ADS1018编程步骤

[复制链接]
1143|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qiangxiaochen|  楼主 | 2017-8-14 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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和正确值之间跳动变化,哪位大神知道怎么回事?
        
        
        .
        

相关帖子

沙发
airwill| | 2017-8-14 20:48 | 只看该作者
支持楼主的经验分享.

不过有个问题 :

  V2 =   (X2 * V1) / 2047
  
这里到底应该除于 2047, 还是 2048 呢?   虽然微乎其微, 还得深究一下.

使用特权

评论回复
板凳
qiangxiaochen|  楼主 | 2017-8-15 08:59 | 只看该作者
个人觉得是2047,其手册是也这么写的,

使用特权

评论回复
地板
vivilzb1985| | 2017-8-15 22:01 | 只看该作者
测量0~-2.048V的电压时,其CODE值随着测量电压变大而变小,实际范围是:4095~2048,OCDE范围:FFF0~8000(H),,,这个是一一对应的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

69

帖子

3

粉丝