当电动机的任何相均未通电且我只是手动旋转电动机时,此方法有效。但是一旦定子线圈通电,编码器就不再正确计数:在低功率下运行时,计数是正确的,但是在高功率下运行时,无论我反向运行,计数都是单调的(仅增加或减少)
我几乎可以肯定,这是因为定子线圈使转子上的永磁体超载。因此,还有办法将霍尔传感器用作编码器吗?
很抱歉,如果这是一个明显的问题。如果我有更多的时间,我很想研究这个问题。
更新:
我已经用DSO Quad测量了波形,并看到了预期的120度分离信号(随着时间的推移,C相的测量变得越来越不准确,因为我只有2个探头,所以我先测量A和B相,然后测量A&C相,然后将它们合并。
当ESC速度为0.1时:
当ESC速度为0.3时:
以前,我使用硬件正交计数器(BeagleBone上的EQEP模块)。 = 0.3,无论我是正向还是反向,这都是向后计数!
然后我在LPC1114FN28 uController上实现了正交计数。结果在高速下仍然很糟糕(计数完全没有变化) )。逻辑是:
void HandleGPIOInterrupt()
{
const uint8_t allowableTransitions[4][2] = {1, 2, 3, 0, 0, 3, 2, 1};
static int prevState = -1;
int state = phaseA | (phaseB * 2)
if (prevState != -1)
{
if (allowableTransitions[prevState][0] == state)
{
++rotations;
}
else if (allowableTransitions[prevState][1] == state)
{
--rotations;
}
}
prevState = state;
}
然后,我想到了更改代码以不更新prevState直到发生预期状态(以处理故障)的想法:
int state = phaseA | (phaseB * 2)
if (prevState != -1)
{
if (allowableTransitions[prevState][0] == state)
{
++rotations;
prevState = state;
}
else if (allowableTransitions[prevState][1] == state)
{
--rotations;
prevState = state;
}
else
{
// assume transition was a glitch
}
}
else
prevState = state;
现在计数终于正确了甚至在高于0.3的速度时都可以双向作用。
但是是否真的有小故障导致了这一点?我看不到波形吗?
#1 楼
我认为您应该能够。在速度传感器的类似应用中,我使用了磁铁和磁簧开关,该传感器使用匝数来计算速度,就像编码器一样,并且运行良好。霍尔传感器的行为应类似。#2 楼
我前一段时间已经解决了这个问题。原来是电源问题。我使用的计算机电源(Antec HCG 850M)的欠压和过流保护已取消,所以它不会跳闸。还有一个我没有提到的巨大问题。电动机随机停止并每秒启动几次。
然后我看到我使用的电子速度控制器只有一个330uF滤波电容器。尽管它是低电阻的电解聚合物电容器,但触摸时还是很热。用类似的1000uF电容器替换后,问题就解决了。
评论
我从来没有听说过霍尔传感器不能在“高功率”下工作。否则将无法使用它们来对电动机进行换向。我从未在与霍尔传感器一起使用的任何电动机中看到过这种情况,并且已经使用了很多。您可能做错了事。