
🌈个人主页:羽晨同学
💫个人格言:"成为自己未来的主人~"

三相电压矢量

在之前,我们的推导其实都是根据电流矢量,也就是左边这幅图进行的,那么,如果把其中的每相的电流矢量都乘上其相电阻R(相电阻就是每相线圈所带的电阻),那会发生什么变化呢,没错,根据欧姆定律,它就会变成电压矢量,如右边这幅图所示。
而无刷电机的电流矢量,和电压矢量其实没有任何的区别,只是他们的幅值不同,想象一下,最上面这幅黑色的图的三个相位电流波形曲线,如果都乘上一下相电阻,那么他们会变成电压波形曲线,它和电流波形曲线的不同只是因为乘上电阻后导致的幅值不同。
FOC算法过程总结

因此,实际上,在电流矢量情况下的克拉克变换和帕克变换,和电压矢量下的克拉克变换和帕克变换,推导过程完全一致的,只是符号不同,你可以看到,上图左边是基于电流矢量推导而来的FOC算法流程,这个就是上节几节课的内容,相信大家已经熟悉,而上图右边就是基于电压矢量推导而来的FOC算法流程,可以看到,除了符号不同以外,其他的一切都相同。
那么为什么要在今天,在讲述FOC代码的时候给大家介绍这种电压矢量下的FOC算法流程,这是因为,我们的代码实际上需要用到的是电压形式的公式,因为电流值控制对于硬件电路来说,相比于电压来说要难控制的多,常见的无刷电机的芯片和电路也只能接受电压控制信号,而不能直接的控制电流,电流必须在电压的基础上通过各相的电流传感器作闭环才能进一步的进行控制。
开始撰写开环速度FOC代码

采用DengFOC作为平台来撰写我们的代码,DengFOC是基于ESP32 Arduino平台开发的,因此我们的代码也是基于Arduino ESP32平台进行撰写。
在开始写代码前,我们先来确定一下我们不同功能块的函数名称,如上图所示,帕克逆变换和克拉克变换,将它直接写在一个代码函数里面,这个代码函数命名为setPhaseVoltage.
setPhaseVoltage会计算出电机控制所需要的电压值,并通过setPWM函数传递给电机驱动器硬件,接着,硬件就会产生对应的三相电压波形进行电机的控制。
除了setPhaseVoltage函数之外,我们还需要一个velocityOpenloop函数,这个函数主要是根据用户输入的目标电机转速,target_velocity计算出在这个速度下面的电压值和角速度值,进而传递给setPhaseVoltage函数进行下一步的计算。
在明确各个函数的用途之后,我们就开始一个个来撰写我们的核心函数。