云计算百科
云计算领域专业知识百科平台

# 电赛备赛开源:STM32 双步进视觉云台 + 无刷电机串口驱动(附 GitHub)

电赛备赛开源:STM32 双步进视觉云台 + 无刷电机串口驱动(附 GitHub)

本文对应两个已开源工程,适合 全国大学生电子设计竞赛备赛 / STM32 电机控制 / 视觉云台 学习与二次开发。 文末附仓库地址,代码可直接克隆。


写在前面

备赛电赛时,电机控制与视觉闭环是高频考点。很多同学卡在:

  • 步进电机高速就抖、失步,不会做梯形加减速
  • 视觉坐标来了,电机却「跟不住」或「来回抖」
  • 买了串口协议型无刷模组,协议组帧、反馈解析不会写

最近把两套备赛工程整理后开源到 GitHub,本文做 整体介绍 + 关键设计点,方便对照仓库阅读。

工程定位GitHub
双步进视觉云台 2023 电赛 E 题《运动目标控制系统》步进方案 dual-stepper-trapezoid
无刷电机串口驱动 双机 T 型轨迹平滑往返 + DMA 反馈 brushless-motor

平台均为 STM32F103C8 + 标准外设库(SPL),Keil / EIDE 可直接打开。


一、2023 电赛 E 题:双步进视觉云台

1.1 题目在考什么

2023 年全国大学生电子设计竞赛 E 题《运动目标控制系统》,核心可以概括成一句话:

看见目标 → 控制二维云台 → 让激光/指示点跟上运动目标

能力拆解大致是:

维度题目侧关注本方案实现
目标感知 摄像头识别色块/激光/路径点 K230 视觉 + UART 定长帧
二维控制 水平 + 俯仰 双路步进电机
动态跟随 误差收敛、少抖、少丢步 像素 PID → 步/帧 → 可打断加减速
稳态 对准后微抖小 像素死区 + 输出限幅 + 平滑停

题目不强制舵机或步进。舵机上手快;步进精度高、可开环累计位置、便于做显式加减速。本仓库是 步进版闭环云台。

1.2 系统数据流(主线)

K230 视觉 –UART 115200–> 帧状态机 –> actual / target 像素
|
err = target – actual
|
PID(输出:步/帧)
|
Motor_Move / Motor_Stop(可打断)
MOTOR1=水平 MOTOR2=俯仰
|
OLED 调试

协议语义(与常见 2023 视觉脚本一致):

  • (x1,y1) = Actual 实际点
  • (x2,y2) = Target 目标点
  • 闭环目标:err → 0

帧格式(12 字节):

0xAA | x1 | y1 | x2 | y2 | z | 0x55

多字节为大端有符号 int16。解析用状态机在串口中断里逐字节喂入,抗干扰、无动态内存。

1.3 硬件接线摘要

功能引脚说明
水平 STEP/DIR PA0 / PA3 TIM2_CH1 PWM
俯仰 STEP/DIR PA6 / PA7 TIM3_CH1 PWM
K230 TX → PA10 USART1_RX,115200
OLED PB8 / PB9 软件 I2C
驱动板 A4988 / DRV8825 / TMC 等 STEP/DIR,VMOT 常见 12V,共地

细分拨码必须与软件一致(例如 32 细分 → 6400 步/圈),否则 PID 等效增益全错。

1.4 五个值得讲的技术点(S 级)

(1)PWM 硬件发脉冲,中断只数步调速

不要主循环 bit-bang 步进脉冲。用定时器 PWM 出 STEP,更新中断里:

  • 步数 +1
  • 按相位改速度
  • 写 ARR

CPU 才能腾出来跑视觉 PID。

(2)1 MHz 时基,ARR ≈ 每步微秒数

72 MHz 下 PSC=71 → 1 MHz,速度与周期换算直观:

ARR ≈ 1_000_000 / v (v 单位:步/秒)

(3)灵魂公式:逐步更新速度

加速/减速段每步:

v = √(v² ± 2a)

再限幅到 v0~vMax。短距离自动退化为 三角曲线(无匀速段),长距离为 梯形。

(4)运动可打断(视觉闭环刚需)

Motor_Move 在电机还在跑时再次调用,会 停当前规划并按新步数重规划,绝对位置保留。

  • Demo 往返:「忙则丢指令」还能凑合
  • E 题跟踪:「每帧新误差必须能生效」→ 必须可打断

(5)PID 单位是「步/帧」,不是「度」

// 输入:像素误差;输出:本帧希望再走的相对步数
steps = DIR * PID_Calc(&pid, target_px, actual_px);

  • max_output 限制单帧最大步数,防猛甩丢步
  • 像素死区(如 3)内强制 0 步并 Motor_Stop,抑抖
  • 方向反了改 PAN_DIR / TILT_DIR,不必先改接线

