ESP32学习笔记(45)——DAC接口使用

716 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情

一、概述

ESP32 有两个 8 位 DAC(数模转换器) 通道,分别连接 GPIO25(通道 1)GPIO26(通道 2)

DAC 驱动器允许将这些通道设置为任意电压。

ESP-IDF 编程指南——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)。即:

Vout=N255VddV_{out} = \frac{N}{255} V_{dd}

其中,NNdac_value 的值,VddV_{dd} 为电源电压(通常为3.3V)。计算得的 VoutV_{out} 为输出的DAC电压。

N=155N = 155 时,有

Vout=155255Vdd=155255×3.3V2.00588VV_{out} = \frac{155}{255} V_{dd}=\frac{155}{255}×3.3V≈2.00588 V
#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 日

• 参考:ESP32 之 ESP-IDF 教学(七)——数模转换器(DAC)