本帖最后由 子曰好人 于 2018-9-1 22:42 编辑
拿到套件快一周了,线上培训也去听了,任务也做完了,只是一直没有发帖,想通过我的这些帖子让大家更容入门ST的电机库。前两篇帖子做了一些对套件出厂固件和硬件配置做了一个大概的分析,希望对刚接触STFOC SDK的朋友有一定的帮助。今天来分析一下代码结构,带着各位逐步深入理解这份不错的电机库。
如何生成一份可用的工程我就不做过多介绍了,可以参看论坛其他帖子。 文件结构 这是一份使用workbench生成的代码
工具生成的代码是对套件的硬件和FOC 5.0相关代码的初始化,当我们拿到这份代码时可以通过简单的几行代码让电机快速运行起来。但是作为一名攻城狮,我们更希望能够足够了解这一份代码,代码每一部分做了什么事情,代码的运行流程是怎样的吗,这都需要我们去阅读代码。
启动文件:我们并不陌生,stm32启动运行到main函数前要做的事情都由启动文件去处理。用户文件:包含主函数,电机控制用户层的api函数,任务函数、电机参数与设置以及用户接口和UI任务。做的都是应用层的事情。HAL库驱动文件:用过hal库写代码的各位对这个文件下下的文件应该都不陌生,hal库隐藏对寄存器的操作,让我们能专注于上层代码开发。系统文件:系统初始化和时钟方面的设置。电机库文件:所有和电机相关的处理都在这里,包括基本的坐标变换、电流电压采样、过压过流保护、sensorless方案的位置速度反馈、PID调节等FOC控制系统必要的代码。额外的功能可以在workbench中选择,比如MTPA(最大转矩每安培)、Flux weakening(弱磁)、Feed Forward(前馈控制)。
状态机 初始化结束之后,整个系统就运行起来了,FOC控制处于待命状态,如果这时候设置速度和启动命令,那么电机就可以启动起来。定时器和ADC采样已经开始运行了。
进入调试界面,可以查看变了可以看到现在电机所处的状态,0x00,通过查看枚举变量可以看到 在初始化完毕之后电机进入的状态是IDLE状态。状态的改变是在state_machine.c这个文件中的STM_NextStat的函数中。
理解这个状态机函数就能知道整个系统的运行流程图了。需要改变的地方也能得心应手的处理。
中断
给大家一个提醒,调试电机的时候千万不能打断点,可能会造成功率器件损坏。 电机库把系统的所有中断都放在了stm32f30x_mc_it.c这个文件中了。 ADC1或ADC2的中断处理函数,运行着一个高频的任务,这个任务是处理ADC采样得到的电流,观测器计算角度,PID控制电流等。ADC3和ADC4没有使用,所以中断函数里也没有执行代码。
定时器过零更新中断处理函数,主要用于更新pwm占空比。
刹车定时器中断处理函数,主要处理刹车动作发生时定时器的占空比控制和执行任务调度。
串口中断处理函数,用于和上位机通信。 硬件错误中断处理函数,和上位机通讯,报告错误信息,方便查找问题。
通过以上分析大家应该对整个系统有一个大概轮廓的了解,需要系统做什么任务或者想修改系统的一些处理函数都能找到地方了。
本帖就讲到这里,如果大家有什么问题或者帖子描述有误,请大家不吝指出,欢迎留言讨论 。
|