本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
CSDN 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
文章目录
一、ESP32 DAC 概览
ESP32有两个8位DAC(数字到模拟转换器)通道,连接GPIO25(通道1)和GPIO26(通道2)。
同时,当使用内置DAC模式( built-in DAC mode
)时,通过I2S驱动器,DAC通道也可以由“数字控制器”利用“写入的DMA风格示例数据”进行驱动。
不知道转述的准不准确😂,乐鑫官网的原话是:
The DAC channels can also be driven with DMA-style written sample data by the digital controller, via the I2S driver when using the “built-in DAC mode”.
注意:
本文 不介绍 通过I2S
来驱动DAC
通道序号 | ★GPIO(ESP32) | GPIO(ESP32-S2) |
---|---|---|
DAC_CHANNEL_1 |
GPIO25 |
GPIO17 |
DAC_CHANNEL_2 |
GPIO26 |
GPIO18 |
二、DAC的使用① —— 在通道GPIO上输出指定电压
在通道GPIO上输出指定电压是DAC最基本的使用,方法很简单。
官方在此功能上只提供了4个API函数:
dac_output_voltage()
设置某DAC通道的输出电压 (关键)dac_output_enable()
启动DAC输出dac_output_disable()
关闭DAC输出dac_pad_get_io_num()
【非必须】 用于通过DAC通道编号获取对应的GPIO编号
1、API 函数简介
函数1 | dac_output_voltage() |
---|---|
函数原型 | esp_err_t dac_output_voltage(dac_channel_t channel, uint8_t dac_value) |
简介 | 设置 DAC 输出电压。由于 DAC 输出为8位.所以取值为0-255 正比对应于电源电压(如0 - 3.3V ) |
返回值 | 若成功则返回ESP_OK |
参数 | channel : DAC通道dac_value : DAC 欲输出值 |
函数2 | dac_output_enable() |
---|---|
函数原型 | esp_err_t dac_output_enable(dac_channel_t channel) |
简介 | 启动(使能)DAC 输出。 如果使用I2S驱动,则 左声道 对应 DAC 通道2,右声道 对应 DAC 通道1 |
返回值 | 若成功则返回ESP_OK |
参数 | channel : DAC 通道 |
函数3 | dac_output_disable() |
---|---|
函数原型 | esp_err_t dac_output_disable(dac_channel_t channel) |
简介 | 关闭DAC输出 |
返回值 | 若成功则返回ESP_OK |
参数 | channel : DAC通道 |
函数4 | dac_pad_get_io_num() |
---|---|
函数原型 | esp_err_t dac_pad_get_io_num(dac_channel_t channel, gpio_num_t * gpio_num) |
简介 | 获取特定DAC通道的GPIO号。 |
返回值 | 若成功则返回ESP_OK |
参数 | channel : 通道gpio_num : 用于接受获取到的GPIO编号的变量指针 |
2、示例
在3.3v供电,不进入睡眠状态的ESP32上,输出一个2V的电压
以下例程基于C++
#include <iostream>
#include "driver/dac.h"
extern "C" void app_main(void) {
/*DAC channel 1 is GPIO25*/
dac_output_voltage(DAC_CHANNEL_1, 155