STM32开发板通过环境光强自动调整LED灯亮度
介绍
在本教程中,我们将使用STM32开发板通过光敏模块来调整LED灯的亮度。光敏模块能够根据环境光的强度输出不同的电压信号,我们通过STM32的ADC(模数转换器)读取该信号,并利用PWM技术动态控制LED的亮度。通过学习本教程,您将了解如何使用ADC读取光敏模块的模拟信号,并通过PWM调节LED灯的亮度。
硬件准备
-
STM32开发板(例如STM32F103C8T6)
-
光敏模块
-
LED灯(上次忘说了,LED灯要买能容忍5V的,一般的LED灯都是3.3V,5V一过就击穿了)
-
面包板和跳线
GPIO原理和PWM原理
由于上一篇有讲过这两个原理,因此这里就不再重复讲解了,有需要的可以通过链接去了解。
ADC原理
ADC(Analog-to-Digital Converter,模数转换器)是一种将连续变化的模拟信号(如电压)转换为离散的数字信号(如数字1、2、3、4)的电路,便于微处理器或数字电路处理。在STM32开发中,ADC用于将光敏电阻的模拟电压信号转换为数字值,从而可以通过程序判断环境光强度。
1. ADC的基本概念
模拟信号是连续的,可以取任意值,比如温度传感器输出的电压信号。数字信号则是离散的,由一串二进制数表示。ADC的工作就是通过采样、量化和编码的方式,将模拟电压信号转化为可以表示的数字值。
2. ADC的工作步骤
ADC的工作主要分为以下几个步骤:
2.1. 采样(Sampling)
采样是将连续变化的模拟信号在时间上离散化。采样时,ADC以一定频率(称为采样频率,注意这个频率是设置好后就是固定的)对输入的模拟信号进行周期性读取。
从上图可以看出x轴是频率,y轴是电压,我们按一定的频率将电压曲线变为一堆在坐标系中的点,这个过程就叫采样。
2.2. 量化(Quantization)
量化是将采样后的模拟信号电压值转化为离散的数字值。ADC将输入电压范围分成若干个离散的电压级,每个级对应一个数字码。
量化就是将坐标轴进行量化,从上图可以看出,将y轴电压按分辨率划分成多个电压级别,如假设输入电压是5v,分辨率是12位,因此相邻电压级别是5/12=0.416666...,即每两天线的间隔电压约为0.416,如x轴是0,从上往下数最后一条线是0.416,倒数第二条线是0.416+0.416=0.832,以此类推,这个过程就叫量化。
2.3. 编码(Encoding)
编码是将量化后的结果转化为相应的二进制数字输出。比如,如果12位ADC采样的模拟信号值在0到3.3V范围内,编码后对应的数字码就是二进制的001111111111。
编码就是给量化后的每一条线设定一个二进制码表示,从上图可以看出,量化电压是0-10V,分辨率是16位,将电压分为16份,每份0.625V,因此用4个位来表示这16份,即用0000-1111来表示0-10V,这个过程就叫编码。
当完成编码后,采样电压曲线的每一个点会被直接归类到最近的量化电压级中,最终根据编码表将每一个点用二进制表示出来,这就是ADC的进行模数转换的原理。
注意:上面上个步骤是最主要的步骤,但实际adc采样不仅有3个步骤
3. ADC的分类
ADC有多种类型,不同的类型在速度、精度、功耗等方面各有优劣,常见的有以下几种逐次逼近寄存器型 ADC(SAR ADC)、积分型 ADC(Integrating ADC)、闪存型 ADC(Flash ADC)和ΔΣ(Delta-Sigma)ADC。这几种ADC在不同方面各有优略,这里就不详细解释,如果有需要可自行了解。
4. ADC的主要性能指标
4.1. 分辨率(Resolution)
分辨率指ADC能区分的电压级数。分辨率越高,ADC能检测到的电压变化越小,信号转换越精确,通俗来说,分辨率越大能读取到的数据就越能精确到小数点的后几位,如假设ADC采样电压为3.3V,提升分辨率采样电压变为3.3562V。常见的分辨率有8位、10位、12位和16位(注意对于ST生产的STM32一般不支持16位)。
4.2. 采样率(Sampling Rate)
采样率是每秒钟采样的次数,通常用赫兹(Hz)表示。采样率越高,ADC能够捕捉信号变化的速度越快,通俗来说,采样率越高电压越微小的变化就能被采样出来,比如音频信号的采样率通常是44.1 kHz,提升此采样率可能就能捕捉到我们的呼吸声,蚊虫的翅膀声等细微声音。
注意:一般很难同时要求高采样率和分辨率,一般都是根据实际情况选择合适的参数,因为在高分辨率设置下,ADC可以提供更精细的测量,但可能需要较长的转换时间,从而影响总体的采样速度,即影响采样率;而在高采样率中可能需要降低ADC的分辨率,因为高采样率需要更快的转换速度,高采样率下,可能无法保持同样的高分辨率,因为快速转换可能无法提供高精度的结果。
5. STM32中的ADC
在STM32微控制器中,ADC通常采用SAR(逐次逼近)架构,常见的是12位ADC,具有16个输入通道,可以选择多个模拟信号源进行采样,内部通道包括温度传感器(通道16)和内部参考电压(通道17)。
6. ADC的应用
传感器数据读取:如温度、压力、湿度等传感器的模拟输出转换为数字信号。
音频信号采集:用于将麦克风、音频输入设备的模拟信号数字化。
电池电压监测:将电池的模拟电压信号转换为数字值,用于实时监控电池状态。
7. 配置步骤
使能时钟。
初始化ADC对应的IO口。
配置ADC结构体。
初始化ADC结构体。
配置ADC通道结构体
使能ADC
启动ADC转换
配置步骤
初始化ADC
自动调光代码示例
ADC代码
TIM代码
主函数
总结
在本教程中,我们使用STM32开发板通过光敏模块调整LED灯的亮度。通过介绍ADC的工作原理以及PWM的应用,结合代码实现,我们可以根据环境光线自动调节LED的亮度。这种方式广泛应用于智能照明系统中,能够节约能耗并提升用户体验。希望通过本教程,您能掌握光敏电阻、ADC和PWM的基本概念和实现方法。
视频链接
根据环境光照自动控制LED灯实现:智能语音时钟-环境光强控制led_哔哩哔哩_bilibili
ADC配置:协议篇-adc配置_哔哩哔哩_bilibili
希望本教程能帮助你更好地理解ADC的原理!要是觉得有用麻烦给我点个赞,谢谢各位了。