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.

[参考译文] LAUNCHXL-F280039C:UMCSDK v5.03 减速力差值 Hz 会导致电压反弹

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1608491/launchxl-f280039c-umcsdk-v5-03-deceleration-force-delta-hz-cause-voltage-bouncing

器件型号: LAUNCHXL-F280039C

你好、导师、

注意添加降低 SPEED_ref_Hz 的方法后受控电机取消的问题。 以下代码导致 PWM 驱动器反弹电压上升/下降到 10Hz 附近、并在其中禁用低于 10Hz 参考速度的运行识别标志。 在 18 极电机中、当转速降至 90Hz 以下时、电压反弹会变得更糟、在 130Hz 下运行速为 640RPM。  减速电流似乎不稳定> 90Hz、但在加速时正常。

奇怪的是、这种相同的受控减速方法在低于 1.0f 安培的低电流下正常工作、几乎没有注意到示波器探头上有任何反弹。 然而、电机 8.0f-11.0f 放大器我们是否需要通过减小电流来阻止严重的电压反弹? 在何处调整减速电流、速度控制 Pi?

为什么我们只需禁用 motorVars_M1.flagEnableRunAndIdentify = false 就会使电机崩溃、因为占空比恢复到 50%、电机再生电压会使对接中的 MOSFET 整流器生效。 因此需要缓慢减速至停止、并且强制差值对它设置控制周期速度、SDK 或 UMCSDK 方法没有任何影响。 它在永久环路中具有 4 个–28µs 来进行调节、甚至缓慢地降低速度 Ref_Hz -= 0.05 每个周期都不会影响停止电压反弹。  

       // FAST/eSMO Start/Forced Speed
         USER_MOTOR1_SPEED_START_Hz         =      5.0f;  //Hz
         /* Sets delta acceleration / deceleration speeds */
         USER_MOTOR1_SPEED_FORCE_Hz         =      2.0f;
         //
         USER_MOTOR1_ACCEL_START_Hzps       =      5.0f;  // !Hz
         USER_MOTOR1_ACCEL_MAX_Hzps         =     10.0f;  // !Hz      

