在上一节的学习笔记《PWM与呼吸灯的实现》中,我们学会了如何利用PWM(脉宽调制)来实现对LED亮度的控制,并仿真出了呼吸灯,下面我们接着上一节的学习笔记,继续下面的学习,这次我们要能对LED灯亮度实现线性的调节,就像平时用的可调亮度的台灯一样。
要想对LED灯亮度实现线性调节,除了使用PWM来控制LED灯亮度,还需要使用ADC来读取我们设定的亮度值。我们先来学习一下ADC。
ADC是Analog-to-Digital Converter的缩写,即模拟/数字转换器,可以实现将模拟量转换为数字量的电子器件。
什么是模拟量?模拟量就是具有多个连续状态的量值,比如温度,有0℃,50℃,100℃等任意值,比如电压值,有1mV,1V,1kV等任意值。
什么事数字量?数字量就是只有两种状态的量值,比如灯的开关,只有打开和关闭两种状态。
ADC是模拟量与数字量的桥梁,因为计算机等只能处理数字量,而我们接触的模拟量有很多,当需要模拟量时必须转换为数字量才能被处理与存储。
这里使用到Arduino UNO的ADC,就有必要先了解一下Arduino UNO的ADC的情况。Arduino UNO拥有6路模拟输入:标号A0至A5,每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限。AREF:模拟输入信号的参考电压。【文献1】
在上一节的原理图,我们添加电位器(滑动变阻器、可调电阻),在元器件搜索栏中输入“POT-HG”,如图1所示。在原来的Arduino UNO实验板上添加"POT-HG",并将中间接线端接至A0口,修改后的原理图如图2所示。
下面,打开Arduino IDE自带的AnalogInput例程,如图3所示。
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 9; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
}
void loop() {
}
由于Arduino的ADC为10位,数字量的变化范围为0至1023,而Arduino的PWM的输出变化范围为0至255,所以需要将获得ADC除以4,从而转换至PWM输出,由于如上面红色标注。
下面我们开始仿真,并调节电位器,电阻较小时,LED灯较暗,如图4所示;电阻较大时,LED灯较亮,如图5所示。