摘要:本文介绍模数转换器DAC的使用方法
之前已经了解过ESP32芯片ADC功能的使用,它可以把模拟的电压信号转换成数字量。今天来看一下DAC(Digital to analog converter)功能是如何使用的,这个功能的作用是将数字量转换为模拟量。在控制电机的时候也需要将模拟量转换为数字量,那和这个有什么区别呢?这个DAC是真正的将数字量转换成模拟电压量,我可以真正的得到某个稳定的电压值。而PWM是用了一种能量等效的办法,通过占空比控制输出的能量来达到控制电机转速的目的,并不是真正的电压调节来调整电机的转速。
ESP32有两个8位数模转换器(DAC)通道,分别连接到GPIO25(通道1)和GPIO26(通道2)。在这里需要注意的是,由于模拟量输出的特殊性,DAC所使用的引脚是固定的,不能像其它功能一样任意选择所使用的GPIO引脚。ESP32的每个DAC通道可以将数字值0~255转换成模拟电压0~Vref(此处的Vref为VDD3P3_RTC引脚输入的参考电压,一般来说其输入的电压值应等于电源电压VDD)。输出电压可按以下方式计算:
out_voltage = Vref * digi_val / 255
由于DAC只支持8位数模转换,因此可以看到DAC的精度是远低于ADC的最高精度的。
在ESP32中,DAC转换器支持以下列方式输出模拟信号:
- 直接输出电压。DAC通道持续输出某一指定电压。
- 通过DMA输出连续模拟信号。DAC以某一特定频率转换缓冲器中的数据。
- 通过余弦波发生器输出余弦波。DAC通道可以输出特定频率和振幅的余弦波。
今天将介绍一下如何使用DAC通道直接输出电压。在Arduino中,乐鑫科技为大家提供了dacWrite()方法来方便的使用DAC输出电压功能。该方法的定义如下:
void dacWrite(uint8_t pin, uint8_t value)
其中,第一个参数为所用的引脚,这个参数的值只能是25或者26,否则程序会报错。value是8位表示输出电压的值。前面有计算公式了。
先来做一个呼吸灯的例子。找出之前使用的RGB LED模块,如下图所示:
具体接线方法如下表所示:
RGB LED模块 |
ESP32扩展板 |
- |
GND |
R |
P25 |
G |
P26 |
这个程序所要实现的功能是红绿LED交替亮起、熄灭。具体程序代码如下所示:
#define LED_R_PIN 25 #define LED_G_PIN 26 void setup() { |