芯查查logo
  • 物料选型
  • 数据服务
    1. 新品推荐
    2. 查替代料
    3. 丝印反查
    4. 查品牌
    5. PCN/PDN
    6. 查代理
    7. 数据合作
  • 应用方案
  • SaaS产品
      SaaS产品
    1. 供应链波动监测预警
    2. 半导体产业链地图
    3. 智能BOM管家
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
正在使用账号登录iCEasy商城
上电需要0.5兆欧
创作者认证
RA4L1-SENSOR开发板 步进电机go!

详细介绍如何使用RA4L1-SENSOR开发板通过Modbus RTU协议控制28BYJ-48步进电机,支持414、424、418三种拍数控制模式。

硬件介绍

RA4L1-SENSOR开发板

基于瑞萨RA4L1微控制器

丰富的GPIO接口和外设资源

支持Modbus RTU通信协议

高精度ADC采集功能

 

28BYJ-48步进电机

四相五线式步进电机

减速比:1:64

步进角度:5.625°/64

工作电压:5V DC

驱动方式:ULN2003驱动板

 

引脚连接

// 四相八拍步进电机引脚定义
#define MOTOR_PHASE_A_PORT  BSP_IO_PORT_06_PIN_00    // P600引脚
#define MOTOR_PHASE_B_PORT  BSP_IO_PORT_04_PIN_06    // P406引脚
#define MOTOR_PHASE_C_PORT  BSP_IO_PORT_04_PIN_05    // P405引脚
#define MOTOR_PHASE_D_PORT  BSP_IO_PORT_06_PIN_02    // P602引脚

 

三种控制模式详解

1. 414拍模式(单四拍)

 

使用keil调试时的一些注意事项:

使用keil时,若不使用5.38以上版本会无法编译成功,或无法使用调试器连接or调试。-----更换5.41版本

static const uint8_t STEPPER_PHASE_SEQUENCE_414[4][4] = {
   {1, 0, 0, 0},  // A相
   {0, 1, 0, 0},  // B相
   {0, 0, 1, 0},  // C相
   {0, 0, 0, 1}   // D相
};

特点:每次只有一个绕组通电,转矩较小但功耗低。

 

2. 424拍模式(双四拍)

static const uint8_t STEPPER_PHASE_SEQUENCE_424[4][4] = {
   {1, 1, 0, 0},  // AB相
   {0, 1, 1, 0},  // BC相
   {0, 0, 1, 1},  // CD相
   {1, 0, 0, 1}   // DA相
};

特点:每次两个绕组同时通电,转矩大,运行平稳。

 

3. 418拍模式(八拍)

static const uint8_t STEPPER_PHASE_SEQUENCE_418[8][4] = {
   {1, 0, 0, 0},  // A相
   {1, 1, 0, 0},  // AB相
   {0, 1, 0, 0},  // B相
   {0, 1, 1, 0},  // BC相
   {0, 0, 1, 0},  // C相
   {0, 0, 1, 1},  // CD相
   {0, 0, 0, 1},  // D相
   {1, 0, 0, 1}   // DA相
};

特点:单双相交替,分辨率高一倍,运行更平滑。

 

Modbus RTU通信协议

寄存器映射表

 

寄存器地址 功能 取值范围 说明
01 自动上传控制 0-1 0:关闭, 1:开启
02 LED控制 0-7 控制3个LED灯
03 电压读取 0-4095 ADC电压值
04 电机控制 0-5 0:停止,1:正转,2:反转,3:刹车,4:连续正转,5:连续反转
05 电机步数 0-65535 单次运行步数
06 电机速度 1-1000 步进间隔(ms)
07 电机方向 0-1 0:顺时针,1:逆时针
08 拍数模式 0-2 0:414拍,1:418拍,2:424拍

通信示例

读取电机状态:

发送:01 03 00 03 00 01 74 0B
回复:01 03 02 00 00 B8 44

设置电机连续正转:

发送:01 06 00 03 00 04 18 0B
回复:01 06 00 03 00 04 18 0B

 

 

 

核心代码解析

 

void motor_init(void)
{
   // 配置电机引脚为输出模式
   uint32_t motor_pin_config = IOPORT_CFG_PORT_OUTPUT_HIGH | IOPORT_CFG_DRIVE_HIGH;
   
   // 初始化所有相为低电平
   R_IOPORT_PinWrite(&g_ioport_ctrl, MOTOR_PHASE_A_PORT, BSP_IO_LEVEL_LOW);
   // ... 其他相初始化
}

 

