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

news2024/11/21 11:25:51

文章目录

  • 前言
  • 一、ADC概念
  • 二、光敏电阻的概念
    • 1. 光敏电阻的工作原理
    • 2. 光敏电阻的特性
    • 3. 光敏电阻的应用
    • 4. 光敏电阻的电路设计
    • 5. 实际使用中的注意事项
    • 总结
  • 三、STM32Cubemx创建工程
  • 四、proteus仿真电路图
  • 五、代码编写
    • 1. HAL_ADC_Start 函数
    • 原型
    • 参数
    • 返回值
    • 功能描述
    • 示例
  • 2. HAL_ADC_GetValue 函数
    • 原型
    • 参数
    • 返回值
    • 功能描述
  • 总结


前言

本篇文章开始带大家学习如何使用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);

参数

  • hadc:指向 ADC 句柄的指针,这个句柄包含了ADC的配置和状态信息。

返回值

  • HAL_StatusTypeDef:返回操作的状态,可以是以下值之一:
    • HAL_OK:操作成功。
    • HAL_ERROR:操作失败。
    • HAL_BUSY:ADC正在忙碌。
    • HAL_TIMEOUT:操作超时。

功能描述

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);

参数

  • hadc:指向 ADC 句柄的指针。

返回值

  • uint32_t:返回ADC转换结果,这是一个无符号32位整数,具体值取决于ADC的分辨率(如12位、10位或8位)。

功能描述

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

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

实验效果:

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

总结

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

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

回复 STM32仿真ADC即可领取源码和工程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重学java 73.设计模式

本想送你一本沉思录,可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern),是一套被反复使用、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…

PHP学习笔记--初学

笔录:我是从黑马里面找的资料学习的,如果有人看我的笔记话,建议去看黑马程序课程,更详细一些。 目录 php定义,平台支持: 静态网站: 动态网站: 服务器概念: IP的概念…

电脑版微信修改信息提示音的方法,Resource Hacker修改EXE信息

微信默认的提示音大家都是一样的,在人多的情况下,不容易分辨是不是自己的微信有消息,很不方便,所以飞飞会把微信的消息提示音换了,手机微信换通知铃声还是很简单的,今天着重和你们分享下电脑版微信如何修改…

探索C嘎嘎的奇妙世界:第十四关---STL(string的模拟实现)

1. string类的模拟实现 1.1 经典的string类问题 上一关已经对string类进行了简单的介绍,大家只要能够正常使用即可。在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数…

Multisim仿真之万用表、安捷伦万用表、信号发生器操作方法

1、XMM是安捷伦示波器 如下图所示,实物安捷伦的外围3个插孔对应于 XMM图标示波器的右侧3个引脚,上下一一对应 2、函数信号发生器XFG 如下图所示,COM就是GND,正负的意思就是相对于GND而言,有正负电压; 3、…

ViNT: A Foundation Model for Visual Navigation

介绍 现存的问题:预训练的方式在很多领域取得了成功,但是由于环境、平台和应用程序的绝对多样性,因此很难应用在机器人领域。 那么想要做移动机器人的基础模型需要什么? 本文定义了一个机器人领域的基础模型,可以实…

Vue2动态代理无须重启项目解决方案

1、痛点 如果我们需要使用不同的环境地址的时候,就需要使用命令或者手动修改vue.config.js中配置来重新启动项目。当项目项目越来越大的时候,我们需要很长的时间来启动项目,如此反复,极大影响我们开发进度。 2、寻求解决方案 ● v…

九大步骤,带你了解典型的GIS开发流程!

GIS是一门强工具属性的交叉学科。强工具属性意味着GIS实际上更多的依附于其他应用场景而存在,而并非独立存在的,简单来说,GIS更多的是作为其他系统中的子系统而存在。 作为GIS从业人员,上限更多取决于所依附的行业,去…

单载波水声通信技术研究【附MATLAB代码】

文章来源:​微信公众号:EW Frontier 摘要 水下无线通信因其在海洋科研、国防、救援及资源开发等方面的关键作用而备受关注。声波作为水中信息传输的有效载体,推动了水声通信技术的发展,其中单载波调制技术由于其高频谱利用率、结…

计算机网络期末复习1(最后一天才开始学版)

1.一个PPP帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E。试问真正的数据是(用十六进制写出) 由于PPP帧的标志字段为7E,因此,为了区别标志字段和信息字段,将信息字段中出现的每一个0x7E转变成(0x7D,0x5E),0x7…

小程序的登录+发布流程

今天我们来将一下小程序的登录和发布流程!!! 小程序的登录流程 流程图 首先登录流程还是看官网说的:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 这是官网发布的一个流程图 认识cod…

DOOPRIME:日本央行7月加息与否取决于数据,购债规模调整无强烈信号

摘要 日本央行行长植田和男近日在议会发言中表示,7月份是否加息将取决于经济数据表现,而购买日本国债与加息是两个独立的问题,不会通过削减购债规模来释放强烈的政策信号。这一表态引发了市场的广泛关注,投资者和经济学家对此进行…

自动驾驶规划-RTT* 算法 【免费获取Matlab代码】

目录 1.算法原理3.结果展示4.参考文献5.代码获取 1.算法原理 RRT(Rapidly-Exploring Random Trees) 快速随机扩展树,是一种单一查询路径规划算法。RRT 将根节点作为搜索的起点,然后通过随机撒点采样增加叶子节点的方式,生成一个随机扩展树&a…

如何预防最新的Mallox变种hmallox勒索病毒感染您的计算机?

一、引言 近年来,网络安全问题日益严重,勒索病毒成为了其中的一大威胁。其中,.hmallox勒索病毒作为Malox勒索软件家族的新变种,凭借其高度的攻击性和隐蔽性,给全球用户的数据安全带来了严重威胁。本文将深入分析.hmal…

入门三.HTB--Dancing(6.18)

大佬 https://www.cnblogs.com/Hekeats-L/p/16535920.html 任务1 SMB 即Server Message Block(服务器消息块),是一种文件共享协议。当文件原件在你的A电脑上,而你想在局域网下用你的手机、iPad或是另一台电脑来访问A电脑上的该文…

分享三个仓库

Hello , 我是恒。大概有半个月没有发文章了,都写在文档里了 今天分享三个我开源的项目,比较小巧但是有用 主页 文档导航 Github地址: https://github.com/lmliheng/document 在线访问:http://document.liheng.work/ 里面有各种作者书写的文档&#xff…

ARM32开发——中断

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 中断概念中断分类中断触发条件 中断概念 中断是计算机系统中的一种机制,用于响应外部事件或内部事件,它可以使单片机暂…

红日靶场实战一 - 学习笔记

最近在学习红蓝对抗,如果有兴趣的可以多关注。 目录 环境搭建 靶场链接 配置网络 攻击机kali网络 配置win7 web服务器网络 配置winserver 2008网络(DC域控) 配置win2003/win2k3网路(域成员) IP配置情况 外网突破 信息收集 phpmya…

设计模式(五)创建者模式之工厂模式

工厂模式 工厂模式上面类图代码实现Coffee 抽象类AmericanCoffeeLatterCoffeeCoffeeStoreUser 简单工厂模式增加工厂方法更改CoffeeStore 类优缺点扩展静态工厂 工厂方法模式概念结构具体类图代码实现Coffee类AmericanCoffeeLatterCoffee抽象工厂CoffeeFactoryAmericanCoffeeFa…

[BJDCTF2020]ZJCTF,不过如此1

打开题目可以看到一段php文件包含&#xff0c;源码如下 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>…