Files
actuator_ctrl/README.md
T
hulk 0fd0d911a9 feat: 适配GD32E230F8推杆控制板并更新LA-T8工程文档
- LD放开为64K Flash/8K RAM,不使用Bootloader
- README更新为LA-T8-12-5-50/105-188推杆驱动工程
- 停用M888/M9999调试命令,工程代号改为51
2026-08-11 09:03:05 +08:00

7.4 KiB
Raw Blame History

LA-T8 推杆驱动控制固件

本工程是 LA-T8-12-5-50/105-188 电动推杆的控制板驱动固件,基于 GD32E230F8Cortex-M23)开发,使用 CMake + VSCode + ARM GCC 构建。

当前为调试工程:不配合 BootloaderFlash 从 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-M2364KB Flash8KB RAM
系统时钟 IRC8M + PLL 72MHz
推杆 CH1 PA10 / TIMER0_CH2 + PF0 方向 通道 0
推杆 CH2 PA9 / TIMER0_CH1 + PF1 方向 通道 1
通信口 PA2 TX / PA3 RX F8 自动选择 USART1115200 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/1duty=0~1000 推杆推出
M4P{ch}S{duty} ch=0/1duty=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 和方向,不读取推杆位置、限位开关或电流反馈。
  • M888M9999 当前已在 Src/command.c 中注释停用,避免调试时误复位或误进入 Bootloader;需要时取消注释即可恢复。
  • 若后续要配合 Bootloader,需要把 LD/gd32e23x_flash.ld 的 Flash 起点改为 Bootloader 之后的地址,并同步修改 Src/system_gd32e23x.c 中的 VECT_TAB_OFFSET