项目概述

本项目基于零知派ESP32开发了一套完整的步进电机智能控制系统,通过电位器实现精确的速度控制,按键控制方向切换,并配备1.3寸TFT显示屏实时显示系统状态。系统采用ULN2003AN驱动芯片控制28BYJ-48步进电机,实现了平滑的速度调节和精准的位置控制。

项目亮点

        ① 自动识别电位器有效电压范围(3.4V-4.0V),实现线性速度映射
        ② 采用状态机设计,确保按键响应稳定可靠
        ③ 1.3寸TFT显示屏提供丰富的状态信息显示
        ④ 指数曲线速度映射算法,低速控制更精准

项目难点及解决方案

问题描述:电位器在3.4-4.0V范围内电机才转动

解决方案:

实现电压范围重新映射算法,通过校准参数自适应不同电位器特性

问题描述:28BYJ-48步进电机在低速时扭矩不足

解决方案:

设置最小启动速度(MIN_SPEED),并采用指数曲线速度映射

一、硬件系统设计

1.1 器件清单

规格型号

数量

备注

零知派ESP32

1

零知派ESP32-WROOM-32

28BYJ-48

1

5V减速步进电机

ULN2003AN驱动板

1

达林顿管阵列驱动

1.3寸TFT LCD (ST7789)

1

240×240分辨率

10KΩ旋转电位器

1

线性电位器

6×6mm轻触开关

1

常开型

杜邦线

若干

母对母、母对公

零知派ESP32扩展板

零知派ESP32通用扩展板

1.2 接线方案

根据代码定义进行以下接线操作、如需定义为其他引脚请自行修改代码:

(1)电机驱动部分接线

零知派ESP32引脚

ULN2003AN驱动板

28BYJ-48步进电机

功能

33

IN1

/

电机控制

25

IN2

/

电机控制

26

IN3

/

电机控制

27

IN4

/

电机控制

/

排线连接

排线连接

电机驱动

5V(外部)

+

/

电机电源

GND

-

/

电机地线

(2)ST7789显示屏接线

零知派ESP32引脚

ST7789引脚

功能

3.3V

VCC

电源

GND

GND

15

CS

片选

13

DC

数据/命令控制

4

RES

复位

23

SDA

SPI数据线

18

SCL

SPI时钟线

(3)电机操作部分接线

零知派增强板引脚

电位器

按键

功能

5V

左侧引脚

/

供电

GND

右侧引脚

/

地线

34

中间引脚

/

信号输入

12

/

高电平一端

信号输入,内部上拉

ps:电机需要消耗大量电力,最好直接从外部 5V 电源供电

1.3 硬件连接图

1.4 实物接线图

二、软件架构设计

2.1 库文件及初始化

// 主要库文件引入
#include <Stepper.h>
#include <TFT_eSPI.h>

#define BUTTON_PIN 12  // 按键引脚(内部上拉)
#define POT_PIN 34    // 电位器模拟输入	

2.2 电压校准算法

// 电压校准参数 - 关键创新点
#define POT_MIN_VOLTAGE 3.4  // 电机启动最小电压
#define POT_MAX_VOLTAGE 4.0  // 电机最大速度电压	

2.3 状态机按键处理

// 按键状态枚举
enum ButtonState { IDLE, PRESSED, DEBOUNCING };
ButtonState buttonState = IDLE;

void handleButton() {
    int reading = digitalRead(BUTTON_PIN);
    switch (buttonState) {
        case IDLE:
            if (reading== LOW) {
                buttonState = DEBOUNCING;
                lastButtonTime = millis();
            }
            break;
        // ... 状态处理逻辑
    }
}

2.4 电位器模拟值处理

void handlePotentiometer() {
  int potValue = analogRead(POT_PIN);

  if (abs(potValue - lastPotValue) > 5) {
    lastPotValue = potValue;

    // 线性映射到 0~15 RPM
    targetSpeed = map(potValue, 0, ADC_RESOLUTION, MIN_SPEED, MAX_SPEED);
    targetSpeed = constrain(targetSpeed, MIN_SPEED, MAX_SPEED);

    // 速度变化时立即更新 Stepper
    if (targetSpeed != currentSpeed) {
      currentSpeed = targetSpeed;
      if (currentSpeed > 0) {
        myStepper.setSpeed(currentSpeed);
      }
      updateSpeedDisplay();

      if (DEBUG_MODE) {
        Serial.print("Speed: "); Serial.print(currentSpeed); Serial.println(" RPM");
      }
    }
  }
}	

如图所示,步进电机控制系统的工作流程图

三、操作过程及展示

