Page 1 of 1

esp32c3 使用esp now 发送数据干扰adc采集的数据

Posted: Sat Aug 26, 2023 8:58 pm
by xiaochutan
你好,

我正在尝试使用esp32c3测试同时使用adc和esp now功能,使用adc1 + continuous dma 循环采集麦克风数据,每次采集后通过esp now发送出去。

核心逻辑代码如下:

Code: Select all

while(count < sample_size) {
    ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
    memset(read_buf, '\0', read_buf_len);
    uint32_t ret_num = mic_adc_read_continuous(read_buf, read_buf_len);
    //mic_adc_continuous_stop();
    for (int i = 0; i < ret_num; i += SOC_ADC_DIGI_RESULT_BYTES) {
      adc_digi_output_data_t *p = (adc_digi_output_data_t*)&read_buf[i];
      // TODO: check channel infos if needed.(i.e. multiple adc channel are used.)
      play_buf[count] = p->type2.data >> 4;
      count++;
    }
    //ets_delay_us(100);
    broadcast(play_buf + count - 200, 200);
    //ets_delay_us(100);
    //mic_adc_continuous_start();
  }
发现的问题是如果每次采集后通过esp now广播数据,那么采集的adc数据就会有部分数据异常,如果每次循环只采集数据不发送,那么adc采集的音频数据就正常。目测是无线功能对adc造成了干扰。
进行过尝试:
在broadcast函数前后加一定时间的延时,任然观测到干扰,
使用一定时间延时代替broadcast函数,任然观测到干扰,
broadcast函数之前停止adc采集,并且在发送后再次开启,任然团测到干扰。

可视化数据如下,图中包含前8000个采样点,采样频率8khz,每次dma采集完200采样点后触发回调函数,可明显观察到每组采样点里都有少量异常点,如图中红圈所示。将所有采样点通过i2s进行播放,会有嘟嘟嘟的噪声几乎掩盖掉人声。
adc200.csv
原始数据
(30.12 KiB) Downloaded 641 times
原始数据:
adcData200.PNG
数据可视化
adcData200.PNG (119.84 KiB) Viewed 4934 times
编译环境: Windows + VSCode + PlatformIO + IDF. (PlatformIO version: Core 6.1.10·Home 3.4.4, Espressif 32 version: 6.3.2)
开发板: ESP32-C3-DevKitM-1
麦克风: MAX4466模块
扬声器: MAX98357A模块

工程文件链接:https://github.com/xiaochutan123l/DetectiveBadge

硬件图:
e7499cbf1dea01173de9999696a71bc.jpg
硬件图
e7499cbf1dea01173de9999696a71bc.jpg (3.16 MiB) Viewed 4934 times

我想问一下无线传输对adc采集的干扰是正常的吗,如果是,那么有什么办法可以避免干扰吗?非常感谢!

Re: esp32c3 使用esp now 发送数据干扰adc采集的数据

Posted: Tue Aug 29, 2023 7:43 am
by ESP_LiuH
是正常的,推荐使用 ESP32-S2,当开启 WIFI 时,它可以使用 ADC2

Re: esp32c3 使用esp now 发送数据干扰adc采集的数据

Posted: Tue Aug 29, 2023 12:57 pm
by xiaochutan
ESP_LiuH wrote:
Tue Aug 29, 2023 7:43 am
是正常的,推荐使用 ESP32-S2,当开启 WIFI 时,它可以使用 ADC2
如果我没理解错的话,也就是说esp32c3的Wi-Fi也是用的adc1,所以我同时使用adc1和Wi-Fi功能那么adc就无法避免受到干扰,只能二选一?有什么workaround吗,因为种种原因要更换成s2或其他系列比较麻烦,所以优先尝试在c3上解决这个问题。

Re: esp32c3 使用esp now 发送数据干扰adc采集的数据

Posted: Thu Aug 31, 2023 3:35 am
by ESP_LiuH
请提供下如下信息:

1. 提供的链接无法访问,请将复现的 code 作为附件附上。
2. 目前使用的 ESP-IDF 版本是多少?提供对应 commit ID 或 TAG 均可以
3. 切换到 master 版本上复测下,是否依然存在相同的问题
4. 加大采样间隔时间后,是否还存在,如:原来200个,修改为1000个这种
5. 同时提供下受干扰的数据,我们内部再分析下看受干扰的数据的特性,是自己会恢复,还是一直到下一段数据的开始才恢复

Re: esp32c3 使用esp now 发送数据干扰adc采集的数据

Posted: Thu Aug 31, 2023 9:13 pm
by xiaochutan
ESP_LiuH wrote:
Thu Aug 31, 2023 3:35 am
请提供下如下信息:

1. 提供的链接无法访问,请将复现的 code 作为附件附上。
2. 目前使用的 ESP-IDF 版本是多少?提供对应 commit ID 或 TAG 均可以
3. 切换到 master 版本上复测下,是否依然存在相同的问题
4. 加大采样间隔时间后,是否还存在,如:原来200个,修改为1000个这种
5. 同时提供下受干扰的数据,我们内部再分析下看受干扰的数据的特性,是自己会恢复,还是一直到下一段数据的开始才恢复
1. 请看附件code.rar
code.rar
(55.91 KiB) Downloaded 588 times
2. 一开始尝试过直接装idf但是一直没搞定,所以目前使用的vscode + platformio + esp-idf. 能找到的版本信息是编译时的输出:

Code: Select all

Processing esp32-c3-devkitm-1 (platform: espressif32; board: esp32-c3-devkitm-1; framework: espidf)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-c3-devkitm-1.html
PLATFORM: Espressif 32 (6.3.2) > Espressif ESP32-C3-DevKitM-1
HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-espidf @ 3.50002.230601 (5.0.2)
 - tool-cmake @ 3.16.4
 - tool-esptoolpy @ 1.40501.0 (4.5.1)
 - tool-idf @ 1.0.1
 - tool-mconf @ 1.4060000.20190628 (406.0.0)
 - tool-ninja @ 1.9.0
 - toolchain-esp32ulp @ 1.23500.220830 (2.35.0)
 - toolchain-riscv32-esp @ 11.2.0+2022r1
3. 由于platformio没有能找到的git仓库信息所以没能切换分支

4. 测试了200采样点和1000采样点,每组采样完发送一次200byte的esp now数据,测试都做了3次排除低概率特殊事件,但是干扰依然存在,将数据可视化之后可以明显观察到受干扰的数据大概就是出现在无线发送的时候。上面的图是200采样点间隔,可以看到干扰点之间差不多都是间隔200采样点左右,下面的是1000的,可以看到干扰点之间间隔差不对1000个采样点。
捕获.PNG
捕获.PNG (424.64 KiB) Viewed 4776 times
5. 请看附件data.rar
data.rar
(46.12 KiB) Downloaded 442 times
非常感谢