当前位置: 首页 > article >正文

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析)

从电位器到内部温度传感器一个STM32 ADC多通道采集的完整项目实战含代码与波形分析当你第一次拿到STM32开发板时可能会被它丰富的功能所吸引尤其是内置的ADC模数转换器模块。这个看似简单的模块实际上隐藏着许多值得探索的细节。本文将带你从零开始完成一个结合外部电位器和内部温度传感器的多通道采集项目并通过实际测量验证数据的准确性。1. 项目准备与环境搭建在开始编码之前我们需要明确项目的硬件需求和软件工具。这个项目需要一块支持ADC功能的STM32开发板如STM32F103C8T6、一个10kΩ电位器、杜邦线若干以及一台安装了STM32CubeIDE的电脑。硬件连接示意图电位器中间引脚 → PA4ADC1_IN4电位器两端分别接3.3V和GND开发板通过USB连接电脑注意不同型号的STM32芯片ADC通道对应引脚可能不同务必查阅对应芯片的数据手册。安装STM32CubeMX后新建工程选择对应芯片型号。在Pinout Configuration界面中我们需要进行以下关键配置// 关键配置步骤 1. 使能ADC1 2. 配置PA4为ADC1_IN4 3. 启用内部温度传感器通道 4. 设置ADC参数12位分辨率扫描模式使能 5. 配置USART1用于调试输出2. ADC多通道配置详解STM32的ADC模块支持多通道采集但配置方式与单通道有所不同。我们需要特别注意以下几个关键点2.1 通道顺序与采样时间在多通道采集模式下ADC会按照预设的顺序依次转换各个通道。我们可以通过修改Rank参数来调整通道顺序。对于我们的项目建议将电位器通道设为Rank1温度传感器通道设为Rank2。采样时间配置建议通道类型推荐采样时间原因说明电位器输入15个周期外部信号相对稳定内部温度传感器480个周期需要更长时间稳定采样2.2 扫描模式与连续转换在ADC配置中我们需要同时启用Scan Conversion Mode和Continuous Conversion Mode。前者允许ADC按顺序扫描多个通道后者则让ADC在完成一轮转换后自动开始下一轮。// CubeMX中的关键配置结构体 hadc1.Init.ScanConvMode ENABLE; hadc1.Init.ContinuousConvMode ENABLE; hadc1.Init.NbrOfConversion 2; // 两个通道3. 代码实现与数据采集配置完成后CubeMX会生成初始化代码。我们需要在此基础上添加数据采集逻辑。与单通道采集不同多通道采集需要特别注意数据对应关系。3.1 多通道采集核心代码// 定义用于存储结果的数组 uint32_t adcValues[2]; // 索引0:电位器, 索引1:温度传感器 void StartADCConversion(void) { HAL_ADC_Start_DMA(hadc1, adcValues, 2); // 使用DMA自动存储结果 } // 在主循环中定期调用以下函数 void ProcessADCData(void) { float voltage adcValues[0] * 3.3f / 4095; // 转换为电压值 float temperature CalculateTemperature(adcValues[1]); printf(电位器电压: %.2fV, 芯片温度: %.1f℃\n, voltage, temperature); } float CalculateTemperature(uint32_t rawValue) { float vsense rawValue * 3.3f / 4095; // 根据芯片手册提供的公式计算温度 return ((vsense - 0.76f) / 0.0025f) 25.0f; }3.2 数据验证方法获取ADC原始值只是第一步验证数据的准确性同样重要。以下是两种实用的验证方法电位器电压验证用万用表测量PA4引脚实际电压与代码输出的电压值对比误差应在ADC精度范围内±0.1V温度传感器验证用手触摸芯片改变温度观察输出温度值变化趋势对比环境温度计测量值注意芯片自发热影响4. 常见问题与优化技巧在实际项目中你可能会遇到以下典型问题及解决方案4.1 数据错位问题现象电位器和温度传感器的值互相混淆。解决方法检查CubeMX中通道的Rank顺序确认DMA缓冲区大小与通道数匹配在调试模式下观察adcValues数组内容4.2 采样精度优化提高ADC采样精度的几种实用技巧在ADC输入端添加0.1μF滤波电容避免在ADC转换期间切换IO状态适当增加采样时间特别是温度传感器使用软件滤波算法如移动平均// 简单的移动平均滤波实现示例 #define FILTER_SIZE 5 uint32_t potFilterBuffer[FILTER_SIZE]; uint32_t tempFilterBuffer[FILTER_SIZE]; uint32_t ApplyFilter(uint32_t newValue, uint32_t buffer[]) { static uint8_t index 0; uint32_t sum 0; buffer[index] newValue; index (index 1) % FILTER_SIZE; for(int i0; iFILTER_SIZE; i) { sum buffer[i]; } return sum / FILTER_SIZE; }4.3 低功耗场景下的ADC配置如果需要电池供电可以优化ADC配置以降低功耗降低ADC时钟频率使用间断模式替代连续转换在采集间隔期间关闭ADC电源增加采样间隔时间5. 项目扩展与进阶应用掌握了基础的多通道采集后可以考虑以下扩展方向5.1 多传感器集成在现有框架上可以轻松添加更多传感器光照传感器通过ADC通道湿度传感器需要额外硬件电池电压监测通过内部参考电压5.2 数据可视化将采集的数据通过串口发送到上位机使用Python工具实现实时可视化# 简单的Python串口绘图示例 import serial import matplotlib.pyplot as plt ser serial.Serial(COM3, 115200) plt.ion() fig, ax plt.subplots() x, y [], [] while True: data ser.readline().decode().strip() if 电位器电压 in data: voltage float(data.split(:)[1].split(V)[0]) x.append(len(x)) y.append(voltage) ax.plot(x, y, b-) plt.pause(0.01)5.3 闭环控制系统将ADC采集的数据用于控制输出构建闭环系统根据温度控制风扇转速根据电位器位置控制LED亮度实现简单的PID控制算法// 简单的PWM控制示例基于ADC值 void UpdatePWMBasedOnADC(void) { uint32_t potValue adcValues[0]; uint32_t pwmDuty potValue * 100 / 4095; // 转换为百分比 __HAL_TIM_SET_COMPARE(htim2, TIM_CHANNEL_1, pwmDuty); printf(设置PWM占空比为: %d%%\n, pwmDuty); }在实际项目中我发现内部温度传感器的读数容易受到芯片自身发热的影响。特别是在连续运行复杂算法时温度读数可能会比环境温度高出10℃以上。这种情况下可以考虑增加温度补偿算法或者将关键的温度采样安排在系统空闲时进行。

