This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AD采集一直有漂移



我现在控制DSP发射一串PWM波,延时固定时间后,启动AD进行采集,采集够512个数据则停止,假设采集的数据为Voltage1[512],采样频率为6.25MHZ;采集完成后,我会再重复一遍刚才的过程,采集到的数据为Voltage2[512],采样频率仍为6.25MHZ。我要求的结果是这两路信号的相位差。按理说,两路信号的相位差应该为0.但是实际上有时会相差二点几个微秒。具体图形如下:

具体可能性分析如下:

(1)待采集的信号源是没有问题的。我用采样频率为125MHZ的示波器将采集到的数据输入到matlab里观察,发现两路信号几乎没有相位差。

(2)延时函数也没有问题,我测试过从发送PWM波结束到开始采集的时间,变化也是不到0.1微秒的。

(3)我用信号发生器测试过AD,让AD采集时间差为100微秒的两个脉冲(信号发生器产生信号已经测试过,误差小于2ns),采样频率为6.25MHZ,发现相位差有时会达到0.16微秒。但也远远小于二点几微秒。

所以我现在怀疑:是不是2812AD采集的内部问题,就是说AD不稳定,或者说两路AD的启动时间有延迟?

这个现在对我是个瓶颈,如果确实是我怀疑的那样,那别无他法,就只能外扩AD芯片了。因为外扩AD芯片比较耗时,如果不是这个原因,那采用AD外扩芯片折腾几个月,最后问题没有解决,就太浪费时间了。

