在之前的章节中,我们测试了读取一个模拟信号,同时根据模拟信号的值以pwm的方式控制一个LED的亮度。在之前的文章中,我们已经介绍过pwm信号和模拟信号。我们已经测试了生成pwm信号,而在之后的章节中,pwm信号已经无法满足测试要求,所以,在这里插入一个小章节,介绍在引脚生成一个模拟信号。
在Arduino IDE标准库中,并不包括生成模拟信号的函数,所以,我们需要在开始包含一个头文件:
#include <esp32-hal-adc.h>
该头文件包括一个设置模拟值的函数:
dacWrite();
我们写一个测试来测试该函数生成的模拟值:
电路十分简单,只要将4号和25号引脚直接短接就可以了。
#include <esp32-hal-adc.h>
uint8_t dac_value = 0; //DAC值,2^8长度
void setup() {
Serial.begin(115200);
}
void loop() {
dac_value++; //DAC值累加
dacWrite(25,dac_value); //25号引脚输出对应电压
int adc_value = analogRead(4); //4号引脚读取25号引脚输出的模拟值
Serial.print(" | ");
Serial.print("adc_value = ");
Serial.println(adc_value); //串口输出当前输入的模拟值
delay(100);
}
25号引脚会生成一个慢慢增加的模拟信号,而4号引脚会读取到该信号值。
我们把对应的模拟值转为电压值,尝试对该电压进行测量:
#include <esp32-hal-adc.h>
uint8_t dac_value = 0; //DAC值,2^8长度
void setup() {
Serial.begin(115200);
}
void loop() {
dac_value = dac_value + 15; //DAC值累加
float vout = (dac_value) * 3.3 / 255; //DAC值转为电压值
Serial.print("vout = ");
Serial.println(vout); //串口输出当前输出的电压值
dacWrite(25,dac_value); //25号引脚输出对应电压
delay(2000);
}
把引脚25连接到万用表的红笔,把GND引脚连接到万用表的黑笔,其它所有引脚悬空。万用表选择测量电压档,同时观察串口输出的电压与万用表的电压读数是否相同(一定会存在多少误差)。
这一章只简单介绍该函数的作用,我们在之后会用到该函数来生成一个模拟信号,可以更方便地测试ESP32的ADC功能。