相关文章:

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析)

从电位器到内部温度传感器:一个STM32 ADC多通道采集的完整项目实战(含代码与波形分析) 当你第一次拿到STM32开发板时,可能会被它丰富的功能所吸引,尤其是内置的ADC(模数转换器)模块。这个看似简…...

Multisim仿真 vs 洞洞板实战:我的双路稳压电源项目翻车与复盘全记录

Multisim仿真与洞洞板实战:双路稳压电源的翻车启示录 仿真软件里完美的电路设计,在现实中却频频翻车——这几乎是每个硬件工程师的必经之路。去年冬天,我也经历了这样一场"理想很丰满,现实很骨感"的双路稳压电源项目。当…...

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧

深入RK3588 DTS:从频率电压表看Rockchip芯片的能效设计思路与调试技巧 当工程师拿到一块RK3588开发板时,最先关注的往往是性能参数——四核Cortex-A76加四核Cortex-A55的配置,高达2.4GHz的主频,以及强大的NPU算力。但真正决定这颗…...

别再死记硬背了!用LM358电平灯电路,轻松搞懂运放‘电压比较器’模式

用LM358电平灯电路直观理解运放电压比较器 当教科书上密密麻麻的运算放大器公式让你头晕目眩时,不妨试试这个能"看得见"的学习方法——用LM358搭建一个电平灯电路。这个看似简单的小项目,却能让你对电压比较器的工作原理产生前所未有的直观理解…...

从Spring Security到Spring Security OAuth2:权限异常处理配置的‘平滑迁移’实战指南

从Spring Security到OAuth2资源服务器:异常处理架构的平滑升级策略 当你的应用从单体架构向微服务演进时,安全框架的升级往往成为最容易被忽视的痛点。特别是在处理401和403这类权限异常时,许多团队发现原本在Spring Security中运行良好的异常…...

实战避坑指南:用Confluence或SharePoint搭建符合FDA/ISO要求的DHFDMR数字文档体系

医疗器械数字文档体系实战:用Confluence/SharePoint构建合规DHF&DMR 在医疗器械行业,合规性从来不是可选项而是生存线。当FDA审核员敲开您公司大门时,能否在五分钟内调出三年前某款产品的设计验证报告?当ISO13485认证机构要求…...

