这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【静音步进电机控制实践过程帖】LabVIEW上位机设计

共2条 1/1 1 跳转至

【静音步进电机控制实践过程帖】LabVIEW上位机设计

工程师
2026-05-11 12:51:46     打赏

【静音步进电机控制实践过程帖】LabVIEW上位机设计

本文介绍了 TMC2209 步进电机驱动板结合树莓派Pico实现串口控制,进一步设计LabVIEW上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等。

项目介绍

  • 硬件连接:TMC2209 模块、扩展板、树莓派Pico扩展板、OLED、系统接线示意图、实物图;

  • 工程测试:MicoPython 编程,实现串口 JSON 指令控制步进电机旋转方向、角度和速度;

  • LabVIEW 设计:前面板、程序面板设计,自动发送 JSON 消息,实现步进电机的自动化控制、数据采集与存储。


LabVIEW

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

labview_cover.jpg

LabVIEW 的主要特点包括

  • 丰富的分析函数

  • 交互的可编程的显示元素

  • 自动化仪器和数据采集驱动程序

  • 工业标准协议和对其他语言的支持

  • 使用FPGA的高速测量和控制系统

  • 使用传感器或执行器测量物理系统

  • 验证电子设计

  • 开发生产测试系统

  • 设计智能机器或工业设备

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

详见:LabVIEW概述 - NI .

LabVIEW 安装

下载 并安装 LabVIEW 软件.


硬件连接

包括 TMC2209、OLED、步进电机、树莓派Pico的接线方式。

TMC2209

TMC2209 模块与树莓派 Pico 的接线方式如下


TMC2209RPi PicoNote
DirGP 16Direction
StepGP 17Step pulse
ENGP 18Enable
GNDGNDGround
VIO3V3Power


TMC2209 与步进电机的接线方式如下


42步进电机TMC2209Note
B-2BB phase
B+2AB phase
A+1AA phase
A-1BA phase

相序判断方法详见:【静音步进电机控制实践过程帖】树莓派Pico扩展板设计 .


UART


USB-TTLRPi PicoNote
TXDGP1 (RX)Transmite
RXDGP0 (TX)Receive
GNDGNDGround


系统连接

connection_diagram.jpg

实物连接效果如下

uart_connect.jpg

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} ;

  • uart_stepper_control_json.jpg

  • 通过角度数值的正负控制旋转方向;

  • 步进电机按照串口 JSON 指令,以目标速度旋转目标角度。

8 细分 1.8° 步进电机,最小精度 0.225°,旋转 0.225 整数倍角度则无误差。


LabVIEW 设计

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

前面板

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

labview_front_panel.jpg

程序面板

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

labview_program_panel.jpg

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

labview_subvi_stepper_move.jpg

数据采集

  • 配置目标串口,运行程序;

  • 设置步长、目标角度、延时、存储路径等;

  • 点击 START 按钮,开始运行步进电机并采集数据;

labview_view.jpg


动态演示

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

labview_stepper_run.gif

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

labview_run.gif


数据存储

  • 数据采集完成后,串口停止发送消息,数据自动存储至目标路径;

  • 数据保存格式为第一列旋转角度,第二列模拟采集数值;

labview_data_save.jpg


总结

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






关键词: 步进电机     uart     python     labview         

院士
2026-05-11 17:38:07     打赏
2楼

谢谢分享,图文并茂的。        




共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]