# 毕业设计 **Repository Path**: inffydwan/servo-driver-odrive-inspired ## Basic Information - **Project Name**: 毕业设计 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-08 - **Last Updated**: 2026-10-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 高性能伺服电机驱动器 (双参考: 软件 ODrive + 硬件 moteus) 电子信息工程毕设 — **Path B** — 单电机伺服驱动控制器, 板级全自研。 > **双参考架构** (2026-08-18 重整): > - **软件架构** = ODrive v3.6 风格 (Axis/Motor/Encoder/Controller 类层次, 3 状态机, ASCII 协议) > - **算法实现** = mjbots/moteus 风格 (PLL 估算, 自适应参数, 工程实践) > - **硬件设计** = mjbots/moteus-c1 路线 (STM32G474 + DRV8323RS + AS5048A) > > 论文 4 个创新点 (5 段 SVPWM / 自适应 anti-windup / PI 自整定 / 改进 SMO) 都是软件, 硬件 / 软件参考选型都不影响。 --- ## 1. 项目目标 设计并实现一款 **高性能单电机 PMSM/BLDC 伺服驱动板**, 核心指标参考 moteus-c1 + 用户需求: | 指标 | 目标值 | 备注 | |------|--------|------| | 母线电压 | 8-44V (3S-10S LiPo) | TVS 钳位 48V | | 持续电流 | 30-60A | 取决于散热和 FET | | 峰值电流 | 80-120A | 1mΩ × G=20 量程 ±165A | | 电流环带宽 | ≥ 3 kHz | 30kHz 采样 | | 速度环带宽 | ≥ 100 Hz | 1kHz 采样 | | 位置环精度 | ≤ 0.1° | AS5048A 14-bit 理论 0.022° | | 通信接口 | USB 2.0 (CDC) + CAN-FD | TCAN1057AEV | | 编码器 | SPI 磁编码 (AS5048A) | 14-bit 绝对 | | 控制频率 | 电流环 30kHz, 速度环 1kHz, 位置环 1kHz | 中心对齐模式 1 | | PCB 尺寸 | 50mm × 50mm × 1.6mm (4 层) | 10×10cm 限制内 | | 单板成本 | ≤ 250 元 (小批量散件) | 见 `03_hardware/04_bom/BOM.csv` | --- ## 2. 双参考架构 (核心) ### 2.1 硬件参考 = moteus-c1 | 模块 | 型号 | 备注 | |------|------|------| | MCU | **STM32G474RET6** (LQFP-64) | 170MHz Cortex-M4F + FPU + CORDIC + 5 OPA + DSP | | 栅驱 | **DRV8323RS** (VQFN-40) | 3 集成电流 OPA, SPI 配置, 8-60V | | 编码器 | **AS5048A** (SOIC-16) | 14-bit 绝对, SPI 10MHz | | N-FET | **TPN19008QM** × 6 | 100V / 8mΩ, 3 半桥 | | 采样电阻 | **1mΩ / 3W** × 3 | 2512 footprint, 1% 75ppm | | CAN-FD | **TCAN1057AEV-Q1** | AEC-Q100 | | LDO 3.3V | TLV70233PDBVR | 300mA SOT-23-5 | | 电源接口 | XT30PW-M | 主电源 | | USB | USB-C 16-pin | 调试通讯 | 详细规格书: `03_hardware/02_schematic/Schematic_Design_Spec.md` BOM 清单: `03_hardware/04_bom/BOM.csv` ### 2.2 软件架构 = ODrive v3.6 风格 ``` ┌──────────────────────────────────┐ │ ASCII 协议 (odrivetool 风格) │ │ state / mode / pos / vel / ... │ └──────────────┬───────────────────┘ │ 04_communication/ascii_protocol.c ┌──────────────▼───────────────────┐ │ Axis 顶层类 (ODrive 风格) │ │ - 3 状态机: IDLE/CALIB/CLOSED │ │ - request_closed_loop / idle │ └──────┬───────────┬─────────────┬──┘ │ │ │ ┌────────▼─┐ ┌──────▼──────┐ ┌──▼─────────┐ │ Motor │ │ Encoder │ │ Controller │ │ R, L, │ │ AS5048A │ │ 3 环级联 │ │ pole │ │ + PLL 估算 │ │ 4 控制模式 │ └──────────┘ └─────────────┘ └────────────┘ │ ┌───────────────────┼──────────────────┐ │ │ │ ┌──────▼─────┐ ┌──────▼─────┐ ┌──────▼─────┐ │ Position │ │ Velocity │ │ Current │ │ PD 1kHz │ │ PI 1kHz │ │ PI 30kHz │ │ (ODrive) │ │ (我们) │ │ (moteus) │ └────────────┘ └────────────┘ └────────────┘ ``` 完整说明: `04_firmware/README.md` (必读) ### 2.3 算法实现 = moteus 风格 | 算法 | moteus 源 | 我们实现 | |------|-----------|----------| | 电流采样公式 `adc_scale = 3.3/(4096·R·G)` | `bldc_servo.cc:322` | `01_driver_layer/current_sense.c` | | 启动校准 (200 次平均) | `bldc_servo.cc:1100` | 同上 | | PLL 速度估算 (400Hz) | `motor_position.h` | `03_control/encoder.cpp` | | min-max SVPWM | `bldc_servo_control.h` | `02_foc_algorithm/foc.hpp` | | 硬件 CORDIC 加速 | CORDIC 库 | `02_foc_algorithm/cordic.hpp` | | 位置/速度前馈 | `BldcServoPosition::UpdateCommand` | (待实现) | 为什么用 moteus 算法: 它是工程界最成熟的开源伺服实现之一, 算法经过产品级验证。 ### 2.4 双参考理由 (答辩准备) | 维度 | ODrive 优势 | moteus 优势 | 我们取谁 | |------|------------|-------------|----------| | **类层次设计** | 清晰, 易扩展 | 单文件, 难维护 | ✅ ODrive | | **代码可读性** | 中 (26KB axis) | 差 (单文件 2000+ 行) | ✅ ODrive | | **状态机设计** | 3 状态够用 | 16 模式, 复杂 | ✅ ODrive | | **odrivetool 协议** | 简单, 纯文本 | 7 种 frame, 复杂 | ✅ ODrive | | **算法工程度** | 基础 (无 PLL) | 顶级 (PLL, 前馈, 模式) | ✅ moteus | | **电流采样** | 跟硬件耦合 | 公式独立, 易移植 | ✅ moteus | | **PLL 估算** | 无 | 有 (低速稳定) | ✅ moteus | | **硬件设计** | DRV8301 (老) | DRV8323RS (新 + 集成 OPA) | ✅ moteus | | **MCU 选型** | F405 (旧) | G474 (新 + CORDIC) | ✅ moteus | --- ## 3. 目录结构 ``` servo_driver_v1/ (顶层文件夹待重命名, 当前仍是中文路径) ├── 01_thesis/ # 论文 (终稿 + 答辩 PPT) ├── 02_proposal/ # 开题报告 ├── 03_hardware/ # ★ 硬件设计 (moteus-c1 风格) │ ├── 02_schematic/ # KiCad 原理图 + 设计规格书 │ ├── 03_pcb_layout/ # KiCad PCB (待设计) │ ├── 04_bom/ # BOM 清单 │ └── 05_3d_model/ # 外壳 STEP 文件 ├── 04_firmware/ # ★ 固件 (ODrive 架构 + moteus 算法) │ ├── 01_driver_layer/ # DRV8323 / AS5048A / ADC │ ├── 02_foc_algorithm/ # FOC + PID + CORDIC (含创新点 1, 2) │ ├── 03_control/ # ODrive 类层次: Axis/Motor/Encoder/Controller │ ├── 04_communication/ # ASCII 协议 + USB CDC (odrivetool 风格) │ └── 05_config/ # 默认参数 ├── 05_pc_tools/ # 上位机 (simple_odrivetool.py) ├── 06_testing/ # 性能测试脚本 └── 07_references/ # 参考资料 ├── 01_datasheets/ # 芯片手册 ├── 02_papers/ # FOC / SMO 论文 └── 03_moteus_materials/ # moteus 源码 + 速览 + 移植笔记 ├── Moteus架构速览.md ★ 必读 (硬件 + 算法参考) ├── driving_notes.md ★ 必读 (v3: 加了 ODrive 软件章节) ├── 编译验证报告.md # moteus 编译可行性 ├── fw_snippets/ # 关键 .h 文件离线参考 └── moteus/ # 完整源码 (122 文件, 63.5MB) ``` --- ## 4. 论文 4 大创新点 (全是软件) | # | 创新点 | 实现位置 | 跟参考区别 | |---|--------|----------|------------| | 1 | **5 段式 SVPWM** | `02_foc_algorithm/foc.hpp::svpwm_5seg()` (待写) | ODrive/moteus 都用 7 段式 | | 2 | **自适应 anti-windup PI** | `02_foc_algorithm/pid.hpp::adaptive_kb()` | moteus 用 clamping, 我们 back-calc + 自适应 Kb | | 3 | **PI 参数自整定** | `03_control/pi_autotune.cpp::update()` | ODrive/moteus 都不做, 全靠手调 | | 4 | **改进型滑模观测器 SMO** | `03_control/smo.cpp::smooth_sign()` | ODrive/moteus 都用编码器, 无 sensorless | > **重点**: 4 个创新点**全是软件**, 跟硬件选型 (F4 vs G4) 无关。 ### 4.1 创新点 1: 5 段式 SVPWM - 7 段式: 每相切 3 次 / 周期, 开关损耗 6/周期 - 5 段式: 每相切 1 次 / 周期, 开关损耗 2/周期 (-67%) - 代价: 电流纹波略大, 需评估 ### 4.2 创新点 2: 自适应 anti-windup moteus 实际用 clamping (简单限幅, 退饱和慢), 我们用 back-calculation + 自适应 Kb: ``` Kb_adaptive(e) = (1/Kp) · exp(-|e|/τ), τ=0.1 ``` - 误差大 → Kb 小 → 保持响应 (不退积分) - 误差小 → Kb 大 → 快速退积分 (防超调) ### 4.3 创新点 3: PI 参数自整定 传统 Ziegler-Nichols, 我们用改进版: - 预激阶段测系统时间常数 T - Kp = 0.5 · Ku · (1 + T/Tu) (比 Z-N 快 30%) - Ki = Kp / (0.4 · Tu) 启动时自动跑, 30 秒内完成, 无需手调。 ### 4.4 创新点 4: 改进型 SMO 传统 SMO 用 `sign()` 切换函数, 抖振大。我们用平滑函数: - `tanh(x/δ)` 代替 `sign(x)` - δ 边界层厚度 = 1.0 (经验值) - 低速稳定性 +30% (论文仿真验证) --- ## 5. 分阶段执行计划 (粗略 12-16 周) | 阶段 | 周次 | 任务 | 里程碑 | |------|------|------|--------| | 准备期 | W1-2 | 读 moteus 速览 + 移植笔记, 读论文 4-5 篇 FOC | 开题报告 | | 硬件设计 | W3-5 | KiCad 原理图 → PCB 布局 → 评审 → 打板 (嘉立创) | 第一版 PCB | | 固件基础 | W6-8 | CubeMX 配置 → DRV8323 SPI → AS5048A → ADC 采电流 | 能读到电流+编码器 | | FOC + 三环 | W9-10 | FOC 数学 + SVPWM → 电流环 → 速度环 → 位置环 | 电机能转, 三环通 | | 创新点 | W11-12 | 集成 4 个创新点 → matlab 仿真对比 | 性能指标对比 | | 通讯 | W12-13 | USB CDC + ASCII 协议 + simple_odrivetool.py | PC 能控制 | | 测试 | W13-14 | 阶跃响应, 带宽测试, 性能对比 | 数据图表 | | 论文 | W15-16 | 写论文, 答辩 PPT, 演示视频 | 终稿 + 答辩 | --- ## 6. 当前状态 (2026-08-18) ✅ **已完成**: - 项目骨架 (25 个子目录, 全部英文) - 全部 git commit 推到 Gitee - 旧 ODrive 残留清理 (F405 KiCad 工程 51MB) - 硬件方案重设计 (Path B: G4 + DRV8323RS + AS5048A) - BOM 清单 (40 项, 单板约 250 元) - moteus 源码完整镜像 (122 文件, 63.5MB) - moteus 编译验证报告 (Bazel 不可用, 不安装) - **驱动层 v0.1**: DRV8323 + AS5048A + current_sense (含启动校准) - **FOC 算法层 v0.1**: PID (含创新点 2) + CORDIC + FOC 数学 - **控制层 v0.1 (ODrive 风格)**: - `03_control/motor.hpp/.cpp` - 电机参数 + 校准 - `03_control/encoder.hpp/.cpp` - 编码器 + PLL 速度估算 (moteus 风格) - `03_control/controller.hpp/.cpp` - 3 环级联 + 4 模式 - `03_control/axis.hpp/.cpp` - 顶层, 3 状态机 - `03_control/smo.hpp/.cpp` - 改进型 SMO (创新点 4) - `03_control/pi_autotune.hpp/.cpp` - 改进 Z-N (创新点 3) - `03_control/low_level.h` - 寄存器宏 - `03_control/timer.hpp` - 计时工具 - **通信层 v0.1**: ASCII 协议 + USB CDC 封装 - **配置层 v0.1**: motor_params + pid_defaults - **架构总览 README**: `04_firmware/README.md` (必读) - **driving_notes v3**: 加 ODrive 软件架构移植章节 🔄 **进行中**: - 写 CubeMX .ioc (TIM1/SPI1/SPI2/ADC1/FDCAN/USB CDC) - 简单上位机 (simple_odrivetool.py) 📋 **待办** (按优先级): - 买 1mΩ 采样电阻 + STM32G474RET6 开发板 (开始硬件测试) - 实际 KiCad 画原理图 (基于 spec) - 写 CubeMX 配置 (.ioc) - 在 CubeIDE 编译 + 下载到板子 - 写 5 段式 SVPWM (创新点 1) - 写论文 01_thesis/ --- ## 7. 立即可做 1. **读固件架构总览** (15 分钟, 关键): - `04_firmware/README.md` (必读) 2. **读 moteus 速览** (15 分钟, 硬件 + 算法参考): - `07_references/03_moteus_materials/Moteus架构速览.md` 3. **读移植笔记** (30 分钟): - `07_references/03_moteus_materials/driving_notes.md` v3 (含 ODrive 章节) 4. **看 moteus-c1 原理图** (1 小时, 硬件参考): - `C:\work\moteus\hw\c1\` 5. **装 STM32CubeIDE** (30 分钟, 固件开发用): - https://www.st.com/en/development-tools/stm32cubeide.html 6. **下立创商城账号** (5 分钟): - https://www.lcsc.com/ (BOM 链接都是 LCSC) --- ## 8. 参考资料汇总 | 来源 | 用途 | 链接 | |------|------|------| | **moteus GitHub** | 硬件 + 算法参考 | https://github.com/mjbots/moteus | | **moteus-c1 硬件** | KiCad 原理图 | `C:\work\moteus\hw\c1\` | | **ODrive GitHub** | 软件架构参考 | https://github.com/odriverobotics/ODrive | | **ODrive 文档** | ASCII 协议 + 状态机 | https://docs.odriverobotics.com/ | | **ST FOC 培训** | CORDIC 加速 | https://www.st.com/en/embedded-software/stm32-mc-sdk.html | | **DRV8323 数据手册** | 栅驱寄存器 | SLVSF19 (TI) | | **SimpleFOC 库** | 入门参考 | https://simplefoc.com/ | --- ## 9. Gitee 仓库 - **当前**: `https://gitee.com/inffydwan/servo-driver-odrive-inspired` - **待重命名**: `servo-driver-odrive-inspired` → `servo-driver-inspired` (新名字, 避免单一参考) - 因为现在软件 ODrive + 硬件 moteus 双参考, 叫 odrive-inspired 不准确 --- ## 10. 跟上一个项目对比 | | 上一题 (声音) | 这一题 (伺服) | |---|---|---| | 学习曲线 | 平 (AI 库现成) | 陡 (电机学 + 控制理论 + 嵌入式) | | 答辩亮点 | 算法创新 (自适应阈值) | 系统级作品 (硬件+软件闭环) | | 找工加分 | 嵌入式/AI 方向 | 自动化/机器人/电机控制 | | 难度 | 中 | 中-高 | | 工作量 | 1 人 4 月 | 1 人 4-5 月 (板级 + 固件 + 论文) | --- **最后更新**: 2026-08-18, Mavis + user (双参考架构明确: 软件 ODrive + 硬件 moteus)