CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

GR5515 APP驱动历程中的AD采样,DMA数据的前两个数据不正确 GR551x

130***761

2021-08-10 11:01

使用贵司提供的历程进行ADC采样时,发现第一次DMA数据的前两个AD数据不正确,一般在1.6V左右,后续偶尔也会出现,第一次必现。

0收藏

0赞成

LGY

汇顶员工
2021-08-11 10:37

这是ADC模块的采样参数没那么快生效导致,在刚初始化完后的第一次采集数据会发生。

ADC初始化完成后的第一次数据采集,ADC模块内部需要花一个周期清除之前的采样参数,再花一个周期时间让新的采样参数生效。所以在ADC初始化完成后立即调用app_adc_conversion_sync()或app_adc_conversion_async()接口去采集数据,此时采样参数还没稳定,采集到的前面2~3个点是错误的。第二次及后面的调用接口采集到的数据不会出现这种情况。


建议在ADC初始化后的第一次采集数据,把前面的2~3个数据过滤掉。

1条评论

0赞成

0收藏

您的评论

130***761

2021-08-11 10:46

初始化之后延时300ms后采样,前两个数据仍然异常,是要初始化之后延时多长时间再去采样才会正常呢?另外现在5515的AD每次只能采集一个通道,现在要用到多通道,切换通道时每次都要重新初始化,是不是那么每次的前面几个数据都要丢弃?

0条评论

0赞成

0收藏

您的评论

LGY

汇顶员工
2021-08-11 11:22

1. 采样参数只有在采样时钟发起后才开始去生效,这个生效过程要花时间; ADC初始化只是把参数写入到寄存器。所以只有调 app_adc_conversion_sync()或app_adc_conversion_async()才会去生效。在ADC初始化后延时多久,都无法规避这两个异常点。

2. 是的,通道变化涉及到参数的变化,所以每次变化通道后的采集,需要丢弃前面2个异常数据。

0条评论

0赞成

0收藏

您的评论

wan****com

汇顶员工
2021-08-12 18:09

感谢你的提问,我们会在SDK 1.6.10之后的版本,优化接口实现,内部舍弃无效数据,对外保证数据的正确性。

0条评论

0赞成

0收藏

您的评论

Ping

汇顶员工
2022-01-26 09:34

1. 1.6.12版本,已在底层过滤掉第一次启动ADC时前面的两个异常数据,分别在Polling模式采集接口和DMA模式采集接口里面,第一次启动ADC Clock后,先等待采集到两个数据,然后读取和丢弃这两个数据,再继续进行下面的操作;

2. 1.6.12版本修复app_adc采样dma方式进行采样(采样频率16M),采样长度设定为4,前面4个数据是错误的问题;

3. 关于多通道的ADC采集接口,可以提供Patch(基于1.6.12版本SDK实现) ,相关接口及注意事项如下:

uint16_t app_adc_multi_channel_conversion_async(app_adc_samle_node_t *p_begin_node, uint32_t total_nodes);-------非RTOS和RTOS下都可以用

uint16_t app_adc_multi_channel_conversion_sem_sync(app_adc_samle_node_t *p_begin_node, uint32_t total_nodes);----仅RTOS下可用

入参1:指定采集的通道节点链表(里面包含通道号、通道数据buf、该通道采集数据长度);

入参2:指定一共采集多少个通道;

备注:

(1) 接口只是启动了采集功能,退出后MCU资源会释放出来。当设定的所有通道采集完毕,初始化时指定的回调函数会被调用,从而告知应用层全部采集完毕。此时应用层就可以从每个通道指定的buf里面访问数据;

(2) 通道的自动切换是在上一个DMA完成中断里面进行,所以比DMA优先级更高的中断会打断通道的切换,如果系统存在比较频繁的优先级比较高的中断,通道切换的时间可能就会较长;

(3) 该接口为追求切换效率,底层未过滤数据,需要应用层过滤掉前面2~3个采集数据;

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注