概述
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 寄存器配置和通道转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复