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:调试期间的 HAL 传感器序列自动识别

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1458755/tms320f280025c-hal-sensor-sequence-automatic-identification-during-commissioning

工具与软件:

您好!

作为我的电动自行车 BLDC 电机控制器 生产的一部分,在推荐一种类型的电机,希望控制器识别霍尔传感器(A , B 或 C )序列...

即、一旦按任何顺序 连接电机相线和霍尔反馈线、一旦我运行序列识别例程、它就应该识别哪个输入是霍尔 A、哪个是霍尔 B、哪个是霍尔 C、即使它们没有按正确的顺序连接也是如此。

请建议如何 在通用电机控制器项目中执行此操作。

提前感谢。

此致、

Anil

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

    Anil:

    我想说这里有2个相对简单的选项、这两个选项都不会内置于通用电机控制实验中、前提是我没记错。

    1. 如果您还使用其他估算器、如 InstaSPIN-FOC FAST、则可以比较霍尔传感器的相电流。  假设传感器和估算器以近似等效的相位延迟运行、则在每个霍尔输入的导通时间中最大百分比的相电流无论哪个大于0、都应与该输入对应。
      1. 例如、如果您有一个霍尔输入(HALL_x)、则当电机使用 FAST 估算器运行时、请查看输入的状态。 假设在 HALL_x = 1的40%时间内 I_A >0、在50%的时间内 I_B >0、在90%的时间内 I_C >0。 这样我们就知道 HALL_x 可能是 HALL_C
      2. 请注意、这些数字与实际实验并不对应、仅用作示例用途。

    2. 如果您不想使用其他估算器、则另一个简单的选择是在开环中运行电机。 当电机以开环方式运行时、跟踪开环电机位置。 有6个可能的 HALL_x、HALL_y 和 HALL_z 阶  对于每种配置、确定霍尔算法是否与电机位置正确匹配。 因此、无论哪个阶数导致的估算电机位置与开环生成的电机位置最接近、都应该是正确的。
      1. 本质上、这将让您测试是否在一段时间内(例如) HALL_{x、y、z}= HALL{A、B、C}、至少几秒钟应该就足够了。 在此期间、确定 angleHALL_rad 和 angleGen_rad 之间的平均差值。 记录此值、然后重复相同的测试、但这次是 HALL_{x、y、z}=霍尔{A、C、B}。 记录了所有六种可能的配置后、以最小平均差值为准的配置应该正确。

    我希望这是有道理的!


    此致、
    Jason Osborn

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

    感谢 Jason 的建议。

    我可以使用一种非常简单的方法、从代码本身中找到连接的霍尔序列和相位序列。

    使用了 具有更长 对准 时间的 MOTOR_ALIGN 状态。

    对于  obj->angleFOC_rad = 0.0;查看了霍尔状态。 然后更改  obj->angleFOC_rad = 1.0、查看霍尔状态。

    从上述2个霍尔状态值中、可以解码并 找到霍尔 U 连接到哪个引脚、 霍尔 V 连接到哪个引脚、  霍尔 W 连接到哪个引脚。

    接下来研究 HALL_CAL、然后研究电机参数 Rs、来自代码本身的 LS 识别。  这是 在现场调试过程中需要的。 我有一个 GPIO (校 准)用于这些校准。 如果该 GPIO 在上电期间为高电平、固件将逐个进入

    1.霍尔线/相线顺序识别

    2. HALL_CAL

    3.电动机 Rs、Ls 计算

    4.上述3个参数随后存储到 片上闪存/EEPROM 中。 下一次在上电期间、从 EEPROM 获取值并使用。

    正在处理 HALL_CAL NEXT (上面的 SN 2)。  我看到的一个问题 是 HALL_CAL 是构建选项。 我需要 从正常运行的程序调用 HALL_CAL。 任何使 HALL_CAL 成为 程序的标准部分 并在 CALIBRATION GPIO 为高电平时调用它的建议。

     在校准 GPIO 较高时、调用"HALL_calibrateIndexAngle (obj->hallHandle、obj->angleEST_rad);"是否足够。 然后   按照  motor1_drive.c 中所述、将"''复制 HALL_M1.thetaCalBuf[]到 hallAngleBuf[]''中。

    由于在 HALL_CAL 期间只需要在快速模式下运行、因此 我如何将快速+霍尔模式更 改为仅快速模式、然后在 HALL_CAL 之后 从代码本身返回到 FAST+HAL?  

    谢谢、此致、

    Anil

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

    Anil:

    在 FOC 环路中、电机角度信息的控制由"estimatorMode"处理、您可以在提供的屏幕截图中看到该操作。 当估算器模式= Estimator_MODE_FAST 时、则 FOC 环路使用 FAST 估算器提供的电机角度。 当估算器模式= Estimator_MODE_HALL 时、FOC 环路会使用霍尔提供的电机角度。 通过处理此变量、您可以切换具有控制权的估算器方法。

    如果您希望 HALL_CALL 是标准运行循环的一部分、那么我建议您随时出现此代码  在函数内 、将其分别替换为"if (HALL_CAL_GPIO_STATE == 1){"和"}"行的内容:

    • #ifdef HALL_CAL
    • #endif // HALL_CAL (或类似文件)

    任何此代码出现  函数之外的字段 、只需注释掉这些行。

    请注意、默认情况下、代码是在假设霍尔校准仅执行一次的情况下编写的、然后会在删除预定义符号的情况下重新编译代码。 虽然我看不到任何地方会严重影响性能、但请注意、如果您这样做、代码的大小必然会增加、而且我可能漏掉了某些内容。 我强烈建议您对其进行全面测试。

    此致。
    Jason Osborn

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

    这已经完成了、Jason。 感谢您的帮助。

    接下来、我将尝试将这些校准参数写入 EEPROM (在 微控制器的闪存中) 、以便在下次上电时可以从闪存中获取值并使用。

    您是否有任何  我可以参考的示例 EEPROM (内部闪存)写入和读取程序?

    此致、

    Anil

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

    有。 请参阅 Driverlib 示例的"flash"文件夹。

    请注意、如果您对闪存读取/写入操作有其他后续问题、我会要求您创建新主题、以便我们能够确保分配正确的专家。

    此致、
    Jason Osborn

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

    我已打开一个新主题、用于与闪存写入相关的讨论。

    谢谢 Jason。

    此致、

    Anil