TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS127L11: ADC不能正常工作,即使是读寄存器也读不出数据

Part Number:ADS127L11

MCU:stm32F767;Keil

配置SPI位模式1(手册指明用SPI模式1),SCLK时钟频率4.5Mhz;

芯片"START"引脚接地,“Pin14 DRDY”悬空,“Pin9 RESET”引脚悬空;

虽然原理图上画了用外部晶振,但是实际上电路板上没有焊接晶振,芯片使用的还是内部晶振。

功能描述:只配置一个寄存器,比如CONFIG3(令CONFIG3=0x1F),然后读取CONFIG3寄存器的值。CONFIG3寄存器地址是07h。

while(1)

{

     写0x87   //80h+07h,写寄存器CONFIG3地址

     写0x1F  //寄存器内容

     反转一次片选CS;

     写0x47   //40h+07h,读寄存器CONFIG3地址

     写0x00  //SPI全双工操作,写任意数据会返回当前寄存器内容;

     打印读出的内容;

     延迟500ms;   //在while循环里反复读写

}

结果显示,读到的数据全为0;示波器查看adc的输出脚,低电平。

SPI的4种工作模式都试了,读到的结果都是0;

我上周是用fpga操作的,adc没有工作。以为是时序没写好,verilog不好调试,就换到了stm32方便调试,每想到啊怎么搞都不能让这个adc工作,就连读寄存器值都读不出来。唉

附ADC原理图:

Amy Luo:

您好,

您可以附上配置和读取CONFIG3寄存器的SPI时序图吗?

另外检查下主控端与ADC的SPI接口电平是否兼容?主控端与ADC是否共地?MISO与MOSI是否接反?

,

user4583488:

以上两幅图是截图的配置的第一个寄存器:复位=0x8358h和最后一个寄存器开启转换=0x8302h。寄存器的名字叫“CONTROL”,地址=03h;

下降沿写入数据。

我对照了一下时序图,好像没什么问题。“CONTROL”寄存器的“START”置1后,ADC应该开始工作了,可以在DRDY脚检测到脉冲了。即使没有读取数据的过程,但ADC也应该照样工作。实际上,DRDY引脚一直是高电平。

还有一个情形,读寄存器内容,读的是CONFIG3寄存器,。代码过程如下。

情况1:只配置一次寄存器,然后不停的读

先配置寄存器。  //配置的寄存器里有CONFIG3,内容是0x831F;

while(1)

{

  发送读命令:发送地址0x47   //40h+07h,CONFIG3地址

  读CONGIF3数据;

打印;

延迟500ms

}

这种情况下读到的数据是:0x0047;

情况2:反复写寄存器——>读寄存器,循环

while(1)

{

只配置CONFIG3;

读CONFIG3;

打印;

延迟500ms;

}

打印结果是:0x1F47;看起来好像是读出了寄存器的内容“1F”

为什么要一直写——>读才能读出寄存器内容呢,只配置一次寄存器不应该是已经保存在寄存器里了吗?

,

Amy Luo:

看您附的第一个波形图,您发送了不止16个SCLK。当 ADS127L11 的 CS拉高时,设备解释的是输入数据的最后16位,因此实际写入的可能不是期望的地址和值:

另外,SPI接口是工作在SPI 模式1,即CPOL = 0 and CPHA = 1,在空闲时,SCLK 是低电平,数据在SCLK上升沿输出,在SCLK下降沿输入:

,

user4583488:

原理图上CS脚没有直接接地,但是在程序上是一直让CS拉低的,这样算是SPI 3线模式吗

,

Amy Luo:

3线SPI模式是在ADC上电时或复位后检测的CS电平状态,因此,如果是程序控制的CS,应拉低CS管脚后,再复位一下ADC才能进入3线SPI模式:

在3线SPI模式下,ADC会对SCLK进行计数,以确定帧的开始和结束。SCLK位数必须由主机控制,并且必须与输出帧的大小匹配。在 默认输出帧格式是24bits,那么输入也需是24bits,

,

user4583488:

我用的是4线模式,以前配置时没有对CS进行反转,这次我的操作是没配置一个寄存器就反转一次CS,就可以在DRDY引脚检测到脉冲了,说明ADC已经正常工作了。我用滑动变阻器搭个全桥,全桥的两个输出接入ADC的模拟输入脚P和N,然后读ADC数据。调节滑动变阻器改变全桥输出的压差,ADC的数据变化趋势是按照预想的结果变化的,到此,说明ADC已经再工作了。

ADC的参考电压是2.5V。调节滑动变阻器,使得ADC的差分输入=vinP-vinN = 2.45V,让他接近2.5V。此时的读数应该7F_FFFFh附近(7F_FFFF就是满量程2.5V了),但是读出的数据却是3F_FFFF附近,也就说实际数据比理论数据整整少了2倍。改变ADC的输入压差,对比读数和压差关系,依然是差2倍。寄存器配置“CONFIG1”选择的是“1x input range”。

读操作也是每读取24bit就反转一次CS。这个差2倍现象还不清楚是什么原因。我还在调试。

,

user4583488:

我的问题已经全部解决

,

Amy Luo:

很高兴您的问题得到解决,非常感谢您的反馈!

赞(0)
未经允许不得转载:TI中文支持网 » ADS127L11: ADC不能正常工作,即使是读寄存器也读不出数据
分享到: 更多 (0)