你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

No.3 FOC SDK5.0电机库软件系统分析  

[复制链接]
子曰好人 发布时间:2018-9-1 14:10
本帖最后由 子曰好人 于 2018-9-1 22:42 编辑
. R- \+ o2 Z. |3 S' u( m8 j% l( b) A5 S! ?" P% S) @
拿到套件快一周了,线上培训也去听了,任务也做完了,只是一直没有发帖,想通过我的这些帖子让大家更容入门ST的电机库。前两篇帖子做了一些对套件出厂固件和硬件配置做了一个大概的分析,希望对刚接触STFOC SDK的朋友有一定的帮助。今天来分析一下代码结构,带着各位逐步深入理解这份不错的电机库。

% J0 y3 G" A8 T- ^1 d
如何生成一份可用的工程我就不做过多介绍了,可以参看论坛其他帖子。
文件结构
这是一份使用workbench生成的代码 生成代码.png
工具生成的代码是对套件的硬件和FOC 5.0相关代码的初始化,当我们拿到这份代码时可以通过简单的几行代码让电机快速运行起来。但是作为一名攻城狮,我们更希望能够足够了解这一份代码,代码每一部分做了什么事情,代码的运行流程是怎样的吗,这都需要我们去阅读代码。 文件结构.png
启动文件:我们并不陌生,stm32启动运行到main函数前要做的事情都由启动文件去处理。用户文件:包含主函数,电机控制用户层的api函数,任务函数、电机参数与设置以及用户接口和UI任务。做的都是应用层的事情。HAL库驱动文件:用过hal库写代码的各位对这个文件下下的文件应该都不陌生,hal库隐藏对寄存器的操作,让我们能专注于上层代码开发。系统文件:系统初始化和时钟方面的设置。电机库文件:所有和电机相关的处理都在这里,包括基本的坐标变换、电流电压采样、过压过流保护、sensorless方案的位置速度反馈、PID调节等FOC控制系统必要的代码。额外的功能可以在workbench中选择,比如MTPA(最大转矩每安培)、Flux weakening(弱磁)、Feed Forward(前馈控制)。

& g; B3 M' ~  q
状态机
初始化结束之后,整个系统就运行起来了,FOC控制处于待命状态,如果这时候设置速度和启动命令,那么电机就可以启动起来。定时器和ADC采样已经开始运行了。/ q5 H( m. z* r- i+ V
查看变量初始值.png
进入调试界面,可以查看变了可以看到现在电机所处的状态,0x00,通过查看枚举变量可以看到
变量初始值信息.png
在初始化完毕之后电机进入的状态是IDLE状态。状态的改变是在state_machine.c这个文件中的STM_NextStat的函数中。 状态机函数.png
理解这个状态机函数就能知道整个系统的运行流程图了。需要改变的地方也能得心应手的处理。 ; j) C" R1 Z. T$ e/ y  _( J
中断
6 _) u  T8 [" s4 M8 [
给大家一个提醒,调试电机的时候千万不能打断点,可能会造成功率器件损坏。
电机库把系统的所有中断都放在了stm32f30x_mc_it.c这个文件中了。
ADC中断.png " e$ {9 B/ I+ Q1 y* A$ H4 t5 p
ADC1或ADC2的中断处理函数,运行着一个高频的任务,这个任务是处理ADC采样得到的电流,观测器计算角度,PID控制电流等。ADC3和ADC4没有使用,所以中断函数里也没有执行代码。 定时器中断.png
定时器过零更新中断处理函数,主要用于更新pwm占空比。 刹车中断.png
刹车定时器中断处理函数,主要处理刹车动作发生时定时器的占空比控制和执行任务调度。 串口中断.png
串口中断处理函数,用于和上位机通信。
硬件错误处理中断.png
硬件错误中断处理函数,和上位机通讯,报告错误信息,方便查找问题。. }* \- ^9 x5 o8 ]0 @

: A1 E) W0 z6 c5 l% I; C! H) @3 I
通过以上分析大家应该对整个系统有一个大概轮廓的了解,需要系统做什么任务或者想修改系统的一些处理函数都能找到地方了。& r) R" M. n/ i" U2 V$ T, ~/ J0 z
本帖就讲到这里,如果大家有什么问题或者帖子描述有误,请大家不吝指出,欢迎留言讨论 。

