2026-05-11 22:00:49 +08:00
|
|
|
|
# StepMotorCtrl - 步进电机控制系统
|
|
|
|
|
|
|
|
|
|
|
|
基于 **PY32MD530H28U7TR** 单片机的步进电机控制系统,适用于 claw machine(抓娃娃机)等场景,提供精准的电机位置控制、角度控制和标定功能。
|
|
|
|
|
|
|
|
|
|
|
|
## 硬件平台
|
|
|
|
|
|
|
|
|
|
|
|
| 项目 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| 主控芯片 | PY32MD530H28U7TR (Cortex-M0+) |
|
|
|
|
|
|
| 电机驱动 | TIM1 高分辨率 PWM,正弦/余弦微步进控制 |
|
|
|
|
|
|
| 角度传感器 | AS5600 (I2C1, 地址 0x36) |
|
2026-05-11 22:07:24 +08:00
|
|
|
|
| 存储器 | AT24C02 (I2C1, 地址 0xA0) |
|
2026-05-11 22:00:49 +08:00
|
|
|
|
| 电流检测 | PGA + 内部 ADC |
|
|
|
|
|
|
| 通讯接口 | RS485 (USART1, Modbus RTU)、UART1 (调试)、LPUART1 (备份) |
|
|
|
|
|
|
| 到位开关 | DI_MIN (原点)、DI_MAX (最大值) |
|
|
|
|
|
|
| ID 指示器 | 4 位 GPIO (PB5~PB8),支持 0~15 共 16 个地址 |
|
|
|
|
|
|
|
|
|
|
|
|
### 引脚分配
|
|
|
|
|
|
|
|
|
|
|
|
详见 [PinConfig.md](.trae/skills/create-project/references/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
|
|
|
|
|
|
|
|
|
|
|
|
### 构建步骤
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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 | 结束标定 |
|
|
|
|
|
|
|
|
|
|
|
|
### 通讯示例
|
|
|
|
|
|
|
|
|
|
|
|
```hex
|
|
|
|
|
|
# 读当前位置
|
|
|
|
|
|
请求: 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](.trae/skills/create-project/references/command.md)
|
|
|
|
|
|
|
|
|
|
|
|
## 功能说明
|
|
|
|
|
|
|
|
|
|
|
|
### 步进电机控制
|
|
|
|
|
|
- S 型加减速算法,支持加速、匀速、减速三个阶段
|
|
|
|
|
|
- 正弦/余弦微步进驱动,每电周期 1024 个微步
|
|
|
|
|
|
- 支持绝对位置移动和相对位置移动
|
|
|
|
|
|
- 到位自动停止,支持紧急停止
|
|
|
|
|
|
|
|
|
|
|
|
### 标定功能
|
|
|
|
|
|
- 自动标定:运行到 DI_MIN 和 DI_MAX 开关位置,记录步数
|
|
|
|
|
|
- 无 DI_MAX 时:根据原点开关和标定步数计算导轨长度
|
|
|
|
|
|
|
|
|
|
|
|
### 整机逻辑
|
|
|
|
|
|
- 上电初始化后进入待机模式,等待 Modbus 指令
|
|
|
|
|
|
- 支持指令队列和状态上报
|
|
|
|
|
|
- LED 指示灯反馈:待机 (500ms 闪烁)、运行 (100ms 闪烁)、标定 (80ms 闪烁)
|
|
|
|
|
|
|
|
|
|
|
|
## 功能文档
|
|
|
|
|
|
|
|
|
|
|
|
| 文档 | 说明 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| [function.md](.trae/skills/create-project/references/function.md) | 功能规格与运行逻辑 |
|
|
|
|
|
|
| [command.md](.trae/skills/create-project/references/command.md) | Modbus 指令集与通讯协议 |
|
|
|
|
|
|
| [PinConfig.md](.trae/skills/create-project/references/PinConfig.md) | 引脚配置表 |
|
|
|
|
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
|
|
|
|
Proprietary
|