【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制

2026-09-091

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制

本文介绍了 DFRobot Beetle ESP32-C6 开发板结合 A4988 模块,实现 42 步进电机的串口控制;设计 LabVIEW 上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等。

项目介绍

DFRobot Beetle ESP32-C6 开发板结合 A4988 驱动板实现 42 步进电机驱动。

  • 准备工作:步进电机参数、环境搭建、硬件连接等;
  • 工程测试:工程配置、流程图、关键代码,串口 JSON 指令控制步进电机旋转方向、角度和速度;
  • LabVIEW 设计:前面板、程序面板设计,自动发送 JSON 消息,实现步进电机的自动化控制、数据采集与存储。

A4988 模块

A4988 是一款高性能微步驱动器,可驱动双极步进电机,支持全步、半步及多种微步模式,最大输出电流可达±2A,电压范围8V~35V。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_1.webp

  • A4988模块是一款带有内置转换器和过流保护的DMOS微步驱动器,适用于双极步进电机。它支持全步、半步、1/4步、1/8步和1/16步五种步进模式,输出电压可达35V,最大输出电流±2A。
  • 模块内置固定关断时间电流调节器,可在慢速或混合衰减模式下工作,自动选择电流衰减方式,提高步进精度并降低噪声

详见:A4988 Stepper Motor Driver module .

扩展板

为了便于 A4988 模块的 GPIO 引脚连接 MCU 控制器和 42 步进电机,设计扩展板。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_2.webp

原理图

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_3.webp

详见:42步进电机A4988扩展板 - 立创开源硬件平台

驱动测试

代码

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time

# Define TMC2209 pinout
dir = Pin(6, Pin.OUT)
step = Pin(20, Pin.OUT)
en = Pin(19, Pin.OUT)

# ==== Initialized IIC OLED ====
i2c = I2C(0, scl=Pin(22), sda=Pin(23))
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c)

# ==== OLED 显示电机状态函数 ====
def display_motor_status(status, direction, speed):
    oled.fill(0)  # 清屏
    oled.text("=== MOTOR ===", 0, 0)
    oled.text("Status: " + status, 0, 20)
    oled.text("Direction: " + direction, 0, 35)
    oled.text("Speed: " + speed, 0, 50)
    oled.rotate(0)
    oled.show()

while True:
    en.value(0) # enable stepper
    dir.value(not dir.value()) # switch direction
    dir_str = "CW" if dir.value() == 0 else "CCW"
    display_motor_status("RUNNING", dir_str, "1200us")
    for _ in range(800):  # 180 度对应步数
        step.value(1)
        time.sleep_us(1200)
        step.value(0)
        time.sleep_us(1200)
    en.value(1) # disable stepper
    display_motor_status("STOPPED", dir_str, "1200us")
    print("rotated! now reverse")
    time.sleep(1)

效果

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_4.webp

LabVIEW

LabVIEW,即 Laboratory Virtual Instrument Engineering Workbench ,是一种图形化程序开发环境,由美国国家仪器(NI)公司研制开发。LabVIEW 使用图形化编辑语言 G 编写程序,产生的程序是框图的形式。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_5.webp

LabVIEW 因其图形化编程、硬件集成优势和强大的工具包,成为多个行业中快速开发测控系统的首选工具。它特别适合需要高可靠性实时控制、复杂数据采集和多仪器集成的场景。LabVIEW 广泛应用于工业自动化、测试与测量、科学研究与教育、生物医学、嵌入式开发、图像与信号处理等领域。

详见:LabVIEW概述 - NI .

硬件连接

  • 使用 Type-C 数据线连接开发板和电脑;
  • A4988 驱动板、ESP32-C6 开发板的接线方式如下
A4988 ESP32-C6 Note
Dir Pin6 Direction
STEP Pin20 Steps
EN Pin19 Enable
VM 5V Power for stepper
VCC 3V3 Power for MCU
GND GND Ground

注意,若步进电机额定电压较高或带负载运行,需使用外部电源连接 A4988 驱动板 VM 引脚供电。

  • A4988 与 42 步进电机的接线方式如下
42步进电机 A4988 Note
A+ 1A A phase
A- 1B A phase
B+ 2A B phase
B- 2B B phase

实物图

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_6.webp

串口连接

使用杜邦线连接 USB 转 TTL 工具和 ESP32-C6 开发板。

ESP32-C6 USB-TTL Note
Pin16 RXD Transmite
Pin17 TXD Receive
GND GND Ground

实物图

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_7.webp

这里使用 DFRobot RainbowLink 工具实现串口通信,详见:TEL0185_RainbowLink .

环境搭建

搭建 Thonny IDE 和 MicroPython 开发环境。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_8.webp

详见:【Beetle ESP32 C6迷你开发板】介绍、环境搭建、工程测试 .

流程图

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_9.webp

工程代码

