ESP32 在 GPIO 上生成可变频率输出以驱动外部设备的最佳方式

问题描述 投票:0回答:1

我正在开发一个 ESP32 项目,几个 GPIO 引脚正在控制外部设备。我正在添加另一个设备,它需要大约从 383Khz 到 1476Khz 的可变时钟。为了改变频率,我将 GPIO 引脚配置为 ADC 并连接到电位计。这将更新变量 X,并且该变量将更新频率输出到另一个 GPIO 引脚以驱动新设备。

问题是做到这一点并最大限度地减少资源和程序内存的最佳方法是什么?我应该使用计时器或 PCM 模块,还是仅以纳秒延迟打开和关闭 GPIO 引脚?是否可以在程序运行时更新计时器的设备?程序运行时可以更改 PCM 频率吗? 383Khz 至 1476Khz 提前致谢。 请向我指出任何代码示例和类似资源。

还什么都没有。只是寻找最好的方法。

variables controls external esp32 frequency
1个回答
0
投票

您可以使用LED控制外围设备。它主要设计用于控制 LED 的强度,但您可以使用它来生成占空比为 50% 的所需频率的 PWM 信号,其行为类似于时钟信号。

这是生成 2.048MHz 时钟信号的示例:

#include <driver/ledc.h>

ledc_timer_config_t ledc_timer = {
    .speed_mode = LEDC_HIGH_SPEED_MODE,
    .bit_num    = LEDC_TIMER_2_BIT,
    .timer_num  = LEDC_TIMER_0,
    .freq_hz    = 2048000
};
ledc_channel_config_t ledc_channel = {
    .gpio_num   = GPIO_NUM_33,
    .speed_mode = LEDC_HIGH_SPEED_MODE,
    .channel    = LEDC_CHANNEL_0,
    .timer_sel  = LEDC_TIMER_0,
    .duty       = 2
};

ledc_timer_config(&ledc_timer);
ledc_channel_config(&ledc_channel);

然后您可以使用

ledc_set_freq
功能即时更改频率。

© www.soinside.com 2019 - 2024. All rights reserved.