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.

[参考译文] MCSDK 同一电机不加速 SDK40

Guru**** 2574865 points
Other Parts Discussed in Thread: DRV8323

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1242003/mcsdk-same-motor-not-accelerate-sdk40-does-same-motor

器件型号:TMS320F280049C
主题中讨论的其他器件:DRV8323

大家好!

编译: CCS12.3编译器22.6.0.LTS

我的大电机运行达到用户设置的轨迹速度 SDK 4.0 pu:0.5、20Khz、无论启动、扭矩、增量电流和加速启动速度如何、都仅达到1Hz UMCSDK 在下面的文本文件中设置。 已尝试下面每种可能的组合 UMCSDK user_mtr1.h 设置、并发现奇怪的是、两个 Delta 电流的 CCS show 源在构建中没有到任何函数或用户参数的链接。 我希望这对调试较新的 MCSDK 代码有所帮助。 小型电机 Nidec 25H +24V 负载0.35A 具有极低的电流、但在较高速度下具有很大的扭矩>8krpm UMCSDK 不会出现问题。

怪异的 USER_MOTOR1_FORCE_DELTA_ A、 USER_MOTOR1_ALIGN_DELTA_A 没有关联的函数或变量在 user_mtr1.h 中定义、是指向 FAST_FULL_lib.lib 的链接。 没有编译器警告 ABI 或 COF 问题、但这似乎是 ABI 构建工程设置的 COF 库构建?

为什么两个电机在 SDK4.0中都可以正常工作、但在 MCSDK 中无法工作? 当电机电流小于1A 时、 小型电机启动并运行以参考目标轨迹速度、但大型电机保持强制角开环速度1Hz。 请建议一些 user_mtr1.h 设置,以帮助大型电机的 kgm^2转子质量,许多 EV 级范围大于63磅惯性。 还将 UMCSDK 与若干 M1.KP_SPD 值绑定、例如148.xxx、48.xxx 至0.48xxxx、但仍未更改以加速到参考轨迹速度。

MCSDK 大电机 user_mtr1.h      SDK4.0大电机 user.h 设置

   

设置 SDK4.0与 UMCSDK 类似但不工作相同的电机、更高的电流相同问题不会加速以参考轨迹速度。

#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (18)

#define USER_MOTOR_SPEED_REF_HZ            (265) // Set Trajectory Speed

#define USER_MOTOR1_Rr_Ohm                 (NULL)//ACIM only
//Cust-INV: DCINV 0.16828759, DRV8320RS 0.155892089
#define USER_MOTOR1_Rs_Ohm                 (0.16828759)
//Cust-INV: 0.000986817526, DRV8320RS 0.000890934956
#define USER_MOTOR1_Ls_d_H                 (0.000896817526)
#define USER_MOTOR1_Ls_q_H                 (0.000896817526)
//Cust-INV:0.138790429
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.138790429)

#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)//ACIM only

#define USER_MOTOR1_RES_EST_CURRENT_A      (5.0f)  // 10-30% of rated current HV36/8.2A, unloaded 5.0/100v
#define USER_MOTOR1_IND_EST_CURRENT_A      (-4.5f) // 10-30% of rated current(LS) HV36:-4.5
#define USER_MOTOR1_MAX_CURRENT_A          (5.65f) // Saturation current(Peak) HV36:5.6
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (60.0f) // MotorID 60 Hz for [1 uH < Lphase < 10 uH]
                                                   // MotorID 20 Hz for [10 uH < Lphase < 1000 uH]

// Number of lines on the motor's quadrature encoder
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)

#define USER_MOTOR1_INERTIA_Kgm2           (0.352838295721)

#define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (2.0f)       // Hz

#define USER_MOTOR1_RATED_VOLTAGE_V        (250.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.5f)

#define USER_MOTOR1_FREQ_MIN_HZ            (2.0f)       // Hz
#define USER_MOTOR1_FREQ_MAX_HZ            (1350.0f)    // Hz 720Hz*60/18=2400rpm, Hz-suggested to set to 120% of rated motor frequency

#define USER_MOTOR1_FREQ_LOW_HZ            (65.0f)     // Hz 65Hz - suggested to set to 10% of rated motor frequency
#define USER_MOTOR1_FREQ_HIGH_HZ           (650.0f)    // Hz 650Hz*60/18=2166rpm: suggested to set to 100% of rated motor frequency

#define USER_MOTOR1_VOLT_MIN_V             (85.0f)      // Volt
#define USER_MOTOR1_VOLT_MAX_V             (186.0f)     // Volt

#define USER_MOTOR1_FORCE_DELTA_A          (0.55f)      // A
#define USER_MOTOR1_ALIGN_DELTA_A          (0.25f)      // A
#define USER_MOTOR1_FLUX_CURRENT_A         (5.25f)      // !A
#define USER_MOTOR1_ALIGN_CURRENT_A        (5.0f)       // !A
#define USER_MOTOR1_STARTUP_CURRENT_A      (7.25f)      // !A
#define USER_MOTOR1_TORQUE_CURRENT_A       (2.65f)      // !A
#define USER_MOTOR1_OVER_CURRENT_A         (12.8f)      // !A

#define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)       // A
#define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)     // 60s/5ms
#define USER_MOTOR1_SPEED_START_Hz         (5.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (15.0f)
#define USER_MOTOR1_ACCEL_START_Hzps       (5.0f)       // !Hz
#define USER_MOTOR1_ACCEL_MAX_Hzps         (25.0f)      // !Hz

更改设置通用 MCSDK 电机仍保持±1Hz 不会加速到参考轨迹速度、即使电流较小的电机仍仅以1Hz 的频率启动。

#define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (2.0f)       // Hz

#define USER_MOTOR1_RATED_VOLTAGE_V        (250.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.5f)

#define USER_MOTOR1_FREQ_MIN_HZ            (2.0f)       // Hz
#define USER_MOTOR1_FREQ_MAX_HZ            (1350.0f)    // Hz 720Hz*60/18=2400rpm, Hz-suggested to set to 120% of rated motor frequency

#define USER_MOTOR1_FREQ_LOW_HZ            (65.0f)     // Hz 65Hz - suggested to set to 10% of rated motor frequency
#define USER_MOTOR1_FREQ_HIGH_HZ           (650.0f)    // Hz 650Hz*60/18=2166rpm: suggested to set to 100% of rated motor frequency

#define USER_MOTOR1_VOLT_MIN_V             (85.0f)      // Volt
#define USER_MOTOR1_VOLT_MAX_V             (186.0f)     // Volt

#define USER_MOTOR1_FORCE_DELTA_A          (0.55f)      // A
#define USER_MOTOR1_ALIGN_DELTA_A          (0.25f)      // A
#define USER_MOTOR1_FLUX_CURRENT_A         (1.75f)      // !A
#define USER_MOTOR1_ALIGN_CURRENT_A        (4.0f)       // !A
#define USER_MOTOR1_STARTUP_CURRENT_A      (3.55f)      // !A
#define USER_MOTOR1_TORQUE_CURRENT_A       (1.65f)      // !A
#define USER_MOTOR1_OVER_CURRENT_A         (12.0f)      // !A

#define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)       // A
#define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)     // 60s/5ms
#define USER_MOTOR1_SPEED_START_Hz         (15.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (25.0f)
#define USER_MOTOR1_ACCEL_START_Hzps       (35.0f)      // !Hz
#define USER_MOTOR1_ACCEL_MAX_Hzps         (55.0f)      // !Hz