相序控制函数

void stepper_motor_phase(uint8_t phase)
{
   // 根据当前拍数模式选择相序表
   switch (current_phase_mode)
   {
       case MOTOR_PHASE_MODE_414:
           // 414拍模式处理
           break;
       case MOTOR_PHASE_MODE_418:
           // 418拍模式处理
           break;
       case MOTOR_PHASE_MODE_424:
           // 424拍模式处理
           break;
   }
   
   // 设置各相电平状态
   // 更新调试变量
}

 

连续运行处理

void motor_continuous_process(void)
{
   uint32_t current_time = get_system_time_ms();
   uint16_t speed = modbus_registers[REG_MOTOR_SPEED - 1];
   
   // 非阻塞式步进控制
   if (current_time - last_step_time >= speed)
   {
       // 根据方向和模式执行步进
       stepper_motor_phase(current_phase);
       
       // 更新相序索引
       if (current_phase_mode == MOTOR_PHASE_MODE_418)
       {
           current_phase = (current_phase + 1) % 8;
       }
       else
       {
           current_phase = (current_phase + 1) % 4;
       }
       
       last_step_time = current_time;
   }
}

 

功能特点

1. 多种控制模式

单次运行:执行指定步数后停止

连续运行:持续运行直到收到停止命令

正反转控制:支持双向旋转

2. 灵活的速度控制

速度范围:1-1000ms/步

实时速度调整

平滑的速度变化

3. 完善的错误处理

Modbus CRC校验

寄存器范围检查

非法状态处理

 

使用指南

1. 硬件连接

将28BYJ-48电机连接到ULN2003驱动板

驱动板IN1-IN4连接到RA4L1开发板对应引脚

提供5V电源供电

2. 软件配置

配置正确的引脚定义

设置Modbus从站地址

选择合适的拍数模式

3. 通信测试

使用Modbus调试工具发送命令:

测试寄存器读写功能

验证电机各控制模式

监控实时状态

应用场景

工业自动化:传送带控制、机械臂定位

智能家居:窗帘控制、智能门锁

仪器仪表:精密仪器定位、阀门控制

机器人技术:关节驱动、轮式移动

注意事项

电源要求:确保提供稳定的5V电源

散热考虑:连续运行时注意电机温度

机械保护:避免电机堵转损坏

通信稳定性:在工业环境中使用屏蔽电缆

总结

本项目展示了RA4L1-SENSOR开发板在步进电机控制方面的强大能力,通过Modbus RTU协议实现了工业级的远程控制。三种拍数模式提供了灵活的控制选项,适合不同精度和转矩要求的应用场景。代码结构清晰,易于二次开发和功能扩展。

 

有人问你控制电机要干啥?

 

请看VCR。

 

更换5.41版本后,我的Plinkv2一下子就连上了。

Target界面无法显示完全。----------更换5.41版本

串口配置完成之后,无法输出,或程序一直卡在printf函数。

答:e2studio中未勾选函数重定向。若使用keil开发则需要勾选Target中的 Use MicroLIB,然后手动重定向串口函数。重写fputc函数。

fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
   if(p_args->event == UART_EVENT_TX_COMPLETE)
   {
       uart_send_complete_flag = true;
   }
   // ????Modbus???????
   if(p_args->event == UART_EVENT_RX_CHAR)
   {
       modbus_uart_rx_callback(p_args);
   }
}

int fputc(int ch, FILE *f __attribute__((unused))){
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; 
}

 

 

 

 

 

 

开发板测评
版块: 开发板测评与实战
2025/11/20 21:19
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
学而思可多编程掌机改装2PCB设计翻车实录:我踩过的5个大坑,每个都值一万块从0到1学PCB:硬件工程师Layout实战避坑指南从0到1做硬件:智能硬件产品经理全流程实战指南《图解功率半导体》书评
热门版块
查看更多
萤火工场
单片机/MCU论坛
电子元器件
问型号
飞腾
开源硬件项目
每日打卡
电子DIY
维修技术交流
抄图联盟

18

收藏

分享

微信扫码
分享给好友

评论