# 个人的OTA远程升级学习 **Repository Path**: shiyue41/study ## Basic Information - **Project Name**: 个人的OTA远程升级学习 - **Description**: 这是一个以 STM32F407、MS8313 三相电机驱动板、AS5600 磁编码器、ESP8266 和 PCAN-USB 为核心的实验平台。项目的重点不是只让电机输出 PWM,而是把 AI 辅助的代码调试、远程 OTA、烧录状态监测、CAN 运行数据分析 串成一条可复现的工程闭环。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-09-05 - **Last Updated**: 2026-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STM32F407 电机 CAN 控制与 Wi-Fi OTA 自动调试平台 这是一个以 STM32F407、MS8313 三相电机驱动板、AS5600 磁编码器、ESP8266 和 PCAN-USB 为核心的实验平台。项目的重点不是只让电机输出 PWM,而是把 **AI 辅助的代码调试、远程 OTA、烧录状态监测、CAN 运行数据分析** 串成一条可复现的工程闭环。 ## 项目成果 本次调试由 AI 协同完成:根据开发板资料和现场接线,生成并修改 BootLoader、App、CAN 协议和 PC 监视器;通过 Keil 编译日志定位链接错误、HAL 缺失和启动跳转问题;再使用 Wi-Fi OTA 推送固件,并用 CAN 报文验证芯片是否真正进入 App。最终实现了: - BootLoader 位于 `0x08000000`,App 链接在 `0x08004000`,支持 ESP8266 TCP OTA 更新。 - OTA 使用 `START/DATA/FINISH + CRC32` 协议,实测 `46872` 字节 App 镜像完整写入并校验通过。 - 修复 OTA 完成后复位再次进入 OTA-only 的问题,验证通过后直接跳转 App。 - CAN1 以 500 kbit/s 输出 App 心跳、电机状态、三相 PWM、AS5600 角度/转速和闭环状态。 - 完成 7 极对电机的低压对准、扫角、方向判断、电角度零偏计算与验证状态机,标定结果通过 CAN 返回。 - 在驱动板无相电流 ADC 采样的条件下,基于 R/L/Ke 参数实现离散 RL 电流观测器、Clarke/Park、Id/Iq 双 PI、逆变换和共模注入 SVPWM;外速度环采用 AS5600 真实反馈、前馈 + PI 与双向 Iq 制动,90 rpm 目标实测稳定约 88-90 rpm。 - Python 监视器显示运行状态、PWM、绝对/连续角度、转速、模型 Id/Iq、标定状态及闭环曲线,并可发送启停、目标转速、Iq 上限和 FOC 命令。 > 说明:当前 Id/Iq 来自参数化电机模型,不是 ADC 实测相电流;真实闭环反馈为 AS5600 的转子角度与转速。仓库不把模型估算值描述为硬件电流采样结果。 这套流程可以称为“AI 自动调试闭环”:AI 负责从日志和 CAN 观测结果提出修改、重新编译、推送和验证;物理接线、供电和最终安全确认仍由操作者完成。 ## 已验证的运行数据 CAN 抓包中持续出现: ```text 0x101 4D 43 41 4E 01 00 00 00 App 心跳 0x110 4D 01 .. 09 00 00 .. 电机运行=1,调制率=9% 0x111 非零 U/V/W 比较值 三相 PWM 正在输出 0x112 45 07 .. AS5600 I2C 正常并检测到磁铁 0x114 43 00 00 5A .. 闭环状态、目标 90 rpm 和实际值 0x115 模型 Id / Iq / 目标 Iq FOC 模型电流状态 0x116 标定状态/方向/零偏/位移量 编码器与电角度标定结果 0x117 正负 Iq 限制 运行时模型限幅状态 ``` 其中 `0x110` 的运行位和 `0x111` 的非零比较值用于确认三相 PWM 输出,`0x112/0x113` 提供真实编码器反馈,`0x114-0x117` 将速度环、模型 FOC 和自动标定分层观测,避免只凭“电机转起来了”判断闭环是否成立。 ## 系统结构 ```text ESP8266 Wi-Fi │ UART4 ▼ STM32F407 BootLoader ── CRC32 校验 ──► App @ 0x08004000 │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ TIM1 三相 PWM CAN1 500k I2C1 / AS5600 │ │ │ MS8313 PCAN-USB 角度与转速 ``` ## 接线摘要 | 功能 | STM32F407 | 说明 | |---|---|---| | U/V/W PWM | PA8 / PA9 / PA10 | MS8313 IN1 / IN2 / IN3 | | 驱动使能 | PE0 | MS8313 EN | | 复位/休眠 | PE1 / PE2 | nRes / nSlp,按驱动板有效电平连接 | | CAN | PB8 / PB9 | CAN1 RX / TX,经收发器连接 CANH/CANL | | AS5600 | PB6 / PB7 | I2C1 SCL / SDA | | OTA UART | PA0 / PA1 | UART4 TX / RX,连接 ESP8266 | 电机驱动电源单独使用 12 V,驱动板逻辑地、STM32 地、CAN 收发器地必须共地。nFlt 当前未接入,固件因此不把它作为故障输入。 ## CAN 协议 - `0x101`:App 心跳,周期 1 s。 - `0x110`:运行位、换相步、调制率、方向和故障状态,周期 100 ms。 - `0x111`:TIM1 三相 PWM 比较值,周期 100 ms。 - `0x112/0x113`:AS5600 原始角度、绝对角度、连续计数、转速和 I2C 错误计数。 - `0x114`:闭环使能、目标转速、实测转速和电角速度。 - `0x115`:模型 Id、Iq、目标 Iq 与模型 FOC 状态。 - `0x116`:FOC 自动标定阶段、错误、编码器方向、电角度零偏与扫角位移。 - `0x117`:模型 Iq 正负限幅。 - `0x210`:控制命令,支持启停、调制率、方向、速度环开关、目标转速、模型 FOC、Iq 设置/限幅及自动标定。 ## 快速使用 1. 使用 `BootLoader/Project/BootLoader.uvprojx` 编译并通过 ST-Link 下载 BootLoader。 2. 确认 ESP8266 已连接,电脑连接 OTA 热点 `192.168.4.1`。 3. 运行: ```powershell python Tools/ota_wifi_sender.py App/Project/OBJ/Motor_CAN_App.hex --timeout 30 ``` 4. 打开电机监视器: ```powershell python Tools/motor_can_monitor.py ``` 5. 先限制 12 V 电源电流并固定电机,再使用监视器发送启动命令。 ## AI 调试链路 ```text 编译日志 / CAN 报文 / 实物状态 ▼ AI 解析故障与假设 ▼ 修改代码和协议实现 ▼ Keil 编译与错误归因 ▼ Wi-Fi OTA 远程烧录 ▼ CAN 监测和结果验证 ``` 这种方式把“能不能烧进去”和“程序是否真的运行”分开验证,避免只看 OTA 返回成功就误判 App 已启动。 ## 后续:电机算法自调潜力 当前固件已完成编码器速度反馈、模型 FOC、参数化限幅和闭环数据回传,下一步可以在 PC 端加入自动阶跃测试、稳态区间识别、PI 参数搜索、性能评分和异常回滚。自调算法应以实际速度误差、超调、恢复时间、稳态纹波和故障次数为评价指标,并保留人工停止和硬件安全电流限制;本仓库目前将自动调参标记为后续方向,不把尚未完成的搜索算法描述为已实现功能。 ## 实物记录 ![电机驱动、F407、CAN 和编码器接线](docs/bench-setup.jpg) ![CAN 电机监视器](docs/can-monitor.jpg) ## 目录 - `BootLoader/`:ESP8266 UART 接收、Flash 擦写、CRC32 校验和 App 跳转。 - `App/`:TIM1 三相 PWM、AS5600 反馈、模型 FOC、自动电角度标定、速度环及 CAN 状态/命令。 - `Tools/ota_wifi_sender.py`:Intel-HEX OTA 发送器。 - `Tools/motor_can_monitor.py`:中文 CAN 监视器和实时速度曲线。 - `Tools/ota_can_capture.py`:无界面 CAN 抓包工具。