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

用STM32F103和MH-Sensor红外模块DIY一个简易测速仪(附完整代码)

用STM32F103和MH-Sensor红外模块DIY高精度测速仪附完整工程代码最近在调试一个小车项目时发现市面上成品测速模块要么价格昂贵要么精度不足。翻出抽屉里的STM32F103C8T6最小系统和几块钱的MH-Sensor系列红外对管决定自己动手做个轻量级测速方案。这个方案特别适合需要测量电机转速、车轮转速等场景成本不到20元精度却能达到工业级水准。1. 硬件选型与电路设计1.1 核心器件选型要点STM32F103C8T6作为主控的优势在于72MHz主频处理测速信号游刃有余丰富的外设资源定时器、外部中断等市面上开发板价格普遍低于20元MH-Sensor系列红外对射模块的实测表现有效检测距离3-15mm可调通过电位器响应时间≤0.1ms工作电压3.3V-5V兼容输出信号干净无需额外滤波电路1.2 码盘设计与安装技巧推荐使用20孔光栅码盘其优势在于孔距均匀便于计算转速孔径与MH-Sensor光束直径匹配良好市售价格约5元/片安装时的黄金法则码盘与转轴必须同心固定传感器与码盘间距控制在5mm内确保码盘转动平面与传感器发射面平行1.3 完整电路连接图------------------- ----------------- | STM32F103C8T6 | | MH-Sensor | | | | | | 3.3V ---------------- VCC | | GND ---------------- GND | | PB14 ---------------- DO | ------------------- -----------------注意实际接线时建议使用杜邦线热熔胶固定避免振动导致接触不良2. 软件架构设计与关键代码2.1 工程文件结构├── Core │ ├── Inc │ │ ├── countsensor.h │ │ └── timer.h │ └── Src │ ├── countsensor.c │ └── timer.c ├── Drivers └── main.c2.2 外部中断配置CountSensor.cvoid CountSensor_Init(void) { GPIO_InitTypeDef GPIO_InitStruct {0}; EXTI_InitTypeDef EXTI_InitStruct {0}; NVIC_InitTypeDef NVIC_InitStruct {0}; // 时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // GPIO配置 GPIO_InitStruct.GPIO_Pin GPIO_Pin_14; GPIO_InitStruct.GPIO_Mode GPIO_Mode_IPU; GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStruct); // 外部中断配置 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14); EXTI_InitStruct.EXTI_Line EXTI_Line14; EXTI_InitStruct.EXTI_Mode EXTI_Mode_Interrupt; EXTI_InitStruct.EXTI_Trigger EXTI_Trigger_Falling; EXTI_InitStruct.EXTI_LineCmd ENABLE; EXTI_Init(EXTI_InitStruct); // NVIC配置 NVIC_InitStruct.NVIC_IRQChannel EXTI15_10_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority 0x01; NVIC_InitStruct.NVIC_IRQChannelSubPriority 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd ENABLE; NVIC_Init(NVIC_InitStruct); }2.3 定时器配置Timer.cvoid Timer_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct {0}; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseInitStruct.TIM_Period 1000 - 1; // 1kHz中断频率 TIM_TimeBaseInitStruct.TIM_Prescaler 72 - 1; // 72MHz/72 1MHz TIM_TimeBaseInitStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStruct); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); TIM_Cmd(TIM3, ENABLE); NVIC_EnableIRQ(TIM3_IRQn); }3. 转速计算算法优化3.1 基本计算公式转速(RPM) (脉冲数 × 60) / (码盘孔数 × 采样时间(s))例如1秒内检测到400个脉冲20孔码盘转速 (400×60)/20 1200 RPM3.2 防抖动处理技巧在中断服务函数中添加二次验证void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line14) ! RESET) { if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) 0) { pulseCount; } EXTI_ClearITPendingBit(EXTI_Line14); } }3.3 动态采样周期算法根据转速自动调整采样间隔转速范围(RPM)采样周期(ms)理论误差5001000±0.5%500-2000500±1%2000200±2%实现代码片段void TIM3_IRQHandler(void) { static uint32_t lastCount 0; if(TIM_GetITStatus(TIM3, TIM_IT_Update) ! RESET) { uint32_t currentRPM (pulseCount - lastCount) * 60 / 20; if(currentRPM 500) { TIM_SetAutoreload(TIM3, 1000-1); } else if(currentRPM 2000) { TIM_SetAutoreload(TIM3, 500-1); } else { TIM_SetAutoreload(TIM3, 200-1); } lastCount pulseCount; TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } }4. 实测性能与优化建议4.1 实测数据对比使用标准转速台测试结果设定转速(RPM)测量值(RPM)误差率3002980.67%10009950.5%300029760.8%4.2 常见问题排查表现象可能原因解决方案读数不稳定电源干扰增加10μF电容并联在VCC-GND转速显示为零接线错误检查DO线是否接在PB14数值周期性波动码盘偏心重新安装码盘保证同心度高速时计数丢失中断处理时间过长优化中断服务函数代码4.3 扩展应用思路无线传输模块添加HC-05蓝牙模块实现手机监控数据记录功能利用STM32内部Flash存储历史数据PID控制闭环结合PWM输出实现自动调速多路测速扩展使用多个红外传感器完整工程代码已托管在GitHub搜索STM32F103-MHSensor-Speedometer包含Keil MDK完整工程文件原理图PDF版本3D打印外壳STL文件安卓手机监控APP源码

相关文章:

用STM32F103和MH-Sensor红外模块DIY一个简易测速仪(附完整代码)

用STM32F103和MH-Sensor红外模块DIY高精度测速仪(附完整工程代码) 最近在调试一个小车项目时,发现市面上成品测速模块要么价格昂贵,要么精度不足。翻出抽屉里的STM32F103C8T6最小系统和几块钱的MH-Sensor系列红外对管,…...

创业团队如何利用 Taotoken 统一管理多个 AI 模型成本

创业团队如何利用 Taotoken 统一管理多个 AI 模型成本 1. 多模型接入带来的成本管理挑战 小型创业团队在快速迭代产品时,往往需要同时接入多个大模型以满足不同场景需求。工程师可能使用 OpenAI 处理文本生成,产品经理调用 Claude 优化交互设计&#x…...

【重启日记】第六周复盘:穿越波动,用稳定输出筑牢复利底盘一、六周数据全景总览

一、六周数据全景总览第一周:阅读 2176,原力 50,排名 2.9w第二周:阅读 7131,原力 155,排名 1.3k第三周:阅读 8860,原力 263,排名 600第四周:阅读 7663&#x…...

D2DX:在Windows 10上让暗黑破坏神2重焕青春的魔法桥梁

D2DX:在Windows 10上让暗黑破坏神2重焕青春的魔法桥梁 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 想象一下&…...

数字记忆的守护者:m4s-converter如何拯救你的B站珍藏

数字记忆的守护者:m4s-converter如何拯救你的B站珍藏 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾有过这样的经历&#x…...

从零搭建AI短视频自动化生产流水线:MoneyPrinterPlus架构深度解析

从零搭建AI短视频自动化生产流水线:MoneyPrinterPlus架构深度解析 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,GP…...

Qt5和Qt6在Windows下编译有啥不同?一次搞懂配置命令从jom到CMake的变迁

Qt5与Qt6在Windows下的编译革命:从jom到CMake的深度迁移指南 当Qt6在2020年正式发布时,许多开发者可能没有意识到,这不仅仅是一次版本号的升级,更是一场构建系统的技术革命。作为长期维护Qt跨版本项目的技术顾问,我见…...

手把手教你用Vivado2022.2在Zynq UltraScale上搭建MIPI CSI-2视频采集系统(OV5640摄像头实战)

Zynq UltraScale平台MIPI CSI-2视频采集系统全流程开发指南 在嵌入式视觉系统开发中,MIPI CSI-2接口因其高带宽和低功耗特性,已成为摄像头模组的首选接口标准。本文将基于Xilinx Vivado 2022.2开发环境,详细讲解如何在Zynq UltraScale MPSoC平…...

不止于合规:用ISO 28000:2022框架,打造你的供应链安全‘韧性护城河’

超越合规:用ISO 28000:2022构建供应链安全韧性战略 当全球供应链遭遇黑天鹅事件时,那些仅满足基础合规要求的企业往往最先倒下。去年某跨国零售巨头的财报显示,因单一供应商中断导致的损失高达4.2亿美元——这个数字足以让任何董事会重新审视…...

基于Vedic数学的轻量级说话头生成技术解析

1. 项目概述:基于Vedic数学的轻量级说话头生成技术在教育技术和实时通信领域,说话头生成(Talking Head Generation, THG)技术正变得越来越重要。这项技术能够将语音信号转换为同步的嘴部动画,为虚拟教师、远程会议和数字人应用提供更自然的交…...

CVPR 2022 SCI框架实战:5分钟为YOLO目标检测模型集成低光增强模块

CVPR 2022 SCI框架实战:5分钟为YOLO目标检测模型集成低光增强模块 夜间安防摄像头拍到的画面总是模糊不清?自动驾驶车辆在隧道中突然"失明"?这些场景下的视觉识别难题,根源往往在于光线不足导致的图像质量下降。传统解决…...

AI代理日志可视化分析:前端工具实现与性能优化

1. 项目概述与核心价值如果你和我一样,日常重度使用 Claude Code、OpenClaw 这类 AI 编程助手,那你肯定也经历过这种痛苦:在终端里,面对一长串密密麻麻、结构复杂的.jsonl日志文件,试图复盘刚才的对话,或者…...

哔咔漫画下载器:打造个人永久漫画库的完整解决方案

哔咔漫画下载器:打造个人永久漫画库的完整解决方案 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.com/gh_mir…...

Obsidian Excel插件终极指南:在笔记中无缝创建和嵌入专业电子表格

Obsidian Excel插件终极指南:在笔记中无缝创建和嵌入专业电子表格 【免费下载链接】obsidian-excel 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-excel 你是否厌倦了在Obsidian笔记和Excel表格之间频繁切换?想要在知识管理流程中无缝…...

远程桌面复制粘贴失灵?别急着重装,先试试重启这个隐藏的Windows进程

远程桌面复制粘贴失灵?别急着重装,先试试重启这个隐藏的Windows进程 远程桌面连接(RDP)是现代办公场景中不可或缺的工具,但当你发现复制粘贴功能突然失效时,那种效率被硬生生切断的挫败感,相信…...

DSGE模型宝库:40+宏观经济模型一站式解决方案

DSGE模型宝库:40宏观经济模型一站式解决方案 【免费下载链接】DSGE_mod A collection of Dynare models 项目地址: https://gitcode.com/gh_mirrors/ds/DSGE_mod DSGE_mod是一个专为宏观经济研究者、政策分析师和经济学学生设计的Dynare模型集合,…...

对比使用 Taotoken 前后在模型调用失败时的容灾处理体验

模型调用容灾处理:Taotoken 路由能力的实际体验 1. 模型服务故障的常见场景 在实际开发中,调用大模型API时难免会遇到服务暂时不可用的情况。可能是由于供应商端的维护、突发流量高峰或网络波动等原因导致。传统直连单一模型供应商时,开发者…...

从Rudin到卓里奇:给数学系高年级生的5本硬核分析教材深度横评(附学习路线)

从Rudin到卓里奇:给数学系高年级生的5本硬核分析教材深度横评(附学习路线) 数学分析作为现代数学的基石,其教材选择往往决定了学习者对分析学的理解深度和思维高度。对于已经完成基础分析课程的高年级本科生或研究生而言&#xff…...

从Target预测孕妇到你的推荐系统:用4R框架设计更‘懂人心’的算法策略

从Target预测孕妇到智能推荐:4R框架如何重塑算法策略的底层逻辑 深夜加班的推荐算法工程师盯着屏幕上跳动的CTR数据,突然意识到一个问题:我们精心优化的点击率模型,真的比Target超市二十年前的孕妇预测模型更"懂"用户吗…...

植物大战僵尸终极修改器:PVZ Toolkit完整指南

植物大战僵尸终极修改器:PVZ Toolkit完整指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PVZ Toolkit是一款专为经典游戏《植物大战僵尸》PC版设计的开源修改工具,让玩家…...

如何自定义一个Spring Boot Starter

如何自定义一个 Spring Boot Starter?从零封装一个自己的自动配置本文基于 Spring Boot 2.7 / 3.x,核心原理通用一、从一个真实场景说起 最近咱们团队在做内部工具链建设,好几个项目都要集成统一的日志追踪功能——每个请求进来,自…...

终极远程桌面游戏手柄控制解决方案:RdpGamepad完全指南

终极远程桌面游戏手柄控制解决方案:RdpGamepad完全指南 【免费下载链接】RdpGamepad Remote Desktop Plugin for Xbox Gamepads 项目地址: https://gitcode.com/gh_mirrors/rd/RdpGamepad 你是否曾经想在远程桌面连接中使用Xbox游戏手柄,却发现手…...

别再敲空格了!Markdown换行的3种正确姿势(含Typora、VS Code实测)

Markdown换行全指南:告别空格与回车的错误姿势 第一次用Markdown写文档时,你是否也遇到过这样的困惑:明明在编辑器里敲了回车换行,预览时却变成了一整段?或者在不同平台发布时,排版突然变得乱七八糟&#…...

Translumo:3分钟掌握高效屏幕实时翻译,游戏视频无障碍体验完整指南

Translumo:3分钟掌握高效屏幕实时翻译,游戏视频无障碍体验完整指南 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr…...

如何在5分钟内完成手机号码精准定位:免费工具终极指南

如何在5分钟内完成手机号码精准定位:免费工具终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirr…...

如何实现Claude Code多设备配置同步:开发环境一致性的终极指南

如何实现Claude Code多设备配置同步:开发环境一致性的终极指南 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining…...

LangGraph MCP服务器:为AI助手注入生产级智能体开发模式

1. 项目概述:一个为AI助手注入LangGraph专业知识的MCP服务器如果你正在用Claude Desktop或者Cursor这类支持MCP(Model Context Protocol)的AI工具来开发LangGraph智能体,那你可能遇到过这样的场景:你问助手“怎么给我的…...

Microsemi Libero SoC 实战:用Verilog写个LED跑马灯,ModelSim仿真一次过(附源码)

Microsemi Libero SoC 实战:用Verilog写个LED跑马灯,ModelSim仿真一次过(附源码) 第一次接触FPGA开发板时,看着板载LED单调地闪烁总让人觉得意犹未尽。作为硬件描述语言的"Hello World",LED控制确…...

利用快马平台与copilot理念,十分钟打造智能代码生成器web原型

最近在尝试快速验证一个产品想法时,发现用传统方式从零开始搭建原型实在太耗时。正好了解到InsCode(快马)平台支持AI辅助开发,就尝试用它结合copilot的理念,十分钟内做出了一个智能代码生成器的web原型。整个过程比想象中顺利很多&#xff0c…...

LLM推理优化:KV缓存与长上下文处理关键技术

1. 项目背景与核心挑战在大型语言模型(LLM)的实际应用中,KV缓存优化和长上下文处理一直是工程落地的关键瓶颈。随着模型参数规模从7B增长到70B甚至更大,单次推理的显存占用和计算延迟问题愈发突出。特别是在处理长文档摘要、代码补…...