ADR1292r通道2数据总是0x7FFFFF
原理图如下
短接DB9的1脚和2脚,为什么进行连续转换时,通道二的数据总为0x7FFFFF
恳请大侠出手相助,指点迷津
如果差分输入短接,还出这个数据。那么请做如下实验, 去掉R1 R2, 把C7 C8用0欧姆短路后,看结果
好像还不行啊,还是在0x7fffff附近
寄存器设置通道二短路测偏置电压,数值大概 在0x140000~0x180000,增益6,换算过来大概63-75mV,
外部短路接地,测出数值大概是0x7b0000,换算过来380mV。
按理应该是一个接近0 的值。
设置寄存器测内部test信号,数值大概0x220000-0x240000,增益6,换算过来大概是107mV-113mV
按手册来说测试信号应该在1mV,不知道怎么会得到这样的结果。
输入全都断开,发内部test信号,差分两路的test信号幅度相同,PGA增益设置为1,看看会得到什么样的结果。
按你说的,设置PGA1,断开R1-R2,R5-R6,内部Test 信号,CH1:0x800000,CH2,大概是 -20mV到-10mV
另外,短接C1,C2,CH1, CH2大概有+10mV到-5mV的电压
设置成内部短路,CH1可以测到100mV以上的电压,CH2的电压测到的大概在1mV以内
以上结果正常么,麻烦大侠指正
前两个看上去正常,可以把calibration用起来,估计短路输入时就可以得到接近0的转换值了。
你的电源电压AVDD和AVSS各是多少V?如果把AVSS设置为0V,输入采正电压,会不会有改善?感觉你的问题可能是正负电源供电和数字转换逻辑没匹配好,数字转换逻辑在手册28页图10。
以上都是执行CAL_ON置位,调节PGA后发送OFFSETCAL命令,这些操作后得到的值
万用表测,ADS_AVDD 3.0V,ADS_DVDD3.3V
这是电源电路,调试时采用的是USB电源供电,电池未接
这是时序
从最初的帖子里附的电路图看,通道1和通道2的区别在于通道2是直流耦合过去的,可能会有直流工作点不对的问题。可以试试下面两个办法。
1. 原始电路不动,通道2输入的差分信号给一个(AVDD+AVSS)/2的共模,看看转换结果对不对。
2. R1,R2改成两个隔直电容,容值大小参考通道1的,然后按照手册18页图19所示,把内部的共模(VREFP+VREFN)/2这个功能打开,再看转换结果对不对。
哦,这个电路参考的是评估板的电路,针对1292R去掉了多余元器件。
我先试了下内部MVDD 测试,好像也不对:
设置CH1SET寄存器0x13,即PGA1,CH1转换值0x37A3C0上下, 换算过来1.2V,按照手册,换算过来相当于AVDD是 2.1V,实际Pin12管脚电压是3.0V左右
设置CH2SET寄存器0x13,即PGA1,CH2转换值0x164040上下, 换算过来0.42V,按照手册,换算过来相当于DVDD是 1.68V,实际Pin23管脚电压是3.3V左右
而且,有一个奇怪现象,每次复位的这个值不一样,而且复位之后一直不变,不像其他MUX通路,值多少有些变化
还有就是你上面说的第二条,我看了下图,没有找到VREFP+VREFN)/2这个功能,
不知道你是不是指的下面这个,但是Mux = 0x0001,会将INP-INN短接,任何信号都进不去的吧
MUX1[3:0]=001是设置该通道的共模输入电压在Vref/2,INN INP短路,差模信号为0。看下输出数字值怎么样?
CH1 :0x800000,
CH2:在-30mV上下
增益是1
CH1相当于静态工作点在-1.2V以下,
CH2相当于静态点在-1.23V,
这样以来,测得的MVDD倒也正常,可是OFFSETCAL命令已经发过了,CAL_ON也置位了,怎会这样?
怎么会测出来负电压?系统是单电源供电还是正负电源供电啊?按说,如果是单电源供电,其实你最初的问题应该就是第二路没有直流偏置吧,给个偏置上去可能就好了。
那个问题解决了,原理图参考的是评估板,没有问题的。
两个通道的偏置测了-通过c1、c2两端对地,也对。
问题是出在参考电压源上,我用到的是内部的2.42参考源,复位默认是不打开的。
使能CONFIG2 的PDB_REFBUF位,打开了就一切正常了。
补充下,使用该原理图只有CH2可作信号采集,CH1是测呼吸的。
同时大胆猜测下(也可能手册有提到但我没注意),两个通道的偏置是公用的,因为CH2外部确实没有偏置电路,但却有偏置电压。
另外,ADR1292中的ADC 仅支持来自PGA差模信号的转换,共模是没法转换的,所以CH2的PGA短路的话,应该是一个接近0的值,实测约5-9uV;
内部 TEST测试1mV@1Hz,这和外部电路关系不大,波形很清晰的。
大概给个调试步骤吧,仅针对片子本身。
焊好后 ,测C1,C2两端-(CH1/2 的N端和P端)对地电压,都在1.5V左右就对了。
接着设置SPI,设置 HOST端为主模式,CPOL = 0,CPHA = 1,空闲时钟低,第二个时钟。
要提醒的一点,ADR1292的SPI时钟要MCU来提供,就是说,要读AD的转换值,需要向外面写三个字节的0x00,编写编读才可以。
同时注意,读寄存器要先发送停止转换命令SDATAC(0x11)。
留意选择参考电压源,内部的话一定要设置(见上文)。
给个HEX数据转float的函数,很笨但也能用
char GetVolt(float *vout,int code,int GAIN)
{
float vol = 1.0;
int temp = 0;
float VREF = 2.42;
if(0x800000 == (code & 0x800000))
{
temp = ~(code & 0xffffff);
temp = (temp & 0xffffff) + 1;
vol = -1.0;
}
else
temp = code;
vol *= (float)temp / (float)0x007fffff;
vol *= VREF / (float)GAIN;
*vout = vol;
return 1;
}
一切就绪后,欢迎来到数字世界,50Hz 工频 或许是你遇见的第一个大BOSS,我正被搞得焦头烂额。
不用担心,有傅里叶、有Z变换、有IIR、有Matlab、有TI大神。
车到山前必有路,见招拆招就可以了。
以上 是我遇见的一些问题,希望能帮到看到帖子的人。
您好,我想向您请教一下,使用内部test信号时,寄存器配置是什么样的,我试了一下,偏差很大