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.

[参考译文] CCS/TMS320F28069:InstaSPIN Motorware 更改电机参数

Guru**** 2524550 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/747443/ccs-tms320f28069-instaspin-motorware-change-motor-parameters

器件型号:TMS320F28069
主题中讨论的其他器件:MOTORWARE

工具/软件:Code Composer Studio

您好!

我正在使用 InstaSPIN Motorware、并使用其参数在 user.h 中定义了我的电机。

设置 gMotorVars.Flag_Run_Identify = true 后、我的电机正常运行。

现在、我们板上有一个 EEPROM、用于存储不同电机的不同电机参数。 我们从 lab02a 获取所有这些参数以及电机识别。 当我想更改电机(电机未运行)时,我从 EEPROM 中获取新参数,并将这些参数存储在 gMotorVars 和 gUserParams 中,然后我调用 CTRL_setParams()。

通过设置 gMotorVars.Flag_Run_Identify = true 来启动另一个电机现在不起作用、我不知道原因。 电机正在尝试启动、但未运行。

当我在 user.h 中更改电机参数时、它适用于其他电机。

要在运行时更改电机(电机未运行)、我必须怎么做?

当我更改电机参数时、以下代码正在运行:

   gMotorVars.Rs_Ohm = EEPROM_structure.MOTOR_params_arr[mot].Rs_Ohm;
   gMotorVars.RR_Ohm = EEPROM_structure.MOTOR_params_arr[mot].RR_Ohm;

   gMotorVars.LSD_H = EEPROM_structure.MOTOR_params_arr[mot].LS_q_d_H;
   gMotorVars.LSQ_H = EEPROM_structure.MOTOR_params_arr[mot].LS_q_d_H;

   gMotorVars.MagnCurr_A = EEPROM_structure.MOTOR_params_arr[mot].Magninging_Current_A;
   gMotorVars.SpeedRef_KRPM =_IQ (EEPROM_structure.MOTOR_params_arr[mot].speed_run_rpm / 1000.0);
   gMotorVars.MaxAccel_krpmps =_IQ (EEPROM_structure.MOTOR_params_arr[mot].speed_run_accel_rpmps / 1000.0);

   gMotorVars.KP_SPD =_IQ (EEPROM_structure.MOTOR_params_arr[mot].KP_SPD);
   gMotorVars.KI_SPD =_IQ (EEPROM_structure.MOTOR_params_arr[mot].KI_SPD);

   gMotorVars.KP_idq =_IQ (EEPROM_structure.MOTOR_params_arr[mot].KP_idq);
   gMotorVars.KI_idq =_IQ (EEPROM_structure.MOTOR_params_arr[mot].KI_idq);

   //从观察窗口设置 Kp 和 Ki 速度值
   CTRL_setKp (ctrlHandle、CTRL_Type_PID_SPD、gMotorVars.KP_SPD);
   CTRL_setKi (ctrlHandle、CTRL_Type_PID_SPD、gMotorVars.KI_SPD);

   //从观察窗口中设置 Id 和 Iq 的 Kp 和 ki 电流值
   CTRL_setKp (ctrlHandle、CTRL_Type_PID_ID、gMotorVars.KP_idq);
   CTRL_setKi (ctrlHandle、CTRL_Type_PID_ID、gMotorVars.KI_Idq);
   CTRL_setKp (ctrlHandle、CTRL_Type_PID_IQ、gMotorVars.KP_idq);
   CTRL_setKi (ctrlHandle、CTRL_Type_PID_IQ、gMotorVars.KI_Idq);

   gMotorVars.RsOnLineCurrent_A =(0.1 * EEPROM_structure.MOTOR_params_arr[mot].max_Current_A);

   gUserParams.maxCurrent = EEPROM_structure.motor_params_arr[mot].max_current_a;
   gUserParams.motor_numPolePairs = EEPROM_structure.motor_params_arr[mot].motor_num_pole_pairs;
   gUserParams.motor_ratedFlux = EEPROM_structure.motor_params_arr[mot].motor_rated 磁通_VpHz;
   gUserParams.motor_rr = gMotorVars.rr_Ohm;
   gUserParams.motor_Rs = gMotorVars.Rs_Ohm;
   gUserParams.motor_LS_d = gMotorVars.LSD_H;
   gUserParams.motor_LS_q = gMotorVars.LSQ_H;
   gUserParams.IdRated = EEPROM_structure.MOTOR_params_arr[mot].磁 化电流_A;
   gUserParams.fluxEstFreq_Hz = EEPROM_structure.motor_params_arr[mot].flux_est_freq_Hz;
   gUserParams.maxNegativeIdCurrent_A =(-0.5 * gUserParams.maxCurrent);

   //设置默认控制器参数
   CTRL_setParams (ctrlHandle、&gUserParams);

此致、

Dani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    调用 CTRL_setParams()可能不是一个好主意,因为它还会重置 Ctrl freq、计数器和一组标志。 您很可能只需要专门调用 CTRL_setMotorParams()。

    我们不主张动态更改值、也没有执行此函数的示例。 请尝试仅调用 CTRL_setMotorParams()并告知我们结果

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

    您好!

    仅调用函数 CTRL_setMotorParams()不起作用。 是否最好为 MotorParameters 创建一些全局变量并重新启动器件以加载新参数?

    Dani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否详细说明"不起作用?" 如果可以完全重新启动估算器和控制器、这肯定是重新加载电机参数的一种方法

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

    它不工作意味着电机不会以新参数开始。

    仅更改 motorparameters 不起作用、因为某些电机参数用于代码中的其他定义。

    我现在更改了器件的启动。 首先、我初始化 HAL 驱动程序、读取 EEPROM 值、然后使用该 EEPROM 值来初始化 gMotorVars 和 gUserParams。 然后、我在后面完成 Motorware 的完全启动。 现在可以使用。 但我必须更改 USER_setParams()以使用变量,而不是 user.h 中的定义以及函数 USER_checkForErrors()。

    更改电机后、我会重新启动器件以加载新参数。

    此致、

    Dani