【RA-Eco-RA4M2开发板】步进电机的串口控制和 LabVIEW 数据采集

【RA-Eco-RA4M2开发板评测】步进电机的串口控制和 LabVIEW 数据采集

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

项目介绍

RA-Eco-RA4M2-100PIN-V2.0 开发板结合 A4988 驱动板实现 42 步进电机驱动。

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

A4988 模块

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

  • A4988模块是一款带有内置转换器和过流保护的DMOS微步驱动器,适用于双极步进电机。它支持全步、半步、1/4步、1/8步和1/16步五种步进模式,输出电压可达35V,最大输出电流±2A。

  • 模块内置固定关断时间电流调节器,可在慢速或混合衰减模式下工作,自动选择电流衰减方式,提高步进精度并降低噪声

详见:A4988 Stepper Motor Driver module .

扩展板

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

原理图

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

LabVIEW

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

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

详见:LabVIEW概述 - NI .

硬件连接

  • 使用 Type-C 数据线连接开发板和电脑;

  • A4988 驱动板、RA4M2 开发板的接线方式如下

RA4M2 A4988 Note
P501 Dir Direction
P500 STEP Steps
P502 EN Enable
5V VM Power for stepper
3.3V VCC 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

实物图

环境搭建

搭建 FSP 开发环境。

详见:【RA-Eco-RA4M2开发板评测】介绍、环境搭建、工程测试 .

工程创建

  • 下载 官方示例工程软件包;

  • 打开 e2 studio 软件;

  • 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA

  • 自定义设备选择 R7FA4M2AD3CFP ,调试器选择 J-Link ;

  • 项目创建完成后,选择进入透视图模式;

工程配置

  • 双击左侧目录文件 configuration.xml 进入 FSP Configuration 界面;

  • 进入 Pins 标签页,将 P500、P501、P502 配置为输出模式,初始为低电平;

  • 设置 JLINK 虚拟串口对应的 GPIO 引脚

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

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

  • 属性设置: 属性 - Module g_uart9 UART (r_sci_uart) - GeneralBaudInterrupts 设置回调函数;

  • 进入 BSP 标签页,配置 RA Common 属性,RA Common 标签下的 Heap size 改为 0x2000

  • 右键项目文件夹,选择 属性 ,进入 C/C++ 构建 - 设置 选项;

  • 进入 GNU Arm Cross C Linker - Miscellaneous 选项;

  • 勾选 float printfDo not use syscalls 选项,应用并关闭;

  • 点击 Generate Project Content 按钮,生成工程代码。

流程图

工程代码

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

c++ 复制代码
#include "hal_data.h"
#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_uart9_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
#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)
{
    /* TODO: add your own code here */
    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
    // step_motor_test_sequence();
    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": 48, "speed": 2} ,步进电机以 2ms 延时速度顺时针旋转 48 度;
  • 串口发送 JSON 指令 {"angle": -92, "speed": 2} ,步进电机以 2ms 延时速度逆时针旋转 92 度;

LabVIEW 上位机

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

前面板

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

程序面板

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

数据采集

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

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

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

动态演示

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

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

数据存储

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

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

总结

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

相关推荐
驴友花雕5 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
日拱一卒的小田11 小时前
ZYNQ学习笔记3-ZYNQ的IIC控制器1
笔记·单片机·学习
cardinal_50812 小时前
STM32MP157F-DK2开发板构建交叉编译链
stm32·单片机·嵌入式硬件
小羊先生car12 小时前
F429-HAL-RS485(回环/双机实验)(2026/8/16)
c语言·单片机·嵌入式硬件·软件构建
木白CPP12 小时前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
zlinear数据采集卡14 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源
水果里面有苹果16 小时前
33-TPS62130RGTR-3A降压器
嵌入式硬件
振南的单片机世界17 小时前
推挽vs开漏:一个“强拉硬灌”,一个“只拉不管”
arm开发·stm32·单片机·嵌入式硬件
小心亦新17 小时前
STM32学习23--I2C-1
stm32·嵌入式硬件·学习
小羊先生car17 小时前
F429-HAL-Can总线(回环及双机实验)(2026/8/15)
c语言·单片机·嵌入式硬件·软件构建