别再一上来就写复位了!聊聊Xilinx FPGA里那些“不用复位”的寄存器

颠覆认知:Xilinx FPGA中那些无需复位的寄存器设计艺术 在FPGA设计领域,复位信号的使用几乎成了一种宗教仪式般的惯例——每个工程师在编写Verilog代码时,都会条件反射地为所有寄存器添加复位逻辑。这种"宁可错杀一千,不可放过…...

【多无人机路径规划】粒子群优化算法PSO求解复杂三维环境下多无人机动态避障路径规划问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

GooglePlay开发者风控规避指南:2026账号稳定性策略

如何有效规避 Google Play 开发者风控风险:2026账号稳定性实践思路随着 Google Play 审核与风控机制逐步升级,开发者在应用上架过程中面临的不确定性明显增加。尤其是新注册开发者账号,更容易在早期阶段触发风控检测,从而出现审核…...

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现

Real-Anime-Z惊艳效果:不同肤色/人种/年龄在2.5D风格下的普适性表现 1. 引言:探索2.5D风格的独特魅力 Real-Anime-Z是一款基于Stable Diffusion的写实向动漫风格大模型,它巧妙地在真实质感与动漫美感之间找到了平衡点。这种被称为"2.5…...

RWKV-7 (1.5B World) 部署教程:NVIDIA Container Toolkit配置指南

RWKV-7 (1.5B World) 部署教程:NVIDIA Container Toolkit配置指南 1. 项目概述 RWKV-7 (1.5B World) 是一款基于轻量级大模型开发的单卡GPU专属对话工具,专为RWKV架构优化设计。这款工具完美适配RWKV架构的原生特性,支持全球多语言对话、流…...

nli-MiniLM2-L6-H768实际效果:会议纪要片段在‘决策项/待办项/风险点/背景信息’标签下的结构化解析

nli-MiniLM2-L6-H768实际效果:会议纪要片段在"决策项/待办项/风险点/背景信息"标签下的结构化解析 1. 工具介绍 1.1 什么是nli-MiniLM2-L6-H768 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类…...

华为OD机试真题 新系统 2026-04-19 PythonJS 实现【8位LED控制器】

目录 题目 思路 Code 题目 有一个8位LED控制器,包含8个LED灯(编号0-7),初始状态全灭,用8位二进制表示为:00000000。控制器可以接收以下三种指令: Lx:L表示点亮操作,x表示LED的编号(0一7),操作得到的结果是:点亮第x个…...

华为/小米手机改了分辨率就乱套?一个BaseActivity搞定Android字体缩放适配

Android字体缩放适配终极方案:BaseActivity解决华为/小米分辨率修改乱象 每次测试报告里出现"华为手机改了分辨率后界面崩了"的反馈,我都忍不住想摔键盘。去年我们团队就因为这个看似简单的适配问题,硬生生拖了两周进度。后来发现&…...

别再手动配用户了!用OpenLDAP+phpLDAPadmin在CentOS 7.9上5分钟搞定统一认证服务

企业级统一认证实战:OpenLDAP与phpLDAPadmin高效部署指南 每次新员工入职,IT管理员是否还在重复执行这些操作:登录每台服务器创建账号、配置GitLab权限、设置Jenkins访问、调整Wiki系统身份?当团队规模突破20人时,这种…...

告别脚本恐惧!用Tosca Commander实现Web/API自动化测试的保姆级入门指南

告别脚本恐惧!用Tosca Commander实现Web/API自动化测试的保姆级入门指南 第一次接触自动化测试时,看到满屏的代码和命令行,很多人会本能地产生抗拒。但测试工作又确实需要自动化来提升效率——这就是Tosca Commander的价值所在。作为一款领先…...

避坑指南:C++正则表达式里的那些‘坑’(从语法陷阱到性能优化)

C正则表达式深度避坑手册:从语法陷阱到性能调优实战 正则表达式就像程序员手中的瑞士军刀——功能强大但暗藏玄机。我在处理日志分析系统时曾遇到一个诡异现象:相同的正则模式在Python中运行如飞,移植到C后性能却断崖式下跌。这促使我深入研究…...

模型黑盒的“翻译官”:LIME如何为单个预测提供局部可解释性

1. 当模型说"不"时,我们该如何理解? 想象一下这样的场景:一位贷款申请人收到银行的自动审批系统发来的拒绝通知,屏幕上冷冰冰地显示"申请未通过"。申请人满脸疑惑:"我信用记录良好&#xff0…...

