我是靠谱客的博主 潇洒微笑,最近开发中收集的这篇文章主要介绍ADS1248 寄存器配置和通道转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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:%drn",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引脚才能配置寄存器。


最后

以上就是潇洒微笑为你收集整理的ADS1248 寄存器配置和通道转换的全部内容,希望文章能够帮你解决ADS1248 寄存器配置和通道转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部