【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上位机、数据采集等,为相关产品在工业自动化领域的快速开发和应用设计提供了参考。

相关推荐
茯苓gao3 小时前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
wuyk5554 小时前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
Mr+范4 小时前
单片机 ADC 电压与电流检测及电阻选型指南
单片机·嵌入式硬件
fanchenxinok4 小时前
基于图莫斯的CAN UDS升级上位机-LabVIEW版本(八):TOOMOSS_SID85_ControlDTCSetting.vi — DTC控制
can·labview·uds刷写·图莫斯
西城微科方案开发5 小时前
LCD智能婴儿秤方案
单片机·嵌入式硬件
三佛科技-134163842126 小时前
灭蚊灯MCU方案开发,FT60E112-RB作为灭蚊灯主控芯片优势
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
Mr+范6 小时前
电源诱骗芯片CH224K
单片机·学习
起床学FPGA6 小时前
I2C、SPI
单片机·嵌入式硬件
xuxie996 小时前
start10 电机电流检测方法
单片机·嵌入式硬件