130***761
使用贵司提供的历程进行ADC采样时,发现第一次DMA数据的前两个AD数据不正确,一般在1.6V左右,后续偶尔也会出现,第一次必现。
LGY
这是ADC模块的采样参数没那么快生效导致,在刚初始化完后的第一次采集数据会发生。
ADC初始化完成后的第一次数据采集,ADC模块内部需要花一个周期清除之前的采样参数,再花一个周期时间让新的采样参数生效。所以在ADC初始化完成后立即调用app_adc_conversion_sync()或app_adc_conversion_async()接口去采集数据,此时采样参数还没稳定,采集到的前面2~3个点是错误的。第二次及后面的调用接口采集到的数据不会出现这种情况。
建议在ADC初始化后的第一次采集数据,把前面的2~3个数据过滤掉。
130***761
初始化之后延时300ms后采样,前两个数据仍然异常,是要初始化之后延时多长时间再去采样才会正常呢?另外现在5515的AD每次只能采集一个通道,现在要用到多通道,切换通道时每次都要重新初始化,是不是那么每次的前面几个数据都要丢弃?
LGY
1. 采样参数只有在采样时钟发起后才开始去生效,这个生效过程要花时间; ADC初始化只是把参数写入到寄存器。所以只有调 app_adc_conversion_sync()或app_adc_conversion_async()才会去生效。在ADC初始化后延时多久,都无法规避这两个异常点。
2. 是的,通道变化涉及到参数的变化,所以每次变化通道后的采集,需要丢弃前面2个异常数据。
wan****com
感谢你的提问,我们会在SDK 1.6.10之后的版本,优化接口实现,内部舍弃无效数据,对外保证数据的正确性。
Ping
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个采集数据;
打开微信,使用“扫一扫”即可关注