3.1 系统连接

将ULN2003AN驱动板接入5~12V外部电源,连接28BYJ-48电机到驱动板输出端,按照接线表连接零知派ESP32开发板与各模块,确保所有电源正确连接后上电

3.2 校准测试

(1)开源平台-输入 步进电机 并搜索-代码下载自动打开

177935207621177.webp

(2)连接-验证-上传

177935208231417.webp

(3)旋转电位器,观察电机响应

(4)根据实际电压范围调整校准参数

(5)测试按键功能,确认方向切换正常

3.3 视频演示验证

ESP32驱动28BYJ-48步进电机控制系统

缓慢旋转电位器,观察速度线性增加。按下按键,验证方向切换功能。电位器逆时针旋转到底,确认电机停止

四、控制系统模块详解

4.1 ULN2003AN驱动芯片

(1)功能说明

    ULN2003AN是高压大电流达林顿晶体管阵列,包含7个NPN达林顿对管,每个可驱动500mA和50V负载。在本项目中用于驱动28BYJ-48步进电机的四相绕组。

16cc9e7dfd85444c95870deb9c38e9c2.png

    该板具有四个控制输入接口和一个电源接口,还配备了一个与电机连接器相兼容的 Molex 连接器,可直接插入电机。同时,板上设有四个 LED,用于显示四条控制输入线上的活动状态,并且带有一个开 / 关跳线,以便在需要时禁用步进电机。

(2)工作流程

    接收MCU发出的控制信号、通过达林顿管放大电流、驱动步进电机各相绕组、提供反向电动势保护二极管

4.2 28BYJ-48步进电机

(1)工作原理

    基于齿轮与电磁铁的协同作用,通过一次推动轮子一个 “步” 来实现运动

83f9eb1924275bf42be4f8d81364e1ef.gif

    向线圈发送高脉冲时,线圈会通电,进而吸引最靠近齿轮的齿,使电机以精确且固定的角度增量(即步长)旋转。其 360 度旋转的步数取决于齿轮上的齿数

(2)引脚排列

    28BYJ-48 步进电机有五根线。引脚排列如下:

1d658c4ddbb540519543539152035c51.png

        28BYJ-48 包含两个线圈,每个线圈都设有一个中心抽头,这两个中心抽头在电机内部相连,并通过红线引出。

        而线圈的一端与中心抽头共同构成一相,所以 28BYJ-48 总共有四相:

a3f9940e476d4b6e810f398470dd705b.png

红线始终拉高,因此当另一根引线拉低时,该相通电。

    仅当各相按称为步进顺序的逻辑顺序通电时,步进电机才会旋转。

(3)齿轮减速比

        依据数据表,28BYJ-48 步进电机在全步模式下运行时,每一步对应的旋转角度为 11.25°,由此可算出每完成 360° 旋转需要 32 步(360°÷11.25°=32)

e458ef48fca64a8a98bddf22b189e5e9.png

    该电机配备了 1/64 的减速齿轮组(实际减速比为 1/63.68395,不过在多数情况下,1/64 的近似值已能满足需求)。

    这也就意味着,电机实际完成一圈旋转需要约 2038 步(32 步 / 转 ×63.68395≈2037.8864 步,近似为 2038 步)。

(4)能量消耗

        28BYJ-48 步进电机的典型电流消耗约为 240mA。

        由于其耗电量较大,因此建议直接采用外部 5V 电源供电,而非通过 零知派ESP32开发板供电。

        需要注意的是,即便处于静止状态,该电机也会消耗功率以维持当前位置。

(5)技术规格

工作电压

5VDC

工作电流

240mA(典型值)

相数

4

齿轮减速比

64:1

步距角

5.625°/64

频率

100赫兹

牵引扭矩

>34.3mN.m(120Hz)

自定位扭矩

>34.3mN.m

摩擦力矩

600-1200 克力·厘米

拉入扭矩

300 克力.厘米

五、常见问题解答

Q1: 电位器控制不线性如何调整?

    A:修改代码中的POT_MIN_VOLTAGEPOT_MAX_VOLTAGE参数,匹配实际电压范围。

Q2: 显示屏显示异常怎么办?

    A:检查SPI接线是否正确,确认CS、DC、RST引脚定义与代码一致。

Q3: 按键无响应如何解决?

    A:确认按键是否正确连接到GND和引脚12,检查内部上拉电阻是否启用。

Q4: 电机振动大且噪音明显?

    A:降低MAX_SPEED值,或增加加速度参数,使速度变化更平滑。

项目资源:

        步进电机数据表:    28BYJ-48 数据表

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