乐鑫技术交流
登录
直播中
万航渡路
8年用户
1295经验值
擅长:电源/新能源
私信
关注
[问答]
在IDF5.0引入的连续模式中使用ADC采样结果不匹配怎么办?
开启该帖子的消息推送
RAM
ADC采样
FreeRTOS
您好,我正在尝试在 IDF 5.0 引入的连续模式中使用 ADC,但是我在 adc_con
ti
nuous_config_t 中指定的采样率与我实际得到的不相关。这是我正在运行的代码:
代码:
#include
#include "esp_timer.h"
#include "freertos/FreeRTOS.h"
#include
#include
#include
#define SAMPLE_RATE 40000
adc_continuous_handle_t adcHandle = NULL;
std::atomic_uint32_t sampleCount;
void printSampleRateTask(void *arg)
{
uint32_t samplesPerSecond = sampleCount.exchange(0, std::memory_order_acq_rel);
printf("Time: %lld, samples per second: %lun", esp_timer_get_time(), samplesPerSecond);
}
extern "C" void app_main()
{
adc_continuous_handle_cfg_t handle_cfg = {
.max_store_buf_size = 2000,
.conv_frame_size = 1000,
};
ESP_ERROR_CHECK(adc_continuous_new_handle(&handle_cfg, &adcHandle));
adc_digi_pattern_config_t channel[1] = {};
channel[0].atten = ADC_ATTEN_DB_11;
channel[0].channel = 0;
channel[0].unit = 0;
channel[0].bit_width = SOC_ADC_DIGI_MIN_BITWIDTH;
adc_continuous_config_t cfg = {
.pattern_num = 1,
.adc_pattern = channel,
.sample_freq_hz = SAMPLE_RATE,
.conv_mode = ADC_CONV_SINGLE_UNIT_1,
.format = ADC_DIGI_OUTPUT_FORMAT_TYPE1,
};
ESP_ERROR_CHECK(adc_continuous_config(adcHandle, &cfg));
ESP_ERROR_CHECK(adc_continuous_start(adcHandle));
const esp_timer_create_args_t periodic_timer_args = {
.callback = &printSampleRateTask,
.name = "sampleRate",
};
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 1000000));
esp_err_t ret;
uint32_t ret_num = 0;
uint8_t result[1000] = {0};
while (1)
{
ret = adc_continuous_read(adcHandle, result, sizeof(result), &ret_num, 1000);
if (ret == ESP_OK)
{
sampleCount += ret_num / SOC_ADC_DIGI_RESULT_BYTES;
}
else
{
printf("status: %dn", ret);
}
}
}
这是串行输出的摘录:
代码:
Time: 1028996, samples per second: 32500
Time: 2028961, samples per second: 32500
Time: 3028961, samples per second: 33000
Time: 4028961, samples per second: 32500
Time: 5028961, samples per second: 33000
Time: 6028961, samples per second: 32500
Time: 7028961, samples per second: 33000
Time: 8028961, samples per second: 32500
Time: 9028961, samples per second: 32500
Time: 10028961, samples per second: 33000
Time: 11028961, samples per second: 32500
Time: 12028961, samples per second: 33000
Time: 13028961, samples per second: 32500
这就是 IDF 在构建时所说的:
代码:
CONFIGURATION:
PLATFORM: Espressif 32 (5.3.0+sha.98b1e96) > WEMOS D1 MINI ESP32
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, 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.50000.0 (5.0.0)
- tool-cmake @ 3.16.4
- tool-esptoolpy @ 1.40400.0 (4.4.0)
- tool-mkfatfs @ 2.0.1
- tool-mklittlefs @ 1.203.210628 (2.3)
- tool-mkspiffs @ 2.230.0 (2.30)
- tool-ninja @ 1.7.1
- toolchain-esp32ulp @ 1.23500.220830 (2.35.0)
- toolchain-xtensa-esp32 @ 11.2.0+2022r1
我试过更改采样率、缓冲区大小以及 max_store_buf_size 和 conv_frame_size,但没有任何组合可以使采样率匹配。我怎样才能让它更精确?
回帖
(1)
王婷
2023-3-1 15:26:37
你好!在我使用ESP-IDF 连续读取示例进行的测试中,22050 Hz 的帧率会产生不稳定的值:17920 或 18048 Hz。. . 在我的例子中,生成 22.05 kHz WAV 文件是无用的。. .
你好!在我使用ESP-IDF 连续读取示例进行的测试中,22050 Hz 的帧率会产生不稳定的值:17920 或 18048 Hz。. . 在我的例子中,生成 22.05 kHz WAV 文件是无用的。. .
举报
更多回帖
rotate(-90deg);
回复
相关问答
RAM
ADC采样
FreeRTOS
USB线与电流
不
匹配
怎么办
2021-10-09
1035
STM32
ADC
常见的问题有哪些?如何解决
2022-01-25
854
esp32s3怎么设置才能使flash
在
QIO
模式
下和PSRAM
在
Octal
模式
下正常启用120M选项?
2023-03-03
338
ADC
连续
读取
采样
率未指定是怎么回事?
2023-04-14
209
esp32s3无法启用120m频率的原因?
2023-03-07
329
交错
ADC
之间的增益
不
匹配
2019-07-25
1937
stm32串口发送数据个数和上位机接收到的数据个数
不
匹配
怎么办
?
2021-12-13
1362
labview实时模块
不
匹配
??
2016-05-02
2056
ESP32
连续
读取
ADC
,每次读取的
ADC
数据都不一样,怎么解决?
2024-06-11
120
AD7190数据滤波处理请问如何减小
ADC
的数据跳动?
2018-08-16
8114
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分