ADS1256 24位ADC模块

举报
tsinghuazhuoqing 发表于 2021/12/26 00:45:36 2021/12/26
【摘要】   ■ 简介 ADS1256是一款 24bit ADC转换模块。 ADS1256可以通过SPI进行访问 的高精度的转换器。它的 ADS1256 数据手册 可以从 TI网站 查询到。 ...

 

■ 简介


ADS1256是一款 24bit ADC转换模块。 ADS1256可以通过SPI进行访问 的高精度的转换器。它的 ADS1256 数据手册 可以从 TI网站 查询到。

▲ ADS1256 24bitADC模块

▲ ADS1256 24bitADC模块

下面给出了ADS1256的接口。根据ADS1256的数据手册介绍,其中:

  • 用于MCU接口的SPI接口可以包含有/CS, SCLK, DIN, DOUT
  • D0 ~ D3 可以用于对外控制的数据接口。
  • SYNC可以用于数据同步作用。

▲ ADS1256 的接口定义

▲ ADS1256 的接口定义

为了便于后期的MCU制作,制作一个6PIN的外部接口,包括有:

序号 符号 功能描述
1 +5V 工作电源
2 GND 电源地
3 CS ADS1256片选端
4 SCK ADS1256时钟
5 DIN ADS1256SPI数据入
6 DOUT ADS1256SPI数据出

 

01接口电路板1


1. 设计接口电路

使用基于STC8G1K08(SOP8)作为控制ADS1256的与PC之间的SPI-UART的接口芯片。

▲ 实验电路的原理图

▲ 实验电路的原理图

▲ 实验接口电路的PCB

▲ 实验接口电路的PCB

2.单片机软件2

将AD1256连接到单片机STC8G1k。

▲ 将AD1256连接到单片机

▲ 将AD1256连接到单片机

  • 缺省情况下D0输出AD1256的时钟信号
    时钟的频率为: 7.68MHz。

▲ AD1256输出CLK波形

▲ AD1256输出CLK波形

 

02软件命令


UART串口命令可以参见SerialTXT的解释子程序:

if(strcmp("hello",                (char *)STD_ARG[0]) == 0)
    printf("%s is ready !\r\n", VERSION_STRING);
else IFARG0("rra") {
    AD1256ReadReg(0x0, 11, ucDim);
    for(i = 0; i < 11; i ++) {
        printf("%02bx ", ucDim[i]);
    }
    printf("\r\n");
} else IFARG0("setc") {
    sscanf(SDA(1), "%d", &nNumber);
    AD1256SetChannel((unsigned char)nNumber);
} else IFARG0("sets") {
    sscanf(SDA(1), "%x", &nNumber);
    AD1256SetSPS((unsigned char)nNumber);
} else IFARG0("writer") {
    sscanf(SDA(1), "%x", &nNumber);
    i = (unsigned char)nNumber;
    sscanf(SDA(2), "%x", &nNumber);
    ucByte = (unsigned char)nNumber;
    AD1256WriteRegByte(i, ucByte);
} else IFARG0("rdata") {
    SendChar(0);
    nWaitTime = 100;
    if(STD_NUM == 1) {
        printf("%ld\r\n", AD1256ReadData());
    } else {
        sscanf(SDA(1), "%d", &nNumber);
        if(STD_NUM > 2) {
            sscanf(SDA(2), "%d", &nWaitTime);
        }
        for(j = 0; j < nNumber; j ++) {
            printf("%ld ", AD1256ReadData());
            if(nNumber > 1)
                WaitTime(nWaitTime);
        }
        printf("\r\n");
    }
} else IFARG0("setb") {
    sscanf(SDA(1), "%x", &nNumber);
    AD1256SetDIO((unsigned char)nNumber);
} else IFARG0("reset") {
    AD1256Reset();
} else IFARG0("init") {
    AD1256Init();
} else IFARG0("scrd") {
    sscanf(SDA(1), "%x", &nNumber);
    AD1256SetChannel(nNumber);
    AD1256ReadData();
    for(nNumber = 0; nNumber < 1000; nNumber ++) {
        WaitTime(2);
        if((AD1256ReadRegByte(0) & 0x1) == 0) break;
    }
    SendChar(0);
    printf("%ld\r\n", AD1256ReadData());
}

  

scrd : Change Channel and read new data
rdata: Read the current channel data

 

03测试结果


▲ 设置电压与AD1256输出结果

▲ 设置电压与AD1256输出结果

▲ 设置电压与AD1256输出结果

▲ 设置电压与AD1256输出结果

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-06-30
#
# Note:
#============================================================

from headm import *
from tsmodule.tsvisa        import *
from tsmodule.tsstm32       import *

dp1308open()
#------------------------------------------------------------

dp1308p25v(0)
dp1308n25v(0)

stm32cmd('reset')
time.sleep(.1)
stm32cmd('init')

setv = linspace(-5, 0, 5)

setdim = []
outdim = []

for v in setv:
    if v >= 0:
        dp1308p25v(v)
        dp1308n25v(0)
    else:
        dp1308p25v(0)
        dp1308n25v(-v)

    time.sleep(1)
    meter = meterval()

    stm32cmd('rdata')
    time.sleep(.05)
    data = stm32memo(1)
    val = data[0]

    printf(val, meter)

    outdim.append(val)
    setdim.append(meter[0])

plt.plot(setdim, outdim)
plt.xlabel("Set(V)")
plt.ylabel("Data")
plt.grid(True)
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

  

 

※ 结论


AD1256模块现在配置下,只能测量0~5V的电压。其内部有2.5V参考电压。

输出的电压计算公式如下:
假设读出的数值为: N N N,那么实际的电压值为:

V = 5.0 × N 0 x 7 F F F F F V = {{5.0 \times N} \over {0x7FFFFF}} V=0x7FFFFF5.0×N

▲ 设置电压与测量电压之间的关系

▲ 设置电压与测量电压之间的关系

▲ 设置电压与测量电压之间的差别

▲ 设置电压与测量电压之间的差别


  1. AD工程文件:AD\Test\2020\AD1256\TestAS1256STC8G.SchDoc * ↩︎

  2. C51工程文件:C51\STC\Test\2020\AD1256\TestAD1259\TestAD1256STC8G.uvproj ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107043377

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。