it编程 > 硬件开发 > stm32

STM32 proteus + STM32Cubemx仿真教程(第五课ADC光敏电阻采样教程)

61人参与 2024-08-06 stm32


前言

本篇文章开始带大家学习如何使用proteus和stm32cubemx来完成stm32的学习,第五节课我们来学习adc光敏电阻采样实验。

proteus使用8.9版本。

stm32cubemx使用6.3版本。

一、adc概念

在stm32微控制器中,adc(analog-to-digital converter,模数转换器)是一个非常重要的外设,用于将模拟信号转换为数字信号,以便在微控制器内部进行处理。下面是对stm32中adc概念的详细讲解:

  1. adc的基本原理
    adc的主要功能是将连续的模拟信号转换成离散的数字值。stm32的adc通常使用逐次逼近寄存器(sar,successive approximation register)类型的adc,这种类型的adc在精度和转换速度之间有良好的平衡。

  2. adc的主要参数
    分辨率:adc的分辨率决定了其输出数字值的精度。例如,12位的adc可以产生0到4095之间的数字值(2^12 = 4096)。
    采样率:采样率表示每秒钟adc可以进行多少次转换。较高的采样率可以更精细地捕捉快速变化的信号。
    输入通道:stm32的adc通常具有多个输入通道,可以通过选择不同的通道来测量不同的模拟信号。
    参考电压(vref):参考电压决定了adc的量程。对于stm32,通常是3.3v或其他指定电压。

  3. adc的主要功能和特点
    多通道支持:stm32的adc通常支持多达16个或更多的输入通道,可以通过选择不同的通道来测量多个模拟信号。
    扫描模式:在扫描模式下,adc可以自动依次对多个通道进行转换。
    连续转换模式:在连续转换模式下,adc可以不断地对一个或多个通道进行转换。
    触发源:adc转换可以通过软件或硬件触发源(如定时器、外部事件等)来启动。
    dma支持:adc可以与dma(直接存储器访问)控制器配合使用,以提高数据传输效率,减少cpu负担。

  4. 使用adc的基本步骤
    初始化adc外设:

配置adc的分辨率、转换模式(单次或连续)、数据对齐方式等。
配置adc的时钟源,以确保其工作在合适的频率范围内。

配置输入通道:

选择要使用的adc输入通道,并配置相应的gpio引脚为模拟模式。

启动adc转换:

启动adc转换,可以选择单次转换、连续转换或扫描模式。
使用软件或硬件触发源来启动转换。

读取转换结果:

等待转换完成,可以通过轮询、中断或dma方式获取转换结果。

二、光敏电阻的概念

光敏电阻(photocell),又称光电导管或光电导体,是一种具有光电导效应的电子元件。它的电阻值会随着入射光强度的变化而变化,通常用于感测光线强度。下面是关于光敏电阻的详细讲解:

1. 光敏电阻的工作原理

光敏电阻的核心材料通常是半导体材料(如硫化镉 cds),当光子(光粒子)照射到光敏电阻表面时,半导体材料内部的电子会被激发,从而跃迁到导带中,形成自由电子和空穴对。这种电子跃迁会增加半导体材料的电导率(即降低电阻值)。因此,光敏电阻的电阻值随着入射光强度的增加而减小。

2. 光敏电阻的特性

3. 光敏电阻的应用

光敏电阻广泛应用于各种光感测和自动控制领域,包括但不限于:

4. 光敏电阻的电路设计

光敏电阻通常与其他电阻元件组合,构成一个分压电路,以实现光强度到电压信号的转换。下面是一个简单的光敏电阻应用电路示例:

// 简单光敏电阻电路
//
//          +vcc
//           |
//           r
//           |
//           |--------------------> 输出电压 (vout)
//           |
//        光敏电阻
//           |
//          gnd

// vout = vcc * (r / (r + 光敏电阻))

在这个电路中,输出电压 ( v_{out} ) 随着光敏电阻的电阻值变化。当入射光强度增加时,光敏电阻的电阻值减小,导致 ( v_{out} ) 增加;当入射光强度减小时,光敏电阻的电阻值增加,导致 ( v_{out} ) 减小。

5. 实际使用中的注意事项

总结

光敏电阻是一种常用的光感测元件,广泛应用于光控开关、亮度调节、光强测量等领域。通过合理的电路设计和使用,可以将光强度信号转换为电压信号,方便后续的处理和应用。在具体应用中,需要考虑光敏电阻的非线性特性、响应时间、温度影响等因素,以实现稳定和准确的光强度检测。

三、stm32cubemx创建工程

在之前的串口工程中添加入adc模块,这里的话实验pa1作为adc的采样端口,并且设置一下采样的时间间隔。
在这里插入图片描述

四、proteus仿真电路图

输入ldr找到光敏电阻:
在这里插入图片描述
整体电路连接图:

在这里插入图片描述

五、代码编写

在stm32的hal库中,hal_adc_starthal_adc_getvalue 是两个常用的adc相关函数,用于启动adc转换和获取转换结果。下面是对这两个函数的详细讲解。

1. hal_adc_start 函数

hal_adc_start 函数用于启动指定adc的转换过程。

原型

hal_statustypedef hal_adc_start(adc_handletypedef *hadc);

参数

返回值

功能描述

hal_adc_start 函数启动adc的转换过程。该函数通常在单次转换模式或连续转换模式下使用。

示例

adc_handletypedef hadc1; // 假设已经初始化过

hal_adc_start(&hadc1);

在上述示例中,我们启动了adc1的转换过程。

2. hal_adc_getvalue 函数

hal_adc_getvalue 函数用于获取最近一次adc转换的结果。

原型

uint32_t hal_adc_getvalue(adc_handletypedef *hadc);

参数

返回值

功能描述

hal_adc_getvalue 函数用于获取最近一次adc转换的结果。这个函数通常在转换完成后调用,可以通过轮询、中断或dma方式来确定转换是否完成。

整体代码:
在这里插入图片描述

实验效果:

这里将采集道的光敏电阻数据通过串口打印出来:
在这里插入图片描述

总结

本篇文章就讲解到这里,大家有什么疑问都可以留言。

本篇文章代码和工程将放在微信公众号中。

回复 stm32仿真adc即可领取源码和工程。

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

视觉巡线小车——STM32+OpenMV(三)

08-06

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX + CMSIS-DSP 手动添加、库添加方式

08-06

STM32 CUBEMX主从定时器配置PWM任意相位可调,占空比以及频率可调(学习记录)

08-06

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

08-06

探索STM32与OLED显示屏:SSD1306库使用指南与实战

08-06

【STM32】FPU的启用和基于ARM-DSP库函数的实时信号RMS计算

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论