# 基于STM32G431的电机Foc控制 **Repository Path**: alen_wp/stm32G431_motor_foc_control_3Dprint_circuit-design ## Basic Information - **Project Name**: 基于STM32G431的电机Foc控制 - **Description**: 本项目是一个电机控制开发案例,所有设计文件、代码均已开源。使用wk8110+3D打印电机、摆线减速器,总成本约200元。使用STM32G431主控,实现多环控制(位置/速度/电流)、SVPWM调制,基于HAL库开发,包含vofa图形化PID调试界面和波形显示功能。项目涉及SolidWorks机械设计、电路设计及STM32编程。所有都免费分享,希望大家能点个赞,然后能去B站给个关注、三连,多谢 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 28 - **Created**: 2026-03-20 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 制作过程+演示+教程(8个视频)(1个月更完) 视频链接:https://www.bilibili.com/video/BV1eRfyB8EVU qq群:451278286 (新建的,之前有小伙伴让我建个群,有问题也可以在群里交流学习) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/pic1.jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/pic2.jpg) ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 概述: - 机械:核心wk8110,3D打印(耗材:PA6-GF),电机+摆线减速器一体化; - 驱动板:看下文; - 代码: - 实现位置、速度、电流、位置-速度、位置-电流、速度-电流、位置-速度-电流环控制; - (Vofa串口工具)图形界面PID调试、控制,波形显示; - SVPWM实现; - 过流、过温保护;电流、速度滤波实现; - Can接口;拨盘电位器、按键控制; ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/pic3.jpg) ​——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 机械相关: - 电机+摆线减速器一体化(减速比16:1) - 尺寸:111.8 * 111.8 * 53.6 mm - 重量:500 - 600 g ### 成本: | 物料 |价格 | |--|--| | wk8110(定子硅钢+线圈+磁铁+转子磁轭) |¥96 | |轴承 |¥63 | |3d打印件(耗材:PA6-GF25%)(自备打印机价格,未包含辅件) |>¥36 | |螺丝、热熔螺母、钢轴 |>¥3 | | |电机总成本<¥200 | |驱动板物料 |¥43 | ### 材料比对: | 参数 |PA6-GF25%(玻纤增强尼龙) |PETG(典型值) |铝合金(典型值) |--|--|--|--| |密度 (g/cm³) |1.27 | 1.27 | 2.70 | |热变形温度 (°C) |200 | 75 | / | |拉伸强度 (MPa) |120 | 60 |290 | |弯曲强度 (MPa) |180 | 80 | 200 | ### wk8110部分参数: | 参数 |数值 | |--|--| |额定电压 |24 V | |额定电流 |2.49 A | |额定扭矩 |0.93 N.M | |额定转速 |349 rpm | |最大转速 |566 rpm | |堵转扭矩 |2.4 N.M | |堵转电流 |6.51 A | ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3339).png) 电机+摆线减速器设计基于B站UP“Cristina绛”的设计进行地再开发 ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 硬件电路: - 主控 STM32G431(主频170MHz,默认开启FPU),磁编码MT6816(14位精度); - 栅极驱动 FD6288,6个NMOS(CSD18540Q5B),两路INA240直接采集相电流,一路普通运放下桥臂采集母线/C相电流(冗余); - 24V供电,带过流、过压、缓启动、防反接、防浪涌电路,输出12V、5V、两路3.3V; - 接口:FDCAN、串口、SW口; - 其他:温度监测、led、按键、拨盘电位器、引脚引出; ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/sch1.jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/sch2.jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3340).png) ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 程序框图: ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E7%A8%8B%E5%BA%8F%E6%A1%86%E5%9B%BE.jpg) ## 环路控制: ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E7%8E%AF%E8%B7%AF%E6%8E%A7%E5%88%B6.png) 图片来自网上(忘了出处了) ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 代码: - 基于hal库,使用dsp库; - foc.c(位置、速度、电流环控制相关、pid相关、svpwm...): - SVPWM:覆盖从电压归一化、坐标变换、扇区识别到矢量时间分配、占空比输出的全 SVPWM 流程,带多轮限幅与过调制处理; - PID:分段积分,抗积分饱和、积分衰减、死区判断、限幅、前馈、速度阻尼...; - 环控制:实现电机端-负载端位置、速度的变换,实现位置、速度、电流、位置-速度、位置-电流、速度-电流、位置-速度-电流环控制; - 其他:零点校准、一阶低通滤波器、周期差值归一化...; - adc.c(3相电流到dq轴电流、电流滤波、过流、过温保护...): - 3相电流到dq轴电流:采样(带校准)、克拉克变换、帕克变换; - 电流滤波:3相电流 滑动均值滤波、dq轴电流 一阶低通滤波; - 过流保护:多重(持续电流过流、瞬间大电流过流)、多次(防误触发)判断; - 其他:温度、电位器采样...; - DMA方式; - spi.c(mt6816磁编码获取角度、多圈角度计算): - DMA方式; - tim.c(4个定时器): - 定时器8:pwm控制,发起DMA读取磁编码角度值; - 定时器7:电机速度计算; - 定时器6:硬件触发ADC2(温度、电位器采样); - 定时器4:按键20ms消抖; - open_serial_debugger.c(同上位机vofa/open_serial_debugger串口通讯): - 上位机可图形界面操作 控制模式的选择,目标位置、速度、电流的设置,调试pid等功能(可根据需要自己扩展其他功能),可同时显示多个数据波形; - justFloat使用DMA方式发送,接收不使用DMA; - usart.c(串口DMA方式发送,重定向printf): - 缓冲区满或遇到换行符发送; - fdcan.c(使用传统can帧格式): - 初始化(过滤器设置,发送头设置,使能); - 发送函数; - 接收回调函数; - gpio.c(按键、Led): - 按键中断,按键处理(数据封装); - kalman_filter.c(卡尔曼滤波): - config.h(参数配置): foc.c部分代码参考的https://blog.csdn.net/qq570437459 ,推荐大家可以去看看 ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 结果波形图: - 详情请看视频,这边从视频里截了一些图; - 空载精度(负载端): - 位置:误差在 0.3° 左右,支持多圈,范围只要不超 float 最大值就行; - 速度:误差在 3°/s 上下波动,实测正常控制速度最大在 167°/s (按wk8110参数和减速器减速比换算:额定130°/s,最大200°/s),响应在 240ms 左右; - 电流:堵转误差在 10mA 上下波动,响应设置在 50ms 左右; ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3342).jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3344).jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3345).jpg) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3346).jpg) ## 负载测试(位置-速度-电流环)(负载端): - 测试负载在 7.4 - 9.5 kg; - 位置:误差在 0.5° 以内,支持多圈,范围只要不超 float 最大值就行; - 速度:误差在 5°/s 上下波动; ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3347).png) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3348).png) ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3349).jpg) - 负载在重力的作用下拖动电机转动的期间,电机类似于发电机的作用,这里我们看到母线电压被抬升到了30多伏,需要添加制动电阻电路,当电压超过25V时,导通电路消耗这多余的能量; - 7.4kg负载下,随着速度的增大,速度不再是稳定的跟随,到100多°/s,负载从被电机带动到带动电机转动作用力最大的过程中会产生一个短暂的速度尖峰波动(10-20°/s); ## 负载突变测试: ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE(3350).jpg) ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ## 其他: - 使用软件: SolidWorks、立创EDA、LTspice、STM32CubeMX、VsCode+EIDE、Keil5 ![输入图片说明](motor_foc/%E6%96%87%E6%A1%88%E6%89%80%E7%94%A8%E5%9B%BE%E7%89%87/pic4.jpg) ​​ ## 问题及解决: - 太多了,下载的文件中有一个“ 日志.txt ”的文档,记录了大部分遇到的问题;