2 Star 5 Fork 1

itg/FOC-407-Demo-Simple-OneMotor

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
这个工程修改自
https://gitee.com/qaprompt/foc-tutorial/tree/main/FOC-407-Demo
fork from:
https://gitee.com/wojialaomuzhu/foc-tutorial

环境:
使用HAL库编程,硬件平台使用Simple Driver SE

芯片资源使用:
PWM:
中央对齐模式2 计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向上计数时被设置
使用PWM模式1,向上计数 CNT<CCR为有效电平,有效电平为高。


编码器:
采用ABZ正交增量编码器
每次上电需要做电气角度校准
利用Z轴每圈做一次清零

电流采样:
电流采样使用单次采样,DMA+中断
在定时器1通道4中断中触发ADC采样


控制流程:
定时器1通道4触发比较中断,此时所有桥臂的下MOS管打开,进行一次ADC采样.
ADC采样完成触发DMA中断,在DMA中完成FOC控制

FOC控制流程:(FOC.c)
1.获取BC两相电流,求出A相电流
2.获取当前电气角度。
3.通过Clarke变换和Park变换求出实际电流 IQ和ID
4.通过与目标IQ ID对比和PID计算,得出要输出的UQ UD
5.将UQ UD做Park反变化得出Uα和Uβ
6.将U阿尔法和Uβ送入SVPWM生成模块。

SVPWM控制流程:(Svpwm.c.c)
1.获取Uα和Uβ
2.通过U阿尔法和Uβ计算当前所在扇区
4.使用7段式PWM计算每个矢量的作用时常
5.通过矢量作用时长计算出定时器的高电平时间
6.通过定时器每个高电平时间计算出每个通道的CCR值
7.挑选出CCR最大值送给通道4,准备下一次定时器中断

定时器比较中断:
打开ADC进行一次AD采样

DMA中断:
读取AD数据进行FOC控制

编码器Z轴中断:
校准角度值


文件介绍:
所有文件均放置在User目录下
APP:应用程序总入口,实现初始化流程管理,循环执行管理。
Function:放置功能程序,目前没有实现,如放置T型加减速。
MCUDriver :放置芯片外设代码,如SPI,GPIO,TIM,ADC
Framework:放置代码库,将驱动代码和硬件平台剥离出来。
PeripheralsDriver:放置驱动程序,将硬件平台代码和代码库结合起来,实现具体功能,即(MCUDriver + Framework)
RTT :使用Segger RTT打印调试。

已知BUG
1.电流放大倍数计算值与实际值不符,因此程序中设置目标电流10,实际只有0.5A左右,但不影响调试。
2.无法通过SPI与DRV8301通讯,看了数据手册也没有调试通过,哪位老哥有经验望分享。
3.没有做刹车处理

声明:
1.受硬件平台影响,代码可能不能直接运行,但可以参考。
2.先调试SVPWM再调试电流采样,再闭环,SVPWM即可实现电机旋转。
3.闭环先调电流环再调速度环
4.电流环先调试ID再调试IQ
6.有疑问的地方欢迎骚扰,有错误的地方欢迎批评。

空文件

简介

FOC-407-Demo-Simple-OneMotor 展开 收起
C 等 3 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/x-itg/FOC-407-Demo-Simple-OneMotor.git
git@gitee.com:x-itg/FOC-407-Demo-Simple-OneMotor.git
x-itg
FOC-407-Demo-Simple-OneMotor
FOC-407-Demo-Simple-OneMotor
main

搜索帮助

0d507c66 1850385 C8b1a773 1850385