【静音步进电机控制实践过程帖】LabVIEW上位机设计
本文介绍了 TMC2209 步进电机驱动板结合树莓派Pico实现串口控制,进一步设计LabVIEW上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等。
项目介绍
硬件连接:TMC2209 模块、扩展板、树莓派Pico扩展板、OLED、系统接线示意图、实物图;
工程测试:MicoPython 编程,实现串口 JSON 指令控制步进电机旋转方向、角度和速度;
LabVIEW 设计:前面板、程序面板设计,自动发送 JSON 消息,实现步进电机的自动化控制、数据采集与存储。
LabVIEW
LabVIEW,即 Laboratory Virtual Instrument Engineering Workbench ,是一种图形化程序开发环境,由美国国家仪器(NI)公司研制开发。LabVIEW 使用图形化编辑语言 G 编写程序,产生的程序是框图的形式。


LabVIEW 的主要特点包括
丰富的分析函数
交互的可编程的显示元素
自动化仪器和数据采集驱动程序
工业标准协议和对其他语言的支持
使用FPGA的高速测量和控制系统
使用传感器或执行器测量物理系统
验证电子设计
开发生产测试系统
设计智能机器或工业设备
LabVIEW 因其图形化编程、硬件集成优势和强大的工具包,成为多个行业中快速开发测控系统的首选工具。它特别适合需要高可靠性实时控制、复杂数据采集和多仪器集成的场景。LabVIEW 广泛应用于工业自动化、测试与测量、科学研究与教育、生物医学领域、嵌入式开发、图像与信号处理等领域。
详见:LabVIEW概述 - NI .
LabVIEW 安装
下载 并安装 LabVIEW 软件.
硬件连接
包括 TMC2209、OLED、步进电机、树莓派Pico的接线方式。
TMC2209
TMC2209 模块与树莓派 Pico 的接线方式如下
| TMC2209 | RPi Pico | Note |
| Dir | GP 16 | Direction |
| Step | GP 17 | Step pulse |
| EN | GP 18 | Enable |
| GND | GND | Ground |
| VIO | 3V3 | Power |
TMC2209 与步进电机的接线方式如下
| 42步进电机 | TMC2209 | Note |
| B- | 2B | B phase |
| B+ | 2A | B phase |
| A+ | 1A | A phase |
| A- | 1B | A phase |
相序判断方法详见:【静音步进电机控制实践过程帖】树莓派Pico扩展板设计 .
UART
| USB-TTL | RPi Pico | Note |
| TXD | GP1 (RX) | Transmite |
| RXD | GP0 (TX) | Receive |
| GND | GND | Ground |
系统连接


实物连接效果如下


OLED 连接详见:【静音步进电机控制实践过程帖】树莓派Pico扩展板设计 .
工程代码
运行 Thonny IDE 新建文件,添加如下代码
'''
电机:42步进电机
电压:直流12V
步距角:1.8度
细分:8
'''
from machine import Pin, I2C, UART
import ssd1306
import time
import ujson
# ==== Define hardware pinout =====
dir_pin = Pin(16, Pin.OUT)
step_pin = Pin(17, Pin.OUT)
en_pin = Pin(18, Pin.OUT)
# Initialize OLED I2C
i2c = I2C(0, scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Initialize UART
uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
# ======== 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 脉冲/圈
# n 脉冲/度
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.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()保存代码。
串口指令
Thonny IDE 运行 stepper_uart_control.py 程序;
打开串口调试助手软件,发送 JSON 格式的旋转方向、角度和速度指令 {"angle": 90, "speed": 1500} ;


通过角度数值的正负控制旋转方向;
步进电机按照串口 JSON 指令,以目标速度旋转目标角度。
8 细分 1.8° 步进电机,最小精度 0.225°,旋转 0.225 整数倍角度则无误差。
LabVIEW 设计
包括前面板和程序面板设计。
前面板
前面板设计包括串口配置、单步测试、连续运行测试、实时演化曲线、数据保存、程序控制等模块。


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


其中串口发送 JSON 消息至 MCU 的指令模块如下


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


动态演示
LabVIEW 程序运行后,步进电机按照设定的步长和延时连续旋转;


前面板显示采集数据的实时演化曲线;


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


总结
本文介绍了 TMC2209 步进电机驱动板结合树莓派Pico实现串口控制,进一步设计LabVIEW上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等,为相关产品在工业自动化领域的快速开发和应用设计提供了参考。
我要赚赏金
