江科协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 + 按键)→ 再确认固件确实更新 → 最后补外围显示,与视频现象逐项对齐。

相关推荐
IvorySQL7 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔8 小时前
SQL 脚本的导入顺序
数据库·sql
代码什么用8 小时前
Spring对IoC的实现
数据库·spring
hz5678910 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC10 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday10 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
半杯咖啡半行码10 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
小米里的大麦11 小时前
16 MySQL 事务
数据库·mysql
西柚小萌新11 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
邓工说电12 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技