我已将机械臂中的电机升级为有感的无刷RC汽车电机。希望通过将2个霍尔传感器分接并将这2位视为正交信号来重用霍尔传感器,以兼作旋转编码器(因为这4种状态中的2种会比其他2种更长,因此是粗略的正交)。 />
当电动机的任何相均未通电且我只是手动旋转电动机时,此方法有效。但是一旦定子线圈通电,编码器就不再正确计数:在低功率下运行时,计数是正确的,但是在高功率下运行时,无论我反向运行,计数都是单调的(仅增加或减少)

我几乎可以肯定,这是因为定子线圈使转子上的永磁体超载。因此,还有办法将霍尔传感器用作编码器吗?

很抱歉,如果这是一个明显的问题。如果我有更多的时间,我很想研究这个问题。

更新:
我已经用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电容器替换后,问题就解决了。

#3 楼

是的,我是一名技术人员,负责无人机的稳定相机万向节,我们在相机万向节上使用霍尔效应传感器作为编码器。您必须将霍尔效应传感器IC朝向电机后部的电机极,安装时尽可能靠近而不接触。这将检测电动机轴旋转时的磁通量。这对于直流无刷电机非常有效,我不能保证它对任何其他类型的电机也能正常工作。