This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280025C:F280025C + DRV8329A EVM |通用电机控制|霍尔传感器反馈|电流波形不是正弦放大器;电机未正常旋转

Guru**** 2445920 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1487729/tms320f280025c-f280025c-drv8329a-evm-universal-motor-control-hall-sensor-feedback-current-waveform-not-sine-motor-not-rotating-properly

器件型号:TMS320F280025C

工具与软件:

我使用的是 F280025C 可以通过实现 DRV8329A EVM 逆变器板、并与配合使用 通用电机控制实验室(DMC 4级) 反馈的传递函数。

我需要配置一个未在通用电机控制工程中预配置的新电机。 我应该如何正确添加电机参数并调整基于霍尔传感器的 FOC 的控制算法?

此外、我还面临以下问题:

  1. 电流波形不是正弦波 ;相反,它类似于 A 六步控制波形 . 根据 用户指南的链接 中的电流应为正弦波 FOC 模式 . 如何解决此问题?
  2. 电机无法正常旋转 使用计算电角HAL_CAL。 这可能是什么原因、如何解决?

如需获取有关正确配置基于霍尔传感器的 FOC 和调试这些问题的指导、欢迎获取该指南。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉,我的反应出现了短暂的延迟,我意外地离开了办公室。

    首先、调整控制算法。 请注意、在 UMCL 中已使用预定义符号"MOTOR1_HALL"提供霍尔算法、因此无需进行调整。

    若要添加新电机、请参阅"user_mtr1.h"中的示例。 我相信、在当前版本中、这些示例电机的起点是~Ω 系列1100。 完成此操作后、请确保同时将电机添加到 user_common.h 文件中。 如有任何问题、请告诉我。

    对于您的问题:

    1. 如果您使用霍尔传感器、则工程中没有内置方法来平滑估计角度。 UMCL 的图3-52显示了这种情况的一个示例:
      1. 如果您希望这样更平滑、则需要此时为角度添加定制转换实施方案。
    2. 确保有效估算器在霍尔校准期间快速运行。 如果您已经完成了该操作、请告诉我。

    此致、
    Jason Osborn

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jason、您好!

    感谢您的指导。 我已经实施了这两种方法 HALL_FAST HALL_CAL 、电动机现在正在旋转、达到预期的最大速度。 但是、存储从获得的值后 Theta_cal_buff 内容 THETA_ANGLE_BUCK 和禁用 HALL_CAL 、电机不旋转。

    我已按照论坛帖子中引用的内容进行了更改:

    e2e.ti.com/.../tms320f280025c-need-sinusoidal-current-with-hall-sensor-feedback-on-universal-motor-control-project-getting-step-type-current-with-audible-noise-as-of-now-on-my-ebike-hub-motor

    尽管发生了这些变化、相电流波形仍然类似于六步控制、而不是正弦电流。 这可能是由于中的角度值的插值或滤波问题所致 THETA_ANGLE_BUCK ? 或者是否需要额外的调整来平滑估算角度?

    如果有任何见解、将不胜感激。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sakshi

    问题是我在该主题的上一个回复中提到的问题。 默认情况下、不需要对角度进行插值、正如您在我发布的 DAC 输出图像中所看到的那样。 要使电流变得平滑,您需要在 HALL_run ()函数之后添加一个插值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我能够实现 正弦相电流波形 演示 递增 obj->thetaHall_rad内核HALL_run()。 此插值会使霍尔转换之间的转子角度更新变得平滑、从而导致 更平滑的电流波形 .

    目前、我已经实施了以下措施:

    • 如果 霍尔指数变化 thetaHall_rad根据进行更新thetaBuff[]
    • 如果 霍尔指数保持不变 thetaHall_rad使用递增obj->phaseincreament
    • 问题:

      我需要有关如何操作的指导 phaseincreament根据速度动态调整 以便在不同的工作点保持精确的内插。

    • 下面是我的 HALL_run ();函数:  
    • 静态内联 void HALL_run (HALL_Handle handle、float32_t speedRef)

      HALL_Obj * obj =(HALL_Obj *)句柄;

      obj->hallIndex = HALL_getInputState (handle);
      obj->timeCountPWM++;

      if (obj->hallIndex != obj->hallIndexPrev)

      如果(speedRef > 0.0f)

      obj->thetaHall_rad = obj->thetaBuff[obj->hallIndex]+ obj->thetaDelta_rad;
      obj->hallDirection = 0;
      }
      设计

      obj->thetaHall_rad = obj->thetaBuff[obj->hallIndex]- obj->thetaDelta_rad;
      obj->hallDirection = 1;
      }

      obj->hallIndexPrev = obj->hallIndex;

      float32_t speedCAP_Hz = 0.0f;
      if (obj->timeStampCAP!= 0)

      speedCAP_Hz = obj->capScalal/((float32_t) obj->timeStampCAP);
      }
      设计

      speedCAP_Hz = 0.0f;
      }

      float32_t speedPWM_Hz = obj->pwmScaler/
      (((float32_t)(obj->timeCountPWM + obj->TimeCount[1]+ obj->TimeCount[0]));

      if (obj->hallDirection == 0)

      obj->speedCAP_Hz = speedCAP_Hz;
      obj->speedPWM_Hz = speedPWM_Hz;
      }
      设计

      obj->speedCAP_Hz =-speedCAP_Hz;
      obj->speedPWM_Hz =-speedPWM_Hz;
      }

      if (speedPWM_Hz > obj->CLA Switch_Hz)

      obj->4.12.V= Hall_Hz obj->speedCAP_Hz;
      }
      设计

      obj->4.12.V= Hall_Hz obj->speedPWM_Hz;
      }

      obj->TimeCount[1]= obj->TimeCount[0];
      obj->TimeCount[0]= obj->timeCountPWM;
      obj->timeCountPWM = 0;
      }
      否则{
      obj->thetaHall_rad += obj->phaseincumament;
      }

      if (obj->timeCountPWM > obj->timeCountMax)

      obj->speedCAP_Hz = 0.0f;
      obj->speedPWM_Hz = 0.0f;
      obj->4.11= Hall_Hz 0.0f;
      obj->timeCountPWM = 0;
      }

      if (obj->thetaHall_rad >= MATH_PI)

      obj->thetaHall_rad = obj->thetaHall_rad - MATH_TWO_PI;
      }
      else if (obj->thetaHall_rad <=-MATH_PI)

      obj->thetaHall_rad = obj->thetaHall_rad + MATH_TWO_PI;
      }

      返回;
      }

    • 寻求以下方面的指导:

      1. 如何phaseincreament根据电机转速动态计算?
      2. 要实现准确的内插、应考虑哪些公式或因素?
      3. 是否推荐使用任何调优方法来phaseincreament在不同速度下进行优化?

      如果您有关于针对不同电机工作点微调此值的最佳方法的任何见解、我将不胜感激。

      提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我个人的建议是:

    1. 确定 ISR 周期、由1/(ISR Freq)给出、这是 user_mtr1.h 中定义的参数
    2. 根据当前电机速度和 ISR 周期、您可以确定一个 ISR 周期内电机的近似增量(或相位增量)

    假设内插发生在几乎相同的逐周期时间、则这应该足够了。 这是根据我对情况的理解提供的建议、请确保对您的实施进行充分测试。

    此致、
    Jason Osborn