SDK4.0用户设置对于更大的电机可正常启动、但为什么 MCSDK 中不能这样做?

	USER_MOTOR_TYPE				=	  1, // MOTOR_TYPE_PM,

	USER_MOTOR_NUM_POLE_PAIRS   =     18, // HV36:18pp

	USER_MOTOR_Rr_Ohm           =     0, //ACIM only

	USER_MOTOR_Rs_Ohm           =     0.16828759,
	//HV36: DCINV 0.16828759, DRV8320RS 0.155892089

	USER_MOTOR_Ls_d_H           =    0.000896817526,
	//HV36: INV 0.000986817526, DRV8320RS 0.000890934956

	USER_MOTOR_Ls_q_H           =    0.000896817526,
	//HV36: INV 0.000986817526, DRV8320RS 0.000890934956

	USER_MOTOR_RATED_FLUX_VpHz  =      0.138790429,
	//HV36:0.138790429
	USER_MOTOR_MAGNETIZING_CURRENT_A = 0, //ACIM only
	USER_MOTOR_RES_EST_CURRENT_A   =    5.0,  // 10-30% of rated current HV36/8.2A, unloaded 5.0/100v
	USER_MOTOR_IND_EST_CURRENT_A   =   -4.5, // 10-30% of rated current(LS) HV36:-4.5
	USER_MOTOR_MAX_CURRENT_A       =    5.6, // Saturation current(Peak) HV36:5.6
	USER_MOTOR_FLUX_EXC_FREQ_Hz    =   60.0, // MotorID 60 Hz for [1 uH < Lphase < 10 uH]
						 // MotorID 20 Hz for [10 uH < Lphase < 1000 uH]

        USER_MOTOR_INERTIA_EN	    =	(1), //1:true, 0:false

	USER_MOTOR_INERTIA_Kgm2     =   0.325505192710553, 

	USER_MOTOR_NUM_ENC_SLOTS     =      71, // Number of lines on the motor's quadrature encoder

	USER_MOTOR_FREQ_MIN_HZ       =      2.0,  // Hz
	USER_MOTOR_FREQ_MAX_HZ       =      780.0, // 720Hz*60/18=2400rpm, Hz-suggested to set to 120% of rated motor frequency

	USER_MOTOR_FREQ_LOW_HZ       =       65.0, // 65Hz - suggested to set to 10% of rated motor frequency
	USER_MOTOR_FREQ_HIGH_HZ      =      650.0, // 650Hz*60/18=2166rpm: suggested to set to 100% of rated motor frequency

	USER_MOTOR_VOLT_MIN_V        =       60.0,  // Volt - suggested to set to 15% of rated motor voltage
	USER_MOTOR_VOLT_MAX_V        =      160.0,  // Volt - suggested to set to 100% of rated motor voltage

	HAL_PWM_DBRED_CNT			 =	   	20, // PWM Deadband RED register x 10 nanosecond SYSCLK periods
	HAL_PWM_DBFED_CNT			 =	   	20, // PWM Deadband FED register x 10 nanosecond SYSCLK periods
	HAL_PWM_DB_CNT			 	 =	   	20, // DRV 8320RS gate driver deand band SPI register value.

	USER_PWM_FREQ_kHz     		 =     	20.0, // EPWM module PRD clock frequency for DC inverter modulation.

    //! \brief Defines the maximum P2P current at the AD converter   
    USER_ADC_FULL_SCALE_CURRENT_A   =   82.0; //PGA 42.843, INA240A1:78-82.0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="48581" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1242003/mcsdk-same-motor-not-accelerate-sdk40-does-same-motor 为什么两个电机在 SDK4.0中都可以正常工作、但在 MCSDK 中却不能正常工作? [/报价]

    SDK4.0和 MCSDK 是什么意思? 您正在使用哪些 TI EVM 工具? 自己的板上?

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

    使用 x49c Launch Pad 和定制直流逆变器测试两个工程。 SDK4.0中使用的相同电机参数将进入闭环 MCSDK 以实现 FAST。 只有一点点电机将在 MCSDK 峰值电流为350mA 时加速。 我们如何设置 MCSDK 增加了新的参数,看起来没有太大的区别,因为大电机不会加速>1Hz 在 MCSDK,只有 SDK4.0项目做大电机加速到轨迹目标速度 Hz。

    MCSDK 开环转换为闭环、在 对准电流和启动电流对转换时间的影响很小之后很快就转换为闭环。 通过 SDK 开环进入闭环、用户可能会听到电流开始持续更长时间。 当启用了 RS 在线校准后、过去出现了类似的行为 SDK4.0 LAB IS07、现在它可以快速启动而不会踢回或搜索第 N 杆。 我看到 MCSDK 默认启用了 RS 在线功能、可能是原因吗? 另请注意、已在"Downloaded Code and Expressions"选项卡中启用了 FDW、 使用小型4极 Nidec H25电机测试 eSMO 无法正常工作、eSMO 电机在首次运行时旋转到失速状态后、每隔一秒启动一次便毫无效果。

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

    我们如何设置 Δ 电流和磁通电流两个? 小型4极电机将在大于75mA 的增量下停止振动、无论输入到这些增量的值是多少、大型电机似乎都不会发生太多。 但是、在使用 CC12.3编译器 v22.6.0.LTS 的两台不同计算机上、当按住 Ctrl 键点击或执行搜索时、它们不会链接到任何函数。 因此、上述 SDK4.0设置可在超过1Hz 的频率后使大电机旋转 MCSDK 无法完成的原因、构建上述设置的级别4。

    #define USER_MOTOR1_FORCE_DELTA_A (0.05f)// A
    #define USER_MOTOR1_ALIGN_DELTA_A (0.03f)// A

    如何设置与5%、10% 15%、20%峰值电流相关的磁通和对准电流?

    #define USER_MOTOR1_FLUX_CURRENT_A (1.025f)//!a
    #define USER_MOTOR1_ALIGN_CURRENT_A (1.575f)//!a

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

    您好、Lue、

    有新的代码 UMCSDK 控制开环、其中搜索位置 SDK4.0没有、似乎是一个焦点。 奇怪的是、寻道位置计时 SDK4.0 OL 低速观测器的持续时间要长得多。 我不知道需要设置不同的延迟、以便两个项目 OL 观察员具有相同的时间周期。 在我关闭实验室并移至另一个本地时、您能测试这两个项目差异吗?

    // motor1_drive.c
    
    #elif defined(MOTOR1_FAST) && defined(MOTOR1_ESMO)
        obj->estState = EST_STATE_IDLE;
        obj->trajState = EST_TRAJ_STATE_IDLE;
    
        obj->estimatorMode = ESTIMATOR_MODE_FAST;
    
        obj->flagEnableAlignment = true;
        obj->alignTimeDelay = (uint16_t)(objUser->ctrlFreq_Hz * 0.1f);          // 0.1s
        obj->forceRunTimeDelay = (uint16_t)(objUser->ctrlFreq_Hz * 1.0f);       // 1.0s
        obj->fwcTimeDelay = (uint16_t)(objUser->ctrlFreq_Hz * 2.0f);        // 2.0s
        
    // Suspect fast code has seek position timing issues >4 pole motors
    
       else if(obj->flagMotorIdentified == true)
        {
            if(obj->flagRunIdentAndOnLine == true)
            {
                obj->counterTrajSpeed++;
    
                if(obj->counterTrajSpeed >= objUser->numIsrTicksPerTrajTick)
                {
                    // clear counter
                    obj->counterTrajSpeed = 0;
    
                    // run a trajectory for speed reference,
                    // so the reference changes with a ramp instead of a step
                    TRAJ_run(obj->trajHandle_spd);
                }
    
                obj->enableCurrentCtrl = obj->flagEnableCurrentCtrl;
                obj->enableSpeedCtrl = obj->flagEnableSpeedCtrl;
    
    
                // get Id reference for Rs OnLine
                obj->IdRated_A = EST_getIdRated_A(obj->estHandle);
            }
            else
            {
                obj->enableSpeedCtrl = false;
                obj->enableCurrentCtrl = false;
            }
    
            obj->estInputData.speed_ref_Hz = TRAJ_getIntValue(obj->trajHandle_spd);
            obj->speed_int_Hz = obj->estInputData.speed_ref_Hz;
        }
    
        // store the input data into a buffer
        obj->estInputData.dcBus_V = obj->adcData.VdcBus_V;
    
    
        // run the FAST estimator
        EST_run(obj->estHandle, &obj->estInputData, &obj->estOutputData);
    
        // compute angle with delay compensation
        obj->angleDelta_rad =
                objUser->angleDelayed_sf_sec * obj->estOutputData.fm_lp_rps;
    
        obj->angleEST_rad =
                MATH_incrAngle(obj->estOutputData.angle_rad, obj->angleDelta_rad);
    
        obj->speedEST_Hz = EST_getFm_lp_Hz(obj->estHandle);
    
    
        obj->oneOverDcBus_invV = obj->estOutputData.oneOverDcBus_invV;
    
    
        // run the eSMO
        ESMO_setSpeedRef(obj->esmoHandle, obj->speed_int_Hz);
        ESMO_run(obj->esmoHandle, obj->adcData.VdcBus_V,
                        &(obj->pwmData.Vabc_pu), &(obj->estInputData.Iab_A));
    
        obj->angleComp_rad = obj->speedPLL_Hz * obj->angleDelayed_sf;
        obj->anglePLL_rad = MATH_incrAngle(ESMO_getAnglePLL(obj->esmoHandle), obj->angleComp_rad);
    
        SPDFR_run(obj->spdfrHandle, obj->anglePLL_rad);
        obj->speedPLL_Hz = SPDFR_getSpeedHz(obj->spdfrHandle);
    
    
        obj->speedFilter_Hz = obj->speedFilter_Hz *0.875f + obj->speed_Hz * 0.125f;
        obj->speedAbs_Hz = fabsf(obj->speedFilter_Hz);
    
        // Running state
        if(obj->estimatorMode == ESTIMATOR_MODE_FAST)
        {
            obj->speed_Hz = obj->speedEST_Hz;
    
            if(obj->motorState >= MOTOR_CTRL_RUN)
            {
                obj->angleFOC_rad = obj->angleEST_rad;
    
                ESMO_updateKslide(obj->esmoHandle);
            }
            else if(obj->motorState == MOTOR_CL_RUNNING)
            {
                obj->angleFOC_rad = obj->angleEST_rad;
                ESMO_setAnglePu(obj->esmoHandle, obj->angleFOC_rad);
            }
            else if(obj->motorState == MOTOR_OL_START)
            {
                obj->angleFOC_rad = obj->angleEST_rad;
                obj->motorState = MOTOR_CL_RUNNING;
    
                ESMO_setAnglePu(obj->esmoHandle, obj->angleFOC_rad);
            }
            else if(obj->motorState == MOTOR_ALIGNMENT)
            {
                obj->angleFOC_rad = 0.0f;
                obj->enableSpeedCtrl = false;
    
                obj->stateRunTimeCnt++;
    
                obj->IsRef_A = 0.0f;
                obj->Idq_out_A.value[0] = obj->alignCurrent_A;
                obj->Idq_out_A.value[1] = 0.0f;
    
                TRAJ_setIntValue(obj->trajHandle_spd, 0.0f);
                EST_setAngle_rad(obj->estHandle, obj->angleFOC_rad);
                ESMO_setAnglePu(obj->esmoHandle, obj->angleFOC_rad);
    
                if((obj->stateRunTimeCnt > obj->alignTimeDelay) ||
                         (obj->flagEnableAlignment == false))
                {
                    obj->stateRunTimeCnt = 0;
                    obj->motorState = MOTOR_OL_START;
    
                    obj->Idq_out_A.value[0] = obj->fluxCurrent_A;
                    PI_setUi(obj->piHandle_spd, 0.0);
                }
            }
            else if(obj->motorState == MOTOR_SEEK_POS)
            {
                obj->enableSpeedCtrl = false;
    
                obj->stateRunTimeCnt++;
    
                obj->IsRef_A = 0.0f;
                obj->Idq_out_A.value[0] = 0.0f;
                obj->Idq_out_A.value[1] = 0.0f;
    
                if(obj->stateRunTimeCnt > obj->flyingStartTimeDelay)
                {
                    obj->stateRunTimeCnt = 0;
    
                    if(obj->speedAbs_Hz > obj->speedFlyingStart_Hz)
                    {
                        obj->speed_int_Hz = obj->speedFilter_Hz;
                        TRAJ_setIntValue(obj->trajHandle_spd, obj->speedFilter_Hz);
                        PI_setUi(obj->piHandle_spd, 0.0f);
    
                        obj->motorState = MOTOR_CL_RUNNING;
    
                        ESMO_setAnglePu(obj->esmoHandle, obj->angleFOC_rad);
                    }
                    else
                    {
                        obj->angleFOC_rad = 0.0f;
                        obj->motorState = MOTOR_ALIGNMENT;
                    }
                }
            }

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

    电机控制 SDK 中的通用电机控制实验不支持 F28004x。 您是否遵循实验用户指南将该实验迁移到 F28004x、并从构建级别1到4运行该实验以验证移植是否正确? 并根据您使用的电机设置相关的控制参数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    。 您是否按照实验用户指南将该实验迁移到 F28004x、并从构建级别1到4运行该实验以验证移植是否正确?

    如果您检查 PM、您就会知道 x49c LaunchPad 已迁移、且在390Hz 以上的小电机电流情况下可以顺利进行移植。 转子质量大、启动开环到闭环时序明显是一个问题、电机只能以1Hz 的频率旋转。 这与布尔状态更改在自定义用户模块中失败的 MCSDK 代码相同。

    并根据您使用的电机设置相关的控制参数。

    较新的变量没有关于如何设置的解释、上述内容对于较大的转子质量可能是错误的、谁知道。 或许可以在连接了任何100VDC 逆变器的 x49c Launch Pad 上向您查看代码 PM。 一种可能的原因是极数大于4导致轨迹发生器时序出现问题。

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

    已经在~MCSDK 中包含 F28002x/F28003x/F280013x 的~支持套件上的某些 PMSM/BLDC 上检查并测试了通用实验室、这些电机似乎具有与 F28004x 上的 InstaSPIN-FOC 实验室类似的性能。 我们未测试应该相同的 F28004x、因为相同的 FAST 库用于所有 C2000器件。

    您能展示一些经过测试的波形或数据、以便我们理解您的问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否演示一些经过测试的波形或数据以帮助我们理解您的问题?

    我的实验要移动、但您可以从 PM 加载项目、只需注释 sys_main.c 调用即可初始化 nexition。 在°启动未能在前60 μ s 内使电机加速后、电流钳位上升和下降。 根据 motor1电流设置、它将以1Hz 的频率永久旋转转子、但从不加速。 °示波器是1秒的水平扫描、用于观察转子旋转60 μ s 后的斜升周期、捕获的并不多。 eSMO 结果比 FAST 观测器差、即使使用4极电机、它也会在进入闭环后很快失速。

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

    您有机会使用通用实验室的支持套件和控制器吗? 并尝试运行电机、而无需更改示例代码、并且仅根据您使用的电机设置相关参数。

    您能否分享电机参数? 我相信我们的实验室中使用类似的电机来测试该实验室。  

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

    上面显示的一些设置可能以360°1Hz 的频率旋转、因此 现在正在拆解36极电机。  °是最后一个参数使36 μ s 转子旋转60 μ s、然后停止斜升电流上升和下降。 负载似乎下降了、但没有发生故障、只有 x49c LPAD 中的红色 LED 快速闪烁。 尚未使用 drv8320rs 测试 PM 代码、但它应该支持 drv8323_rev1 (Site1 x25c)和 drv8320rs (Site2 x49c)符号。 支持 x25计时呼叫和 x49、两者均为100MHz hal.c。 对于 x49c、站点1可能没有正确的 ADC 通道、但在站点2上支持具有已添加符号的 drv8320rs 的 PGA。 尝试保持 PM 代码对两个 LaunchPad 兼容、而不是 HV 套件兼容。 我不知道如何设置两个增量值、如果设置为 USER_MOTOR1_RES_EST_CURRENT_A = 0.35或 USER_MOTOR1_MAX_CURRENT_A = 0.355 USER_MOTOR1、则它们确实会导致4极转子旋转几度、并扭矩锁定轴。 SYS_main.c 为下面的电机定义选择要运行设置的电机参数(true/false)、为每个参数添加注释以使其匹配、这样您就可以在预定义的电机参数之间快速切换。

    //==============================================================================
    // Motor defines
    
    
    //#define USER_MOTOR1 my_pm_motor_1 // NI25H6P
    #define USER_MOTOR2 my_pm_motor_2 // HV36P
    //#define USER_MOTOR3   my_pm_motor_3 // PT24P
    //#define USER_MOTOR4   my_pm_motor_4 // New ID
    //#define USER_MOTOR5 my_aci_motor_1
    
    //------------------------------------------------------------------
    #if defined(USER_MOTOR1)
    #define USER_MOTOR_SPEED_REF_HZ            (235) // Set Trajectory Speed
    #define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR1_NUM_POLE_PAIRS         (3) //Nidec25:3pp,
    #define USER_MOTOR1_Rr_Ohm                 (NULL)//ACIM only
    
    #define USER_MOTOR1_Rs_Ohm                 (0.45774436)//0.316983044
    #define USER_MOTOR1_Ls_d_H                 (0.000636240817)// 0.000617085374
    #define USER_MOTOR1_Ls_q_H                 (0.000636240817)// 0.000617085374
    #define USER_MOTOR1_RATED_FLUX_VpHz        (0.0331647545)
    
    #define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)//ACIM only
    #define USER_MOTOR1_RES_EST_CURRENT_A      (0.35f)
    #define USER_MOTOR1_IND_EST_CURRENT_A      (-0.315f)
    #define USER_MOTOR1_MAX_CURRENT_A          (0.355f)
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (35.0f)
    
    // Number of lines on the motor's quadrature encoder
    #define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
    
    #define USER_MOTOR1_INERTIA_Kgm2           (7.06154e-06)
    
    #define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (5.0f)          // Hz
    
    #define USER_MOTOR1_RATED_VOLTAGE_V        (24.0f)
    #define USER_MOTOR1_RATED_SPEED_KRPM       (10.0f)
    
    #define USER_MOTOR1_FREQ_MIN_HZ            (2.0f)           // Hz
    #define USER_MOTOR1_FREQ_MAX_HZ            (350.0f)         // Hz
    
    #define USER_MOTOR1_FREQ_LOW_HZ            (5.0f)           // Hz
    #define USER_MOTOR1_FREQ_HIGH_HZ           (350.0f)         // Hz
    #define USER_MOTOR1_VOLT_MIN_V             (18.0f)          // Volt
    #define USER_MOTOR1_VOLT_MAX_V             (24.0f)          // Volt
    
    #define USER_MOTOR1_FORCE_DELTA_A          (0.03f)          // A  15% ALC (0.05f)
    #define USER_MOTOR1_ALIGN_DELTA_A          (0.01f)          // A   5% ALC (0.01f)
    #define USER_MOTOR1_FLUX_CURRENT_A         (0.225f)           //0.325 !A
    #define USER_MOTOR1_ALIGN_CURRENT_A        (0.150f)           //0.25 !A
    #define USER_MOTOR1_STARTUP_CURRENT_A      (0.3f)           // !A
    #define USER_MOTOR1_TORQUE_CURRENT_A       (0.45f)            // !A
    #define USER_MOTOR1_OVER_CURRENT_A         (1.5f)             // !A
    
    #define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)           // A
    #define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)         // 60s/5ms
    
    #define USER_MOTOR1_SPEED_START_Hz         (30.0f)
    #define USER_MOTOR1_SPEED_FORCE_Hz         (25.0f)
    #define USER_MOTOR1_ACCEL_START_Hzps       (15.0f)  // !Hz
    #define USER_MOTOR1_ACCEL_MAX_Hzps         (30.0f)  // !Hz
    
    #define USER_MOTOR1_SPEED_FS_Hz            (3.0f)
    
    // only for encoder
    #define USER_MOTOR1_ENC_POS_MAX            (USER_MOTOR1_NUM_ENC_SLOTS * 4 - 1)
    #define USER_MOTOR1_ENC_POS_OFFSET         (668)
    
    // Only for eSMO
    #define USER_MOTOR1_KSLIDE_MAX             (0.75f)      //
    #define USER_MOTOR1_KSLIDE_MIN             (0.15f)
    
    #define USER_MOTOR1_PLL_KP_MAX             (6.75f)      //
    #define USER_MOTOR1_PLL_KP_MIN             (0.75f)
    #define USER_MOTOR1_PLL_KP_SF              (5.0f)
    
    #define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
    #define USER_MOTOR1_BEMF_KSLF_FC_Hz        (1.0f)
    #define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
    #define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)
    
    // for IS-BLDC
    #define USER_MOTOR1_RAMP_START_Hz           (3.0f)
    #define USER_MOTOR1_RAMP_END_Hz             (30.0f)
    #define USER_MOTOR1_RAMP_DELAY              (5)
    
    #define USER_MOTOR1_ISBLDC_INT_MAX          (0.015f)
    #define USER_MOTOR1_ISBLDC_INT_MIN          (0.010f)
    
    // for Rs online calibration
    #define USER_MOTOR1_RSONLINE_WAIT_TIME      (60000U)    // 5min/300s at 5ms base
    #define USER_MOTOR1_RSONLINE_WORK_TIME      (24000U)     //2min/120s at 5ms base
    
    #ifndef USER_MOTOR1
    #error /"Motor type is not defined in user_mtr1.h"/
    #endif
    #endif
    // End HI25H
    
    //***************************************************************************
    #if defined(USER_MOTOR2)
    #define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR1_NUM_POLE_PAIRS         (18)
    #define USER_MOTOR_SPEED_REF_HZ            (65) // Set Trajectory Speed
    #define USER_MOTOR1_Rr_Ohm                 (NULL)//ACIM only
    //Cust-INV: DCINV 0.16828759, DRV8320RS 0.155892089
    #define USER_MOTOR1_Rs_Ohm                 (0.16828759)
    //Cust-INV: 0.000986817526, DRV8320RS 0.000890934956
    #define USER_MOTOR1_Ls_d_H                 (0.000896817526)
    #define USER_MOTOR1_Ls_q_H                 (0.000896817526)
    //Cust-INV:0.138790429
    #define USER_MOTOR1_RATED_FLUX_VpHz        (0.138790429)
    
    #define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)//ACIM only
    
    #define USER_MOTOR1_RES_EST_CURRENT_A      (5.0f)  // 10-30% of rated current HV36/8.2A, unloaded 5.0/100v
    #define USER_MOTOR1_IND_EST_CURRENT_A      (-4.5f) // 10-30% of rated current(LS) HV36:-4.5
    #define USER_MOTOR1_MAX_CURRENT_A          (5.65f) // Saturation current(Peak) HV36:5.6
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (60.0f) // MotorID 60 Hz for [1 uH < Lphase < 10 uH]
                                                       // MotorID 20 Hz for [10 uH < Lphase < 1000 uH]
    
    // Number of lines on the motor's quadrature encoder
    #define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
    
    #define USER_MOTOR1_INERTIA_Kgm2           (0.352838295721)
    
    #define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (2.0f)       // Hz
    
    #define USER_MOTOR1_RATED_VOLTAGE_V        (250.0f)
    #define USER_MOTOR1_RATED_SPEED_KRPM       (3.5f)
    
    #define USER_MOTOR1_FREQ_MIN_HZ            (2.0f)       // Hz
    #define USER_MOTOR1_FREQ_MAX_HZ            (1350.0f)    // Hz 720Hz*60/18=2400rpm, Hz-suggested to set to 120% of rated motor frequency
    
    #define USER_MOTOR1_FREQ_LOW_HZ            (65.0f)      // Hz 65Hz - suggested to set to 10% of rated motor frequency
    #define USER_MOTOR1_FREQ_HIGH_HZ           (1350.0f)    // Hz 650Hz*60/18=2166rpm: suggested to set to 100% of rated motor frequency
    
    #define USER_MOTOR1_VOLT_MIN_V             (55.0f)      // Volt
    #define USER_MOTOR1_VOLT_MAX_V             (86.0f)      // Volt
    
    #define USER_MOTOR1_FORCE_DELTA_A          (0.05f)          // A
    #define USER_MOTOR1_ALIGN_DELTA_A          (0.03f)          // A
    #define USER_MOTOR1_FLUX_CURRENT_A         (1.025f)           // !A
    #define USER_MOTOR1_ALIGN_CURRENT_A        (1.575f)           // !A
    #define USER_MOTOR1_STARTUP_CURRENT_A      (3.525f)           // !A
    #define USER_MOTOR1_TORQUE_CURRENT_A       (1.65f)            // !A
    #define USER_MOTOR1_OVER_CURRENT_A         (12.8f)             // !A
    
    #define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)           // A
    #define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)         // 60s/5ms
    
    #define USER_MOTOR1_SPEED_START_Hz         (5.0f)
    #define USER_MOTOR1_SPEED_FORCE_Hz         (15.0f)
    #define USER_MOTOR1_ACCEL_START_Hzps       (5.0f)  // !Hz
    #define USER_MOTOR1_ACCEL_MAX_Hzps         (25.0f)  // !Hz
    
    #define USER_MOTOR1_SPEED_FS_Hz            (3.0f)  //!Flying start speed
    
    // only for encoder
    #define USER_MOTOR1_ENC_POS_MAX            (USER_MOTOR1_NUM_ENC_SLOTS * 4 - 1)
    #define USER_MOTOR1_ENC_POS_OFFSET         (668)
    
    // Only for eSMO
    #define USER_MOTOR1_KSLIDE_MAX             (0.75f)      //
    #define USER_MOTOR1_KSLIDE_MIN             (0.15f)
    
    #define USER_MOTOR1_PLL_KP_MAX             (6.75f)      //
    #define USER_MOTOR1_PLL_KP_MIN             (0.75f)
    #define USER_MOTOR1_PLL_KP_SF              (5.0f)
    
    #define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
    #define USER_MOTOR1_BEMF_KSLF_FC_Hz        (1.0f)
    #define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
    #define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)
    
    // for IS-BLDC
    #define USER_MOTOR1_RAMP_START_Hz           (3.0f)
    #define USER_MOTOR1_RAMP_END_Hz             (30.0f)
    #define USER_MOTOR1_RAMP_DELAY              (5)
    
    #define USER_MOTOR1_ISBLDC_INT_MAX          (0.015f)
    #define USER_MOTOR1_ISBLDC_INT_MIN          (0.010f)
    
    // for Rs online calibration
    #define USER_MOTOR1_RSONLINE_WAIT_TIME      (60000U)    // 5min/300s at 5ms base
    #define USER_MOTOR1_RSONLINE_WORK_TIME      (24000U)     //2min/120s at 5ms base
    
    #ifndef USER_MOTOR2
    #error /"Motor type is not defined in user_mtr1.h"/
    #endif
    #endif
    //------------------------------------------------------------------------------
    #if defined(BSXL8320RS_REVA) // LaunchPad-F280049
    //! \brief Defines the nominal DC bus voltage, V
    //!
    #define USER_M1_NOMINAL_DC_BUS_VOLTAGE_V         (103.3f) //DRV8320RS: 48.0f
    
    //! \brief Defines the maximum voltage at the AD converter
    //  Full scale voltage of AD converter, not the current voltage
    #define USER_M1_ADC_FULL_SCALE_VOLTAGE_V         (157.528f) //DRV8320RS: 57.528f
    
    //! \brief Defines the analog voltage filter pole location, Hz
    //! 100nF->56nF/47nF
    #define USER_M1_VOLTAGE_FILTER_POLE_Hz           (416.834f)     //DRV8329RS:338.357f 500~800Hz
    
    #if defined(PGA_GAIN_6S)
    //! \brief Defines the maximum current at the AD converter
    // Gain = 6, Rin=3.3k, Rdac=27.4k
    #define USER_M1_ADC_FULL_SCALE_CURRENT_A         (88.034f)
    //
    #elif defined(PGA_GAIN_12S) && !defined(INA240A1)
    //! \brief Defines the maximum current at the AD converter
    //! BOARD_BSXL8320RS_REVA 15AP2P/30AP Gain=12 84mV/A,
    // Gain = 12, Rin=2.49k, Rdac=27.4k
    #define USER_M1_ADC_FULL_SCALE_CURRENT_A         (42.856f)
    
    #elif defined(INA240A1)
    //! \brief Defines the maximum P2P current at the AD converter
    //!  External INA240 shunts sensor, Gain=20V/V or 3.17v/40mV/A
    #define USER_M1_ADC_FULL_SCALE_CURRENT_A         (82.0f)//INA240A1:78-82.0
    #endif
    
    //! \brief ADC current offsets for A, B, and C phases
    #define USER_M1_IA_OFFSET_AD    (2048.0f)
    #define USER_M1_IB_OFFSET_AD    (2048.0f)
    #define USER_M1_IC_OFFSET_AD    (2048.0f)
    
    //! \brief ADC voltage offsets for A, B, and C phases
    #define USER_M1_VA_OFFSET_SF    (0.496752918f)
    #define USER_M1_VB_OFFSET_SF    (0.496881396f)
    #define USER_M1_VC_OFFSET_SF    (0.499790519f)
    
    //! \brief DC bus over voltage threshold
    #define USER_M1_OVER_VOLTAGE_FAULT_V        (135.0f)
    
    //! \brief DC bus over voltage threshold
    #define USER_M1_OVER_VOLTAGE_NORM_V         (125.0f)
    
    //! \brief DC bus under voltage threshold
    #define USER_M1_UNDER_VOLTAGE_FAULT_V       (80.0f) //10.0f
    
    //! \brief DC bus under voltage threshold
    #define USER_M1_UNDER_VOLTAGE_NORM_V        (75.0f)
    
    //! \brief motor lost phase current threshold
    #define USER_M1_LOST_PHASE_CURRENT_A        (0.02f)
    
    //! \brief motor unbalance ratio percent threshold
    #define USER_M1_UNBALANCE_RATIO             (0.3f) //0.2f
    
    //! \brief motor over load power threshold
    #define USER_M1_OVER_LOAD_POWER_W           (560.0f)
    
    //! \brief motor stall current threshold
    #define USER_M1_STALL_CURRENT_A             (18.0f) // 10f Amps
    
    //! \brief motor fault check current threshold
    #define USER_M1_FAULT_CHECK_CURRENT_A       (0.05f) //!0.05f
    
    //! \brief motor failed maximum speed threshold
    #define USER_M1_FAIL_SPEED_MAX_HZ           (750.0f) //1800.0f
    
    //! \brief motor failed minimum speed threshold
    #define USER_M1_FAIL_SPEED_MIN_HZ           (2.0f)
    
    //! \brief Defines the number of failed torque
    //!
    #define USER_M1_TORQUE_FAILED_SET           (0.000001f)
    // end of BSXL8320RS_REVA
    
    //------------------------------------------------------------------------------
    #elif defined(BSXL8323RS_REVA)
    //! \brief Defines the nominal DC bus voltage, V
    //!
    #define USER_M1_NOMINAL_DC_BUS_VOLTAGE_V         (48.0f)
    
    //! \brief Defines the maximum voltage at the AD converter
    #define USER_M1_ADC_FULL_SCALE_VOLTAGE_V         (57.52845691f)
    
    //! \brief Defines the analog voltage filter pole location, Hz
    #define USER_M1_VOLTAGE_FILTER_POLE_Hz           (680.4839141f)     // 47nF
    
    //! \brief Defines the maximum current at the AD converter
    #define USER_M1_ADC_FULL_SCALE_CURRENT_A         (47.14285714f)     // gain=10
    
    //! \brief ADC current offsets for dc-link
    // the dc-link offset current for BSXL8323RS_REVA
    #define USER_M1_IDC_OFFSET_A            (USER_M1_ADC_FULL_SCALE_CURRENT_A / 2.0f)
    
    //! \brief ADC current offsets for A, B, and C phases
    #define USER_M1_IDC_OFFSET_AD           (2048.0f)
    
    #define USER_M1_IDC_OFFSET_AD_MAX       (USER_M1_IDC_OFFSET_AD + 100.0f)
    #define USER_M1_IDC_OFFSET_AD_MIN       (USER_M1_IDC_OFFSET_AD - 100.0f)
    
    //! \brief ADC current offsets for A, B, and C phases
    #define USER_M1_IA_OFFSET_AD    (2030.99646f)
    #define USER_M1_IB_OFFSET_AD    (2016.76001f)
    #define USER_M1_IC_OFFSET_AD    (2007.99329f)
    
    //! \brief ADC voltage offsets for A, B, and C phases
    #define USER_M1_VA_OFFSET_SF    (0.498977453f)
    #define USER_M1_VB_OFFSET_SF    (0.497419506f)
    #define USER_M1_VC_OFFSET_SF    (0.500700474f)
    
    //! \brief DC bus over voltage threshold
    #define USER_M1_OVER_VOLTAGE_FAULT_V        (54.5f)
    
    //! \brief DC bus over voltage threshold
    #define USER_M1_OVER_VOLTAGE_NORM_V         (52.5f)
    
    //! \brief DC bus under voltage threshold
    #define USER_M1_UNDER_VOLTAGE_FAULT_V       (8.0f)
    
    //! \brief DC bus under voltage threshold
    #define USER_M1_UNDER_VOLTAGE_NORM_V        (10.0f)
    
    //! \brief motor lost phase current threshold
    #define USER_M1_LOST_PHASE_CURRENT_A        (0.2f)
    
    //! \brief motor unbalance ratio percent threshold
    #define USER_M1_UNBALANCE_RATIO             (0.2f)
    
    //! \brief motor over load power threshold
    #define USER_M1_OVER_LOAD_POWER_W           (50.0f)
    
    //! \brief motor stall current threshold
    #define USER_M1_STALL_CURRENT_A             (10.0f)
    
    //! \brief motor fault check current threshold
    #define USER_M1_FAULT_CHECK_CURRENT_A       (0.2f)
    
    //! \brief motor failed maximum speed threshold
    #define USER_M1_FAIL_SPEED_MAX_HZ           (1500.0f)
    
    //! \brief motor failed minimum speed threshold
    #define USER_M1_FAIL_SPEED_MIN_HZ           (5.0f)
    
    //! \brief Defines the number of failed torque
    //!
    #define USER_M1_TORQUE_FAILED_SET           (0.000001f)
    
    // end of BSXL8323RS_REVA
    
    //------------------------------------------------------------------------------
    #else   // No Board Selection
    #error /"The board parameters are not defined in user_mtr1.h"/
    #endif  // No Board Selection
    
    //------------------------------------------------------------------------------
    //! \brief ADC current offsets checking value for A, B, and C phases
    #define USER_M1_IA_OFFSET_AD_MAX    (USER_M1_IA_OFFSET_AD + 150.0f)
    #define USER_M1_IB_OFFSET_AD_MAX    (USER_M1_IB_OFFSET_AD + 150.0f)
    #define USER_M1_IC_OFFSET_AD_MAX    (USER_M1_IC_OFFSET_AD + 150.0f)
    
    #define USER_M1_IA_OFFSET_AD_MIN    (USER_M1_IA_OFFSET_AD - 150.0f)
    #define USER_M1_IB_OFFSET_AD_MIN    (USER_M1_IB_OFFSET_AD - 150.0f)
    #define USER_M1_IC_OFFSET_AD_MIN    (USER_M1_IC_OFFSET_AD - 150.0f)
    
    //! \brief ADC voltage offsets for A, B, and C phases
    #define USER_M1_VA_OFFSET_SF_MAX    (USER_M1_VA_OFFSET_SF + 0.05f)
    #define USER_M1_VB_OFFSET_SF_MAX    (USER_M1_VB_OFFSET_SF + 0.05f)
    #define USER_M1_VC_OFFSET_SF_MAX    (USER_M1_VC_OFFSET_SF + 0.05f)
    
    #define USER_M1_VA_OFFSET_SF_MIN    (USER_M1_VA_OFFSET_SF - 0.05f)
    #define USER_M1_VB_OFFSET_SF_MIN    (USER_M1_VB_OFFSET_SF - 0.05f)
    #define USER_M1_VC_OFFSET_SF_MIN    (USER_M1_VC_OFFSET_SF - 0.05f)
    
    //******************************************************************************
    //------------------------------------------------------------------------------
    //! \brief Vbus used to calculate the voltage offsets A, B, and C
    // =0.5*USER_M1_NOMINAL_DC_BUS_VOLTAGE_V
    #define USER_M1_VBUS_OFFSET_V  (0.5*USER_M1_ADC_FULL_SCALE_VOLTAGE_V)
    
    
    //! \brief Defines the maximum negative current to be applied in Id reference
    //!
    #define USER_M1_MAX_NEGATIVE_ID_REF_CURRENT_A       ((float32_t)(-2.0))
    
    
    //! \brief Defines the number of pwm clock ticks per isr clock tick
    //!        Note: Valid values are 1, 2 or 3 only
    #define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK          (2) //1
    
    
    //! \brief Defines the number of ISR clock ticks per current controller clock tick
    //!
    #define USER_M1_NUM_ISR_TICKS_PER_CURRENT_TICK      (2)//1
    
    
    //! \brief Defines the number of ISR clock ticks per speed controller clock tick
    //!
    #define USER_M1_NUM_ISR_TICKS_PER_SPEED_TICK        (8) //10
    
    
    //! \brief Defines the number of current sensors
    //!
    #define USER_M1_NUM_CURRENT_SENSORS                 (3)
    
    
    //! \brief Defines the number of voltage sensors
    //!
    #define USER_M1_NUM_VOLTAGE_SENSORS                 (3)
    
    
    //! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz
    //!
    #define USER_M1_PWM_FREQ_kHz        ((float32_t)(20.0f)) //20KHz
    #define USER_M1_PWM_TBPRD_NUM       (uint16_t)(USER_SYSTEM_FREQ_MHz * 1000.0f / USER_M1_PWM_FREQ_kHz / 2.0f)
    
    //! \brief Defines the Pulse Width Modulation (PWM) period, usec
    //!
    #define USER_M1_PWM_PERIOD_usec     ((float32_t)1000.0/USER_M1_PWM_FREQ_kHz)
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) frequency, Hz
    //!
    #define USER_M1_ISR_FREQ_Hz         (USER_M1_PWM_FREQ_kHz * (float32_t)1000.0 / (float32_t)USER_M1_NUM_PWM_TICKS_PER_ISR_TICK)
    
    //! \brief Defines the SFRA sampling, Hz
    //!
    #define MOTOR1_SAMPLING_FREQ_HZ     USER_M1_ISR_FREQ_Hz
    
    
    //! \brief Defines the Interrupt Service Routine (ISR) period, usec
    //!
    #define USER_M1_ISR_PERIOD_usec     (USER_M1_PWM_PERIOD_usec * (float32_t)USER_M1_NUM_PWM_TICKS_PER_ISR_TICK)
    
    
    //! \brief Defines the direct voltage (Vd) scale factor
    //!
    #define USER_M1_VD_SF               ((float32_t)(0.95f))
    
    
    //! \brief Defines the voltage scale factor for the system
    //!
    #define USER_M1_VOLTAGE_SF          (USER_M1_ADC_FULL_SCALE_VOLTAGE_V / 4096.0f)
    
    //! \brief Defines the current scale factor for the system
    //!
    #define USER_M1_CURRENT_SF          (USER_M1_ADC_FULL_SCALE_CURRENT_A / 4096.0f)
    
    
    //! \brief Defines the current scale invert factor for the system
    //!
    #define USER_M1_CURRENT_INV_SF      (4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A)
    
    
    //! \brief Defines the analog voltage filter pole location, rad/s
    //!
    #define USER_M1_VOLTAGE_FILTER_POLE_rps  (MATH_TWO_PI * USER_M1_VOLTAGE_FILTER_POLE_Hz)
    
    //! \brief Defines the maximum Vs magnitude in per units allowed
    //! \brief This value sets the maximum magnitude for the output of the Id and
    //! \brief Iq PI current controllers. The Id and Iq current controller outputs
    //! \brief are Vd and Vq. The relationship between Vs, Vd, and Vq is:
    //! \brief Vs = sqrt(Vd^2 + Vq^2).  In this FOC controller, the Vd value is set
    //! \brief equal to USER_MAX_VS_MAG*USER_VD_MAG_FACTOR.
    //! \brief so the Vq value is set equal to sqrt(USER_MAX_VS_MAG^2 - Vd^2).
    //!
    //! \brief Set USER_MAX_VS_MAG = 0.5 for a pure sinewave with a peak at
    //! \brief SQRT(3)/2 = 86.6% duty cycle.  No current reconstruction
    //! \brief is needed for this scenario.
    //!
    //! \brief Set USER_MAX_VS_MAG = 1/SQRT(3) = 0.5774 for a pure sinewave
    //! \brief with a peak at 100% duty cycle.  Current reconstruction
    //! \brief will be needed for this scenario (Lab08).
    //!
    //! \brief Set USER_MAX_VS_MAG = 2/3 = 0.6666 to create a trapezoidal
    //! \brief voltage waveform.  Current reconstruction will be needed
    //! \brief for this scenario (Lab08).
    //!
    //! \brief For space vector over-modulation, see lab08 for details on
    //! \brief system requirements that will allow the SVM generator to
    //! \brief go all the way to trapezoidal.
    //!
    //#define USER_M1_MAX_VS_MAG_PU            (0.66)
    //#define USER_M1_MAX_VS_MAG_PU              (0.65)
    //#define USER_M1_MAX_VS_MAG_PU            (0.576)
    //#define USER_M1_MAX_VS_MAG_PU            (0.565)
    #define USER_M1_MAX_VS_MAG_PU            (0.5)
    
    
    //! \brief Defines the reference Vs magnitude in per units allowed
    //! \      Set the value equal from 0.5 to 0.95 of the maximum Vs magnitude
    #define USER_M1_VS_REF_MAG_PU             (float32_t)(0.8) * USER_MAX_VS_MAG_PU)
    
    //! \brief Defines the R/L excitation frequency, Hz
    //!
    #define USER_M1_R_OVER_L_EXC_FREQ_Hz  ((float32_t)(250.0))
    
    
    //! \brief Defines the R/L Kp scale factor, pu
    //! \brief Kp used during R/L is USER_M1_R_OVER_L_KP_SF * USER_M1_NOMINAL_DC_BUS_VOLTAGE_V / USER_MOTOR1_MAX_CURRENT_A;
    //!
    #define USER_M1_R_OVER_L_KP_SF        ((float32_t)(0.02))
    
    
    //! \brief Defines maximum acceleration for the estimation speed profiles, Hz/sec
    //!
    #define USER_M1_MAX_ACCEL_Hzps        ((float32_t)(2.0))
    
    
    //! \brief Defines the controller execution period, usec
    //!
    #define USER_M1_CTRL_PERIOD_usec      (USER_M1_ISR_PERIOD_usec)
    
    
    //! \brief Defines the controller execution period, sec
    //!
    #define USER_M1_CTRL_PERIOD_sec       ((float32_t)USER_M1_CTRL_PERIOD_usec/(float32_t)1000000.0)
    
    
    //! \brief Defines the IdRated delta to use during estimation
    //!
    #define USER_M1_IDRATED_DELTA_A                 ((float32_t)(0.0001))
    
    #if defined(_FULL_FAST_LIB)
    //! \brief Defines the forced angle frequency, Hz
    #define USER_M1_FORCE_ANGLE_FREQ_Hz             ((float32_t)(1.0))
    
    //! \brief Defines the forced angle acceleration, Hz
    #define USER_M1_FORCE_ANGLE_ACCEL_Hzps          ((float32_t)(10.0))
    #else  // !_FULL_FAST_LIB
    //! \brief Defines the forced angle frequency, Hz
    #define USER_M1_FORCE_ANGLE_FREQ_Hz             ((float32_t)(1.0))
    #endif  // !_FULL_FAST_LIB
    
    //! \brief Defines the near zero speed limit for electrical frequency estimation, Hz
    //!        The flux integrator uses this limit to regulate flux integration
    #define USER_M1_FREQ_NEARZEROSPEEDLIMIT_Hz      ((float_t)(0.0f))
    
    //! \brief Defines the fraction of IdRated to use during inductance estimation
    //!
    #define USER_M1_IDRATED_FRACTION_FOR_L_IDENT    ((float32_t)(0.5))
    
    
    //! \brief Defines the fraction of SpeedMax to use during inductance estimation
    //!
    #define USER_M1_SPEEDMAX_FRACTION_FOR_L_IDENT  ((float32_t)(1.0))
    
    
    //! \brief Defines the Power Warp gain for computing Id reference
    //! \brief If motor parameters are known, set this gain to:
    //! \brief USER_M1_PW_GAIN = SQRT(1.0 + USER_MOTOR1_Rr_Ohm / USER_MOTOR1_Rs_Ohm)
    //!
    #define USER_M1_PW_GAIN                        ((float32_t)(1.0))
    
    
    //! \brief Defines the pole location for the DC bus filter, rad/sec
    //!
    #define USER_M1_DCBUS_POLE_rps                  ((float32_t)(100.0))
    
    
    //! \brief Defines the pole location for the voltage and current offset estimation, rad/s
    //!
    #define USER_M1_OFFSET_POLE_rps                 ((float32_t)(20.0))
    
    
    //! \brief Defines the pole location for the speed control filter, rad/sec
    //!
    #define USER_M1_SPEED_POLE_rps                  ((float32_t)(100.0))
    
    
    //! \brief Defines the pole location for the direction filter, rad/sec
    //!
    #define USER_M1_DIRECTION_POLE_rps             (MATH_TWO_PI * (float32_t)(10.0))
    
    
    //! \brief Defines the pole location for the second direction filter, rad/sec
    //!
    #define USER_M1_DIRECTION_POLE_2_rps           (MATH_TWO_PI * (float32_t)(100.0))
    
    
    //! \brief Defines the pole location for the flux estimation, rad/sec
    //!
    #define USER_M1_FLUX_POLE_rps                  ((float32_t)(10.0))
    
    //! \brief Defines the pole location for the R/L estimation, rad/sec
    //!
    #define USER_M1_R_OVER_L_POLE_rps              (MATH_TWO_PI * (float32_t)(3.2))
    
    //! \brief Defines the convergence factor for the estimator
    //!
    #define USER_M1_EST_KAPPAQ                          ((float32_t)(1.5f))
    
    
    //! \brief Defines the scale factor for the flux estimation
    //! the default value is 1.0f, change the value between 0.1f and 1.25f
    //!
    //#define USER_M1_EST_FLUX_HF_SF                     ((float32_t)(0.120f))
    #define USER_M1_EST_FLUX_HF_SF                     ((float32_t)(0.250f))
    //#define USER_M1_EST_FLUX_HF_SF                     ((float32_t)(1.00f))
    
    //! \brief Defines the scale factor for the frequency estimation
    //! the default value is 1.0f, change the value between 0.5f and 1.5f
    //!
    #define USER_M1_EST_FREQ_HF_SF                     ((float32_t)(1.00f))
    
    //! \brief Defines the scale factor for the bemf estimation
    //! the default value is 1.0f, change the value between 0.50f and 1.25f
    //!
    #define USER_M1_EST_BEMF_HF_SF                     ((float32_t)(1.00f))
    
    //------------------------------------------------------------------------------
    //! brief Define the Kp gain for Field Weakening Control
    #define USER_M1_FWC_KP                 0.0225
    
    //! brief Define the Ki gain for Field Weakening Control
    #define USER_M1_FWC_KI                 0.00225
    
    //! brief Define the maximum current vector angle for Field Weakening Control
    #define USER_M1_FWC_MAX_ANGLE          -10.0f                        // degree
    #define USER_M1_FWC_MAX_ANGLE_RAD      USER_M1_FWC_MAX_ANGLE /180.0f * MATH_PI
    
    //! brief Define the minimum current vector angle for Field Weakening Control
    #define USER_M1_FWC_MIN_ANGLE          0.0f                          // degree
    #define USER_M1_FWC_MIN_ANGLE_RAD      USER_M1_FWC_MIN_ANGLE /180.0f * MATH_PI
    
    //! \brief Defines the number of DC bus over/under voltage setting time
    //!  timer base = 5ms
    #define USER_M1_VOLTAGE_FAULT_TIME_SET          (500)
    
    //! \brief Defines the number of motor over load setting time
    //!  timer base = 5ms, 1s
    #define USER_M1_OVER_LOAD_TIME_SET              (200)
    
    //! \brief Defines the number of motor stall setting time
    //!  timer base = 5ms, 1s
    #define USER_M1_STALL_TIME_SET                  (200)
    
    //! \brief Defines the number of phase unbalance setting time
    //!  timer base = 5ms, 5s
    #define USER_M1_UNBALANCE_TIME_SET              (1000)
    
    //! \brief Defines the number of lost phase setting time
    //!  timer base = 5ms, 10s
    #define USER_M1_LOST_PHASE_TIME_SET             (2000)
    
    //! \brief Defines the number of over speed setting time
    //!  timer base = 5ms
    #define USER_M1_OVER_SPEED_TIME_SET             (600)
    
    //! \brief Defines the number of startup failed setting time
    //!  timer base = 5ms, 10s
    #define USER_M1_STARTUP_FAIL_TIME_SET           (2000)
    
    //! \brief Defines the number of over load setting times
    //!
    #define USER_M1_OVER_CURRENT_TIMES_SET          (5) //5
    
    //! \brief Defines the number of stop wait time
    //!  timer base = 5ms, 10s
    #define USER_M1_STOP_WAIT_TIME_SET              (2000)
    
    //! \brief Defines the number of restart wait time
    //!  timer base = 5ms, 10s
    #define USER_M1_RESTART_WAIT_TIME_SET           (2000)
    
    //! \brief Defines the number of restart time
    //!
    #define USER_M1_START_TIMES_SET                 (3)
    
    //! \brief Defines the alignment time
    //!
    #define USER_M1_ALIGN_TIMES_SET                 (2000)     // ctrl period
    
    //!
    //!
    #define USER_M1_QEP_UNIT_TIMER_TICKS            (uint32_t)(USER_SYSTEM_FREQ_MHz/(2.0f * USER_M1_ISR_FREQ_Hz) * 1000000.0f)
    

      

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

    看起来您使用的电机对于 InstaSPIN-FOC 而言并不难、因为它只是一个通用电机、而不是高频、低电感和高电流电机。

    如果可能、您可以尝试使用通用电机控制实验的支持套件进行测试。 或者、按照实验用户指南从构建级别1运行示例实验、以确保您进行的迁移是正确的。 如果您只是在无负载的情况下在此阶段进行初始测试、那么除了设置正确的电机电气参数(Rs、Ld、Lq 和磁通)之外、我认为您无需更改任何控制参数

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    或按照实验用户指南从构建级别1运行示例实验,以确保您进行的迁移是正确的

    所有使用 Nidec 4极的构建级别1-4在预期的情况下均可正常运行电机高速启动过程中进行、但 eSMO 不能很好地工作。

    我认为除了设置正确的电机电气参数(Rs、Ld、Lq 和磁通)外,您不需要更改任何控制参数

    上面显示的这些 SDK4.0值可以在不发生任何问题的情况下运行36极电机。  UMCSD 添加了 SDK 从未有过的用户电机设置。 也许需要调整 UMCSDK 增量值、或者上方代码中的延迟时间以处理更大的转子质量? °、当 UMCSDK 无法使用 SDK4.0具有的类似 USER_MOTOR1_MAX_CURRENT_A 设置加速轨迹基准 Hz 时、空载质量会在头60 μ s 下降。 我可以使36极旋转360度1-2Hz 闭环、但从不会加速到轨迹基准 Hz。 对于 Kgm^2质量、MCSDK 似乎进入轨迹基准窗口至 FAST。 调整 KI/KP_SPD 值在这个问题上会有一定的影响、但不如 SDK4.0大。

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

    您需要根据使用的电机调整 eSMO 参数。 默认参数仅适用于示例实验中测试的电机。

    也许需要调整 UMCSDK 增量值或以上代码片段中的延迟时间来处理较大的转子质量

    可以。 您可能需要根据电机调整启动的延迟时间和电流。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是。 您可能需要根据电机调整启动的延迟时间和电流。[/报价]

    与此同时、将购买高压小尺寸电机、以查看其在默认延迟和默认启动校准时间内的性能是否有所改善。 似乎是一个公平的价格,并查看其他页面添加我们找到220VDC/AC 100,000 RPM 小电机为渴望高速度的实验者。 也许为100KRPM 电动机打印3D 加权底座、它的作用就像风扇叶片前端气流的喷射引擎速度一样。   

    Shinano DC105V 25W 高速三相8线霍尔直流无刷电机高扭矩| eBay

    您是否可以建议大转子质量的校准时间(IM:0.352838295721kg/m^2)和默认值下定义(2000)= 2秒或2毫秒?

    #define USER_M1_ALIGN_TIMES_SET          第41集7.3分神之战 The Wights(2000)    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要根据您使用的电机调整 eSMO 参数。 默认参数仅适用于示例实验中测试的电机。

    好的、我看到 eSMO PLL 的一些新设置、但它确实启动了 Nidec 电机、尽管快速失速、但不会在没有复位 MCU 的情况下重新启动。

    还会在 User_Motor_3 (PT24P)的多个电流电平(103VDC 至11.95A User_Max)上测试 MCSDK。 转子质量(0.0622692574922507kg/m^2)有相同的症状、不会加速到轨迹、最多只能以1-4Hz 的频率旋转、而高侧 V 相 NFET 将迅速散掉高于5个 NFET 的高热量。 您能建议哪些延迟时间设置可以帮助旋转这个其他质量吗? 电机 ID 在任何电流设置下都未使转子旋转、但 RS_Ohms 非常精确。

    #if defined(USER_MOTOR3)
    #define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
    #define USER_MOTOR1_NUM_POLE_PAIRS         (12) //
    
    #define USER_MOTOR_SPEED_REF_HZ            (120) // Set Trajectory Speed
    
    #define USER_MOTOR1_Rr_Ohm                 (NULL)//ACIM only
    
    #define USER_MOTOR1_Rs_Ohm                 (0.310084999)//0.310084999
    #define USER_MOTOR1_Ls_d_H                 (0.00638059108)//0.00638059108
    #define USER_MOTOR1_Ls_q_H                 (0.00638059108)//0.00638059108
    #define USER_MOTOR1_RATED_FLUX_VpHz        (0.870792627)//0.870792627
    
    #define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)//ACIM only
    
    #define USER_MOTOR1_RES_EST_CURRENT_A      (8.75f)
    #define USER_MOTOR1_IND_EST_CURRENT_A      (-7.4375f) //-15%
    #define USER_MOTOR1_MAX_CURRENT_A          (9.355f)
    #define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (20.0f)
    
    // Number of lines on the motor's quadrature encoder
    #define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
    
    #define USER_MOTOR1_INERTIA_Kgm2           (0.0622692574922507)
    
    #define USER_MOTOR1_FREQ_NEARZEROLIMIT_Hz  (5.0f)          // Hz
    
    #define USER_MOTOR1_RATED_VOLTAGE_V        (130.0f)
    #define USER_MOTOR1_RATED_SPEED_KRPM       (1.0f)
    
    #define USER_MOTOR1_FREQ_MIN_HZ            (2.0f)           // Hz
    #define USER_MOTOR1_FREQ_MAX_HZ            (90.0f)         // Hz
    
    #define USER_MOTOR1_FREQ_LOW_HZ            (2.0f)           // Hz
    #define USER_MOTOR1_FREQ_HIGH_HZ           (80.0f)         // Hz
    #define USER_MOTOR1_VOLT_MIN_V             (1.0f)           // Volt
    #define USER_MOTOR1_VOLT_MAX_V             (110.0f)          // Volt
    
    #define USER_MOTOR1_FORCE_DELTA_A          (0.05f)          // A
    #define USER_MOTOR1_ALIGN_DELTA_A          (0.01f)          // A
    #define USER_MOTOR1_FLUX_CURRENT_A         (3.325f)           // !A
    #define USER_MOTOR1_ALIGN_CURRENT_A        (5.325f)           // !A
    #define USER_MOTOR1_STARTUP_CURRENT_A      (8.325f)           // !A
    #define USER_MOTOR1_TORQUE_CURRENT_A       (3.65f)            // !A
    #define USER_MOTOR1_OVER_CURRENT_A         (15.5f)            // !A
    
    #define USER_MOTOR1_BRAKE_CURRENT_A        (1.0f)           // A
    #define USER_MOTOR1_BRAKE_TIME_DELAY       (12000U)         // 60s/5ms
    
    #define USER_MOTOR1_SPEED_START_Hz         (1.0f)
    #define USER_MOTOR1_SPEED_FORCE_Hz         (2.0f)
    #define USER_MOTOR1_ACCEL_START_Hzps       (1.5f)  // !Hz
    #define USER_MOTOR1_ACCEL_MAX_Hzps         (2.0f)  // !Hz
    
    #define USER_MOTOR1_SPEED_FS_Hz            (3.0f) // Flying Start

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能建议哪些延迟时间设置可以帮助旋转此其他质量吗? [/报价]

    #define USER_MOTOR1_RES_EST_CURRENT_A (8.75f)
    #define USER_MOTOR1_IND_EST_CURRENT_A (-7.4375f)//-15%

    电机的额定电流是多少? 您是否尝试识别空载电机?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电机的额定电流是多少? 您是否尝试识别无负载电机?

    尽管它开始旋转10.75A 并快速使 V 高侧 NFET 过热、但可能是30A PEAK #17 AWG Cu。 是的、通过 FAST 实现电机 ID、无需任何轴负载。 转子通过数字秤重4.898797596KG (10.8lbs)、AG 在本测试中较宽、扭矩峰值为5-8 Nm。 电机 ID 快速降低转子负载的方式与在线运行时相同、必须为转子提供一些帮助以使旋转电流快速上升。 电流达到峰值、因为在此测试中 AG 更宽、从开环到闭环需要更长的延迟。

    由于未供电转子与定子齿自定位、对齐延迟时间可能为 NULL 还是被省略?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    AG 在本次测试中较宽、扭矩峰值为5-8牛米

    这话什么意思?  电机的额定电流是多少?    与 USER_MOTOR1_MAX_CURRENT_A 相比、USER_MOTOR1_IND_EST_CURRENT_A 的值似乎过高 。

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

    气隙。  

       与 user_motor1_IND_EST_CURRENT_A 相比,user_motor1_MAX_CURRENT_A 的值似乎过高 。

    我将饱和电流设置为高于 USER_EST、以使转子按照电机 ID 过程的指示旋转并使 in_est 达到 USER_est 的-15%。 奇怪的是、设置 ind_est -14A 和 user_est +14A 等值不会改变开环观测器启动延迟时间。   

    似乎此问题会影响 SDK 和 MCSDK 低速观测器很快进入闭环、略高于1Hz。 注意到 SPEED_Hz 开始切换正整数和负整数、并且在转子甚至运动前2秒会出现电流波形。 似乎需要将开环观测器设置为等待稳定状态速度>5Hz、然后再启用闭环或在低速观测器中设置延迟时间。 带紧密 AG (0.036") SDK4.0的电机几乎不会随时启动,并 FORGE MCSDK 是完全失败的。 在开环转换到闭环期间会听到线圈在加速运动的磁滑电流。 在两个大质量转子上的 SPM 开环转换过程中似乎都存在非同步的电度差。

    根据轴负载、转换延迟可能需要更长、或者开环赫兹设置更高。 是否将其视为零速用户设置= 1Hz?

    这可能就是 SDK4..0能够启动36极电机的原因、但 MCSDK 无法且即时在转子运动之前跳转到闭环。 即使增加校准延迟2-3秒或设置(ALIGN = FALSE)后、也会更快发生同样的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我根据电机 ID 过程的指示、将饱和电流设置为高于 USER_EST 以使转子旋转并使 ind_est 达到 USER_est 的15%。 奇怪的是、设置 ind_est -14A 和 user_est +14A 等值不会改变开环观测器启动延迟时间。   [/报价]

    电机的额定和最大电流是多少?  电机的额定电压和功率是多少?

    根据轴负载,转换延迟可能需要更长或开环赫兹设置更高。 是否将其视为零速用户设置= 1Hz?

    无需进行更改。 如上所述、请确保迁移正确无误。 您可以检查构建级别1~3中的迁移、或运行另一个电机以验证移植。

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

    问题似乎出在 SDK4.0 MCSDK 如何设置 SVM_MIN_C 以运行已识别的电机并启用 FWC 的情况下。 即使禁用 FWC、PWM 也不会均匀分布、因为 SVM_COM_C NFETS 保持甚至是热耗散。 文档 PDF SPRUJ26–2021年9月未说明电机 ID 在两种情况下都应如何使用。

    为什么要为电机 ID 过程启用 FWC、使用 SVM_MIN_C 还是模式 SVM_COM_C? 是否需要为电机 ID 过程启用 FWC?

    电机的额定电流和最大电流是多少?

    回答了上面的问题、此时为30A 110V。 使用梯形 FOC 计时器算法、100V 直流逆变器电机以82RPM 开环旋转、斜率约为0-6.8A 101vdc。 因此它可以旋转开环、但对于 SVM_MIN_C 不会产生分布式 PWM、必须将交流正弦波(~VS_PU 0.5)设置得非常高。 因此、SVM_MIN_C 对 V 相位上的高侧 NFET 施加应力。 看似 SVM_COM_C 会产生分布式 PWM、将电流负载分散在全部6个桥接 NFETS 上、因此需要注意。

    请确保迁移正确。

    上述迁移启动了一个无问题识别出的电流极低的4极电机。 但不是使用相同识别的电机用户参数完美运行的36极电机。 这是实验中的控件、并不像 UMCSDK 看起来75%功能那样影响移植、尽管存在更复杂的启动参数、但并没有很好地解释它们的功能。

    因此、我们必须 使用最佳猜测来设置 USER_MOTOR1_DELTA、_FLUX、_ALIGN、_STARTUP 和_扭 矩电流?

    我发现有问题的代码问题[#if !defined(motor1_PUMODE)]设置控制器参数有两种方式,但在项目构建中没有符号。 这是另一个帖子、询问有关在 USER_M1_MAX_VS_PU (0.5)时据信已启用 PU 模式。

    为什么 在没有电流重构的情况下设置 USER_M1_MAX_VS_MAG_PU (0.576)的 UMCSDK 4.0下载?  可能被忽略了、或者 ADC 窗口是否加宽了、并且改进了 PPB 的添加? 那么我们可以使用0.576、而不使用电流重构?

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

    您好、Yanming:

    问题 似乎是工程编译强制使用 MOTOR1_eSMO 符号或 MOTOR1_DRIVE.c 缺少在 motor_common.h 中定义的 handle/s 变量。 MOTOR_COMMON.h 中存在重复的定义 MOTOR1_FAST。  因此、构建必须启用 eSMO、如果工程构建具有 motor1_eSMO_N 符号、则 FAST 估算器会运行 eSMO 函数调用。 因此、当 motor1_fast 仅工程构建或 ISR 中断且运行 LED 不闪烁时、我们被迫使用 eSMO 以停止 MCU。 我们不能只运行 FAST 估算器的构建。 下面的问题是否已在更高版本的 v4.01通用 MCSDK 中得到修复?

    为什么只在 FAST 估算器项目编译中运行 eSMO 函数调用是可行的? 也许在 motor1_drive.c 中的 eSMO 调用周围添加#if、但当构建中存在符号 MOTOR1_eSMO_N 时、似乎使用的构建方式完全允许 eSMO。

    ***故障区域 MOTOR1_DRIVE.C. ***

    #if defined (motor1_fast)&& defined (motor1_eSMO)  //Maybe add ||(确定<->确定)

    //运行 eSMO
    eSMO_setSpeedRef (obj->esmoHandle、obj->speed_int_Hz);
    eSMO_run (obj->esmoHandle、obj->adcData.VdcBus_V、
    &(obj->pwmData.Vabc_pu)、&(obj->estInputData.Iab_A);

    obj->angleComp_rad = obj->speedPLL_Hz * obj->angleDelayed_sf;
    obj->anglePLL_rad = MATH_incrAngle (eSMO_getAnglePLL (obj->esmoHandle)、obj->angleComp_rad);

    SPDFR_run (obj->spdfrHandle、obj->anglePLL_rad);
    obj->speedPLL_Hz = SPDFR_getSpeedHz (obj->spdfrHandle);

    五颗星 故障区 motor_common.h ***

    #if defined (MOTOR1_eSMO)
    //!< speedfr 对象的句柄
    SPDFR_Handle spdfrHandle;

    //!< eSMO 对象的句柄
    eSMO_Handle esmoHandle;
    #endif // motor1_eSMO

    #if (DMC_BUILDLEVEL <= DMC_LEVEL_3)||已定义(MOTOR1_VOLRECT)||
    已定义(MOTOR1_eSMO)||已定义(MOTOR1_ENC)
    //!<为开环控制生成角度的手柄
    ANGLE_GEN_Handle angleGenHandle;
    #endif // DMC_BUILDLEVEL <= DMC_LEVEL_3 || MOTOR1_eSMO || MOTOR1_VOLRECT

    #Elif defined (motor1_fast)|| defined (motor1_eSMO)// 5/3/23添加了 motor1_eSMO stop index 构建错误
    typedef 枚举
    {
    Estimator_MODE_FAST = 0、//!< FAST 估算器
    Estimator_MODE_eSMO = 1 //!< eSMO 估算器
    }Estimator_Mode_e;

    #Elif 已定义(motor1_fast)
    typedef 枚举
    {
    Estimator_MODE_FAST = 0 //!< FAST 估算器
    }Estimator_Mode_e;
    #Elif 已定义(MOTOR1_eSMO)
    typedef 枚举
    {
    Estimator_MODE_eSMO = 1 //!< eSMO 估算器
    }Estimator_Mode_e;

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

    经过进一步调查、MOTOR1_FAST 似乎启用要求启用 MOTOR1_eSMO、否则 ADC 中断运行极慢、CPUTM0无法重新加载周期。 但调试指示 ADC 读取数据、永恒循环似乎停止、这好像 ADC ISR 已经停止、所以 LED 不闪烁只是保持点亮。 当仅启用 MOTOT1_FAST 模式、MOTOR1_ESMO_N 构建时、fast_full_lib.lib eabi 代码中的某些指令运行速度极慢。

    部分解析:仅编译 motor1_fast 模式以某种方式使 CPUTM0在一秒内失败从不通过寄存器视图重新加载计数器计数永远不会达到100K。 CPUTM0仿真模式无关。  在1ms 中继环路[systemVars.flagEnableSystem = true]上方添加语句、以在循环期间覆盖1秒的继电器。 CPUTM0计数在 MOTOR1_eSMO 启用时也执行了奇数操作、但它不会优先于 CPUTM0计数、因为仅快速模式、计数至零停止或运行空闲仿真模式。 建议不要在 HV 套件上失败 CPUTM0。 我们使用大电流功率热敏电阻与继电器浪涌电流控制、还有助于平滑直流电源纹波电流。

    奇怪的是、电机 ID 在 flagMotorIdentify = true 时启用 SVM_MIN_C 和 FWC、因为 SVM_COM_C 仅启用 MOTOR1_FAST 模式。 电机 ID 过程执行 eSMO + FAST 估算器、但 PDF 表格显示电机 ID 仅在 FAST 模式下有效、适用于电流极低的电机 SVM_MIN_C。

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

    实验室可以单独支持 eSMO 或 FAST、也可以同时支持 eSMO 和 FAST。 似乎在我们发布此实验时、所有配置都经过了测试和验证。 我将查看示例实验、以了解是否存在您前面提到的任何问题。 您使用的 PWM 和 ISR 频率是多少? 谢谢!  

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

    尊敬的 Luo:

    您使用的 PWM 和 ISR 频率是多少? [/报价]

    20kHz PWM、10us 100Mhz 时钟速率 x25、下面的公式似乎效果要好得多。 对于频率为10ns SYSCLK 的 CPUTM0、十六进制计数值似乎错误。 寄存器视图计数从不重新加载定义的十六进制周期值、似乎会非常早地溢出、运行非常慢的 LED 闪存速率而没有 LCD 更新。

    #if defined (_F28004x) uint32_t timerPeriod =(uint32_t)((USER_SYSTEM_FREQ_MHz * 1000.0f)/ timeBaseFreq_Hz)- 1;//100.0f * 1000.0f /100.0f
    #endif

    我尝试更新 SDK4.0 4文件、MCSDK 4.02.01 (motor_common.c/h)和(motor1_drive.c/h)、并添加几个之前不存在的较新结构成员。 即使索引器对2个编译器符号进行了解析、也会导致这些错误。 尽管在编译期间(hal)和(userParams_M1)拒绝解析、无论我将全局 extern 放在何处或将 include 添加到其中、但请使用指针、而不是(。) 要加入这些成员、请解析但未编译几天前更新的 CCS12.4。 奇数部分是、它们都是在使用上述 SDK 4.0文件名进行编译期间解析的。 我保存的副本名称版本号正是因为这个原因把它们放回去。 它仅与 eSMO 和 FAST 一起使用 SDK4.0、并且没有生成 FAST Only 估算器的相电流。  

    之后 在无限循环中切换到 CPUTM1 1ms 次。 固定的 SDK4.02.01文件非常慢的 ADC ISR 时间(sys_main.c)。  ODD 还得乘以(BusVoltage * 2.2)才能获得与 LCD 输出调试相同的值、非常奇怪。 典型((((float32_t) motorVars_M1.adcData.VdcBus_V * 2.2)* 10)其中(* 10)移动小工具中的小数点、然后显示-101.2 VDC。 我看到看似代码问题的地方是 SDK4.02.01仅快速模式添加了新的电流控件、SDK4.0版本不存在。

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

    如果不将控制 ISR 频率设置为更高的值(>20kHz)、并启用 CPU 具有足够的宽度来支持后台循环。 如上所述、我认为实验室不会有任何问题。

    您可以将其中一个 CPU 计时器用作后台循环的虚拟计时器、甚至不 对后台循环使用任何虚拟计时器。 该实验仍然可以很好地工作、只有 ISR 频率对于该实验至关重要。

    BTW、您可以在不 添加任何自有代码的情况下尝试运行示例以查看发生的情况、然后逐步添加自己的代码以查看问题所在。

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

    看起来 CPU 计时器周期受 eSMO 的影响、在构建中启用了 FAST。 不过、在使用上述4个相同文件构建的 main_sys.c 中看到符号错误以更新快速控制段 SDK4.02.01后。 有4个新文件会影响以下符号 MAIN_sys.c 由#include "motor1_drive.h (halHandle)进行解析、#include "motor_common.c"在编译时无法解析、但与 SDK4.0 MCSDK 文件相关。 我通常是非常好的修复数以百计的符号错误,但经过几个小时后尝试放弃! CPU 计时器以某种方式更改了由固件加载的周期的执行时间、因此将 LED 闪存速率设置为10µs μ s 并持续1ms 会更令人困惑、它如何减少重新加载时间、可能是检查溢出状态寄存器是否读取错误。

    extern volatile motor_Vars_t motorVars_M1;extern USER_Params userParams_M1;

    HAL_MTR_Handle halHandle;//!<硬件抽象层的句柄

    HAL_MTR_Obj hal;//!<硬件抽象层对象

    #if defined(_F28004x)
    
        uint32_t timerPeriod = (uint32_t)((USER_SYSTEM_FREQ_MHz * 1000.0f) /
                                                        timeBaseFreq_Hz) - 1; //100*1000/100=1ms
    #endif
    
        // use timer 1 for 1ms timebase
        CPUTimer_setPreScaler(obj->timerHandle[1], 0);
    
        CPUTimer_setEmulationMode(obj->timerHandle[1],
                                  CPUTIMER_EMULATIONMODE_RUNFREE);
    
        CPUTimer_setPeriod(obj->timerHandle[1], timerPeriod);
    
        CPUTimer_enableInterrupt(obj->timerHandle[1]);
    
        CPUTimer_startTimer(obj->timerHandle[1]);
    
        return;
    }  // end of HAL_setupADCTriggerTimer() function

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

    您的项目似乎有问题。 请检查 CPU 时钟、PWM 是否配置正确、以及 ISR 环路中是否存在任何时间溢出。

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

    同意 CPUTM0、CPUTM1似乎配置正确。 过去检查的 ISR 抽取时间50µs 50%占空比、25µs μ s。 奇怪的是、当 CPUTM0未通过#define 宏划分周期计数时、它正在加载正确的周期值。 尽管通过目视检查、振荡器宏的数学运算是正确的 USER_SYSTEM_FREQ_MHz。

    奇怪的是,修复 FWC SVM_MIN_C 问题后,运行电机 ID Shinano LA034 (2polepairs )-平滑运行102vdc >10krpm。 使用相同的电机设置 SDK4.0电机不会加速>5.5KRPM 185Hz 轻度磁场降压。 然而 Nidec 25H(2polepairs) 24VDC 在相同的 SDK 4.0代码中运行>10krpm 325HZ 或类似。

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

    如果您没有更改示例实验、FWC 将被禁用、默认情况下、电机 ID 的 SVM 模式为 SVM_COM_C。 仅  当电机开始达到设置速度时、才将 SVM 切换至 SVM_MIN_C。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仅  在电动机开始运行至设置速度时将 SVM 切换到 SVM_MIN_C。

    这话具体是什么意思? FWC 模式 IT 在 SVM_MIN_C 中启动、然后切换到 SMV_COM_C? 默认代码设置为绕过电机 ID 设置 FWC 启用、但符号 MOTOR1_FWC_N 未在电机 ID 期间停止 SMV_MIN_C、它也设置了 FWC 标志启用、尽管代码不存在、正如 Kevin 在另一个线程中指出的那样。 如果逻辑是如此简单,那么每个人都将是世界上的程序员  。

    下面发现的问题 CPUTM0更高版本 CPUTM1编译器警告仅当十进制值替换转换整数和宏时、周期不等于1ms。 对于0x186A0或十进制100,000的1ms 时钟周期加载。 因此、该值在100µs tick of 10,000个加载计数中被截断、但编译器在调用方转换宏和变量时没有发出警告。 我已经看到代码布尔逻辑在1ms 的节拍设置 CPUTM0内工作、但其他部分看起来不像那个慢节拍率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的意思是什么? FWC 模式 IT 在 SVM_MIN_C 中启动、然后切换到 SMV_COM_C?

    电机控制将从  SMV_COM_C 开始,并切换到 SVM_MIN_C 。 SVM 模式与 FWC 模式无关。 FWC 也与电机 ID 无关、只是电机 ID 不使用 FWC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    电机控制将从  SMV_COM_C 开始并切换到 SVM_MIN_C   [/报价]

    何时执行该操作- eSMO 进入哪种模式?

    SVM 模式与 FWC 模式无关。

    好的、这就是上面发生的情况、设置了 FWC 标志、但模式将保持为 SVM_MIN_C。 电流极低的电机将在 SVM_MIN_C 中加速旋转、并保持在 SVM_MIN_C 中。 当 FLAG_BYPASSMotorId = true 时、更大的电机负载会快速使 SVM_MIN_C 失速。 Shinano 电机(+103v, 243mA, 25W)由于 VpHz 与 MCSDK 电机 ID 的速度相差甚远,所以不会加速到5.5KRPM (SDKv4.0)以上。 SDK v4.0手动降低 VpHz,直到速度在多次调整后超过7KRPM,且无需磁场降压。 奇怪的是、电感不是决定因素、可能变化很大、变化不大。 SDK 和 MCSDK VpHz 之间的扩展相当大、尽管 Nidec +24V 只是 Shanano、但两个版本的 VpHz 都相同。  

    UMCSDK v4.0: USER_MOTOR1_RATED_FLUX_VpHz (0.259595213)

        SDK v4.0: USER_MOTOR_RATED_FLUX_VpHz   (0.101245213)

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    何时这么做- eSMO 进入 FAST 的模式?

    eSMO 和 FAST 也是如此。 SVM 模式与估算器算法 eSMO FAST 无关。

    好了,这就是发生的 SNIP,设置了 FWC 标志,但模式将保持 SVM_MIN_C

    如果您没有在示例实验中更改控制流、我认为不会出现您上面提到的问题。 请先尝试使用示例实验。