王昱顺 发表于 2024-5-23 19:02:32

STC-FOC Lite原理剖析-无电流传感器实现堵转保护

最近闲下来了,正好对STC-FOC Lite的一些独特功能做一些原理解析


堵转保护,这个功能其实不仅仅是对FOC,对所有的电机来说都是一个必不可少的功能。
而我的这个堵转保护方法,不仅适用于FOC电机,只要满足电机带有位置传感器,直流有刷电机也可以使用。
首先从原理讲起:
堵转保护,顾名思义就是在电机堵转状态的时候进行保护,最主要的就是如何正确的识别堵转状态。识别到了堵转状态以后,则可以进行保护。
这里的保护分为两种,一种是直接断电保护,但是这样往往会直接失去力矩,不能自动的从堵转状态退出。
所以我更建议使用第二种保护方式,也就是降低电压进行保护。因为无论是无刷电机还是有刷电机,堵转的时候都可以近似于电压直接接在绕组线圈上。
此时的物理模型就是电阻发热模型,所以只要将电压降低到合适的值,便可以保持一定力矩的同时保护电机绕组不被过大的电流烧毁。


说完了保护,接下来说最重要的堵转识别。
这里就不得不提及一下堵转识别中最容易出问题的点了——“电机启动”
电机启动的时候,无论是有刷电机还是无刷电机,电流都会拥有一个很大的脉冲阶跃值,这个地方与堵转的时候非常类似。
那么我们要如何区分呢?
我的方案中,使用的是延迟判别方式,因为堵转情况下,电流值会一直上升,而启动瞬间,电流只会短暂的超过额定值一会。
允许电机中存在短时脉冲大电流,即可成功解决起步和堵转保护冲突的问题。

当然,仅仅是上面的逻辑,堵转保护工作的并不会很顺利,我们还需要一些识别和退出堵转状态的逻辑。
贴一下我的实现代码:
if (labs(moto.set_postion - moto.postion) < (400))
        I_Error_Cnt = 0;
if (abs(_read_dangle()) < I_Error_Speed)
{
        if (I_Error_Cnt <= I_Error_Dat)
                I_Error_Cnt++;
}
else
{
        I_Error_Cnt = 0;
}
这里我的堵转进入逻辑是:如果位置偏差大于400,且速度小于某个数(低速状态),则电流异常计数(I_Error_Cnt)自加,自加到I_Error_Dat后停止
程序内,判断电流异常计数到达设定最大值后,进入堵转保护。
堵转退出逻辑是:如果速度高于某个数(高速状态),或者电机的设定位置和实际位置偏差小于400(可以判定为没有阻力),则清零电流异常计数,退出堵转模式
if (I_Error_Cnt > I_Error_Dat)
{
        if (moto.set_uq > 3.2)
                moto.set_uq = 1.2;
        if (moto.set_uq < -3.2)
                moto.set_uq = -1.2;
}
而进入堵转以后,对PID部分的输出,采用双阈值的方式进行保护,即检测到PID输出值超过某个大数后,才切换输出保护为某个小数。
因为堵转的时候PID始终不能调节成功,所以输出会一直为最大值,这时候堵转保护便可以一直生效了。
以上就是我对电机堵转保护的一些理解,希望对大家有所帮助。




lzzasd 发表于 2024-6-26 09:12:54

感谢版主

llyymm 发表于 2024-7-7 12:04:44

{:4_250:}
页: [1]
查看完整版本: STC-FOC Lite原理剖析-无电流传感器实现堵转保护