无刷直流电机的无传感器控制一般包含方波控制和正弦波控制。无论是哪一种控制方式,由于没有传感器信号的接入,一旦遇到外界阻力或者巨大的负载突变,都可能会使得系统进入到堵转状态。在这种堵转状态下,电机只是原地抖动并消耗电流,而系统会处于异常状态。长时间保持这样的状态,无疑是有害的。
众所周知,对于有传感器的无刷直流电机系统,堵转检测就变得很简单了。只需要检测传感器信号是否在正常刷新就可以了,而对于无传感器系统,可靠的堵转检测就变得没那么容易了。本文会就这个议题进行详尽的解析,希望可以起到抛砖引玉的作用,对大家无传感器的无刷直流电机控制项目起到实际的帮助作用。
目前对于无刷直流电机的无传感器FOC控制来讲,其堵转检测一般有两种方法,速度波动检测法和反电动势校验法。
速度波动检测法为什么不行?
速度波动检测法的基本思路就是在快速环路(电流环)内记录观测器输出的速度值,然后在慢速环路(速度环)内计算速度的平均值以及速度的波动。如果速度的波动超过设定的阈值就可以判断为发生了堵转事件。是不是感觉这种方法似曾相识呢。速度波动法和前面介绍的无传感器BLDC的方波控制堵转检测实质上是一个思路,那就是判断速度反馈是否合理。由于速度波动检测法本身比较简单,另外对于一些反电动势观测器来讲,在某些特定场景下,这种方法可能失效,特别是负载突变的时候,反电动观测器还会继续工作,电机相电流波形也很好,速度输出也会很稳定,但实际上电机并没有运行而是在原地抖动。基于这个原因,本文并不推荐速度波动检测法来检测堵转事件,也就不再花篇幅来深入下去了。另一方面,反电动势校验法则可靠很多,会是本文的重点。
反电动势校验法
𝐸𝛿:当前实际的反电动势电压𝐸𝑞 𝑊:角速度 𝐾𝑒:反电动势斜率 𝐾𝑜𝑓𝑓𝑠𝑒𝑡:反电动势固定偏差 ε:允许偏差范围百分比 原理当观测器正常工作时,𝐸𝛿的输出是与转速成比例的,转速稳定的情况下,𝐸𝛿也是平稳的。有两种途径来获得q轴的反电动势: 1. 观测器输出得到。 2. 从转速和反电动势系数得到。 如果两个途径得到的反电动势Eq相差比较大,超出了阈值,就可以判定为堵转事件。 过程由反电动势观测器得出当前的反电动势电压𝐸𝑞绝对值,通过公式 𝐸𝑞=𝐾𝑒×𝑊+𝐾𝑜𝑓𝑓𝑠𝑒𝑡 计算当前转速𝑊下的正常的反电动势电压,设置一个比较范围阈值ε(反电动势电压是有点波动的),𝐸𝑞×(1−𝜀)<𝐸𝛿<𝐸𝑞×(1+𝜀) 则代表反电动势没堵转,出了阈值范围一定时间即视为堵转情况。 | 反电动势校验法原理框图
| ||||||||||||||||||||
求Ke和Koffset想用转速求得反电动势电压需要确定线性方程 𝐸𝑞=𝐾𝑒×𝑊+𝐾𝑜𝑓𝑓𝑠𝑒𝑡 中的𝐾𝑒和𝐾𝑜𝑓𝑓𝑠𝑒𝑡。下面是确定参数的步骤。 1. 将电机转动起来,记录下几个转速下的反电动势电压的绝对值。下面是一个白色鼓风机的数据表。
2. NXP代码中用的是Q值数,将上面的数据表转化为Q值数的数据表。上面转速和𝐸𝑞均为𝑄15格式,转速定标最大转速10000RPM,𝐸𝑞定标最大电压25V。
3. 因为转速低的时候速度波动大,容易堵转,所以取低转速数据𝑊,𝐸𝑞=0.05,0.048、0.1,0.1,代入方程𝐸𝑞=𝐾𝑒×𝑊+𝐾𝑜𝑓𝑓𝑠𝑒𝑡,求得𝐾𝑒=1.04、𝐾𝑜𝑓𝑓𝑠𝑒𝑡=−0.004 4. 代入代码中即可。 |
| ||||||||||||||||||||
将参数填入代码1. 计算𝐸𝛿、𝐸𝑞×1−𝜀、𝐸𝑞×1+𝜀。 2. RunCount和StallDetectCount上电就进行计数,userdefCount为用户定义的值,当超过该值时才进行堵转检测,可以排除刚上电时转速不稳定导致的错误判断。符合堵转情况StallErrorCount会加1。 3.当StallDetectCount加到65536会重新归零,代码中StallDetectCount从10到65536时StallErrorCount会一直被清零,只有StallDetectCount从0到1的时候堵转检测才会有效,才会产生堵转错误。(这里会导致堵转检测没有那么灵敏(其实也不需要那么灵敏,进入一段观察期),也就是说当你在计数10-65536期间进行堵转了,需要等到计数0-10时才会报堵转错误)。 | |||||||||||||||||||||
效果显示 |
|