概念
什么是模拟信号,什么是数字信号。
模拟信号(Analog Signal):模拟信号是连续变化的量或者信号,生活中接触到的信号基本都是模拟信号,温度变化,天体运动等等,这些都是连续的信息,都是模拟信号。模拟信号,简单的说就是用电信号模拟出其他的信号,比如用电信号模拟出图像,模拟出声音的声波。
数字信号(Digital Signal):数字信号是时间离散、数值离散的信号,数字信号存在采样,还存在量化,只能取到一些不连续的固定值,这也是数字信号和模拟信号之间可以进行相互转换的原因。所以,总结就是模拟信号时间连续,幅值连续,数字信号时间离散,幅值离散。模拟电路就是使用、处理模拟信号的电路;数字电路就是使用、处理数字信号的电路。
ADC(Analog to Digital Converter)即模数转换器,它可以将模拟信号转换为数字信号。由于单片机只能识别二进制数字,所以外界模拟信号常常会通过 ADC 转换成其可以识别的数字信号。常见的应用就是将变化的电压转成数字信号。
电路设计
代码
在串口监视器显示 analogRead() 模拟输入我们可以先在串口监视器中,打印一下读取到的 analogRead() 的值,这里需要使用到 Arduino 内置的串口函数:Serial.begin():设置通信波特率,一般使用 9600,这样就可以在串口监视器中直接打印出来内容;Serial.println():在串口屏中打印内容。
串口监视器位置:工具-串口监视器,波特率设置为9600
#define POT 26
// 初始化电位计输入信号
int pot_value;
void setup() {
// 设置串口通信波特率 9600
Serial.begin(9600);
pinMode(POT, INPUT);
}
void loop() {
// 读取电位计模拟输入值
pot_value = analogRead(POT);
// 打印模拟值在串口屏上
Serial.println(pot_value);
delay(50);
}
使用 analogRead() 调节 LED 亮度
#define POT 26
#define LED 13
// variable for storing the potentiometer value
int pot_value;
int led_value;
void setup() {
Serial.begin(9600);
pinMode(POT, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
// 读取电位计模拟输入值
pot_value = analogRead(POT);
// 把电位计模拟输入值转换为 LED 的模拟输出值。
led_value = pot_value / 16;
analogWrite(LED, led_value);
delay(50);
}
使用 ADC 模拟通道输入
analogReadResolution(resolution)
:设置样本位和分辨率。它可以是一个介于 9(0 - 511)和 12 位(0 - 4095)之间的值。默认是 12 位分辨率。
analogSetWidth(width)
:设置样本位和分辨率。它可以是一个介于 9(0 - 511)和 12 位(0 - 4095)之间的值。默认是 12 位分辨率。
analogSetCycles(cycles)
:设置每个样本的循环次数。默认是 8。取值范围:1 ~ 255。
analogSetSamples(samples)
:设置范围内的样本数量。默认为 1 个样本。它有增加灵敏度的作用。
analogSetClockDiv(attenuation)
:设置ADC时钟的分压器。默认值为1。取值范围:1 ~ 255。
adcAttachPin(pin)
:附加一个引脚到 ADC(也清除任何其他模拟模式可能是 on)。返回TRUE或FALSE结果。
analogSetAttenuation(attenuation)
:设置所有 ADC 引脚的输入衰减。默认是 ADC_11db。其他取值:
ADC_0db
: 集没有衰减。ADC 可以测量大约 800mv (1V 输入 = ADC 读数 1088)。ADC_2_5db
: ADC 的输入电压将被衰减,扩展测量范围至约。1100 mV。(1V 输入 = ADC 读数 3722)。ADC_6db
: ADC 的输入电压将被衰减,扩展测量范围至约。1350 mV。(1V 输入= ADC 读数 3033)。ADC_11db
: ADC 的输入电压将被衰减,扩展测量范围至约。2600 mV。(1V 输入= ADC 读数 1575)。
analogSetPinAttenuation(pin, attenuation)
:设置指定引脚的输入衰减。默认是 ADC_11db。衰减值与前一个函数相同。
#define POT 26
#define LED 13
#define CHANNEL 0
// 初始化模拟输入值
int pot_value;
void setup() {
Serial.begin(9600);
// 设置 ADC 分辨率
analogReadResolution(12);
// 配置衰减器
analogSetAttenuation(ADC_11db);
// 建立 LEDC 通道,配置 LEDC 分辨率
ledcSetup(CHANNEL, 1000, 12);
// 关联 GPIO 口与 LEDC 通道
ledcAttachPin(LED, CHANNEL);
}
void loop() {
// 获取模拟输入值
pot_value = analogRead(POT);
// 输出 PWM
ledcWrite(CHANNEL, pot_value);
delay(50);
}