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

Posted Leung_ManWah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32学习笔记(45)——DAC接口使用相关的知识,希望对你有一定的参考价值。

一、概述

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)。即:
V o u t = N 255 V d d V_{out} = \\frac{N}{255} V_{dd} Vout=255NVdd
其中, N N Ndac_value 的值, V d d V_{dd} Vdd 为电源电压(通常为3.3V)。计算得的 V o u t V_{out} Vout 为输出的DAC电压。

N = 155 N = 155 N=155 时,有
V o u t = 155 255 V d d = 155 255 × 3.3 V ≈ 2.00588 V V_{out} = \\frac{155}{255} V_{dd}=\\frac{155}{255}×3.3V≈2.00588 V Vout=255155Vdd=255155×3.3V2.00588V

#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)

以上是关于ESP32学习笔记(45)——DAC接口使用的主要内容,如果未能解决你的问题,请参考以下文章

ESP32学习笔记(39)——播放MP3文件(内部DAC方式)

ESP32学习笔记(25)——OTA(空中升级)接口使用(简化API)

ESP32学习笔记(36)——BluFi(蓝牙配网)接口使用

ESP32学习笔记(49)——ESP-WIFI-MESH接口使用

ESP32学习笔记(49)——ESP-WIFI-MESH接口使用

ESP32学习笔记(22)——ADC接口使用