先说结论,ESP32内部adc只能达到250KSPS左右,远不及官方所说2MSPS
我的理解是ESP32使用I2S协议对内部ADC进行数据采集,内部I2S时钟使用以下函数能将信号输出观察,实测速度的确能达到2M。
PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[18], PIN_FUNC_GPIO);
gpio_set_direction(18, GPIO_MODE_DEF_OUTPUT);
gpio_matrix_out(18, I2S0I_WS_OUT_IDX, 0, 0);
但是ADC转换的速度真的有这么快吗?
这是我采用1MSPS采样输出的部分数据,可以看到相邻四个数据是重复的,就算我有1M个数据,其真正能用的也只有1M/4 = 250K个呀。同理,当我设置采样率为2MSPS时,会有8个数据是重复的,这里就不放图片了。
因为我得出ESP32内部ADC只具有250K的采样率并在GITHUB上提出了自己的疑问。最终乐鑫的技术人员也进行了实验,得出了ESP32的确不具有2MSPS采样率的结论,但具体为多少还要后续测试,且其是硬件限制。
我在ESP32采样率的问题上花费了很多时间,到处找各种例子工程做实验,最后得出了这个结论。希望能给到后面要研究该芯片内部ADC的人一些启示和帮助。
GITHUB帖子见:对ESP32 ADC的几个疑问 以及 BUG反馈 (IDFGH-8819) · Issue #10248 · espressif/esp-idf · GitHub