Post Go back to editing

ADUC706x ADC通道切换的问题

在使用7061中,需要切换AD通道采集数据,ADC配置使用了滤波器,在通道切换后,采集的数据出现错乱。

请问下切换的流程应该怎样操作?

  • 建议切换ADC通道前,先把ADC配置为Idle mode,然后再切换通道,配置完成后再把ADC配置为连续模式(假设ADC正常工作时是连续模式)。推荐以上配置在ADC的中断响应函数中完成。

  • 我也是先把ADC配置为Idle mode,然后再切换通道的。后来我发现了出错是因为ADCxDAT里的值是切换通道前的数值,并没有在切换通道后实时更新。需要过若干个转换次数,才能读到正确的数据。

    这个”若干次数“应该怎么判断的呢?如何能够在确定的状态下读到正确的数据?

    手册上有如下说明:Note that, when software switches from one input to another (on the same ADC), the digital filter must first be cleared and then allowed to average a new result. Depending on the con-figuration of the ADC and the type of filter, this can take multiple conversion cycles.

    这里是如何清除数字滤波器?

  • 如果是ADuCM360,使用中断模式,在切换通道后,在下一个中断应该就是一个有效的数据。当然这个中断的等待时间会长一些。

    7061的手册上没有写清楚,不过应该也是一样的,即使用ADC中断,切换通道后,如果有中断,数据应该就是有效的。你可以使用示波器在中断服务程序里面改变GPIO的电平,去观察切换通道后的第一个中断是否等的时间更久一些,这个时间是和滤波器的设置相关,一帮情况切换通道后的第一次转换需要3到4倍的时间。

    切换通道后7061会自动清除数字滤波器。

  • 谢谢回复。我尝试等待ADCSTA寄存器的bit0、bit1位置位,可以读到正确的数值。这个时间有点长,而且不确定。

    在使用了ADCFLT滤波后,ADC产生中断,ADCxDAT的数值并没有更新(可能是需要等待硬件滤波器平均后才更新)。

    因此不能只判断中断置位读取ADCxDAT,需要通过判断ADCSTA的转换标志位。