目录
前言
同样的硬件,有人做出来抖动严重、数据漂移、响应卡顿;有人做出来稳定、精准、流畅。
本篇汇总单片机实战必用的全部算法与优化技巧,是做稳定项目、面试加分、实战进阶的终极内容。
一、单片机常用数据滤波算法
1. 单次采集
直接读取 ADC / 传感器数据,不做处理。
- 缺点:噪声大、跳动严重、极易受电源干扰。
- 适用:对精度无要求的简单场景。
2. 均值滤波
连续采集 N 次数据,去掉最大最小值,求和取平均。
- 优点:平滑效果好,抑制随机噪声。 缺点:响应速度一般。
- 适用:电压检测、温度、湿度、光照采集。
3. 中值滤波
连续多次采样,排序后取中间值,直接剔除突变干扰。
- 优点:完美滤除突发干扰、尖峰噪声。
- 适用:按键抖动、传感器偶尔跳变。
4. 滑动窗口滤波
建立数据缓冲区,新数据入队、旧数据出队,实时更新平均值。
优点:实时性 + 稳定性双兼顾,工业项目首选。
5. 一阶滞后滤波
公式:结果 = 0.8*旧值 + 0.2*新值
通过权重比例,让数据变化更平滑。
- 优点:极其平稳,无抖动。
- 缺点:响应略微滞后。
- 适用:电机速度、温控、压力模拟量采集。
二、数据校准与换算
1. 原始值→物理值换算
单片机读到的都是原始数字量,必须公式换算: 真实电压 = 采样值 / 分辨率 × 参考电压
所有 ADC 项目必须做换算,否则数据无意义。
2. 零点校准
硬件存在偏置电压,静态下数值不为 0。
解决:开机采集静态偏移量,运行时自动补偿归零。
3. 量程映射
把传感器原始区间映射成实际物理区间。
经典应用:压力传感器、电量百分比、温度补偿。
三、按键高级算法
-
软件消抖 延时过滤 10~20ms 抖动,代替硬件电容,节省成本。
-
单击 / 双击 / 长按三态识别 状态机判断按键时序,实现:
- 短按:切换界面
- 长按:参数增减
- 双击:确认 / 返回
- 按键连打防抖 按住不放定时触发,避免 CPU 连续触发多次。
四、延时与精准时序优化
1. 裸机禁止死延时
HAL_Delay() 会卡死整个程序。
产品级项目全部使用:定时器计时 + 时间戳判断
2. 时间戳调度思想
记录上次执行时间,当前时间差值大于周期就执行任务。
- 实现:多任务并行不阻塞(裸机伪多任务)
- 适配:LED 闪烁、定时采集、屏幕刷新、定时上报数据。
五、状态机编程思想(解决多层 if-else)
新手代码:几十层 if else,逻辑混乱、难维护。 企业标准:状态机
常用状态:
- 待机状态
- 运行状态
- 报警状态
- 休眠状态
- 故障状态
优势:
- 逻辑分层清晰
- 新增功能不打乱旧代码
- 极其适合设备类产品开发
六、掉电存储方案(产品必备)
- EEPROM:存储少量配置、阈值、计数参数,断电不丢。
- Flash:批量数据存储、日志存储。
- 存储原则:不要频繁擦写,避免芯片寿命耗尽。
最佳写法:参数变化后延时保存,避免频繁读写。
七、代码运行效率优化技巧
- 频繁执行代码尽量放 RAM 运行
- 循环内不做重复计算
- 固定数值全部宏定义
- 大数据拷贝使用指针操作
- 不用的外设及时关闭节省功耗
八、低功耗项目优化要点
- 空闲时进入睡眠 / 停止模式
- 关闭未使用外设时钟
- IO 口统一配置为上下拉,禁止浮空漏电
- 定时唤醒采集数据,不一直全速运行
九、稳定性终极优化(工业级)
- 指令重入保护
- 数据接收超时判断
- 通信异常重连机制
- 传感器掉线检测
- 软件看门狗防死机

&spm=1001.2101.3001.5002&articleId=163854444&d=1&t=3&u=20028432ff344825aa19fe3bb522b90a)
4377
&spm=1001.2101.3001.5003&articleId=163854444&d=1&t=3&u=47153ea71d1144578d8379b6c8fbd21e)

被折叠的 条评论
为什么被折叠?



