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:
很高兴您的问题得到解决,非常感谢您的反馈!