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.

[参考译文] TMS320F28026F:使用不同的参数控制多个电机

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1054405/tms320f28026f-controlling-multiple-motors-with-different-parameters

器件型号:TMS320F28026F

我在论坛上看到了可以控制多个电机的地方、但我想知道电机之间的差异是否存在限制。  我想控制2个不同的 BLDC 电机、但一次一个。  我会使用电路板上的 DIP 开关设置来确定连接的电路板。  电机之间的差异将出现在主要 ID 参数(例如 Rs_Ohms、最大电压/电流、电感等)中、但它们都是2极对 PMSM。  与将这些参数编译到代码中相比、我如何在运行时更改这些参数?

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

    使用 InstaSPIN、它支持在开始时进行参数识别和测量、因此您不必输入任何值。 希望这对您有所帮助。

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

    每个电机将装配在水泵中、并在启动时以很低的负载进行降压。  我认为识别过程不会在负载下提供可靠的结果。  至少这是我迄今为止所经历的。

    从稍微的挖掘中,我需要在 main()的开头读取 dip 开关,以确定在运行参数初始化例程之前连接了哪个电机。  我的问题是、我是创建两个初始化例程、每个电机一个、还是向其发送一个参数。  此外、在 user.h 中一次只定义了一个电机定义、因此我至少需要第二个电机定义。  也许我可以创建一组电机参数、然后将要初始化的电机编号发送给 setParams 例程。

    如果有任何建议或想法,将不胜感激。

    谢谢

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

    重置 gUserParams 结构变量中的电机参数、并将 CTRL_setParams (handle、&gUserParams)调用到使用电机的电机参数。

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

    重置 gUserParams 中与 user_setParams 调用类似的电机参数。  这会将 user.h 中的电机参数常量移动到 gUserParams 中。  我想我需要使用一组不同的常数为第二个电机设置第二个 USER_setParams 例程。  然后在该调用后调用 CTR_setParams。

    USER_checkForErrors 函数会怎么样?  它看起来很难使用电机参数常量进行编码。  我想、对于第二个电机、这也需要一个重复的电机。

    我假设为了使其正常工作、我将需要浏览其余代码、并确保对电机参数的引用不会直接使用 user.h 参数常量、而是引用 gUserParams 变量。  例如、在 Proj_lab11a.c 中、设置 PID 循环和轨迹时、代码直接引用 user.h 电机参数常量。

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

    您 无需调用 user_setParams(),只需在 gUserParams 对象中将电机参数设置为相关变量,如下所示。

     gUserParams.motor_type = USER_MOTOR_TYPE;
     gUserParams.motor_numPolePairs = USER_MOTOR_NUM_POLE_PAIRS;
     gUserParams.motor_ratedFlux = USER_MOTOR_Rated 磁通;
     gUserParams.motor_rr = USER_MOTOR_rr;
     gUserParams.motor_Rs = USER_MOTOR_Rs;
     gUserParams.motor_LS_d = USER_MOTOR_LS_d;
     gUserParams.motor_LS_q = USER_MOTOR_LS_q;

    USER_CHECKForErrors 仅用于调试和检查硬件参数。 如果您确保其他参数正确、则只需为电机调用一次。

    如果要使用 lab11a、应将电机参数设置为 gUserParams 对象、然后调用

     CTRL_setParams (ctrlHandle、&gUserParams);

       EST_setEstParams (estHandle、&gUserParams);
       EST_setupEstIdleState (estHandle);

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

    这种担忧会怎样呢

    "我假设为了使其正常工作、我需要仔细检查代码的其余部分、并确保对电机参数的引用不会直接使用 user.h 参数常量、而是引用 gUserParams 变量。  例如、在 Proj_lab11a.c 中、设置 PID 循环和轨迹时、代码直接引用 user.h 电机参数常量。"

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

    最好重新调用与电机参数相关的所有初始函数以更新控制参数。