一、概述
ESP32 有两个 8 位 DAC(数模转换器) 通道,分别连接 GPIO25(通道 1) 和 GPIO26(通道 2)。
DAC 驱动器允许将这些通道设置为任意电压。
二、API说明
以下 DAC 接口位于 driver/include/driver/dac_common.h 。
2.1 dac_output_voltage
2.2 dac_output_enable
2.3 dac_cw_generator_config
2.4 dac_cw_generator_enable
三、通道引脚
两个 8 位 DAC(数模转换器) 通道,分别连接 GPIO25(通道 1) 和 GPIO26(通道 2)。
typedef enum {
DAC_CHANNEL_1 = 0, /*!< DAC channel 1 is GPIO25(ESP32) / GPIO17(ESP32S2) */
DAC_CHANNEL_2 = 1, /*!< DAC channel 2 is GPIO26(ESP32) / GPIO18(ESP32S2) */
DAC_CHANNEL_MAX,
} dac_channel_t;
四、DAC输出电压
由于 DAC 输出为 8 位.所以取值为 0-255
正比对应于电源电压(如0 - 3.3V
)。即:
其中, 为 dac_value
的值, 为电源电压(通常为3.3V)。计算得的 为输出的DAC电压。
当 时,有
#include "driver/dac.h"
void app_main(void)
{
dac_output_voltage(DAC_CHANNEL_1, 155);
dac_output_enable(DAC_CHANNEL_1);
}
五、DAC输出余弦波
#include "driver/dac.h"
void app_main(void)
{
dac_cw_config_t config;
config.en_ch = DAC_CHANNEL_1;
config.freq = 55000;
config.scale = DAC_CW_SCALE_1;
config.phase = DAC_CW_PHASE_0;
dac_cw_generator_config(&config);
dac_cw_generator_enable();
dac_output_enable(DAC_CHANNEL_1);
}
这里有个问题,为什么设置频率
55000(100KHz)
,最后结果只有50多KHz。
ESP32论坛里也有人问:DAC余弦波发生器的奇怪行为
• 由 Leung 写于 2021 年 8 月 17 日