问题比较急。谢谢了。

  • longhui,

    您好!不好意思周末的时候扫了一眼您的邮件,还没来得及回复。既然您在这里发了,就在这里回复您。

    ”我现在控制DSP发射一串PWM波,延时固定时间后,启动AD进行采集,采集够512个数据则停止,假设采集的数据为Voltage1[512],采样频率为6.25MHZ;采集完成后,我会再重复一遍刚才的过程,采集到的数据为Voltage2[512],采样频率仍为6.25MHZ。我要求的结果是这两路信号的相位差。按理说,两路信号的相位差应该为0.但是实际上有时会相差二点几个微秒。“

    不是太明白您这段话的意思。如果是按照我理解的,采集完了一路信号后,再采集另一路,肯定会有一定的相位差。触发采样的点不一样啊。

    有几个问题:

    1、AD采样的触发源是什么?

    2、ADCCLK频率是多少?采保CLK设置成多少?

    3、不明白您这么做的理由是什么?为什么要测这个?详细描述一下,我们帮您想个办法。

    建议您不要采用这么高的采样率6.25MHz。2812的AD转换速度是12.5MSPS。采样保持需要一定的时间,两个通道转换需要一定的时间,数据读取需要时间。

  • 如果希望计算两路信号的相位差,建议采用同步采样的方式采样两路AD输入信号。

  • 哦,可能我叙述的不是很清楚。我是做超声波流量计方面的,先把原理说一下。超声波测量流速的话有一种方法叫做时差法。就是在一个管段的两边沿着流速方向安装两个换能器1和2。先是换能器1发射超声波,换能器2接收;然后反过来,换能器2发射,换能器1接收。当管道里有介质流过时,顺着流速方向传播的超声波,速度就快点,假如是c+v1,逆着流速方向的超声波传播速度就慢点,假设为c-v1,那么接收换能器接收到的信号就有个时间差。我就是要测量这个时间差。

    我现在的管道里没有介质流过,那么,两路信号的时间差就应该为0.但是现在采集到的两路信号最大会达到正负二点几个微秒的误差。

    1、AD触发采样是通过软件触发的,也就是通过AdcRegs.ADCTRL2.all = 0x2000;来触发开始采样的。

    2、ADCCLK频率为25MHZ,采样保持ADC_SHCLK=2。

    使用2812的内部AD一直有问题,也查过好多资料,貌似没有遇到这种问题的,而且这个问题拖了有一个月了,一直没有解决。现在不确定是不是因为是内部AD的问题,所以才来请教各位前辈。谢谢了。

  • 因为两路信号不是同时到达的,是发送PWM波后,接收完一路信号,再发送PWM波,才能接收另一路信号。所以无法同步采样。

  • 不一定得要两路信号同时到达你才能用同步采样,采用同步采样的方式是让内部的采样机制别在两个通道之间存在附加的时间差。你先试试同步采样方式,看是否还存在这个问题。

  • 能不能说的详细一点,不是同时到达的信号怎样进行同步采样?因为我是采集完一路信号后再发送PWM波,延时后再采集另一路信号。如何实现同步采样?

    而且我有两个疑问:

    1、我使用的始终是一个通道,所以应该不存在通道之间的附加时间差。

    2、因为要使用比较高的采样率,6.25MHZ,所以我16个通道都用上了,采用轮询方式软件触发进行采样。同步采样的话采样率可能就达不到这么高了。

    因为我是菜鸟一个,还有许多东西需要学习,所以有的问题可能比较低水平,希望见谅!

  • 先是换能器1发射超声波,换能器2接收;然后反过来,换能器2发射,换能器1接收。当管道里有介质流过时,顺着流速方向传播的超声波,速度就快点,假如是c+v1,逆着流速方向的超声波传播速度就慢点,假设为c-v1,那么接收换能器接收到的信号就有个时间差

    请问你现在用ADC怎么来模拟或实现这个过程?

  • 谢谢您!

    换能器会将超声波信号转化为电压信号。我是先发射一串PWM波,激发发射换能器发射超声波,延时一段时间后,在接收换能器接收到信号之前启动AD采样,采集512个点。有用信号就包含在了采集到的数据中。具体接收图形帖子开头的附图中有。另一路信号也是这个过程。

    麻烦了

  • 请问具体是用哪个通道,例如使用哪些PWM口激发哪个发射器1或2,使用哪个ADC输入口接收换能器1或2的电压,你软件设置的延时触发是多久?

  • 我用的始终都是A0通道,使用的T1PWM发射PWM波,ADCINA0通道。软件设置的延时是250微秒左右。

    谢谢您!

  • longhui,

    您好!

    做超声波流量检测主要的目的就是测量时间差嘛,个人感觉用AD测量的办法,就是算是外部AD精度也不会太高,而且成本很高的。

    我所接触到的类似应用是超声波热量表中的应用,比较通用的做法:1、分立方案,自己搭电路,运放比较器,然后接到Timer,测量时间差;2、采用GP21的方案。

    如果你那边时间紧的话,直接采用GP21吧。

  • 谢谢你,鸵鸟!

    你说的情况我知道的。我们这边分两拨人在做,有人在用单片机在做,阈值比较,过零检测和计时几乎全是靠硬件实现的,也用专门的计时芯片。但是国外的气超声流量计用DSP已经比较成熟了。我也看到国外有文献用2812做的,采样频率为6.25MHZ。

    其实,最后的结果要求精度是在纳秒级别的,肯定不能指望由AD采进来就实现,这个主要靠后面的算法了。因为现在我使用的是6.25MHZ的采样率,也就是0.16微秒的时间分辨率,所以只要时间上能达到这个分辨率就可以了,剩下的提高精度,就由我后期的数字信号处理来实现了。

    但是现在产生的正负二点几微秒的误差这是个很头疼的问题,我也不知道是由于2812内部AD不稳定造成的,还是什么原因,所以想请教一下前辈。

    我这个开发板使用的是5V的USB供电,就是供电直接是USB线插在电脑上的,所以我怀疑,会不会是电脑USB端口的电压不稳定,对AD造成的影响呢?还是因为内部AD太水的原因?

    麻烦了!

  • 方便把那个论文发上来看看不?国外的人能做的话,我们没有理由不能做。

    电源肯定是纹波越小越好!最新的一些系列的C2000比2812的ADC改进不少

  • 附件里就是那个文章,里面有他的2812的大概配置。不过DSP方面写的不是很多,就大概说了一下采样频率啊之类的。

    麻烦你了。

    Krasser, Eichberger, Kupnik - Electronic instrumentation for an ultrasonic transit-time gas flowmeter.pdf
  • 龙辉您好!

    采用两个通道,一个接正向的信号,一路接反向的信号!存到两个buffer里面,然后进行后续处理。

    他这边采用了同步采样的方式,一个接A0,一个接B0,要配置成同步采样!ADC的时钟是很准确的。

    不过我不觉得他这种方法是一个好的方法

  • 谢谢你,蝈蝈。花这么长时间看这个文章!

    这个我可能提前没说清楚。他用的是两个通道,四个换能器,两个通道同时发正向信号,同时接收,再同时发反向信号,同时接收。所以同时采两个通道。但是我只用一对换能器,一路信号接收完以后再发送PWM波,然后再接收反向信号,是顺序执行的,所以用两个通道的话,也无法同步采样的。

    麻烦你了。我现在考虑要不用外扩AD芯片试一下,但是这个以前没做过,网上资料也不是很多,不知道你有没有相关的资料或者指导。因为我查了一下,有用CPLD的,有用FPGA的,也有用单片机的,但都没有具体的例子或指导什么的。

    谢谢你了,蝈蝈,耽误你这么长时间。

  • 蝈蝈,您好,我看了龙辉说的这个超声运用,他的精度要求还是比较高的。

    我现在做的运用是:一个系统四个换能器,在同一时间内,只有一个发射PWM波,

    发射完PWM波后,然后四个通道要同时采样,希望每个通道的采样率在250Kbps,

    ADC的触发源是软件触发,连续采样15ms;

    其中每隔800uS我要把前面采样的200个数据拿来做信号的FIR运算(包络提取)。

    我选用的芯片是Piccolo的28022,它没有DMA,要怎么实现这样的运用呢。

    我的采样相位差精度要求小于150uS.

    我有以下几个问题:

    1、我要采样哪种采样方式,最合适?双系列同步采样还是,顺序采样?

    2、我要如何搬运这个ADC数据,如果频繁的中断,中断进入和退出的时间是多少?

      好像28022的ADC结果寄存器就只有16个,想连续采样可能要采用Ping-Pong结构;

      要如何实现;

    3、我在调用你们的FIR函数的时候如果算法里面有两个FIR算法(带通和低通),是否能在调用

      系统自带的FIR函数时合并一下。以提升性能。

    我是菜鸟,请蝈蝈老师或者用过该芯片的高手帮忙解答一下,不甚感激。