新建 stepper_uart.py 文件,添加如下代码

from machine import Pin, I2C, UART
from ssd1306 import SSD1306_I2C
import time
import ujson

# ==== Define hardware pinout =====
dir_pin = Pin(6, Pin.OUT)
step_pin = Pin(20, Pin.OUT)
en_pin = Pin(19, Pin.OUT)

# Initialize OLED I2C
i2c = I2C(0, scl=Pin(22), sda=Pin(23))
oled = SSD1306_I2C(128, 64, i2c)

# Initialize UART 
uart = UART(1, baudrate=115200, tx=Pin(16), rx=Pin(17))

# ======== Angle Calculation ==========
step_angle = 1.8 # 步距角
step_cycle = 360 / 1.8 # 360 / 1.8 = 200 步/圈
# microstep mode, default is 1/8 so 8
# another ex: 1/16 microstep would be 16
microMode = 8
# full rotation multiplied by the microstep divider
steps = step_cycle * microMode  # 200 * 8细分 = 1600 脉冲/圈
# 1600 / 360 = 4.444444 脉冲/度
STEPS_PER_DEGREE = steps / 360

# ======== OLED Display ===========
def display_motor(status="READY", angle=0.0, speed=1200, dir_str="STOP"):
    oled.fill(0)
    oled.text("==== MOTOR ====", 0, 0)
    oled.text(f"Status: {status}", 0, 15)
    oled.text(f"Angle: {angle:.1f} deg", 0, 27)
    oled.text(f"Direction: {dir_str}", 0, 39)
    oled.text(f"Speed: {speed}us", 0, 51)
    oled.rotate(0)
    oled.show()

# ======= Motor Control =========
def rotate_angle(angle, speed_us):
    en_pin.value(0)
    dir_pin.value(angle > 0)   # Rotate direction
    dir_str = "CW" if angle > 0 else "CCW"
    
    display_motor("RUN", angle, speed_us, dir_str)  # rotate direction display
    target_angle = abs(angle)
    total_steps = int(target_angle * STEPS_PER_DEGREE)  # rotate steps
    
    # Start rotate
    for _ in range(total_steps):
        step_pin.value(1)
        time.sleep_us(speed_us)
        step_pin.value(0)
        time.sleep_us(speed_us)
    print("Rotate %.1f degree i.e. %d steps" % (angle, total_steps))
    release()
    display_motor("STOP", angle, speed_us, dir_str)

def release():
    en_pin.value(1)

# ======== UART Control =========
def uart_control():
    while True:
        if uart.any():
            cmd = uart.read()
            try:
                data = ujson.loads(cmd)
                angle = float(data['angle'])
                speed = int(data.get('speed', 1200))
                
                rotate_angle(angle, speed)
                uart.write('OK\r\n')
                
            except:
                uart.write('Invalid command\r\n')
                release()
        else:
            release()
            time.sleep_ms(50)

# ======== main ==========
display_motor()
while True:
    uart_control()

保存代码。

串口测试

  • 运行串口调试助手软件,配置波特率 115200 bps 等参数,打开串口;
  • 串口发送 JSON 指令 {"angle": 48, "speed": 1200} ,步进电机以 1200us 延时速度顺时针旋转 48 度;
  • 串口发送 JSON 指令 {"angle": -92, "speed": 1500} ,步进电机以 1500us 延时速度逆时针旋转 92 度;

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_10.webp

LabVIEW 上位机

包括前面板和程序面板设计。

前面板

前面板设计包括串口配置、单步测试、连续运行测试、实时演化曲线、数据保存、程序控制等模块。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_11.webp

程序面板

程序面板采用模块化设计,将串口指令函数封装,确保单次发送、连续发送任务均准确执行。

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_12.webp

数据采集

  • 配置目标串口,运行程序;
  • 设置步长、目标角度、延时、存储路径等;
  • 点击 START 按钮,开始运行步进电机并采集数据;

动态演示

  • LabVIEW 程序运行后,步进电机按照设定的步长和延时连续旋转;
  • 前面板显示采集数据的实时演化曲线;

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_13.webp

  • 步进电机根据串口指令,连续精确转动

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_14.webp

数据存储

  • 数据采集完成后,串口停止发送消息,数据自动存储至目标路径;
  • 数据保存格式为第一列旋转角度,第二列模拟采集数值;

【Beetle ESP32 C6迷你开发板】步进电机的 LabVIEW 串口控制_image_15.webp

总结

本文介绍了 DFRobot Beetle ESP32-C6 开发板结合 A4988 模块,实现 42 步进电机的串口控制;设计 LabVIEW 上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等,为相关产品在工业自动化领域的快速开发和应用设计提供了参考。

硬件清单

创作许可协议

本项目采用 CC BY-NC(署名-非商业性使用) 进行许可。

评论(0)
- 没有更多了 -