问几个ADS1256的问题
本帖最后由 shichen717 于 2015-9-11 00:31 编辑用ADS1256做个5 3/4位的仪器,折腾了一星期,还没完全好。
目前的状态:
开启输入缓冲器,PGA=4
2.5SPS,跳动...几乎不跳
5SPS,跳动1count
10SPS,跳动2count
50SPS,跳动3-4count
上述数据含传感器及其调理电路的噪声,直接短路输入端,50SPS跳动1-2count。
基本性能尚可,比手册中的理想情况差一点儿。(也许所有的问题的答案就是找回这一点儿的答案,或者反过来?)
电路是手册的标准电路,但没有49.9Ω电阻,输入端也没有电容,OPA188运放直接驱动。
包括基准驱动也是图26的标准电路,只不过2路ADS1256用了一路OPA350驱动,基准共同退耦147μF钽电容。
2路ADS1256的基准、SCLK、DIN、DOUT复用,CS和DRDY分开。
PCB的地线处理没有问题,否则读数不会如此稳定。(也许还不够稳定?)
电源退耦电容只多不少。
时序应该正确,读读数和寄存器内容都没问题,写寄存器应该也没有问题,除了ACAL功能不能用以外。
出现的问题:
1. 不能使用ADS1256的自校准,STATUS寄存器中的ACAL ON。使用自校准时2路ADS1256均无法设置任何参数,例如通道、速率、PGA。
2. 使用SELFCAL命令校准时,每次校准完成后零点OFC寄存器的值有较大变化,基本为2个比较固定的值,随机出现,之间差160(0xA0),导致显示的读数变化约10count,相当于ADC自身读数变化250 LSB。基本无法接受。最要命的,零点校准后,短路输入端读数居然不是零,而是比零点低768LSB。
请教确实用过ADS1256的坛友,是否遇到过类似问题?
今天也给TI写信问这个事情,等待回复中。
这种问题其他ADC好像还没见过。我只在AD7705用4.9152倍频时钟时见过自校准后增益不对的情况,也是两个比较固定的数值随机出现,当时问过ADI,答复时钟线可能太长,后来也没深究,因为换上2.4576晶振就好了。
不过这一次的时钟线很短,大约10mm,会不会还是太长了?可是TI的ADS1256测试板的晶振好像离得更远。我看过晶振和ADS1256的时钟输出波形,很好。
另外还有一些问题:
1. 看TI论坛,TI的人说基准退耦电容的大小与输出速率有关,速率越高电容需要越大,以保证采样电容完全充电,但这种过采样的ADC实际采样率应该固定,不同输出速率只对应不同的采样平均数量,因此采样电容的充放电是否完全应该与输出速率无关。
2. 手册中提到如果开启ACAL功能,开启或关闭输入缓冲器、PGA和输出速率时,ADS1256会自动进行一次自校准,但改变输入缓冲器状态需要写入的STATUS寄存器本身也能开启或关闭ACAL功能,写入STATUS寄存器的操作本身会不会引发自动校准?也许我应该一个命令先只开启输入缓冲器,第二个命令再开启ACAL?
3. 好像任何操作,例如写寄存器必须全程在DRDY=0时才行,否则ADS1256会进入不可预期的状态,手册中也没有任何描述,实际情况是否如此?我之前试过不管DRDY直接写与DRDY状态无关的寄存器,好像也没异常,但很多人都会任何操作前先等DRDY下降沿,现在的程序也如此,但校准的问题和无法使用ACAL的问题依旧。
4. 各位有没有做过两路ADS1256的,会出现什么单路没有的问题?已经很小心的处理2路共同使用的问题,CS控制的很严格,DRDY也是分别读取,因此应该不会出现SCLK和DIN混淆的问题(也许由于寄生延时的问题也有可能混淆?光耦是HCPL-M611或者HCPL-M600,就是小体积的6N137,能到10M?)。以前用过2路AD7705,没有问题,这次就是用1256代换7705。
5. 另外发现,ADS1256初始化时只能按照顺序写寄存器,由0x00顺序写到0x04,共5个寄存器。我试过先写输出速率,ADS1256会进入奇怪的状态,读数跳动巨大,读数数值比正常值大或小的离谱。有没有见过类似问题?
6. 模拟电源78M05,数字电源LM1117-3.3V,退耦电容都是10μF陶瓷+0.1μF陶瓷,会不会有问题,是否需要换10μF钽电容?
7. 有没有朋友用过TI的官方ADS1256测试板(不是网上100多的那种),真的能达到手册中的指标吗?我的测量结果中,无噪声分辨率比手册低了1位。
TI测试板还是大面积铺地,不分模拟地和数字地,我的模拟地和数字地分开星形接地,难道问题出在这里?手册中也提到推荐数字地和模拟地要用一块铺地,如果分开二者之间不能有压差。我用万用表看过直流压差为0,但交流真不好说。我觉得问题很有可能出在这里,明天划开地线试试。
ADS1256的用户手册真是崩溃,最基本的信息很多没有,而且自校准的公式好像还有错误。
我查了大量TI论坛的内容,看到TI的人强调:“ADS1256上电后会进入RDATAC连续读数状态,必须首先发送RESET或SRDATAC命令”,而这一信息居然不在手册中,那手册已经看过无数遍。
更崩溃的是手册中没有官方的初始化例程,甚至连一个完整的时序图都没有。
一切都得摸着来。
ADS1256似乎是很难搞的型号,很多人都感觉崩溃。
1. 超出想象的基准驱动
基准驱动居然是不太精密的高速运放OPA350,温漂4uV/C,2.5V基准时相当于1C漂移1.6ppm,虽然我的应用无所谓,但说实话真配不上ADS1256的性能。原因是OPA350高频内阻低,而且有巨大的电容驱动能力,至少能推150uF,200μF也不是问题,而ADS1256的基准输入没有内部缓冲,基准输入端直接接采样电容,必须要这么大的钽电容退耦做电荷泵,为采样电容提供完全充电的能力。
Rigol的6 1/2位万用表用的也是ADS1256,但基准驱动是低速的零漂移运放OPA2335,估计做了补偿才能推这么大的电容,不过准确度高多了。
好在OPA350不贵,4μV/C的漂移也可以接受。
之前用过LM336做基准直接驱动ADS1256的基准输入端,的确内阻太高,自校准的时候基准电压会忽而高1mV(K2000 fast filter off 测量,示波器抓不住,也许更高?),加了OPA350缓冲后,任何时候OPA350的输出端都纹丝不动,除了LM336和OPA350的温漂。
2. 上电后居然是高速状态
最崩溃的是ADS1256上电后直接运行在30KSPS状态下,单片机速度不够可能都无法正确写寄存器。我的单片机是STC 1T 33.1776M,速度还好。会不会是STC 1T单片机的问题,输出电平要在写入状态后4个周期才有效,不过我加了足够的延时。
3. 功耗巨大
5V模拟电源10mA往上,3.3V数字电源1mA,50mW的样子,微微发热,有明显的零漂,而且零漂好像也不像手册说的那么小。
啰啰嗦嗦说了一大堆,不胜其烦,还没说完全,还请各位不吝赐教。
关于第7点,对于这种低速的ADC,芯片的数字地和模拟地推荐连接在一起,ADI的MT-301有提及{:142_381:}{:142_381:} 1256的DEMO板子我买了,实测PGA=1的时候噪声比1259好好一点点,有点意外。
还没来得及用MCU测试,期待看到你的进展。 zy_sh_npk 发表于 2015-9-11 13:41
1256的DEMO板子我买了,实测PGA=1的时候噪声比1259好好一点点,有点意外。
还没来得及用MCU测试,期待看到 ...
SELFCAL后读过OFC和FSC吗?会变化吗?
szh_init 发表于 2015-9-11 12:34
关于第7点,对于这种低速的ADC,芯片的数字地和模拟地推荐连接在一起,ADI的MT-301有提及{:142_ ...
我量过数字和模拟地,有30k左右的电阻,因此ADC内部肯定不是直接断路。
现在数字和模拟地连在一起,噪声低了1bit。
具体原因还没想清楚,但可能有地线环路的问题。
给个MT-301的地址。
即使上来是30ksps也和你配置速度无关。sclk是单片机给的 到adi官网搜mt-301就能找到 szh_init 发表于 2015-9-13 18:07
到adi官网搜mt-301就能找到
搜过了,改版后没找到。
本帖最后由 shichen717 于 2015-9-14 00:05 编辑
lllaaa 发表于 2015-9-13 09:17
即使上来是30ksps也和你配置速度无关。sclk是单片机给的
有关系。
ADS1256要求对其任何操作,包括读写寄存器过程中,不能出现DRDY=1的情况,这一点说明书中没有,但TI的人强调过。因此必须在DRDY下降沿时刻之后开始操作,并在下一个上升沿之前完成操作。
只有写入寄存器才能使ADS1256改变读数速率,写一个寄存器需要连续写入3字节,共24bit,计入单片机数据移位、SCLK=1、SCLK=0和循环体占用的机器周期,大致需要3倍,再算上ADS1256时序要求的一些延时,如果用汇编,需要至少80个机器周期,实际因为内存位置的长调用可能还要多。
30kSPS的DRDY低电平时间为31μs(计入ADS1256的处理时间),要求单片机80个机器周期不能大于31μs,大致相当于单片机主频不能低于2.6M,实际上很多单片机在用C时效率没有这么高,主频需要至少3M才能可靠操作ADS1256,否则单片机给出的24个SCLK周期可能超出31μs。
对于51系列标准12分频单片机,3M主频相当于36M晶振,这在10年前几乎是标准C51系列的频率上限,还有超频嫌疑。这些单片机至今还在广泛使用,包括最常见的AT89S5x。况且很多单片机即使使用单周期,为了降低功耗也会工作在很低的主频上。
很久之前玩过1256。没印象有这么麻烦。不过你停止连续读取模式只需要发一个字节。只要停了,drdy应该只会在读完全部数据后才被拉高 shichen717 发表于 2015-9-13 23:45
搜过了,改版后没找到。
非常抱歉,是mt-031,http://www.analog.com/cn/search.html?q=mt301
对不起,给你造成麻烦敬请谅解
szh_init 发表于 2015-9-14 08:52
非常抱歉,是mt-031,http://www.analog.com/cn/search.html?q=mt301
对不起,给你造成麻烦敬请谅解
多谢。我已看到。
暂时还没有什么结果,TI给的建议尚无作用。
不过在TI论坛上找到一个应用和我的应用几乎相同的人。他的结果很好。正在交流中。 正好我也打算采用ADS1256 DIY一个表头,现在正在着手画电路图{:142_382:}。 1、电源,似乎加进模拟电源为好?
2、隔离,似乎数字信号与mcu隔离为好? 本帖最后由 shichen717 于 2018-2-22 20:04 编辑
fickle 发表于 2018-2-18 19:59
1、电源,似乎加进模拟电源为好?
2、隔离,似乎数字信号与mcu隔离为好?
其实1256并无问题,程序也对,布线改来改去也没什么可见的改善。
问题出在另一通道的输入电压意外超过5V,导致1256的输入multiplexer过载,影响正在调试的通道读数。
一直放在那里两年多,元旦前偶然好奇测量了一下才发现这个问题。
另一通道是AD637的输出,637输入对地短路后637输出正常,1256的读数也恢复正常,50Sa/s能达到1/600000的分辨率基本不跳,只有传感器输出电压高了之后才见到明显的噪声,问题可能出在驱动传感器的电流的噪声,目前还没解决。
自校准的问题基本解决,实际两个校准寄存器里的值每次的变化量也正常。
问题出在637之前的切换电路中。
1256电源分数字和模拟两路,分别为3.3和5V。问题在于地无法分开,现在已将1256接地点作为星形接地点。
隔离是一定的。
1256的设计多少有点儿问题,尤其在开机默认最高采样率的问题上,慢一点儿的单片机真不一定行。
220uF不震荡?加电阻隔离充电也要充半天吧,220pF ? flappy-bird 发表于 2018-3-4 00:33
220uF不震荡?加电阻隔离充电也要充半天吧,220pF ?
OPA350输出阻抗极低,可驱动200μF电容负载。
本帖最后由 flappy-bird 于 2018-4-3 15:05 编辑
假设40mA恒流充电 220uF充到1V 需要1*220/1000000/0.04=5.5mS 你确定是这么用的? 我回复的哪一茬我都不记得了 本帖最后由 shichen717 于 2018-4-4 01:23 编辑
flappy-bird 发表于 2018-4-3 15:04
假设40mA恒流充电 220uF充到1V 需要1*220/1000000/0.04=5.5mS 你确定是这么用的?
1. 一般情况下充电的前段,运放输出电流为短路电流80mA,而后不断衰减至零。此过程的时间与开环输出电阻和电源电压有关,而非全程恒流充电。但时间量级确为毫秒。
2. 这只是基准的上电建立时间,在AD正确工作之前,单片机所做的初始化工作也差不多在这个量级,而且程序需要照顾上电顺序,这10ms的时间应该不是问题。
3. 这个结构是TⅠ在ADS1256,2008年版手册29页中增加的,原图是147μF负载。我实际用33μFx2。这里如果用低速运放,无电容负载,会在增益校准时出现基准电压趺落100-200ppm。甚至于串联基准并联10μF时也有同样程度的现象。OPA350+33μFx2也有六位半可查的变化,但很小,印象中20ppm左右。
总之,1256+350的组合总是很奇怪,尤其是350,开环输出电阻,数据手册上是1kΩ,应用手册中是43Ω,显然,作为5Ⅴ单电源且短路电流80mA来说,43Ω是正确的。
{:142_382:}
页:
[1]