# foc **Repository Path**: baiyang_it/foc ## Basic Information - **Project Name**: foc - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-19 - **Last Updated**: 2026-07-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ODrive 3.6-56V FOC 精简固件 基于 [ODrive](https://github.com/odriverobotics/ODrive) 官方固件的电机控制思路与板级定义,面向 **ODrive v3.6 56V**(STM32F405RG + 双 DRV8301)裁剪的一套 FOC 程序。 **已内置 STM32 HAL + ODrive 外设初始化,提供 Keil MDK-5 工程(推荐)与 Makefile。** ## Keil5 工程(推荐) 打开: `MDK-ARM/foc_odrive36.uvprojx` - 器件:`STM32F405RGTx` - 编译器:ARMClang (AC6),启动文件用 armasm - 调试器:ST-Link(`foc_odrive36.uvoptx` 已配置) - 输出:`MDK-ARM/Objects/foc_odrive36.axf` / `.hex` 本地已验证:**0 Error(s), 0 Warning(s)**。 命令行编译: ```bat "C:\Keil_v5\UV4\UV4.exe" -b MDK-ARM\foc_odrive36.uvprojx -o MDK-ARM\build_log.txt ``` ## Makefile(可选) ```bash make firmware # 输出: build/foc_odrive36.elf / .hex / .bin ``` 需已安装 `arm-none-eabi-gcc`。 ## 相对原版 ODrive 做了什么 | 保留 | 去除 | |------|------| | v3.6-56V 引脚 / 分流电阻 / 母线分压 | 其它板型分支(v3.1~v3.4 等) | | TIM1/TIM8 中心对齐 PWM + ADC 注入采样 | USB + Fibre / odrive-tool | | DRV8301 SPI 配置与电流运放增益 | UART ASCII / CAN 上位机协议 | | Clarke / Park / 电流 PI / SVM | FreeRTOS、I2C 从机、PWM 输入 | | 双轴 M0/M1、增量编码器 | OTP 量产流程 | 参数与运行模式:`App/user_config.h`;运行时可用调试器改 `g_app_cmd`。 ## 目录结构 ``` App/ 入口与用户配置 Board/ 板级初始化、高速电流环 MotorControl/ FOC / 电机 / 编码器 Drivers/ DRV8301 + STM32F4xx_HAL_Driver + CMSIS Core/ CubeMX 风格外设初始化(gpio/tim/adc/spi…) MDK-ARM/ Keil5 工程(uvprojx / sct / uvoptx) CubeMX/ 原始 Odrive.ioc Docs/ 说明 build/ GCC Makefile 输出 ``` ## 烧录 ST-Link SWD,例如: ```bash openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \ -c "program build/foc_odrive36.elf verify reset exit" ``` ## HAL 来源说明 CubeMX 命令行对旧版 `Odrive.ioc` 迁移不稳定,因此采用: 1. 从本机 `%USERPROFILE%\STM32Cube\Repository\STM32Cube_FW_F4_V1.27.1` 拷贝 HAL/CMSIS 2. 使用 ODrive 官方 `Firmware/Board/v3` 已生成的 `gpio/tim/adc/spi/...` 3. 去掉 USB/UART/CAN/FreeRTOS 中断与入口,接入本仓库 FOC 若要用 GUI 重新生成:打开 `CubeMX/foc_odrive36.ioc`,生成后保留电机相关外设,勿再启用 USB Device / Fibre。 ## 安全注意 - 首次:`APP_MODE_IDLE`,确认 `g_vbus_voltage` - 再用小电压 `APP_MODE_VOLTAGE_OPENLOOP` - 编码器相位对齐后再 `APP_MODE_TORQUE_CURRENT` ## 许可证 算法与板级参数参考 ODrive(MPL-2.0)。详见 `Docs/ATTRIBUTION.md`。