大模型开始“懂你”了!PersonaVLM如何实现长期个性化记忆

过去两年,大模型的能力突飞猛进。从文本生成到多模态理解,它们已经逐渐成为很多人日常使用的工具。但随着使用深入,一个问题也变得越来越明显:这些模型虽然强大,却并不真正“懂你”。在与模型的互动中,我们…...

在大厂外包干了两年,简历上写着「服务于某头部互联网公司」。面试官问,那你在里面负责什么?我说完,他点点头,哦,外包呀~

最近看到一个帖子,发帖的人在某头部大厂做了两年外包。他说,离职之后去面试,简历上写的是「服务于某头部互联网公司」,负责的项目、用的技术栈、带过的小团队,全都写上去了。面试官看完,抬起头,…...

信号处理课设灵感:从Borwein积分到‘音乐喷泉’和‘膜拜大熊猫’的创意实现

从Borwein积分到创意电子项目:信号处理课设实战指南 当sinc函数的积分结果突然从π变成π-10⁻⁰时,数学系的学生可能会陷入证明困境,而电子工程专业的学生看到的却是LED灯带的控制灵感。这种理论到实践的思维跳跃,正是现代工程教…...

手把手教你用OllyDbg(OD)修改程序内存数据(附快捷键大全)

逆向工程实战:用OllyDbg从零破解内存数据的终极指南 当你想了解一个程序内部运作机制,或者需要修复某个软件的小缺陷时,逆向工程工具就像一把打开黑盒子的钥匙。而OllyDbg(简称OD)无疑是Windows平台上最强大的调试器之…...

用STM32F103C8T6和OLED屏做个密码锁,从硬件接线到代码烧录保姆级教程

STM32F103C8T6与OLED屏打造智能密码锁全流程实战 第一次拿到STM32开发板时,很多人会陷入"从何入手"的困惑。本文将带你从零开始,用最常见的STM32F103C8T6最小系统板和0.96寸OLED屏,打造一个具备掉电保存功能的智能密码锁。不同于简…...

egergergeeert FLUX模型优势:长文本理解能力在多对象提示词中验证

FLUX模型优势:长文本理解能力在多对象提示词中验证 1. 引言 在图像生成领域,提示词的质量直接影响最终输出效果。传统文生图模型在处理复杂、多对象的提示词时往往表现不佳,容易出现对象遗漏、属性混淆等问题。本文将重点介绍egergergeeert…...

Minitab新手避坑指南:为什么你的CPK和PPK算出来总是不一样?

Minitab新手避坑指南:为什么你的CPK和PPK算出来总是不一样? 第一次打开Minitab进行过程能力分析时,很多新手都会遇到一个令人困惑的现象:明明输入的是同一组数据,CPK和PPK的结果却大相径庭。这就像做菜时严格按照食谱操…...

ModTheSpire深度解析:Slay The Spire高效模组加载与字节码注入终极指南

ModTheSpire深度解析:Slay The Spire高效模组加载与字节码注入终极指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是Slay The Spire游戏的专业模组加载器&…...

在Vmware嵌套的CentOS 7里搭KVM:从虚拟化检测到桥接网络避坑全记录

在VMware嵌套的CentOS 7中部署KVM:从虚拟化检测到网络配置实战指南 当我们需要在有限硬件资源下构建复杂的虚拟化测试环境时,嵌套虚拟化技术提供了绝佳的解决方案。本文将带您深入探索如何在VMware Workstation创建的CentOS 7虚拟机中,成功部…...

前端工程规范制定

前端工程规范制定:打造高效协作的基石 在快节奏的前端开发中,工程规范是团队协作的“隐形契约”。随着项目复杂度提升,缺乏统一的代码风格、目录结构或提交规范可能导致维护成本激增、协作效率低下。制定科学的前端工程规范,不仅…...

从科研到报告:MATLAB bar函数实战避坑指南(颜色、标签、分类数据一篇搞定)

MATLAB条形图实战指南:避开颜色、标签与分类数据的那些坑 科研报告中的图表质量直接影响读者对数据的理解效率。作为MATLAB中最常用的可视化工具之一,bar函数看似简单,却暗藏诸多细节陷阱——从颜色配置失误到标签错位,从分类顺序…...

如何实现网盘全速下载:2025年终极网盘直链下载助手完全指南

如何实现网盘全速下载:2025年终极网盘直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...