// motor1_drive.c:
runMotor1Control(motorHandle_M1) { if(bDecel) { /* reduce acceleration, slowly decelerate to a stop */ motorVars_M1.speedRef_Hz = motorVars_M1.speedRef_Hz -= 0.005f; {
/* Disable PWM drive anywhere near low hertz speed obj->speed_Hz */
else if(motorVars_M1.speedAbs_Hz <= 2.0f) //USER_M1_FREQ_NEARZEROSPEEDLIMIT_Hz
{
DEVICE_DELAY_US(5000); //5ms
/* Set motor offline not running */
motorVars_M1.flagEnableRunAndIdentify = false;
//
DEVICE_DELAY_US(5000); //5ms
/* Restore user throttle pedal trajectory speed */
obj->speedRef_Hz = USER_MOTOR1_SPEED_REF_HZ; //((uint16_t)SpeedVal);motorVars_M1.
//
DEVICE_DELAY_US(5000); //5ms
//
}
/* update the trajectory speed */ TRAJ_setTargetValue(obj->trajHandle_spd, obj->speedRef_Hz); // if((fabsf(obj->speed_Hz) > obj->speedStart_Hz) || (obj->motorState == MOTOR_CTRL_RUN)) { // Sets the acceleration / deceleration for the speed trajectory TRAJ_setMaxDelta(obj->trajHandle_spd, (obj->accelerationMax_Hzps * objUser->ctrlPeriod_sec)); // other control codes return; }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、您是对的。 您可能需要根据电机和系统调整转速和电流调节器以及加速/减速参数。 示例实验只是设计人员可以作为起点的典型参考。 该示例实验可能不是所有定制电机的最终解决方案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该示例实验只是设计人员的典型参考资料

    尊敬的 Yanming:

     但该示例远离 SDK 版本的 PWM 启用禁用方法、或者 x39c MCU 的行为与 x49c 不同。 如果您测试代码片段、将快速发现当运行识别控制标志被清除 (FALSE) 时、50%占空比会在重新启动超时事件生效之前快速返回。 这会导致碰撞、因为转子可能仍在再生旋转!

     实际上、速度 PI 设置对解决该问题没有任何影响。 只有通过允许控制器在减速期间将速度 Ref_Hz 一直降低到 1Hz、并在几毫秒后清除运行识别标志(直到转子停止旋转)、50%占空比才能恢复正常、而不会导致磁碰撞事件。 转子碰撞事件听起来像是一个很大的弹簧断裂。 声音与电感值完全错误、电机高速崩溃的声音相同、因为 50%的占空比会在转子停止旋转之前返回、并且 CMPSSx 未锁存 DCA1/B1 事件(仅设置 STS 标志)。

     奇怪的是、强制 TZOST 事件不能用于禁用 PWM 输出、因为 DCA1/B1 TZ 标志也无法通过 TZCLR 寄存器控制来清除。 因此、只要启用 PWM (hal.h)、TZOST 寄存器中就不会清除 TZ 强制 OST 跳闸操作标志事件。 这真的很困惑、因为在失调电压计算中没有 PWM 驱动。 因此、除了 DCA1/B1 被置为有效之外、我们禁用了强制 TZ OST 事件。 我们期望与 x49c 具有相同的 PWM 模块行为、但 x39c PZ 器件似乎对如何处理强制 TZOST 事件有其他想法、或者器件是实验性的两个 TI store 发送给我们的 LaunchXL-39c?

    因此、只要运行识别标志改变状态、在 C 代码置位 50%占空比之前、应调用 RESTART 超时事件以避免发生我在该线程中所述的磁冲突事件。 也许研究在哪里调用重新启动超时,可能是在 stopMotorControl() 函数中?  

    主要区别(x49c、x39c MCU 类)强制 DCA1/B1 TZOST 事件将清除所有 TZ 标志、启用运行识别、并且动作限定器保持、PWM 低电平状态或在跳闸事件中禁用。 然而、当在偏移计算禁用 PWM 后设置任何 OST TZ 标志时、再次启用 PWM (hal.h) 无法清除 OSTTZ 标志位。 这可能是由于 x39c PZ 器件在 TZOST 标志位中有其他勘误表?    

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

    BTW:上述代码片段已编辑为包含适当的减速值、因为它不会以在设置 user_mtr1.h 时的任何节拍率使 PI 速度控制器崩溃 我们在其他减速速度下测试了值、–2Hz 似乎与 SDK 一起工作正常、但与 UMCSDK 代码无关。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该示例实验只是设计人员的典型参考资料

    因此、只要运行识别标志改变状态、在 C 代码置位 50%占空比之前、应调用 RESTART 超时事件以避免发生我在该线程中所述的磁冲突事件。 也许研究在哪里调用重新启动超时,可能是在 stopMotorControl() 函数中?  

      // initialize control parameters for motor 1
    void initMotor1CtrlParameters(MOTOR_Handle handle)
    {
    
        obj->stopWaitTimeCnt = objSets->stopWaitTimeSet; //0
           
           
            // Restart olny after stop wait time has expired
            else if((obj->flagRunIdentAndOnLine == false) &&
                    (obj->stopWaitTimeCnt == 0))
            {
                restartMotorControl(handle);
                /* Reload stop wait time count */
                obj->stopWaitTimeCnt = objSets->stopWaitTimeSet;
            }
    
            /* Has timeout count expired ? */
            obj->stopWaitTimeCnt--;
        }
        // if(obj->flagEnableRunAndIdentify == false)
        else if(obj->flagRunIdentAndOnLine == true)
        {
            stopMotorControl(handle);
    
            if(obj->flagEnableFlyingStart == false)
            {
                obj->stopWaitTimeCnt = objSets->stopWaitTimeSet;
            }
            else
            {
    
                obj->stopWaitTimeCnt = 0;
                
               /* Has timeout count expired ?
                   stopWaitTimeCnt--  */
            }
        }
        else
        {
        }

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

    尊敬的 Yanming:

    我们启用 Pi 调优 (MOTOR1_PI_TUNE) 运行时控制、并进行了一些更改、但不知道哪个 Kp、Ki 即使在下面的微小更改后也会导致电压振荡。

    您能否指出哪种设置有助于在减速期间减少电压振荡(反弹)且轨迹值<330Hz。 令人高兴的是、在 DRV8353-EVM 电机 ID 在 eSMO 销毁之前生成了真实的 Ld / Lq 电感值后、我们的 36 极电机通过 UMCSDK 实现了更好的速度。

    随着电机电流从较低的电压增加 4.3A(向上 5.85A)以获得更高的速度、振荡开始。 线性 2.5KW 电源 160V 直流读数显示了电流振荡 3.5A 至 6.8A 低转子速度 322Hz 可旋转高达 447Hz、因此它会变得非常平滑或反弹。 此电机可在 180vdc 下通过>15A 的梯形电流从更高的电压旋转>550Hz。  

      

    //电流和速度 PI 调节器调优系数
    USER_MOTOR1_GAIN_SPEED_LOW_Hz = 10.0f;//10.0F
    USER_MOTOR1_GAIN_SPEED_HIGH_Hz = 750.0f;//50.0F

    USER_MOTOR1_KP_SPD_START_SF = 10.5f;// 0.1~100.0
    USER_MOTOR1_KI_SPD_START_SF = 2.5f;// 0.1~10.0

    USER_MOTOR1_KP_SPD_LOW_SF = 10.0f;// 0.1~100.0
    USER_MOTOR1_KI_SPD_LOW_SF = 4.0f;// 0.1~10.0

    USER_MOTOR1_KP_SPD_HIGH_SF = 10.0f;// 0.1~100.0
    USER_MOTOR1_KI_SPD_HIGH_SF = 4.0f;// 0.1~10.0

    USER_MOTOR1_GAIN_IQ_LOW_A = 2.0f;
    USER_MOTOR1_GAIN_IQ_HIGH_A = 4.0f;// 6.0f

    USER_MOTOR1_KP_IQ_START_SF = 1.5f;// 0.1~10.0
    USER_MOTOR1_KI_IQ_START_SF = 1.5f;// 0.1~10.0

    USER_MOTOR1_KP_IQ_LOW_SF = 1.0f;// 0.1~10.0
    USER_MOTOR1_KI_IQ_LOW_SF = 2.0f;// 0.1~10.0

    USER_MOTOR1_KP_IQ_HIGH_SF = 1.0f;// 0.1~10.0
    USER_MOTOR1_KI_IQ_HIGH_SF = 1.0f;// 0.1~10.0

    USER_MOTOR1_KP_ID_SF = 1.0f;// 0.1~10.0
    USER_MOTOR1_KI_ID_SF = 2.0f;// 0.1~10.0

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

    如上所述、您可以首先尝试调整速度环路的 KP&KI。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如上所述、您可以首先尝试调整速度环路的 KP&KI。

    您可以看到、我们已经这样做了、但仍然会发生电压反弹、而不是仅在加速期间保持在低于 340Hz 的特定速度或缓慢减速时才发生。 我们看了一些过去的屏幕截图、注意到 KP_SPD 值非常低、为 0.1xx、而不是 41.xx。

    什么是将 KP_SPD 值 41.xx 设置为非常高的值、请注意最终的 FB 值 (447.442455) 小数点已移动。 然而、在速度启动或高 SF 变为 10.0f 低/高并且电流振荡保持不变后、初始值 41.xx 从未降低或增加。 到目前为止的比例因子对控制交流电振荡没有影响。 担心在不知道 Pi 比例导致电流振荡的情况下进行更改、而 Pi 积分更常见地是导致此类报告的振荡的原因。  

    这些 IQ 值的作用究竟是什么?它们的接触程度如何?  

    BTW:两个 UMCSDK v5.03/v5.04 REX 下载都有用户 PU 设置 0.6、而当前重建未启用! 我们昨天在添加项目符号和代码修复后进行了测试。 今天将测试完整的梯形电流  

    我们想使用 FAST/ESMO (FOC)、而不是霍尔传感器和表 3-7(SPRUJ26A–2021 年 9 月–2024 年 4 月修订)来测试梯形电流、不会努力建议 FOC 可以在启用电流重建的情况下启动 BLDC 或 SPMM?

    我们使用了 FOC 启动功能、带有 ARM Cortex 全梯形电流、但也发现 NFET 快速衰减电流使电机运行得更安静。 尽管它必须在慢速衰减下启动、但然后切换到 FAST、CMPB 需要直通死区、这是所需的棘手代码。 在占空比更新期间、它有时无法切换到快速衰减模式。 也许其他人会发现在没有霍尔的情况下快速启动 BLDC 电机、而表 3-7 并未传达此类信息、似乎回避了清晰度、迫使霍尔在所有模式下运行?   

      

    //motor1_drive.c
    
    #if defined(MOTOR1_OVM) || defined(MOTOR1_IS_RECONSTRUCTION)
    
        MATH_Vec3 adcDataPrev = {0.0, 0.0, 0.0};
    
        /* Full AC sinewave or Trapezoidal wave forms:
         * Set USER_MAX_VS_MAG = 1/SQRT(3) = 0.5774 for a pure sinewave
         * with a peak at 100% duty cycle. Current reconstruction */
        if(USER_M1_MAX_VS_MAG_PU != 0.5f)
        {
            // Over Modulation Supporting, run the current reconstruction algorithm
            SVGENCURRENT_RunRegenCurrent(obj->svgencurrentHandle,
                                     &obj->adcData.I_A, &adcDataPrev); //
        }
    #endif  // MOTOR1_OVM
    

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

    您可能必须检查直流母线电压是否足以运行此电机、如果需要在直流母线上添加大容量电容器、则使用示波器监测直流母线电压。

    这些 IQ 值有什么具体作用?它们的接触程度如何?  [/报价]

    这并不重要、只需要在一些特殊系统中进行调优。 默认 Kp 和 Ki 值根据电机电气参数计算。

    [引用 userid=“48581" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1608491/launchxl-f280039c-umcsdk-v5-03-deceleration-force-delta-hz-cause-voltage-bouncing/6207415 ]可能其他人会发现快速启动无霍尔和表 3-7 没有传达这样的信息,似乎回避清晰度,强制霍尔在所有模式?   [/报价]

    FAST 只是估算电机转子位置和速度的观测器。 它仍然是一个无传感器观测器,这使得它难以实现与有传感器 FOC 或有传感器梯形算法相同的启动性能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    FAST 只是一个估算电机转子位置和转速的观测器。 [/报价]

    然而、BLDC 可以在 FOC 上运行、而无需霍尔传感器、这是表 3-7 中不够清晰的情况。 这意味着在没有霍尔传感器的情况下通过快速功能启动 FOC? 首字母缩略词 FOC 在大多数情况下都表示不带传感器文本中使用的术语、其中磁场 EMF 决定了转子位置、而不是传感器反馈。

    我们旧的 ARM Cortex 代码会产生真正的梯形电流、其中具有过调制 PU (0.6666) 的 UMCSDK 无法完全产生梯形波形、因为电流变为 100%峰值正弦波、相位驱动仍然保持为方波、根本不会变成梯形。

    因此我感到困惑:为无霍尔传感器的 BLDC 配置 UMCSDK 是否可以在开环换向期间使用 FOC 启动(仅限 EMF)? 或者表 3-7 中的 BLDC 模式是否仅支持通过 FAST 或 eSMO 转子位置控制来启动闭环霍尔? 我们可以使用旧的 ARM Cortex 套件在开环启动时启动具有 EMF 的 BLDC 电机、从而以设定的速度切换到闭环。 但是、如果总线电压不稳定、它可能会更频繁地通过无传感器启动失败。  

    根据电机电气参数计算默认 Kp 和 Ki 值。

    当 USER_MOTOR1_MAX_CURRENT_A 设定值更接近饱和值 (USER_MOTOR1_MAX_CURRENT_A) 时、PI 值(比例和积分)无法对电压反弹进行任何控制。 表面上积分似乎在 Speed_Ref_Hz 之后快速调制电流、因为 PWM 电压以某种分数速度垂直反弹。 电动机声音变为 Wa、Wa、Wa 以更快的转子速度加速。  

    一个示例是使用该 36 极电机时梯形电流的 PI 设置;P=262,560 和 I=690。 当 100 是 P 值的最高值且 I = 10 时、我们如何将此示例与上述 PI 设置相关联? PI 控制非常精确、无法与我们在 UMCSDK 中所听到的极端比例集成。   

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请问您这么说:UMCSDK 配置为无霍尔传感器的 BLDC 吗?在开环换向期间(仅限 EMF)、可以使用 FOC 启动吗? 或者表 3-7 中的 BLDC 模式是否仅支持通过 FAST 或 eSMO 转子位置控制来启动闭环霍尔? 我们可以使用旧的 ARM Cortex 套件在开环启动时启动具有 EMF 的 BLDC 电机、从而以设定的速度切换到闭环。 但是、如果总线电压不稳定、它可能会更频繁地通过无传感器启动失败。  [/报价]

    是的。 您提到的上述选项在实验室中支持。

    一个示例是梯形电流的 PI 设置;使用此 36 极电机时、P=262,560 和 I=690。 当 100 是 P 值的最高值且 I = 10 时、我们如何将此示例与上述 PI 设置相关联? PI 控制非常精确、不能与我们在 UMCSDK 中听到的极端比例集成。

    实验中使用的浮点格式、似乎您上面提到的 PI 增益过大。 电流环路的 PI 增益根据电机参数进行计算。 您可以根据系统调整这些参数。

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

    您是说我们可以在工程属性中设置符号 (motor1_halls)、FAST 仍会断言开环启动?

    我很遗憾地说、表 3-7 建议这不是可能的、或者 BLDC 模式将产生 PWM 梯形波形电压。 调制方法 CMS_full 不会在文档中显示开发人员可能看到的电流或电压的任何捕获。 这个软件套件需要做更多的工作、看起来它试图传达给大家很多关于 DAC 波形审查的意见、但仍然忽略了其无传感器 BLDC 讨论。  

    电流环路的 PI 增益根据电机参数计算。 您可以根据您的系统调整这些参数。

    Yanming、PI 控制器不稳定、会将直流逆变器吹向 450Hz 以上。 当我们增加 10 伏多 157v 到 167v 降低电机电流尝试停止低频电流振荡总是变得非常快>450Hz 在相位或示波器捕获上是不可检测的。 当 PI 速度降低 1200rpm 并快速推回时、频率突然上升到更高的赫兹 1650RPM(激光读取)、就像启用了 FW 一样、否则在 157v 时挂起、大约 458Hz 不会移动更高。 现在、1650RPM 已经凉了、但随着电机在电流和饱和减少的情况下跳至预期转速、SpeedHz 读数仍保持在 458Hz 左右。 与梯形电流直流逆变器相比、电机不会产生任何实际速度的低电流。  

    一段时间后、我们尝试通过在 LCD 滑动电位器上滑动基准频率来降低 1650RPM、这会熔断直流逆变器 15A 保险丝! 我是说、它取出了三个 50 安培 NFET、在第一相和第二相高侧 NFET 击穿。 这就结束了直流逆变器的使用、在实际的 PI 控制器下、能够很好地处理高梯形电流 16A、180V 直流电源。

    没有理由 PI 会振荡电压/电流并预期直流电源具有小于 2%的变化? 在开发 UMCSDK、测试各种电机时、TI 工程师可能正在实验室使用 SMP 直流电源? SDK v4.02 PI 控制器在相同的 36 极电机和 SMP 102V 直流电源下从未振荡<380Hz、PI 控制器行为发生了什么变化? 当直流锂电池组电压下降或电芯弱时、PI 会发生什么情况?  

    为什么在低频<278Hz 时、随着电流水平振荡、线性直流电源电压会振荡几伏? 也许表明 PI 控制器在直流电压变化的永久环路中的响应速度不够快? 我们只能通过与其他 PWM 调制方法进行比较来判断这种不良行为、PI 可以通过设计解决此类直流电源条件!   

    此代码嗅探是 PI 控制器如何使用线性直流电源在任何电压下以梯形电压调节电流、而不会产生电压反弹! 此代码嗅探示例在 2010 年左右公司对 Luminary Micro 提出指控后、所有权利均属于 TI。  

    //*****************************************************************************
    //
    //! Multiplies two 16.16 fixed-point numbers.
    //!
    //! \param lX is the first multiplicand.
    //! \param lY is the second multiplicand.
    //!
    //! This function takes two fixed-point numbers, in 16.16 format, and
    //! multiplies them together, returning the 16.16 fixed-point result.  It is
    //! the responsibility of the caller to ensure that the dynamic range of the
    //! integer portion of the value is not exceeded; if it is exceeded the result
    //! will not be correct.
    //!
    //! \return Returns the result of the multiplication, in 16.16 fixed-point
    //! format.
    //
    //*****************************************************************************
    // QS-BLDC v.10636 uses this assembly when multiplying to 32 bit numbers.
    // CCS will implement this function in pure assembly.  This prevents the TI
    // compiler from doing funny things with the optimizer.
    //
    #if defined(ccs)
    uint32_t MainLongMul(uint32_t lX, uint32_t lY);
        __asm("    .sect \".text:MainLongMul\"\n"
              "    .clink\n"
              "    .thumbfunc MainLongMul\n"
              "    .thumb\n"
              "    .global MainLongMul\n"
              "MainLongMul:\n"
              "    smull   r0, r1, r0, r1\n"
              "    lsrs    r0, r0, #16\n"
              "    orr     r0, r0, r1, lsl #16\n"
              "    bx      lr\n");
    #endif
    
    //*****************************************************************************
    //
    //! Adjusts the motor drive duty cycle based on the rotor speed.
    //!
    //! This function uses a PI controller to adjust the motor drive duty cycle
    //! in order to get the rotor speed to match the target speed.
    //!
    //! \return Returns the new motor drive duty cycle.
    //
    //*****************************************************************************
    uint32_t
    MainSpeedController(void)
    {
        volatile uint32_t lTempP, lTempI, lError;
    
        //
        // Compute the error between the current drive speed and the rotor speed.
        // (-MaxSpeed < lError < MaxSpeed)
        //
        lError = (uint32_t)(g_ulSpeed >> 14) - (uint32_t)g_ulMeasuredSpeed;//g_ulSpeed
    
        //
        // Add the error to the integrator accumulator, limiting the value of the
        // accumulator.
        //
        g_lSpeedIntegrator += lError;
        if(g_lSpeedIntegrator > g_lSpeedIntegratorMax)
        {
            g_lSpeedIntegrator = g_lSpeedIntegratorMax;
        }
        if(g_lSpeedIntegrator <= 0)
        {
            g_lSpeedIntegrator = 0;
        }
    
        //
        // Perform the actual PI controller computation.
        //
        lTempP = MainLongMul(g_sParameters.lFAdjP, lError);
        lTempI = MainLongMul(g_sParameters.lFAdjI, g_lSpeedIntegrator);
        lError = lTempP + lTempI;
    
        //
        // Limit the output of the PI controller based on the maximum speed
        // parameter (and don't allow it to go below zero).
        //
        if(lError <= 0)
        {
            lError = 0;
        }
        if(lError > 65536)//65536
        {
            lError = 65536; //65536
        }
    
        //
        // Return the output of the PI controller.
        //
        return(lError);
    }
    
      

    /*为设置速度控制器积分器速率
    *转换到闭环 FCL 周期*/
    g_lSpeedIntegrator =(g_ulDutyCycle * 65536)/(g_sParameters.lFAdjI);

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

    1.您可以查看实验室用户指南以启用基于霍尔传感器的 FOC、并在使用霍尔配置时启用 FAST。

    2.该示例项目使用了传统 PI 控制器进行电流环路,其增益根据电机参数进行计算。 示例工程仅作为开发人员的起点、而不是产品的最终解决方案。 设计人员必须根据其系统调整控制器或添加其他功能。 相关工程网站上有一些关于如何调整 PI 控制器的指南。

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

    问题似乎是滤波器极点位置 RC 时间常数在调节开关频率下的电压和电流时变得至关重要、而不是调制频率或方法。 基本的 UMCSDK 和 SDK 假定低极数电机通过较慢的开关 Speed_Hz 值产生高速。  

    PI 无法调节电流、因为积分在来自高极数电机的极低开关 Speed_Hz 下带外。 在 TI 电机套件中、我们具有 6 - 8 极的小型电机可以正常运行、但在 Speed_Hz 中具有较低频率的滤波器极点的 18 极位置、无法实现更高的速度、从而使其保持简单。

    升高总线电压仅会屏蔽 PI 带宽条件、但升高 SPEED_HZ 时、会将速度控制器锁定在滤波器极点位置以上。 积分无法足够快地调整以按比例补偿功率损耗、并且电流会按比例振荡。 电流在 Speed_Hz 之后的积分中变为重复的沙漏形状。