1.5 联调建议

  • USE_FAKE_VISION = 1:固定误差大步走,先校轴方向
  • 再接 K230 真闭环,看 OLED 的 T/A/E/S
  • 跟手慢:略增 Kp 或 max_output;抖:减 Kp、加死区、降 vMax/accel
  • 仓库内还有 连线说明书.md,上电顺序、EN、共地都写了。

    仓库地址: https://github.com/kaka12331/dual-stepper-trapezoid

    (同账号还有舵机版云台:2023-dian-sai-visual-gimbal,可对比「度/帧」与「步/帧」。)


    二、无刷电机:串口协议 + 双机 T 型轨迹往返

    2.1 工程定位

    很多市售「一体式无刷舵机/模组」不需要你在 STM32 里做六步换相,而是:

    MCU 按固定帧格式发串口指令 → 驱动器内部完成换相、电流环、轨迹规划

    本工程演示:

  • USART2 @ 115200 组帧控制 两台 电机
  • DMA + 空闲中断收位置反馈
  • 多圈位置 + T 型轨迹,在 0 与 18000 之间平滑往返
  • OLED 显示 M1/M2 实时位置
  • 2.2 帧格式

    帧头 0x7A | ID 1B | CMD 1B | 数据 N 字节 | BCC(XOR) | 帧尾 0x7B

    BCC = 从帧头到数据末字节的逐字节异或。

    常用指令(以本仓库代码为准,最终以手册为准):

    CMD含义
    0x00 设模式
    0x01 设速度
    0x02 设位置
    0x06 使能
    0x07 设加速度
    0x0E 请求反馈

    模式上推荐演示用:

    • MOTOR_MODE_POS_MULTI_T:多圈位置 + T 型轨迹(启停更柔)

    2.3 接线

    STM32电机侧
    PA2 USART2_TX RX
    PA3 USART2_RX TX
    GND 必须共地

    默认 Motor1.ID=1,Motor2.ID=2,须与驱动器地址一致。

    2.4 API 一览

    BLDC_Init(115200);
    BLDC_Enable(id);
    BLDC_Set_Mode(id, mode);
    BLDC_Set_Acceleration(id, acc);
    BLDC_Set_Speed(id, speed);
    BLDC_Set_Position(id, position);
    BLDC_Req_Feedback(id); // 解析后写入 Motorx.Current_Position

    2.5 标定提醒(很重要)

    18000 是 驱动器内部位置单位,不是角度。换电机/减速比后务必重标定两端点,否则「转太少/转飞了」都正常。

    换向周期、加速度、规划速度要匹配:加速设得很软时,周期太短会「还没到位又改目标」。

    仓库地址: https://github.com/kaka12331/brushless-motor


    三、两套工程怎么选型

    场景更合适的方案
    2023 E 题视觉跟踪、开环步进云台 dual-stepper-trapezoid
    已有串口无刷模组,要平滑定位/双机同步 brushless-motor
    想对比舵机 vs 步进云台 步进仓 + 舵机仓

    共同点:

    • STM32F103 + 标准库,注释按「讲解/答辩」写得比较细
    • 重视 通信协议、单位(步/帧 vs 度/帧 vs 驱动器内部位置) 和 联调顺序

    四、克隆与编译

    git clone https://github.com/kaka12331/dual-stepper-trapezoid.git
    git clone https://github.com/kaka12331/brushless-motor.git

    • Keil:打开各自 Project.uvprojx
    • 或 EIDE / VS Code:打开 Project.code-workspace

    建议先通电看 Demo,再改 PID / 端点位置 / 视觉宏。


    五、小结

  • E 题步进云台:K230 像素误差 → PID(步/帧)→ 梯形/三角加减速步进,运动可打断,才跟得上动态目标。
  • 无刷串口驱动:组帧 + BCC + DMA/IDLE 反馈,T 型轨迹交给驱动器,MCU 专注业务逻辑。
  • 电赛里「能转」只是第一步;单位对不对、能否打断、死区与限幅、共地与使能 往往才是现场翻车点。
  • 如果本文对你备赛有帮助,欢迎 Star 仓库;有手册型号、标定参数或接线改进,也欢迎提 Issue / PR。


    相关链接

    • 步进视觉云台:https://github.com/kaka12331/dual-stepper-trapezoid
    • 无刷串口驱动:https://github.com/kaka12331/brushless-motor
    • 舵机视觉云台:https://github.com/kaka12331/2023-dian-sai-visual-gimbal

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » # 电赛备赛开源:STM32 双步进视觉云台 + 无刷电机串口驱动(附 GitHub)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!