esp32外挂ADC,数据收集问题

seanfan@qq.com
Posts: 16
Joined: Mon Dec 14, 2020 1:02 pm

esp32外挂ADC,数据收集问题

Postby seanfan@qq.com » Sun May 30, 2021 3:32 am

我当前有这样一个项目:硬件上,一个24位ADC,是I2C接口+一个INT接ESP32;软件上,当这个ADC每次采样完成并准备好数据后,会通过INT脚发上升沿中断信号给ESP32;在ESP32里,基于ESP-IDF我是这样处理的:

定义I2C总线驱动;调用xQueueCreate(10, sizeof(uint32_t))创建gpio_evt_queue;定义gpio中断GPIO_PIN_INTR_POSEDGE类型,同时打开中断(中断发生时发送一个gpio_evt_queue);创建Task等待gpio_evt_queue,当接收到一个gpio_evt_queue时,通过I2C读ADC的采样数据;

目前我遇到的问题是:当ADC采样率设置低时,比如80HZ,程序能正常运行;但当设置到更高采样率,比如160HZ时,gpio_evt_queue会爆满而程序跑飞。试着把gpio_evt_queue尺寸调大,这只能延缓queue爆满的过程;试着在Task里,仅读ADC数据并保存到Buffer,仍然会queue爆满;

综上所述,感觉是task loop跟不上gpio中断,请问这样的问题如何优化好?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp32外挂ADC,数据收集问题

Postby ESP_Gargamel » Mon May 31, 2021 2:39 am

你先分析一下 task 中接收到一个 gpio_evt_queue 后,单次通过 I2C 读 ADC 的采样数据需要耗费多少时间,从而可以大致算出可以支持的最大采样率。然后再来看能否优化这个读取的时间。

Who is online

Users browsing this forum: No registered users and 79 guests