专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

基于Proteus的Arduino学习04-片内ADC与可调LED灯

作者:我不是奔跑哥   来源:我不是奔跑哥的blog   点击数:  更新时间:2014年06月08日   【字体:

在上一节的学习笔记《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所示。
图1 添加“POT-HG”的界面
图2 更改后的Arduino UNO实验板
下面,打开Arduino IDE自带的AnalogInput例程,如图3所示。
图3 打开AnalogInput例程
在AnalogIput例程的基础上进行修改,修改之后的Arduino软件设计如下所示:
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() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);  
}
 
void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);    
  analogWrite(ledPin, sensorValue/4);          
}
由于Arduino的ADC为10位,数字量的变化范围为0至1023,而Arduino的PWM的输出变化范围为0至255,所以需要将获得ADC除以4,从而转换至PWM输出,由于如上面红色标注。
下面我们开始仿真,并调节电位器,电阻较小时,LED灯较暗,如图4所示;电阻较大时,LED灯较亮,如图5所示。
图4 电阻较小时,LED灯较暗
图5 电阻较大时,LED灯较亮

    最后奉上Proteus仿真视频,从视频来看,电阻较低的时候,效果较差。

 

关闭窗口

相关文章