单片机控制步进电机调速设计:ULN2003驱动与定时器查表调速

一颗51单片机+ULN2003+定时器查表,把步进电机调速、方向与数码管显示一次搞定

2026-09-05
步进电机51单片机ULN2003定时器调速查表法嵌入式开发物联网

步进电机把电脉冲转换成精确的角位移,控制脉冲个数即可定位、控制脉冲频率即可调速,是低成本开环定位的首选执行机构。本文基于《用单片机控制步进电机》一文整理,以电子爱好者常用的 35BY48S03 永磁式步进电机为例,详解三类步进电机的选型差异、ULN2003 达林顿驱动电路、用定时器 T1 中断实现 25~100 转/分无级调速的原理、转速与定时常数的查表法(11.0592MHz 晶振),并给出完整的 51 汇编程序与转速定时表,适用于物联网设备、教学实验与小型自动化机构的定位控制设计。

一、问题:步进电机"转多快"到底由谁决定

步进电机是机电控制中常用的执行机构,作用是把电脉冲转化为角位移:驱动器每收到一个脉冲,电机就按设定方向转过一个固定角度(步进角)。因此控制脉冲个数即可控制角位移量实现准确定位,控制脉冲频率即可控制转速与加速度实现调速。很多初学者以为调速靠"延时"就能解决,但延时法会阻塞 CPU、影响按键与显示等其它功能——正确做法是用定时器中断产生脉冲节拍,本文即围绕这一思路展开。

二、步进电机选型:PM、VR、HB 三类怎么选

常见步进电机分三种:永磁式(PM)、反应式(VR)和混合式(HB)。永磁式一般为两相,转矩和体积较小,步进角一般为 7.5° 或 15°,适合小负载、低成本场合;反应式一般为三相,可实现大转矩输出,步进角一般为 1.5°,但噪声和振动都很大,在欧美发达国家 80 年代已被淘汰;混合式综合了永磁式与反应式的优点,又分两相和五相:两相步进角一般为 1.8°,五相一般为 0.72°,应用最为广泛(数据来源:用单片机控制步进电机)。

类型相数典型步进角转矩噪声/振动典型应用
永磁式(PM)两相7.5° / 15°较小中等低成本小负载、教学实验
反应式(VR)三相1.5°很大(已淘汰)早期大转矩场合
混合式(HB)两相/五相1.8° / 0.72°大且平稳工业定位、3D打印、数控

三、永磁式步进电机的控制电路:ULN2003 驱动

以电子爱好者业余制作中常用的 35BY48S03 型永磁步进电机为例,电机共有四组线圈,四组线圈的一个端点连在一起引出,共 5 根引出线(COM 端 + A、A'、B、B' 四相)。要驱动电机转动,只需轮流给各引出端通电:将 COM 端接正电源,用开关元件(如三极管)将 A、A'、B、B' 轮流接地即可。该电机典型参数如表 2 所示。

型号步距角相数电压电流电阻最大静转矩定位转矩转动惯量
35BY48S037.5°412V0.26A47Ω180g·cm65g·cm2.5g·cm²

因其工作电压 12V、最大电流 0.26A,用一块开路输出达林顿驱动器 ULN2003 即可驱动:ULN2003 内含 7 路达林顿管,每路可承受 500mA 集电极电流、50V 耐压,内置续流二极管可直接驱动感性负载,是驱动 5V/12V 小功率步进电机的经典选择。单片机 P1.4~P1.7 分别接 ULN2003 的四个输入,输出端接电机四相线圈(COM 接 +12V)。开机时 P1.4~P1.7 均为高电平,依次将 P1.4~P1.7 切换为低电平即可驱动电机运行,注意切换前先把前一个输出引脚恢复为高电平。改变两次接通之间的时间即可调速,改变各线圈接通顺序即可改变转向。

四、驱动实例:25~100 转/分可调调速器

驱动要求:开机后电机不转,按下启动键电机旋转,初始速度 25 转/分;按"加1"键速度增加、"减1"键速度降低,最高 100 转/分、最低 25 转/分;按停止键电机停转;速度值在数码管上实时显示。

调速的关键是计算每个脉冲的间隔时间。35BY48S03 步距角 7.5°,即每 48 个脉冲转一周(360°÷7.5°=48)。最低转速 25 转/分对应 25×48=1200 脉冲/分,即 50ms/脉冲;最高转速 100 转/分对应 100×48=4800 脉冲/分,即 12.5ms/脉冲。用 11.0592MHz 晶振、定时器 T1 方式 1(16 位)定时,按"定时初值=65536-定时时间×晶振频率÷12"计算各转速对应的 TH1/TL1,结果如表 3 所示。

速度(转/分)单步时间(µs)TH1TL1实际定时(µs)
255000076049996.8
26480778223648074.18
2746296898646292.61
2844643957344640.155
10012500211012499.2

表中不仅算出了 TH1 和 TL1,还给出了在该定时常数下的真实定时时间,可据此估算真实速度与理论速度的误差(数据来源:用单片机控制步进电机)。把这些初值分别存入 DjH、DjL 两张表,运行时按当前速度查表装载即可。

五、程序实现:定时器中断驱动+查表调速

