OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6453|回复: 3

ADS1248 寄存器配置和通道转换

[复制链接]

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-12-4
在线时间
717 小时
发表于 2018-4-20 11:11:23 | 显示全部楼层 |阅读模式
本帖最后由 loudianxin 于 2018-4-20 11:26 编辑

ADS1248是TI的一款24位delta-sigma(ΔΣ) 、2KSPS、8通道(4通道差分)ADC芯片。TI官方有RTD设计方案,参考文档做了一板4通道3线PT100温度采集。调试ADS1248过程中遇到一些问题,记录下来方便以后使用。
参考代码:ADS1x4x Firmware Example Code
1》在配置寄存器的时候一定要注意将START引脚拉高在配置,否则配置不成功。

2》在配置过程中不要配置FSC寄存器(满量程校准寄存器),最开始误将FSC寄存器配置为0,结果读出来的AD数值都是0,调试了几天才发现读写代码都对就是因为FSC寄存器配置出错

3》在读寄存器和写寄存器的时候注意命令的高4位如下图:


读寄存器时命令格式:RREG = 0x20 | (rrrr & 0x0F) ;//rrrr表示读取的寄存器地址

写寄存器时命令格式:WREG = 0x40 | (rrrr & 0x0F) ;//rrrr表示写入的寄存器地址

4》寄存器配置:

        MUX0               = 0x01,        //MUX0   默认AINP-0通道   AINN-1通道(差分输入)
        VBIAS              = 0x00,        //VBIAS  
        MUX1               = 0x28,        //MUX1   开启内部参考电压  使用REFP1和REFN1引脚电压做基准参考电压
        SYS0                = 0x25,        //SYS0     4倍增益  速率2000SPS
        IDAC0             = 0x06,        //IDAC0   IDAC1 和 IDAC2 各输出 1ma
        IDAC1             = 0x89,        //IDAC1   IDAC1在IEXC1输出  IDAC2在IEXC2输出
        GPIOCFG        = 0x00,        //GPIOCFG
        GPIODIR        = 0x00,        //GPIODIR
        GPIODAT        = 0x00,        //GPIODAT

注意不要配置FSC寄存器。

如果使用内部恒流源需要一直开启内部参考电压( MUX1[6:5]),开启内部参考电压后在芯片的VREFOUT和VREFCOM引脚会输出2.048V的电压(注意引脚处需要有滤波电容),

5》SPI设置:

驱动芯片用的STM32,在设置SPI时分频256,模式为0或者1发现都可以读取数据。但是参考ADS1248的时序应该是SCLK下降沿采样数据(SPI_CPOL = SPI_CPOL_Low,CPHA = SPI_CPHA_2Edge//SPI1模式)如下图:



6》DRDY引脚:

DRDY:数据准备引脚,平时为高电平,在转换开启前为高电平,转换开始后可以查询该引脚,如果AD转换结束该引脚会输出低电平,此时读取AD数据该引脚回复高电平。时序可以参考上图


7》START引脚:

START:如果使用单次AD转换只需要将该引脚拉高在拉低就可以,时序入下图:


图中Tstart时间如下图计算:


        //at lease 3*Tosc=0.75us

        //tSTART Pulse duration, START high 3 tCLK

        //tCLK = 1 / fCLK. The default clock frequency fCLK = 4.096 MHz. =>0.244us


8》使能一次AD采样

s32 ExternalADC_StartConvert(u8 nAdChNum)
{
        u8 arrBuf[3];
        u8 nCount = 0;
        s32 nReault = 0;
        

        ADS1248SetCurrentDACOutput(ADS1248_IDAC_OFF);

        //选择通道

        ADS1248_Channel(nAdChNum);

        ADS1248SetCurrentDACOutput(ADS1248_IDAC_1000);


        //开始转化
        ADS1248SetStart(1);
        //at lease 3*Tosc=0.75us
        //tSTART Pulse duration, START high 3 tCLK
        //tCLK = 1 / fCLK. The default clock frequency fCLK = 4.096 MHz. =>0.244us
        delay_us(10);
        ADS1248SetStart(0);


        //等待完成
        ADS1248WaitForDataReady(0);


        nReault = ADS1248ReadData();
        printf("AD%1d:%d\r\n",nAdChNum, nReault);
        return nReault;
}


9》通道切换:

static void ADS1248_Channel(u8 nChNum)
{
        u8 nWriteData = 0;
        switch (nChNum)
        {
        case 0:
                SelectCurrentChannels(0);
                //first take default readings for AIN0+ and AIN1- channel1
                nWriteData = 0x01;//AIN0 positive and AIN1 negative
                break;
        case 1:
                SelectCurrentChannels(1);
                //second channel
                nWriteData = 0x25;//AIN4 positive and AIN5 negative
                break;
        case 2:
                SelectCurrentChannels(2);
                //third channel
                nWriteData = 0x37;//AIN6 positive and AIN7 negative
                break;
        case 3:
                SelectCurrentChannels(3);
                //fourth channel
                nWriteData = 0x13;//AIN2 positive and AIN3 negative
                break;
        default:
                SelectCurrentChannels(0);
                //first take default readings for AIN0+ and AIN1- channel1
                nWriteData = 0x01;//AIN0 positive and AIN1 negative
                break;
        }
        ADS1248SetStart(1);
        //切换通道
        ADS1248WriteSequence(ADS1248_0_MUX0, 1, &nWriteData);
        ADS1248SetStart(0);

}

注意要拉高Start引脚才能配置寄存器。




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/louyangyang91/article/details/80013545

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1838
金钱
1838
注册时间
2014-12-4
在线时间
717 小时
 楼主| 发表于 2018-4-20 11:14:07 | 显示全部楼层
ads1248.pdf (2.09 MB, 下载次数: 81)
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2018-10-18
在线时间
26 小时
发表于 2019-10-29 13:20:49 | 显示全部楼层

你好,方便贴的源码吗?我设置的IDAC电流为500ma,在2K偶的采样电阻VREF,采集电压始终为零,帮忙解答下
回复 支持 反对

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2018-4-7
在线时间
6 小时
发表于 2021-9-1 11:33:49 | 显示全部楼层
感谢前辈的文字资料,最近正在搞这个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表