供电模式与烧录方式:USB
编译软件:VS CODE
本人因为项目需要,接触ESP32已经有2个月了,但是对ESP32的ADC仍然有一些疑问 以及 想反馈一些bug
问题一:
ESP32真的能实现 真;2MSPS采样吗?
Code: Select all
IDFV4.4.2的dma_Read
Code: Select all
F:\ESP-IDF\Espressif\frameworks\esp-idf-v4.4.2\components\driver\test\adc_dma_test下的test_esp32.c
Code: Select all
F:\ESP32\idf\esp-idf_5\esp-idf\components\driver\test_apps\i2s_test_apps\legacy_i2s_adc_dac
Code: Select all
IDFV5的continous_read_main
我曾在乐鑫中文论坛找到过一篇关于实现2MSPS的实例,但其IDF已落后,多数API已无法在IDF4、IDF5中实现。链接如下:
viewtopic.php?f=25&t=8335&sid=ef3ed33a1 ... f3cb8dcc52
说说我为什么得出ESP32只支持250KSPS的结论。
四个工程,在程序的正确性上来说(编译能通过)都能将采样率提高到2MSPS,但实际采样得到的数据却存在重复出现的情况。
例如我将采样率设置为1MSPS,通过测试,采样率的确在1MSPS附近,也能得到近1M个数据,但这些数据中,会有相邻四个数据相同,这不就意味着我得到的数据真实性必须除以4吗?1MSPS/4 = 250KSPS。以下有2个IDF版本得到的相同结果:
(我没找到这个论坛发图的地方,具体的图片可以看我GITHUB发的贴子https://github.com/espressif/esp-idf/issues/10248)
且多开通道重复出现的情况也不会消除,并不是跟我曾经想的一样,八个通道分别250KSPS,所以加起来2MSPS.在我看来,ESP32采用I2S去采样ADC,但ADC采样率并没有这么快(在250KSPS附近),导致ESP32多次获取到相同的值(因为ADC未来得及转换)
问题二
ESP32单通道采样时,IDF4.4.2中ad采样数据前后顺序错位,这个问题在我前面发的中文论坛链接里也有提到,原话:
这是之前我使用ESP32采样的正弦波波形图,我一度怀疑这是ESP32 ADC内部噪声所致。我怀疑单通道AD采样值被i2s模块切成左右声道,输出时前后顺序错位,i2s改为单声道可能就OK了。
根据论坛中的建议,我调换了一些数据的前后顺序,下方是更改后的波形图:
(我没找到这个论坛发图的地方,具体的图片可以看我GITHUB发的贴子https://github.com/espressif/esp-idf/issues/10248)
IDF5我还未进行测试,不知是否改善。
结论
我已经在ESP32的ADC采样率上花费了太多时间,但始终无法在ESP32内部ADC高速采样上获得进展,因此发布了这篇帖子。希望碰到过类似问题的朋友给些建议。
如何才能实现ESP32的2MSPS采样。