江科协15-2 直流电机实验调试总结

51 单片机直流电机 PWM 调速实验------调试过程总结

项目路径:C:\Users\54200\Desktop\51MCU\14-直流电机实验

目标:复现普中教程视频(BV1Mb411e7re P34)中"按独立按键 K1,电机转速 1→2→3 逐步增加,数码管同步显示档位"的实验现象

硬件:普中 51 开发板(STC89C52)+ 直流电机接步进电机模块输出端子 J47 的 5V 与 O1


目录


一、问题背景

原工程源码 main.c 下载到板子后,现象为:电机全速旋转 5 秒后停止,与视频中"按键分级调速"的现象不符。

二、原因分析与修复过程

第 1 轮:核心功能缺失(PWM + 按键扫描)

诊断 :阅读源码发现,原程序是教程的"基础版"------仅用 GPIO 直接拉高/拉低控制电机通断(DC_Motor=1 转 5 秒 → DC_Motor=0 停止 → 死循环)。整个程序中:

  • 没有任何 PWM 生成逻辑(无定时器配置、无占空比概念);
  • 没有独立按键 K1 的引脚定义与扫描代码。

修复 :重写 main.c,补全两大模块:

模块 实现方式
PWM 生成 定时器 T0 工作方式 1,100 μs 中断一次;计数 100 次为一个 PWM 周期(10 ms,即 100 Hz);中断内比较 cnt < g_duty 决定 P1.0 输出高/低电平
按键调速 key_scan() 带 10 ms 消抖扫描 K1(P3.1,低电平有效);每按一次档位 +1,占空比查表 speed_table[4] = {0, 30, 70, 100},循环:停止 → 低速(30%) → 中速(70%) → 全速(100%) → 停止

验证 :Keil 命令行编译,0 Error / 0 Warning,生成新 template.hex。

第 2 轮:烧录了旧固件

现象:烧录后电机"转几下就停",来不及按按键。

诊断 :新程序初始占空比为 0,上电后电机应完全静止;"全速转约 5 秒后停止"恰好是旧程序的行为。结合工程目录时间戳确认 template.hex 已更新,判断是板内运行的仍是旧固件(STC-ISP 选择了错误的 hex 路径,或烧录后未冷启动复位)。

修复:

  1. 在 main() 开头增加 DC_Motor = 0;,杜绝上电瞬间电平毛刺导致电机误转;
  2. 重新编译并给出烧录检查清单:确认选择本项目文件夹内的 template.hex、下载时对板子断电再上电(STC 依赖冷启动进入 ISP)。

判据 :上电电机纹丝不动即为新程序;上电自转即为旧程序。

第 3 轮:数码管不显示档位

现象:电机按键调速功能正常,但数码管无 1/2/3 档位显示。

诊断 :代码中完全没有数码管驱动代码------没有段码表、没有位选控制。

修复:按普中开发板数码管电路补充显示模块:

  • P0 作为段选数据口(共阴极数码管段码表 gsmg_code[10]);
  • 位选由 74HC138 译码器完成,输入端 LSA/LSB/LSC 接 P2.2/P2.3/P2.4;
  • smg_display() 将 LSA/LSB/LSC 全部拉低选中第 1 位数码管,主循环中实时调用 smg_display(g_speed_level) 刷新;
  • 显示逻辑与档位一一对应:0=停止,1/2/3=三档转速。

验证:重新编译 0 Error / 0 Warning,烧录后电机调速与数码管显示均与教学视频一致。

三、最终程序结构

text 复制代码
main.c
├── 硬件接口定义
│   ├── DC_Motor (P1.0)   ------ 电机 PWM 输出
│   ├── KEY1 (P3.1)       ------ 独立按键 K1
│   ├── LSA/LSB/LSC (P2.2~P2.4) ------ 数码管位选(74HC138)
│   └── GPIO_DIG (P0)     ------ 数码管段选
├── delay_ms()            ------ 软件毫秒延时(按键消抖用)
├── key_scan()            ------ 按键扫描(带消抖、支持连续触发)
├── time0_init()          ------ T0 初始化,100 μs 定时中断
├── smg_display()         ------ 第 1 位数码管显示档位
├── main()                ------ 按键处理 + 显示刷新
└── time0_isr() (T0中断)  ------ 100 μs 计数,生成 100 Hz PWM

最终实验现象对照表:

按键操作 电机状态 数码管
上电 停止(占空比 0%) 0
按 K1 第 1 次 低速(30%) 1
按 K1 第 2 次 中速(70%) 2
按 K1 第 3 次 全速(100%) 3
按 K1 第 4 次 停止(回到初始档) 0

四、经验要点

  1. 现象对照定位法:上电自转 5 秒 = 旧固件特征;上电静止 = 新固件特征。用可区分的"指纹现象"快速判断烧录是否成功。
  2. STC 烧录两个坑:hex 路径选错(同名文件存在于多个资料文件夹中);下载需要冷启动配合。
  3. TT 电机启动死区:低速档占空比过低时电机可能不转或嗡嗡响,可把 30% 提高到 40%~50%。
  4. 模块化排查顺序:先核心功能(PWM + 按键)→ 再确认固件确实更新 → 最后补外围显示,与视频现象逐项对齐。

相关推荐
Elastic 中国社区官方博客5 小时前
基于 Jina OCR v1 与 Elasticsearch 的 PDF 智能混合检索与 RAG 系统实战指南
大数据·数据库·elasticsearch·搜索引擎·ocr·jina
楚识科技5 小时前
信创环境下 OCR 部署实践:从麒麟系统到达梦数据库的全栈适配
数据库·ocr
飞浪纪元[FWC–FE]5 小时前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
Paper数据分析-经管学术5 小时前
1985-2026年中国低空经济专利明细数据库
数据库
RuoyiOffice5 小时前
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战
java·数据库·spring boot·opengauss·信创
画中有画5 小时前
时序数据库在物联网系统中的应用
数据库·物联网·时序数据库
Decay__11 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说16 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场16 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__17 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构