程序由键盘程序、显示器程序、步进电机驱动程序三部分组成。主程序初始化变量、消隐显示器高位、将电机驱动引脚置高,然后循环扫描键盘;有键按下则调用键盘处理程序(启动/停止、加1/减1),否则将当前转速转成 BCD 码送入显示缓冲区;接着判断 StartEnd 位变量决定开启或关闭定时器 T1——关闭时把 P1.0~P1.3 全部置高,防止某相线圈长期通电。

步进电机的驱动在定时器 T1 的中断服务程序中实现。变量 DjCount 初值 11110111B,进入中断后左移并取反,与 P1 相"与/或",使 P1.4~P1.7 依次输出低电平,驱动四相线圈轮流通电;当数据变为 01111111B 后重新恢复为 11110111B 开始下一轮循环。定时初值采用查表法:把速度值 Speed 减去基数 25 后作为查表偏移,分别查 DjH、DjL 表装入 TH1、TL1,实现每档速度的定时初值重置。核心代码如下。

; 定时器T1中断:步进电机驱动(51汇编,11.0592MHz)
DjZd:
    PUSH ACC
    PUSH PSW
    MOV  A, Speed
    SUBB A, #MinSpd        ; 减基数25,从0开始计数
    MOV  DPTR, #DjH
    MOVC A, @A+DPTR        ; 查表取TH1
    MOV  TH1, A
    MOV  A, Speed
    SUBB A, #MinSpd
    MOV  DPTR, #DjL
    MOVC A, @A+DPTR        ; 查表取TL1
    MOV  TL1, A
    MOV  A, DjCount
    CPL  A
    ORL  P1, A             ; 先关断上一相
    MOV  A, DjCount
    RL   A                 ; 左移切换到下一相
    MOV  DjCount, A
    ANL  P1, A             ; 接通当前相
    POP  PSW
    POP  ACC
    RETI

; 转速→定时初值表(25~100转/分)
DjH: DB 76,82,89,95,100,106,110,115,119,123,127,131,134,138,141,144,147,150,153,156,159,161,164,167,169,172,174,177,179,181,184,186,188,190,193,195,197,199,201,203,205,207,209,211
DjL: DB 0,236,86,73,212,0,214,96,163,165,112,12,123,203,0,36,152,58,25,140,68,201,80,219,131,56,247,199,152,105,59,14,225,180,136,92,49,6,220,179,138,97,57,0

键盘处理中,S1 为启动/停止键、S2 为停止键、S3 为加1键、S4 为减1键:按加1键时 Speed 加 1,到最大值 100 时保持;按减1键时 Speed 减 1,到最小值 25 时保持。数码管显示用动态扫描,显示缓冲区 DispBuf 存放 BCD 码,定时器 T0 每 3ms 中断刷新一位。

六、程序分析与改进方向

本程序的关键在于把"调速"从阻塞式延时中解放出来:定时器 T1 中断按查表得到的节拍切换绕组通电顺序,CPU 主循环只负责键盘与显示,互不干扰。三点值得注意:一是关闭电机时把 P1.0~P1.3 全部置高,避免某相长期通电导致线圈过热;二是查表法用空间换时间,44 档速度的初值全部预存,中断内只做两次查表,实时性极佳;三是程序未做高位"0"消隐,速度 10 转/分时显示"010",可自行加入消隐逻辑。

在此基础上可扩展:把 S1 定义为"启动/停止"、S2 定义为"方向"(按下切换旋转方向);把调速范围扩展到 1~100 转/分;实现首位无效零消隐;或改用定时器自动重装载模式(方式 2)简化初值装载。若需更高精度与更平滑的加减速,可引入梯形/S 形加减速曲线,逐档改变定时初值。

实现方式调速精度CPU占用实现复杂度适用场景
软件延时调速低(受延时影响)高(阻塞)最低单任务、无显示/按键
定时器中断+查表(本文)中(查表档位)低(中断驱动)调速+显示+按键并存
定时器+加减速曲线高(连续变速)较高高速启停、防失步
专用驱动IC/模块高(硬件细分)极低量产产品、高精度定位

七、设计清单与总结

单片机控制步进电机设计清单

  • ① 选型:小负载低成本选永磁式(PM),工业定位选混合式(HB,1.8°/0.72°);
  • ② 驱动:12V/0.26A 级小电机用 ULN2003(500mA/路、内置续流二极管),COM 接正电源、四相轮流接地;
  • ③ 调速:用定时器中断产生脉冲节拍,勿用阻塞式延时;
  • ④ 查表:按"初值=65536-定时时间×晶振÷12"预存各档 TH1/TL1,中断内查表装载;
  • ⑤ 停转:关闭定时器时把四相全部置高,防止线圈长期通电;
  • ⑥ 扩展:可加方向键、加减速曲线与高位消隐。

总结:步进电机调速的本质是控制脉冲节拍,用定时器中断+查表法把调速从阻塞式延时中解放出来,使 51 单片机在驱动电机的同时还能处理按键与数码管显示;35BY48S03 配 ULN2003 是低成本入门组合,7.5° 步距角、48 脉冲/周,25~100 转/分对应 50ms~12.5ms/脉冲,查表即可实现无级调速;掌握这一思路后,无论换用混合式电机还是引入加减速曲线,都能快速迁移。

本文基于《用单片机控制步进电机,硬件电路及源码》等资料整理优化。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应

🎧 本文已制作播客节目
双主持对话音频,随时随地收听本文内容
收听播客 →