generated from hulk/gd32e23x_template_cmake_vscode
- LD放开为64K Flash/8K RAM,不使用Bootloader - README更新为LA-T8-12-5-50/105-188推杆驱动工程 - 停用M888/M9999调试命令,工程代号改为51
7.4 KiB
7.4 KiB
LA-T8 推杆驱动控制固件
本工程是 LA-T8-12-5-50/105-188 电动推杆的控制板驱动固件,基于 GD32E230F8(Cortex-M23)开发,使用 CMake + VSCode + ARM GCC 构建。
当前为调试工程:不配合 Bootloader,Flash 从 0x08000000 全量使用,链接脚本已放开为 F8 的完整 64KB Flash / 8KB RAM。
目录
推杆型号说明
型号:LA-T8-12-5-50/105-188
| 型号片段 | 常见含义 |
|---|---|
LA-T8 |
LA-T8 系列微型电动推杆 |
12 |
额定输入电压 12VDC |
5 |
空载速度约 5mm/s |
50 |
行程 50mm |
105 |
最小安装距约 105mm(该系列常见 Lmin ≈ 54.5mm + 行程) |
188 |
额定推/拉力约 188N |
型号对应参数以推杆实物铭牌或厂家规格书为准。本固件只输出 PWM 与方向信号,不采集推杆位置、限位或电流反馈。
硬件资源
| 功能 | 引脚 / 外设 | 说明 |
|---|---|---|
| 主控 | GD32E230F8 | Cortex-M23,64KB Flash,8KB RAM |
| 系统时钟 | IRC8M + PLL | 72MHz |
| 推杆 CH1 | PA10 / TIMER0_CH2 + PF0 方向 | 通道 0 |
| 推杆 CH2 | PA9 / TIMER0_CH1 + PF1 方向 | 通道 1 |
| 通信口 | PA2 TX / PA3 RX | F8 自动选择 USART1,115200 8N1 |
| RS485 DE | PA1 | AF1,由 RS485 PHY 自动控制方向 |
| 状态 LED | PB1 | 低电平点亮 |
| 地址配置 | PA0 / PA4 / PA5 / PA6 | 当前已定义宏,暂未参与控制逻辑 |
| 调试通道 | SWD + SEGGER RTT | 不占用 UART 引脚 |
控制原理
推杆驱动使用 TIMER0 输出两路 PWM,占空比范围为 0 ~ 1000:
Timer 时钟 = 72MHz / (prescaler 2 + 1) = 24MHz
PWM 频率 = 24MHz / (period 999 + 1) = 24kHz
当前实现:
| 命令 | 方向引脚 | PWM |
|---|---|---|
| M3 推出 | 低 | 占空比 = duty |
| M4 拉回 | 高 | 占空比 = 1000 - duty |
| M5 停止 | 高 | 输出置为停止状态 |
duty 越大表示电机获得的有效功率越大,实际推杆速度还受负载、电压和推杆本身特性影响。
串口协议
通信口为 RS485,默认 115200, 8N1。协议帧最大长度为 32 字节。
主机 -> 设备命令帧
D5 01 LEN CMD... CRC
| 字节 | 含义 |
|---|---|
D5 |
包头 |
01 |
板卡类型标识(协议帧类型,与 M999 返回的工程代号不同) |
LEN |
CMD 区字节数 |
CMD |
命令内容,如 M3P0S500 |
CRC |
从索引 1 到倒数第 2 字节的累加和,取低 8 位 |
示例:M3P0S500 完整帧
D5 01 08 4D 33 50 30 53 35 30 30 F1
设备 -> 主机响应帧
B5 TYPE LEN DATA... CRC
| TYPE | 含义 |
|---|---|
F0 |
成功 |
F1 |
CRC 错误 |
F2 |
包头错误 |
F3 |
板卡类型错误 |
F4 |
长度错误 |
FD |
参数错误 |
FE |
命令错误 |
FF |
通用错误 |
命令表
| 命令 | 参数 | 说明 |
|---|---|---|
M3P{ch}S{duty} |
ch=0/1,duty=0~1000 |
推杆推出 |
M4P{ch}S{duty} |
ch=0/1,duty=0~1000 |
推杆拉回 |
M5P{ch} |
ch=0/1 |
停止指定通道 |
M999 |
无 | 返回固件版本 |
M888 |
无 | 软件复位(当前已注释停用) |
M9999 |
无 | 进入 Bootloader(当前已注释停用) |
命令示例:
M3P0S500 // CH1 推出,占空比 500
M4P1S1000 // CH2 拉回,占空比 1000
M5P0 // CH1 停止
M999 // 返回版本信息
M999 当前返回格式为 v{工程代号}.{主版本}.{次版本}.{修订号},当前工程为 v51.0.0.1。
工程配置
项目元信息
配置文件:cmake/project_config.cmake
| 配置项 | 当前值 |
|---|---|
PROJECT_NAME |
actuator |
BOARD_TYPE_CODE |
51 |
VERSION |
V0.0.1 |
BUILD_VARIANT |
APP |
功能开关
配置文件:Inc/board_config.h
| 宏 | 当前值 | 说明 |
|---|---|---|
RS485_MODE |
ENABLE |
使能 RS485 通信与 DE 引脚 |
SEGGER_RTT_DETECTION |
ENABLE |
使能 SEGGER RTT 调试输出 |
DEBUG_MODE |
DISABLE |
关闭 printf 串口调试 |
COM_DEBUG |
DISABLE |
关闭命令帧调试打印 |
DEBUG_VERBOSE |
DISABLE |
关闭详细调试信息 |
SOFTWARE_IIC |
DISABLE |
I2C 未参与当前推杆控制逻辑 |
链接脚本
配置文件:LD/gd32e23x_flash.ld
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 8K
当前为独立调试固件,不从 Bootloader 偏移启动,向量表偏移保持 0x00。
工程结构
.
├── CMakeLists.txt # 主构建文件
├── CMakePresets.json # Debug / Release 预设
├── cmake/ # 工具链与版本配置
├── Inc/
│ ├── board_config.h # 引脚、外设与功能开关
│ ├── actuator.h # 推杆驱动接口
│ ├── command.h # 串口命令协议
│ └── ...
├── Src/
│ ├── main.c # 主循环
│ ├── actuator.c # PWM / 方向控制
│ ├── command.c # 协议解析与命令处理
│ ├── uart.c # RS485 / UART 初始化
│ └── ...
├── SDK/ # CMSIS 与 GD32 标准外设库
├── LD/gd32e23x_flash.ld # 链接脚本
├── doc/ # GD32E230 数据手册与技术文档
└── .vscode/ # 编译、烧录、调试任务
编译与烧录
编译
cmake --preset Release
cmake --build --preset Release
Debug 版本将 Release 换成 Debug。构建产物位于 Build/Release/Application/:
Application.elf
Application.hex
Application.bin
Application.map
actuator_V0.0.1_APP_<日期>.hex
actuator_V0.0.1_APP_<日期>.bin
烧录
使用 CMSIS-DAP + OpenOCD:
& 'D:\toolchain\openocd\bin\openocd.exe' -s 'D:\toolchain\openocd\scripts' `
-f 'interface/cmsis-dap.cfg' -f 'target/gd32e23x.cfg' `
-c 'reset_config srst_only connect_assert_srst; init; reset halt; flash write_image erase Build/Release/Application/Application.elf; reset; exit'
也可以直接在 VSCode 中运行 Flash MCU 任务。
调试
- 使用
.vscode/launch.json中的Debug with OpenOCD配置进行 SWD 调试。 SEGGER_RTT_DETECTION开启时,可通过 RTT Viewer 或 cortex-debug 查看RTT_printf输出。- 当前固件 Release 也保留了 RTT,便于联调;量产固件可关闭该宏以减小 ROM。
已知限制
- 当前固件只控制推杆的 PWM 和方向,不读取推杆位置、限位开关或电流反馈。
M888和M9999当前已在Src/command.c中注释停用,避免调试时误复位或误进入 Bootloader;需要时取消注释即可恢复。- 若后续要配合 Bootloader,需要把
LD/gd32e23x_flash.ld的 Flash 起点改为 Bootloader 之后的地址,并同步修改Src/system_gd32e23x.c中的VECT_TAB_OFFSET。