智能语音时钟--根据环境光强自动调整LED灯亮度

STM32开发板通过环境光强自动调整LED灯亮度

介绍

在本教程中,我们将使用STM32开发板通过光敏模块来调整LED灯的亮度。光敏模块能够根据环境光的强度输出不同的电压信号,我们通过STM32的ADC(模数转换器)读取该信号,并利用PWM技术动态控制LED的亮度。通过学习本教程,您将了解如何使用ADC读取光敏模块的模拟信号,并通过PWM调节LED灯的亮度。

硬件准备

  1. STM32开发板(例如STM32F103C8T6)

  2. 光敏模块

  3. LED灯(上次忘说了,LED灯要买能容忍5V的,一般的LED灯都是3.3V,5V一过就击穿了)

  4. 面包板和跳线

GPIO原理PWM原理

由于上一篇有讲过这两个原理,因此这里就不再重复讲解了,有需要的可以通过链接去了解。

链接:智能语音时钟--按键控制亮度-CSDN博客

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的原理!要是觉得有用麻烦给我点个赞,谢谢各位了。

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值