【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)-General、Baud、Interrupts设置回调函数; -
进入 BSP 标签页,配置 RA Common 属性,RA Common 标签下的 Heap size 改为
0x2000; -
右键项目文件夹,选择
属性,进入C/C++ 构建-设置选项; -
进入
GNU Arm Cross C Linker-Miscellaneous选项; -
勾选
float printf和Do 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();
}
}
}
保存代码。
- 驱动代码文件
stepmotor.c和stepmotor.h详见:【EK-RA4C1开发套件】步进电机驱动 .
编译调试
-
右键工程文件夹,点击构建项目(或点击工具栏小锤子按钮);
-
右键工程文件夹 - 调试/运行项目 - 上传固件至开发板(或点击工具栏小虫子按钮,进入 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上位机、数据采集等,为相关产品在工业自动化领域的快速开发和应用设计提供了参考。