StepMotorCtrl - 步进电机控制系统

基于 PY32MD530H28U7TR 单片机的步进电机控制系统,适用于 claw machine(抓娃娃机)等场景,提供精准的电机位置控制、角度控制和标定功能。

硬件平台

项目 说明
主控芯片 PY32MD530H28U7TR (Cortex-M0+)
电机驱动 TIM1 高分辨率 PWM,正弦/余弦微步进控制
角度传感器 AS5600 (I2C1, 地址 0x36)
存储器 AT24C02 (I2C1, 地址 0xA0)
电流检测 PGA + 内部 ADC
通讯接口 RS485 (USART1, Modbus RTU)、UART1 (调试)、LPUART1 (备份)
到位开关 DI_MIN (原点)、DI_MAX (最大值)
ID 指示器 4 位 GPIO (PB5PB8),支持 015 共 16 个地址

引脚分配

详见 PinConfig.md

软件架构

StepMotorCtrl/
├── app/                    # 应用层
│   ├── main.c              # 主程序入口
│   ├── stepper/            # 步进电机控制
│   └── tasks/              # 任务模块(work_task, monitor_task
├── bsp/                    # 板级支持包
│   ├── device/             # 外设驱动
│   │   ├── as5600/         # 角度传感器
│   │   ├── eeprom/         # 存储器
│   │   ├── id/             # ID 指示器
│   │   ├── key/            # 按键
│   │   ├── led/            # LED
│   │   └── limit_switch/   # 到位开关
│   ├── modbus/             # Modbus RTU 从站
│   └── hardware_init.c/h   # 硬件初始化
├── config/                 # 配置文件
│   └── config.h            # 引脚定义与参数配置
├── drv/                    # 驱动层
│   ├── adc/                # ADC + PGA
│   ├── gpio/               # GPIO
│   ├── i2c/                # I2C
│   ├── log/                # 日志
│   ├── system/             # 系统时钟 + 数据总线
│   ├── timer/              # 定时器 PWM
│   └── uart/               # UART
└── libs/                   # MCU 官方库
    ├── CMSIS/              # Cortex-M 内核头文件
    └── device/             # PY32MD530 设备文件 + 链接脚本

构建

环境要求

  • 编译器: arm-none-eabi-gcc (含 newlib-nano)
  • 构建工具: CMake + MinGW Make (Windows) / make (Linux)
  • 烧录工具: 建议使用 PyOCD 或 J-Link

构建步骤

mkdir build && cd build
cmake .. -G "MinGW Makefiles"
mingw32-make -j4

生成文件:

  • StepMotorCtrl.elf — ELF 可执行文件
  • StepMotorCtrl.hex — HEX 烧录文件
  • StepMotorCtrl.bin — BIN 烧录文件

Modbus 通讯协议

参数
物理层 RS485 半双工
波特率 115200, 8N1
协议 Modbus RTU
主站地址 0xFE
从站地址 0x40 + ID (ID 由 PB5~PB8 引脚读取)

主要寄存器

地址 名称 说明
0x0001 MOTOR_POSITION 当前位置 (步数)
0x0002 MOTOR_TARGET 目标位置 (步数)
0x0005 AS5600_ANGLE 角度值 (0.1°, 0~3599)
0x000F DEVICE_ID 设备 ID (0~15)
0x0042 CMD 指令寄存器
0x0043 STATUS 整机状态
0x0044 ANGLE_TARGET 角度目标 (0.1°, 0~3600)

指令码

码值 指令 说明
0x01 GO_MAX 运行到最大值
0x02 GO_MIN 运行到最小值 (原点)
0x03 STOP 停止运行
0x04 GO_POSITION 运行到指定步数
0x05 GO_ANGLE 运行到指定角度
0x06 CALIBRATE 开始标定
0x07 CALIB_END 结束标定

通讯示例

# 读当前位置
请求:  FE 03 00 01 00 01 CRC_LO CRC_HI
响应:  40+ID 03 02 POS_HI POS_LO CRC_LO CRC_HI

# 运行到最大值
请求:  FE 06 00 42 00 01 CRC_LO CRC_HI
响应:  40+ID 06 00 42 00 01 CRC_LO CRC_HI

# 运行到指定角度 (45.0°)
请求:  FE 06 00 44 01 C2 CRC_LO CRC_HI         <- ANGLE_TARGET = 450
请求:  FE 06 00 42 00 05 CRC_LO CRC_HI         <- CMD = GO_ANGLE

详见 command.md

功能说明

步进电机控制

  • S 型加减速算法,支持加速、匀速、减速三个阶段
  • 正弦/余弦微步进驱动,每电周期 1024 个微步
  • 支持绝对位置移动和相对位置移动
  • 到位自动停止,支持紧急停止

标定功能

  • 自动标定:运行到 DI_MIN 和 DI_MAX 开关位置,记录步数
  • 无 DI_MAX 时:根据原点开关和标定步数计算导轨长度

整机逻辑

  • 上电初始化后进入待机模式,等待 Modbus 指令
  • 支持指令队列和状态上报
  • LED 指示灯反馈:待机 (500ms 闪烁)、运行 (100ms 闪烁)、标定 (80ms 闪烁)

功能文档

文档 说明
function.md 功能规格与运行逻辑
command.md Modbus 指令集与通讯协议
PinConfig.md 引脚配置表

License

Proprietary

S
Description
No description provided
Readme 110 KiB
Languages
C 93.2%
Assembly 3.1%
CMake 1.9%
Shell 0.9%
Linker Script 0.9%