0 v/ L2 l6 M6 S  G1 |0 L1 l) N3 d0 x5 w* p) g) v

评分

参与人数 1 ST金币 +5 收起 理由
求知者2017 + 5 赞一个!

查看全部评分

1 收藏 6 评论36 发布时间:2018-9-1 14:10

举报

36个回答
子曰好人 回答时间:2019-3-6 10:40:02
gatsby32 发表于 2019-3-6 10:17
! ?2 ?) m# i4 T* u( [  c我很方便 只是要麻烦老哥了。我不懂老哥说的仿真器是啥意思 是stlink utility吗  这个也识别不了芯片 keil ...

$ b* I" V# [; y你的硬件连接是怎样的?拍个图看看,是买的ST的电机控制套件还是自己做的?
子曰好人 回答时间:2019-4-18 13:10:29
gatsby32 发表于 2019-4-18 11:25
+ c1 S9 A6 c# {$ S5 e! K4 V& g哥 ,电机库里面的函数就是pid 坐标变换之类的函数踏实怎么调用的啊?是基于定时器自动调用的吗?我在主函 ...

5 k6 ]* t3 x: n/ |" d是在中断函数中调用的,你看它的高频任务和中频任务,里面有PID和FOC相关函数的调用
子曰好人 回答时间:2019-3-6 11:27:39
gatsby32 发表于 2019-3-6 11:21
3 b" l2 C' i% I+ G: J. H电机可以转  用电机分析仪可以转,就是下载不了程序

) @1 F# u- V$ J6 x* J1 D3 l那就更新一下STlink的固件,看你刚才的截图里面说了提示是stlink连接错误
wawjik2008 回答时间:2018-9-1 16:38:32
不错,学习了
dbwu8280 回答时间:2018-9-1 21:04:17
牛!) A1 w$ L( u# H7 p
学习了学习了!
ztx2168 回答时间:2018-9-28 20:04:53
谢谢,楼主能否再给我们讲一下电机的状态机里面的十几个状态都是什么意思?
子曰好人 回答时间:2018-10-1 08:41:53
ztx2168 发表于 2018-9-28 20:04
9 |' I6 r* x- M0 A& _7 f谢谢,楼主能否再给我们讲一下电机的状态机里面的十几个状态都是什么意思? ...

% T% s1 g, S: e% [9 @- E状态机那几个变量不都有注释吗,翻译一下就明白了
fkxy 回答时间:2018-10-12 11:31:41
牛,很牛。
fkxy 回答时间:2018-10-17 10:42:29
高,高,实在是高。
liujunfy527 回答时间:2018-10-28 09:46:28
谢谢分享
liangchengbao 回答时间:2019-3-3 15:32:43
谢谢您的分享!
gatsby32 回答时间:2019-3-5 22:46:33
老哥 为啥我KEIL下载时出现 no target connect 找了很久原因都找不到
子曰好人 回答时间:2019-3-6 09:04:00
gatsby32 发表于 2019-3-5 22:46* e/ D# `' I2 \6 y$ ~( Z" M
老哥 为啥我KEIL下载时出现 no target connect 找了很久原因都找不到
4 h4 Z0 K# A" z* l' y
有可能是仿真器没连接上,我没遇到过这个问题,你在论坛发帖问下吧
gatsby32 回答时间:2019-3-6 09:24:23
老哥 需不需要STLINKutility啊 是直接在剋了上下载对吗
gatsby32 回答时间:2019-3-6 09:25:32
keil上下载
子曰好人 回答时间:2019-3-6 09:58:01
gatsby32 发表于 2019-3-6 09:250 ~! s) e+ X6 x( \" [4 R/ c
keil上下载

4 M1 n. l( J: {9 l可以直接用keil下载,电脑连接好仿真器与开发板就可以了。如果方便你可以把你的工程贴上来我看一下工程配置是否有问题
gatsby32 回答时间:2019-3-6 10:17:00
我很方便 只是要麻烦老哥了。我不懂老哥说的仿真器是啥意思 是stlink utility吗  这个也识别不了芯片 keil编译也没有错 但是STLINK这里也识别不了芯片

stlinkutility也识别不了

stlinkutility也识别不了

编译没错

编译没错

识别不了芯片

识别不了芯片
123下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版