[评测&赛事] 【瑞萨RA2L1评测】步进电机的串口控制与LabVIEW 数据采集

[复制链接]
19|0
无垠的广袤 发表于 2026-6-9 15:59 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 无垠的广袤 于 2026-6-9 17:04 编辑 [/i]

【瑞萨RA2L1评测】步进电机的串口控制与LabVIEW 数据采集

本文介绍了 RA2L1 开发板结合 TMC2209 模块和 LCD 显示屏,实现串口控制,进一步设计 LabVIEW 上位机实现自动化运行和数据采集的项目设计,包括硬件连接、串口指令控制、LabVIEW上位机、数据采集等。

项目介绍

RA2L1 开发板结合 TMC2209 驱动板实现 42 步进电机驱动、LCD 显示旋转角度。

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

TMC2209

TMC2209 SilentStepStick 是一款两相双极步进电机驱动模块,具备 2.8A 峰值电流和 1/256 步进模式;板载 UART 接口和多项专利技术确保步进电机平稳、安静、高精度运行,适用于3D打印、机器人和自动化等项目。

详见:TMC2209 Stepper Motor Driver module .

LabVIEW

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

labview_cover.jpg

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

详见:LabVIEW概述 - NI .

硬件连接

  • 使用 Type-C 数据线连接开发板和电脑;
  • TMC2209 驱动板、RA2L1 开发板的接线方式如下
RA2L1 TMC2209 Note
P208 Dir Direction
P201 STEP Steps
P206 EN Enable
5V VM Power for stepper
3.3V VCC Power for MCU
GND GND Ground

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

  • TMC2209 与 42 步进电机的接线方式如下
42步进电机 TMC2209 Note
A+ 1A A phase
A- 1B A phase
B+ 2A B phase
B- 2B B phase
  • J-Link 调试器与 RA2L1 开发板的接线方式如下
J-Link OB RA2L1 Note
RXD P109 (TXD) Receive
TXD P110 (RXD9) Transmite
GND GND Ground

实物图

tmc2209_connect.jpg

环境搭建

搭建 FSP 开发环境。

  • 下载并安装 瑞萨FSP (flexible software package) 灵活配置软件包 ;
  • 下载并安装 串口调试助手 软件;
  • 下载 并安装 LabVIEW 软件.

详见:【瑞萨RA2L1评测】42步进电机驱动 .

工程创建

  • 打开 e^2^ studio 软件;
  • 依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA
  • 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA2L1AB2DFL ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ,完成工程创建 ;

GPIO 配置

  • 进入 FSP 配置界面,打开 Pins 标签页,选中 P201 引脚,模式配置为初始低电平的输出模式;
  • 同理,将 P206、P208 管脚也配置为初始低电平的输出模式;

pin_config_tmc2209.jpg

串口配置

  • 设置目标串口对应的 GPIO 引脚

    • 依次选择 Pins - Peripherals - Connectivity:SCI - SCI9 对应 P109 (TXD9) 和 P110 (RXD9) 引脚;
  • 新建串口通信堆栈

    • New Stack - Connectivity - UART (r_sci_uart)
  • 选中 uart 堆栈方框,打开属性标签,配置串口参数,包括

    • 属性设置: 属性 - Module g_uart9 UART (r_sci_uart) - GeneralBaudInterrupts 设置回调函数
  • 点击右上角 Generate Project Content 按钮,生成工程代码。

流程图

flowchart TD A([开始]) --> B[初始化] B --> E{收到数据?} E --否--> C E --是--> F[解析参数] F --> G[电机使能] G --> H[旋转角度] H --> I[串口打印] I --> C[释放扭矩] C --> E

工程代码

打开 ./src/hal_entry.c 文件,添加如下代码

#include <stdio.h>
#include "stepmotor.h"

fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
volatile bool uart_rx_ready = false;
uint8_t uart_rx_buf[256] = {0};
uint32_t uart_rx_len = 0;

void user_uart4_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == UART_EVENT_RX_CHAR)
    {
        uint8_t ch = (uint8_t)p_args->data;
        if(uart_rx_len < sizeof(uart_rx_buf)-1)
        {
            uart_rx_buf[uart_rx_len++] = ch;
        }
        if(ch == '\n' || ch == '}')
        {
            uart_rx_ready = true;
        }
    }
    if(p_args->event == UART_EVENT_TX_COMPLETE)
    {
        uart_send_complete_flag = true;
    }
}

// 重定向 printf 到 UART4
#ifdef __GNUC__
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE {
    fsp_err_t err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
    if (FSP_SUCCESS != err) __BKPT();
    while (uart_send_complete_flag == false) {}
    uart_send_complete_flag = false;
    return ch;
}

// 重定向 _write 函数
int _write(int fd, char *pBuffer, int size) {
    for (int i = 0; i < size; i++) {
        __io_putchar(*pBuffer++);
    }
    return size;
}

// 解析JSON {"angle":-90,"speed":2}
static void parse_json_cmd(int *angle, uint32_t *speed)
{
    char *p = (char*)uart_rx_buf;
    sscanf(p, "{\"angle\":%d,\"speed\":%lu}", angle, speed);
}

void hal_entry(void)
{
    fsp_err_t err = FSP_SUCCESS;
    int target_angle = 0;
    uint32_t target_speed = 2; // ms

    err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
    assert(FSP_SUCCESS == err);

    step_motor_init(); // initialize stepper

    while(1){
        if(uart_rx_ready)
        {
            // 解析指令
            parse_json_cmd(&target_angle, &target_speed);
            printf("OK: angle=%d, speed=%lu\r\n", target_angle, target_speed);

            // 电机使能 + 转动
            step_motor_enable();
            step_motor_rotate_degrees((float)target_angle, target_speed);
            step_motor_stop();

            // 转动结束 → 释放扭矩
            step_motor_disable();

            // 清空接收
            memset(uart_rx_buf, 0, sizeof(uart_rx_buf));
            uart_rx_len = 0;
            uart_rx_ready = false;
        }
        else
        {
            // 无数据 → 释放扭矩
            step_motor_disable();
        }
    }
}

保存代码。

编译调试

  • 右键工程文件夹,点击构建项目(或点击工具栏小锤子按钮);
  • 右键工程文件夹 - 调试/运行项目 - 上传固件至开发板(或点击工具栏小虫子按钮,进入 Debug 模式并运行)。

串口测试

  • 运行串口调试助手软件,配置波特率 115200 bps 等参数,打开串口;

  • 串口发送 JSON 指令 {"angle": 98, "speed": 2} ,步进电机以 2ms 延时速度顺时针旋转 98 度;

  • 串口发送 JSON 指令 {"angle": -48, "speed": 2} ,步进电机以 2ms 延时速度逆时针旋转 48 度;

LabVIEW 上位机

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

前面板

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

程序面板

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

数据采集

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

动态演示

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

数据存储

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

总结

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

108

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0