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.

[参考译文] 快速 FOC 相电流形状

Guru**** 2551110 points
Other Parts Discussed in Thread: MOTORWARE, INA240, BOOSTXL-DRV8320RS, DRV8312

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:MOTORWAREINA240BOOSTXL-DRV8320RSDRV8312

SDK v2.01

上次发布的问题 Clarke 变换应如何为快速 FOC 估算器设置 I/V alpha/beta 格式、以生成用于 Park 变换的 θ 角输出。

Lab7的 RsRecalculation 标志= false (labs.h)、我们知道 ADC 偏移计算会自动运行、从而在设置 Online = 0x1之前启用 SYS。

   motorVars.flagEnableOffsetCalc = true;

A 相会产生低于(角度)模式的电流形状、表示旁路 RsReCalibration 在闭环之前启用? Lab7在线标志在 mainISR 之前为 false、SVGEN_RUN ()、默认为 Lab7速度控制。 FAST 估算器似乎要求在闭环 SVG_RUN ()期间强制启用 RsRecalibration、否则 A 相电流变为角度而不是正弦?

图10-8显示了绕过偏移和 Rs 重校准时的电流和输出电压波形。

10.4无需重新校准即可启动
这种启动方法是使电机以闭环方式运行的最快方法。 它不会重新校准偏移或电阻。 一旦启用控制器、电机就会闭环运行。 仅当偏移和定子电阻已知时、才应使用此方法。 有关如何在启动时处理满载条件的详细信息、请参阅第14章。 图10-7显示了电机如何在空闲状态后立即以闭环方式运行、而无需任何重校准。

 //
//! \brief Initialization values of global variables
//
#define MOTOR_VARS_INIT {                                                      \
    false, /* flagEnableSys */                                                 \
    false, /* flagEnableRunAndIdentify */                                      \
    false, /* flagRunIdentAndOnLine */                                         \
    false, /* flagMotorIdentified */                                           \
    false, /* flagSetupController */                                           \
    true,  /* flagEnableForceAngle */                                          \
                                                                               \
    false, /* flagEnableRsRecalc */                                            \
    false, /* flagEnableRsOnLine */                                            \
    false,  /* flagEnableUserParams */                                          \
    true,  /* flagEnableOffsetcalc */                                          \
    false, /* flagEnablePowerWarp */                                           \
    true,  /* flagBypassLockRotor */                                           \
                                                                               \
    true,  /* flagEnableSpeedCtrl */                                           \
    true,  /* flagEnableCurrentCtrl */                                         \
    MOTORCTRL_MODE_SPEED,  /* motorCtrlMode */          
        
        
        
        if(EST_isMotorIdentified(estHandle) == true)
        {
            if(motorVars.flagSetupController == true)
            {
				/* Disable Online Rs Recalibration */
			    //? motorVars.flagEnableRsRecalc = false;
                //
                // update the controller
                // set custom current and speed controllers gains
                //
                updateControllers();
            }
            else
            {
                motorVars.flagMotorIdentified = true;
                motorVars.flagSetupController = true;
				/* Enable Online Rs Recalibration */
				//? motorVars.flagEnableRsRecalc = true;

                setupControllers();
            }
        }

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

     当 RsRecalibration (未绕过)而不是像 SPRUHJ1H–2013年1月–2019年6月修订版那样绕过时、似乎会出现角度形状(A 相电流)。

    RsRealibration 是一个奇怪的现象(false)。 然而、A 相电流看起来接近锯齿波、从而忽略了上升/下降斜率图10-8。 B 相和 C 相在上升和下降时间中具有非常好的正弦斜率。  

    更新了:在线 RsReCalibration 断言默认启用、除非估算器是专门针对 Lab7的、因此它忽略 user.h bool 标志设置。   

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

    A/V 偏移校准似乎在后台运行、EPWM1 (相位 A)增加了10µs μ A 的开/关占空比。 因此、如果保持启用控制器偏移校准、A 相也会产生角形相电流(图10-8)。 巧合似乎不是…  

    控制器从未真正禁用偏移(LAB5、Lab7) runOffsetsCalculation ()无法更新控制器 A/V 值(无论在哪里存在逻辑块)。 我修改了 Lab7 RsOnlineRecalibration 以禁用>1Hz 以实现最大启动扭矩、然后在之后禁用。 RsOnlineRecalibration()不是问题,而是在 A 相的快速估算器角度期间启用控制器的偏移计算

            //
            // run the space vector generator (SVGEN) module
            //
            SVGEN_run(svgenHandle, &Vab_out_V, &(pwmData.Vabc_pu));
    
            /* Check rotor speed >1Hz, and disable Force Angle flag */
             if((motorVars.speed_Hz > USER_FORCE_ANGLE_FREQ_Hz) &&
             		(motorVars.flagEnableForceAngle == true))
             {
             	/* Disable estimator Force Angle speed >1Hz */
                EST_setFlag_enableForceAngle(estHandle, false);
                /* Update the motor parameter flag value */
                motorVars.flagEnableForceAngle = false;
    
                /* Disable Online RsRecalibration flag */
                motorVars.flagEnableRsOnLine = false;
                /* Disable estimator RsOnline control algorithm  */
                EST_setFlag_enableRsOnLine(estHandle, motorVars.flagEnableRsOnLine);
                /* Get last Online coil ohms sent to estimator */
                motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm(estHandle);
             }

      

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

    奇怪的是,Lab7 SVGEN_RUN()代码(上面)返回的次数可能是回放次数的几次,然后回放入压入堆栈的返回地址,并且从不会到达&PWMdata 加载以更新 CMPA。 mainISR 循环的 entry 语句 if (motorVars.flagEnableOffsetCalc = false)是一个孤立的中断重入体、仅重入最后一个推入的返回地址。 因此、在 mainISR 循环底部断言其余的几个调用绝不会发生任何情况、主要是下面的这个调用。

    //
    //写入 PWM 比较值
    //
    HAL_writePWMData (halHandle、&pwmData);

    似乎解释了为什么 CMPA 影子值不会更新、而只更新1次。  

    将此调用置于 pwmData 写入的上方(&PwmData)。 它仅更新 motorVars.flagEnableSys = 0x1的调试表达式单元空闲时间。

     /*获取发送给估算器的最后一个在线线圈欧姆值*/
    motorVars.RsOnLine_Ohm = EST_getRsOnLine_Ohm (estHandle);  

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

    感谢您在上面发布的详细内容。 这一主题似乎有不同的主题、您能否直接告诉我您的问题是什么?

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

    我报告了 Lab07问题、然后发现的 RsOnlineRecalibration 必须为 Lab7启用、但不是真正的 labs.h 启用 PI 速度控制强制要求在电机启动之前启用 RsOnlineRecalibration。  

    然而、一旦电机转速大于1Hz、将 RsOnlineRec 保持为启用似乎是不正确的、但每次重新启动电机时最好进行检查。 为什么上述代码方法中的最后一个在线 RsReCalibration 未报告准确的 motorVars.RsOnLine_Ohm? 返回值通常大于实际相位线圈电阻的3倍。  

    症状:

    在线 RsRecalizzation 已禁用、并且没有慢速启动扭矩、10Hzps 轨迹速度。 同相 A 相产生的锯齿电流如图所示、B 相、C 相则不是。 由于 A 相电流的形状与图中所示的相同、因此是否始终启用控制器失调电压计算?峰值非常陡峭? 电流不会在3个相位之间均匀分布。

    请注意、必须禁用两个校准才能中止或终止向 A 相的直流注入。 根据 SPRUHJ1H–2013年1月–2019年6月修订版、这两个校准会在 A 相上生成锯齿电流。 出现偏移重校准故障的原因、AKA 偏移重新计算被移至 Lab07中、这与文档文本相反。 请注意、它不是 B 相或 C 相、仅显示 A 相、具体显示了锯齿波形。

    EPWM1还有一个可变占空比10µs >EPWM2或>EPWM4,与公布的数字类似,它不应该! CMPA 在每个周期中加载相同的周期、相位 A (EPWM1)应具有与相位 B (EPWM2)和相位 C (EPWM4)相同的占空比。

    考虑到线圈电阻几乎相同、A 相电流如何保持锯齿形状更多且幅度更低? 如果 Clarke 变换和 CMPA 周期负载正常工作、则所有3个相位的电流分布都应相当均匀。

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

    A 相电流在低速(60-80Hz)时呈锯齿形、并在上升/下降时间逐渐增益一些小电弧。 为什么只有 A 相大部分是锯齿形电流? B 相、C 相具有接近140Hz 的类似拐点失真。 一些电流 THD 与栅极驱动传播延迟相关、但并非全部相关。  

    HAL_writePWMData ()读取 TBPRD 寄存器(用于循环)写入 CMPA 匹配值,即使通过影子加载(CTR=0/CTR=TBPRD)也会拒绝在 ePWM 发生器之间均匀地同步匹配计数。 C++通过(用于循环)对写入后(原始)寄存器进行读取的功能在代码的这个区域不是很好。

    两个相位之间同一25µs 周期的多个随机匹配计数会导致奇形不稳定的电流? 在 WA 周围有什么好的工作? 似乎将从器件链接到主 CMPA 将获得偶数匹配并省略(对于循环)。 在每个 CMPA 匹配计数加载期间、TBCTR 仍在计数、即使是通过影子加载事件也是如此。

    然而 、将 CMPA 2从器件与单个主 ePWM 相连接可生成相电流的随机形状。 也许 ADC Isense 采集 EOC 中断时间会发生变化?

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

    默认情况下、Rs 在线校准在 lab07中禁用、仅 lab10、后续实验启用并支持  Rs 在线校准。

    PWM 周期寄存器的值是固定的、在除 lab12之外的所有实验中不会改变、并且 CMPA 通过在 TBCTR=0时更新被设定为影子加载模式。  

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

    然而、Lab07无法在 PI 被启用时启动电机10Hzps、并且轨迹中断节拍= 1、在 Rs 在启动时的运行频率<1Hz 时、可为2个节拍。 电机启动需要几秒钟时间、转子来回跳动几度。 为什么 CMPA A 相比 B 相或 C 相具有10µs μ V>占空比、以及尖峰电流峰值、如图10-8所示? 流入 ADC 通道的 Vsense (A、C、B)具有相同的幅度。

    BoostXL 以 Id 低电感值启动电机 Lab7,电流峰值>USER_MOTOR_MAX_CURRENT_A 值。 当 Vsense 阶数更改为 A、C、B 并且指向 Clarke 输入数组数学时、200µH Ω 和980µH Ω 之间存在巨大差异。   

    通过检查 FCL 代码、Clarke 会将 ADC 相电流* ADCScale * 1/√3相乘、并且没有用于 SDK 的 typedef 指针名称。 不确定添加与 SDK 设计冲突的 FCL 代码的目的是什么。  

    注意 FCL 使用 ADC PPB 寄存器来获取当前值、而不是 EOC 采样值。

    //
    // FCL MACRO implementing CLARKE transform on currents using pointers to
    // registers used in both PI CONTROL and COMPLEX CONTROL
    //
    #define FCL_CLARKE_STYLE_1()                                                   \
        clarke1Alpha = (float32_t)((int16_t)HWREGH(curA_PPBRESULT) *               \
                                FCL_params.adcScale);                              \
        clarke1Beta  = ((clarke1Alpha +                                            \
                         (2.0 * ((float32_t)((int16_t)HWREGH(curB_PPBRESULT)) *    \
                          FCL_params.adcScale))) * ONEbySQRT3);
    
    //
    // FCL MACRO implementing CLARKE transform on currents using bit field type
    // register access used in both PI CONTROL and COMPLEX CONTROL
    //
    #define FCL_CURRENT3_A  (IFB_LEMV_PPB * FCL_params.adcScale)
    #define FCL_CURRENT3_B  (IFB_LEMW_PPB * FCL_params.adcScale)
    
    #define FCL_CLARKE_STYLE_3()                                                   \
            clarke1Alpha = (FCL_CURRENT3_A);                                       \
            clarke1Beta  = ((clarke1Alpha + (2.0 * FCL_CURRENT3_B)) * ONEbySQRT3);
            
            

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

    请注意 、相位 A 电流看起来类似于几年前制造的同一电机的旧 LD/LQ 分析图。 对于相同的直流总线电源和惯性 kgm^2、接受低于预计值的 SDK 扭矩/速度。 在调制以下、THIRSVPWM 可能会将单个三角波发生器切换到 PWM 模块、以驱动 NFETS。 相位 A (蓝色)迹线在相位(B/C)之外运行、高电平或低电平、因为 B/C 相调制速度快得多。

    角度为3.3°、18个极对、线圈0.57Ω。 SDK 速度达到140Hz 峰值、似乎速度频率应达到42Vdc 更高。 下面的 DQ/IQ 与 SDK 完全匹配接受 adcData.V_V 利用 Lab07 ADC 偏移。 也许 PPB -双极娱乐的偏移具有更高的精度、负 Vsense 电平? 我修复了16个通道的 HAL_ADC 偏移校准代码 OffTrim (0xCC2)没有很好的香蕉。

     

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

    在 Instaspin 实验中、ppb 不用作 FCL。 instapsin 实验读取 ADC 结果的值、并使用 SI 单元将其转换为浮点值、然后移除 Clark 输入的偏移。

    使用 PPB 或  ADC 结果 具有相同的分辨率、只有 PPB 具有直接移除偏移的功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3705682 #3705682"]使用 SI 单位

    P.U.表示标幺值、不确定 SI 单位所指的是 FCL 模块以外的其他模块是否已启用。  

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3705682 #3705682"],然后删除 Clark 输入的偏移量。

    然而、双极 Vdq 仍然进入 Clarke、就好像它是有意进入的一样。 ADC 偏移现在在 Clarke 中产生±半个周期。  

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3705682 #3705682"] instapsin 实验读取 ADC 结果的值并将其转换为具有 SI 单元的浮点值,然后删除 Clark 输入的偏移量。

    ADC 偏移使用 motorVars.Vbus_SF =(motorVars.offset_invVbus_invV * adcData.DCBus_V)值 FCL 错误地浮动小数点、计算器数学证明 SF 约为2.016xxx、而不是20.16xxxx。 以下语句 labs.h (1.0/VBUS_OFFSET_V)、/* OFFSET_INVbus_invV 或1/21V=0.048 */  

    进入 PPB 的 Vsense 将提供双极性结果、而不会浪费 CPU 周期的内联偏移计算。 ADC Vdq 偏移 峰值远低于总线电压、这似乎是 SF 浮动乘法错误导致的。 CCS 实时调试观察显示 SF 高出10倍、是否有意这样做?  

      
      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3705708 #3705708"] ADC 偏移现在会产生±半个周期进入 Clarke[/quot]

    在代码补丁 Lab7将 所有负值传递到 Clarke 后。 Vdq 在仿真中为双极、FAST 是否需要双极 alpha/beta? 修补后、如果值(红框)是±Ω、我会不太担心。 快速生成更好的正弦形状相位 A 电流的点。

    Vdq RMS 样本0.707峰值似乎 是 DPWM1旋转角点的边界、涉及 ADC 换算系数。 SDK 似乎具有 M0.5 HDF,>MI=0.9,但 PWM 频率15-20kHz、50-100kHz 是多少?  为什么要通过 MATH_SAT (V_PU、(float32_t) 0.8、(float32_t)-0.8使 Mi >0.5、FAST 估算器在该范围内不会产生精确角度? 我意识到 DPWM 是 x49c 的较新扇区轮换方法、而 SVPWM 是用于以前的 Motorware MCU 类。 这就是为什么今天更难回答的问题答案很少的原因。  

        adcData.V_V.value[0] -= (motorVars.offsets_V_V.value[0] * adcData.dcBus_V);//motorVars.Vbus_sf;
        adcData.V_V.value[1] -= (motorVars.offsets_V_V.value[1] * adcData.dcBus_V);//motorVars.Vbus_sf;
        adcData.V_V.value[2] -= (motorVars.offsets_V_V.value[2] * adcData.dcBus_V);//motorVars.Vbus_sf

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

     SI 基础单位 是   国际单位制( SI)定义的标准测量单位。

    是的、在 FCL 项目中使用 PU 格式、但 instapsin 项目使用 motorcontrolSDK 中的 SI 单元。

    是的、输出 Vdq 可以是正或负值、具体取决于基准 ID/IQ 电流和控制状态。

    偏移电压用于消除三相间的采样电路误差。  motorVars.offset_V_V.value[0/1/2]的值是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3706971 #3706971"]是的,FPU 格式用于 FCL 项目,但 instapsin 项目使用 motorcontrolSDK 中的 SI 单元。

    然而、PU 命名约定在 SDK FOC 代码上是通用的、尤其是在 DPWM 方法连接 CMPA 的旋转扇区数据的情况下。 也许它更像议会联盟,这是什么。  

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3706971 #3706971"] motorVars.offset_V_V.Value[0/1/2]

    //! 简要介绍 A、B 和 C 相的 ADC 电压偏移
    #define VA_OFFSET_V (0.999343634)//~=1.0
    #define VB_OFFSET_V (0.998467565)//~=1.0
    #define VC_OFFSET_V (0.999186754)//~= 1.0

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3706971 #3706971"]是的,输出 Vdq 可能是一个正值或负值,具体取决于参考 ID/IQ 电流和控制状态。

    然而、移除 SF 的 BUS_V 贴片使 Vdq 符号保持为负值。 此外、删除了{motorVars.offset_invVbus_invV = 0.5;}Lab07第371行、然后 SF 数学运算可以(绿色框)更低的值。 Vdq 偏移似乎更适合添加到 ADC 样本。 电流更稳定、PI 不会像很明显的那样超过/低于轨迹目标。 现在、Vdq 值保持为正、并且具有接近满总线电压的大窗口。 无论如何、对符号变化似乎没有什么大的影响。

     adcData.V_V.value[0]+=(motorVars.offset_V_V.value[0]* motorVars.Vbus_SF);//adcData.DCBus_V
    adcData.V_V.value[1]+=(motorVars.offset_V_V.value[1]* motorVars.Vbus_SF);//adcData.DCBus_V
    adcData.V_V.value[2]+=(motorVars.offset_V_V.value[2]* motorVars.Vbus_SF);//adcData.DCBus_V

      

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

    偏移用于 a/b/c 帧中的三相电流和电压、而不是 Vdq。 正如在另一个线程中向您回复的、电压偏移用于消除三相电压采样交易电路之间的误差。 克拉克变换将消除常见的偏移值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3711657 #3711657"]电压偏移用于消除三相电压采样交易电路之间的误差

    点是从 ADC 采样中错误地减去的偏移量、这将把 Vdq 降低到 Clarke 中。 添加通道偏移可改善扇区角度、电感电流形状会变得更正弦。 减去通道偏移似乎并不合乎逻辑、这会将电压置于起始模拟浮点值电平以下。  

    是否知道为什么相位 A 具有恒定的三角形? 在6个逆变器开关上更均匀地分配 PWM 可能更好。 奇怪的是、电流是电平相移。 ePWM 相移控制似乎应该实现更好的 SVPWM 分布。

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

    让我们使用标准符号、Clark 的输入是 vA/c/c 或 IA/c/b on (a、b、c)帧、而不是 Vdq 或 idq。 正如您所回答的、我认为在实验中不会错误地减去偏移。 当然、您可以尝试所需的一切、因为这些代码是开源代码、仅供您参考。

    使用低频滤波器对电压进行采样时、三相电压具有大约梯形形状。

    您能否发布一些有助于我们理解您的问题的数字? 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3713050 #3713050"]我向您回复说,我认为在实验室中不会错误地减去偏移量。

    IA、b、c 偏移似乎正常、因为样本数据是为了参数而设(双极) 0v=2048计数。 然而、SDK 电流偏移值远>(图6.8)显示 SPRUHJ1H–2013年1月–2019年6月修订版。 实际上、我们甚至不会讨论与 FullScaleADCCCurrent 相反的 ADC 电流偏移。 从技术上讲、您的观点缺少任何实质性的书面披露、以证明 SDK 代码甚至适合使用。

    示例 INA240输出信号阈值比接地轨高40-80mV、 PGA 的信号与接地轨的偏移是多少? 需要考虑通道偏移、但似乎会忽略或集中到低于精确的 SDK 电流调节。

    从语义上说、va、b、c 是在 通道偏移电平阈值、而不是低于偏移电平的单极 ADC 值。 减去 VA、b、c 偏移不会提高通道模拟值的精度、而只是将实际 ADC 计数减少了偏移量(阈值)。 需要将偏移添加到 ADC 计数中、以阐明高于 ADCOFFTRIM 寄存器调整值的通道信号本底(0v)。  

    6.5.2 为了设定电流测量和电压测量的零点、完成了偏移计算。 为了计算偏移、在预先配置的时间段内、ePWM 引脚上设置了50%的占空比。 用户可以更改计算这些偏移的时间、并在 user.c 文件中进行配置、如下所示:  

    为什么改变 TBPRD 周期寄存器(以下代码)也不能纠正 SVM 旋转计算的电流调节? PWM 占空比 CMPA 似乎未与扇区旋转角度的 ADC 样本(IA、b、c)同步、一个或两个相位承载最大电流负载。 通过、Mi=0.5=USER_MAX_VS_MAG_PU、DSPWM 的均匀电流分布(THD)无法实现。 为什么 TBPRD 寄存器控制不会降低单独的 ePWM 占空比、而是降低导致谐波的电流?

    在这个布置的情况下、A 相(主 EPWM1)的负载最少、B 相(EPWM2从器件)的负载加倍、C 相(EPWM4从器件)的电流负载或 C+B 接近三倍 TBPRD EPWM2/4寄存器是反相位顺序(A、C、B)、并且错误地记录了 BoostXL-drv8320rs 快速入门指南。 为什么顺序不如图所示{SPRUI33D–2015年11月–2020年9月修订 图18-68,电机控制中常用的双三相逆变器级控制}?  

         #if (BOOST_to_LPD == BOOSTX_to_J5_J6)
        // initialize PWM handles for Motor 1
        obj->pwmHandle[0] = EPWM1_BASE;       //!< the PWM handle, GPIO0/GPIO1
        obj->pwmHandle[1] = EPWM4_BASE;       //!< the PWM handle, GPIO6/GPIO7
        obj->pwmHandle[2] = EPWM2_BASE;       //!< the PWM handle, GPIO2/GPIO3
         
         
         
            // since EPWM is set up/down counter, the period register is
            // set one-half the desired TBPRD period as starting duty cycle
            // Note: Shadow of TB period register is configured above.
            EPWM_setTimeBasePeriod(obj->pwmHandle[0], halfPeriod_cycles); //phaseA:2500 or 25µs
            EPWM_setTimeBasePeriod(obj->pwmHandle[1], halfPeriod_cycles * (float32_t)0.75); //phaseC:2125
            EPWM_setTimeBasePeriod(obj->pwmHandle[2], halfPeriod_cycles * (float32_t)0.85); //phaseB:1875
     

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

    是的、偏移校准模式和值将与电流感应交易电路不同。 我们只提供基于相关 EVM 套件的参考代码。

    当三相 PWM 任务被设定为50%时、电压偏移被校准、此时、相电压应该等于 Vdc 总线电压的一半、相电流等于零。

    通常、三相 PWM 周期看起来是相同的值、并且 PWM 时钟应该在具有 FOC 的三相电机中同步。 当然、您可以像上面提到的那样尝试相移控制。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3714049 #3714049"]当三相 PWM 任务设置为50%时,会校准失调电压,此时相电压应等于 Vdc 总线电压的一半,相电流等于零。

    在偏移校准期间也会跳变 DAC 故障、这仅是在函数进入后清除 EPM 跳闸区域故障而发生的故障。 50%偏移校准占空比由 CMPSS DACE/L 事件收集。

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3714049 #3714049"]当然,您可以像上面提到的那样尝试相移控制。

    它不会使用0x0值进行相移、仅启用。 在不影响 M0.5 ~MAG_PU 的情况下、不能在 ePWM 发生器上减少周期。 扇区控制算法也许需要监控 ADC 满量程电流范围内的 ePWM 周期/周期、而不是让它们运行起来。 Pi 控制器可能是一个疑似故障、无法更均匀地控制占空比、您认为什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3714078 #3714078"] CMPSS DACH/L 事件正在收集50%的偏移校准占空比。

    注意 SDK v3.01将总线电压分频值从2更改为1。 尽管偏移几乎不表现为相电流限制计算。  

    关于 PhaseA 三角波;当-A 被切换至-C 导线柱时、它移动到 B 相中心、电机方向改变。 然后、相位 A 的电流最大、B 的电流最小、C 的电流次高。 中心相位 B 现在具有三角形电流模式。

    请注意下面第6.5.2节(SPRUHJ1H) PG.254中定义的偏移计算。 如果减去偏移、则有理由从开始进行偏移计算。 与图6-9相比、Vsense 偏移值(~0.9V)在早期通过逆向 DCBus_V/2进行校准时看起来非常高。

    偏移计算是为了为电流测量和电压测量设置零。  为了计算偏移、在预先配置的时间段内、ePWM 引脚上设置了50%的占空比。 用户可以更改计算这些偏移的时间、并在 user.c 文件中进行配置、如下所示:

    pUserParams->ctrlWaitTime[CTRL_State_Offline]=(uint_least32_t)(5.0* USER_CTRL_FREQ_Hz);

    在上面的示例中、偏移校准持续5秒。 尽管大多数硬件都需要5秒的偏移校准时间、但如果用户需要更短或更长的时间来满足其特定需求、只需更改上述代码行的5.0值、 执行偏移校准的时间将根据新设置而变化。 偏移校准完成后、最终结果将存储在驱动程序对象(HAL_Obj)中。 有关 HAL_Obj 的更多详细信息、请参阅表8-1。 图6-9显示了 DRV8312版本 D 板偏移校准的最终结果。

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

    稍后使用100Vdc Bus_Vv 测试 SDK、针对 ADC 比例因子等计算电阻分压器 最高速度265Hz、电流过高11-12安培、仅为单相。 无论如何使用或不使用换算系数确定失调电压、电流都会变得不稳定。

    转子磁通听起来像是计数器扭矩侵入扇区角度、然后磁通在电流变得极端时、在一个相位中想崩溃。 通常、SPM 电机通过梯形6步 FOC 和1650 rpm 100Vdc 达到1850rpm。 SDK 无传感器 FOC 使用更多电池电流来实现出租方转速扭矩的优势是什么?

    Instaspin 估算器非常适合启动任何无传感器电机、但 SDK 应切换以产生大于1Hz 转子速度的梯形电流。

    为什么该 SVM 无法达到任何速度并使用过多的电池电流? 看似快速的估算器省略了产生适当磁力 ld/LQ 驱动磁通所需的许多机械电角。 通过6步无传感器 FOC 梯形调制实现的相同 SPM 电机速度更快、扭矩也很好。 对于每增加到 Vbus 的20Vdc、转子速度可提高30-50rpm 或更高。 以下电流通过峰值最小值/最大值的 RMS 浮点0.707。

      

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

      无传感器 FOC 的显著优势是输出扭矩比 梯形控制更稳定、纹波更低。

    电机的相电流不等于电池的直流电流。 FAST 估算器需要精确的电机参数、以实现更佳的反相效率并使电机高速运转。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3716911 #3716911"]  无传感器 FOC 的显著优势是输出扭矩更稳定

    然而、在没有转矩纹波或缺少换向事件的情况下、电机无法达到相似的速度。 实际的电机磁力矩未达到 FEA 建模仿真结果(如上)、因此最大速度转矩会大大降低。 奇怪的是、仿真三角波发生器通过较慢的 PWM 调制时间影响定子电流的一个相位。

    然而、没有真正的电流调节 Lab13、并且擦除80A NFETS 似乎是 Pi 控制缓慢的结果。 kgm2公式的积分并非完全基于科学、甚至是使用较大的电机进行测试。 死区时间为180ns、从未出现 FOC 梯形和击穿问题。   

    SDK 与 PDF 文本完全不同:SPRUHJ1H 5.1.8:USER_MAX_VS_MAG_PU 可以高达1.0、采用全局 IQ 格式;如果不使用电流重构、则可以高达_IQ (1.0)。  

    电流重构的过调制区域 Lab13存在 Pi 块控制问题、较大的电机 kgm2值不稳定。 无论3个输入值如何、FW 都完全不起作用。  与梯形 FOC 相比、不需要 kgm2的值。 当必须加宽圆周率(Pi)孔径(BW/delta/rps)以阻止因电流接近最大 Vsense 速度而导致的磁通崩溃时、SDK 饱和控制的反应较慢。 SDK M0.5中的某些内容不遵循以前记录的相同调制规则。    

    [引用 userid="35051" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3716911 #3716911">电机的相电流不等于电池的直流电流。 [/报价]

    5.1.4:最大电流图5-1展示了在 InstaSPIN 中使用此 USER_MOTOR_MAX_CURRENT 的位置。 如图所示、最大电流不会逐周期限制电流、但它会在向电流控制器提供基准之前提供速度控制器积分部分输出饱和以及整体速度控制器输出饱和。

      {USER_MOTOR_MAX_CURRENT_A =(10.5)}、Pi 值如何短接80安培 NFETS? 为什么代码(以下) 修改会导致 Pi mayhem? 为什么必须修改 kgm2以阻止通量崩溃、随着施加更高的总线电压而变得更糟? HV 套件利用昂贵的 IGBT 模块(饱和)、从而在 NFETS 进入跨导时将橙色与苹果进行比较。 SDK 是否仅支持总线电压较高的 IGBT、可疑之处  

    修改后的 KI/KP_SPD 值(SDK v2.01)会使 Pi BW_delta/rps 孔径增大。

    #if(USER_MOTOR_INERTIA_EN)
        	/* Lab7 determined BW required for Kp_spd/Ki_spd */
            pUserParams->BWc_rps = MATH_TWO_PI * (float32_t)130.0; //Proportion Filter pole: rads/sec
            pUserParams->BWdelta = (float32_t)60.0; // Integral
            
            
        float32_t BWdelta = userParams.BWdelta;
        float32_t Kctrl_Wb_p_kgm2 = (float32_t)3.0 *
                                  userParams.motor_numPolePairs /
                                  userParams.motor_ratedFlux_Wb /
                                  (float32_t) (USER_MOTOR_INERTIA_Kgm2 / 2);
                                  //was Kgm2*2, * numPolePairs        

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3716911 #3716911"] FAST 估算器需要精确的电机参数来实现更好的反相效率并使电机高速运行。

    思考视觉辅助的帽子、以帮助讨论更大 kgm2惯性值的 SDK 电流控制。 SDK 在当前版本控制代码状态下对于大型电机 kgm2惯性值而言不稳定,不需要使用 pun 。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3716911 #371691"]输出扭矩比 梯形控制具有更低的纹波、更稳定。[/quot]

    然而、仍需要一小部分磁力扭矩纹波(仿真)以最小的电池电流产生更好的转子速度。 对于梯形 FOC、在关闭相位期间、左侧发生器规则发挥作用。 磁性电势并不总是需要电池电流来产生扭矩、这似乎会产生磁性(瞬时)电流。

    历史事实,在120年前,灯房使用磁力发电机为汞蒸汽灯供电。   

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

    感谢您介绍这些概念。 如前所述、速度控制器参数的计算公式仅供参考、仅在某些通用电机上进行了验证、您可能需要根据具体情况调整这些控制器参数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3719796 #3719796"]您可能需要根据具体情况调整这些控制器参数。

    正确、但正如您看到的、代码更改已在上面完成、但 Pi 控制器仍然存在电流控制问题。 栅极振铃极小、导致误导通、180ns 关断时间应超过足够的死区时间。 订购部件是 CMPSSx 未触发区 ePWM 电流故障状态、两次中心相均发生命中。 在第一次 NFET 短路后、我将 OC 跳变点从20A 降至15A、但它仍然没有跳变 OC 故障。 上次崩溃导致了击穿、当时 Pi 将电流控制器驱动到高频振荡中、鼠标右键点击 CCS 调试失败禁用在线状态、在明显键入0时切换回0x1。

    这正是实验室需要使用 SCIA 触摸屏 LCD 显示 Java 脚本控制页的原因。 非隔离式 launchXL USB 端口因调试崩溃而失败、红色文本屏幕将实时器件控制置于脱机状态。 在启动板上的紧急忘记重置按钮可以快速阻止 god 可怕的速度换向崩溃。 我不确定调试是一种理想的第一控制方法、因为 EMF 反冲会变得非常混乱。  

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-a-current-shape/3719796 #3719796"]仅对某些通用电机进行了验证

    主要是小型电机、对21世纪太阳能供电机器的好处较小。 请注意、许多海报都利用更大的转子质量来移动人员/包装机器、或重新安装由交流线路供电且由直流电池供电的机器。 观看 PBS 的《伟大的电动飞机竞赛》也是一个真正的大开眼界的机会。  

    https://www.pbs.org/wgbh/nova/video/great-electric-airplane-race/

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

    Axiom 开源项目提到了一些关键点、TI 应将这些要点作为与 CCS 调试一起使用的安全措施进行集成。 也许采用 VESC 电机控制接口并删除 CCS 调试作为电机控制和调优源。 user.h 电机参数输入方法和项目实验示例似乎围绕着相对于 FOC 电机控制更困难的调优问题。

    Axiom:100+kW 电机控制器|详细信息| Hackaday.io

    VESC 电流控制器: 22dc2ce33c64593beb1e01a3b062d8c1df73beec·vederb/BLDC·GitHub 上的 BLDC/mcpwm_foc.c

    •  FPGA 持续监控所有故障输入。 如果任何故障被置位、所有 PWM 活动被关闭。
    • FPGA 监控 MCU 生成的 PWM如果检测到击穿命令、则关闭 PWM

    SDK Pi 控制器(KI_SPD、/KP_SPD)公式和电流控制器似乎向 SVGEN 块发出了击穿命令。 3个相位中的1个保持低速三角形。 什么会导致未记录的三角形{SPRUHJ1H}电流波形?

    再次交换相位 A/C 导线位置使三角波移动中心1/2电桥、并在 Pi 磁通崩溃期间发生击穿。 交换相位后、转子速度提高20Hz、三角电流波移动中间1/2电桥。 Pi kgm2值是 user.c 中的默认值、但忘记取消注释 user.h 中的电机实际惯性值 (user.h)电机参数的共鼓不断展开且具有不利影响。   

     如果电流控制器通过 {USER_MOTOR_MAX_CURRENT_A =(10.5)}饱和、导致中心相位击穿的原因是什么?

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

    我第一次猜测为什么散热器会有模拟泄漏。

    Clarke 变换似乎执行了一个非法的数学计算。 数学排序要求在代数表达式或公式内加法或减法之前先进行乘法和除法。 Clarke 变换通过先减去括号内的值、然后再乘法、似乎违反了正确的排序。

    用于 Clarke 变换的 SDK 方法不遵循基本数学排序规则、可能会生成不精确的 alpha/beta 值。 我的代数二年级教师会为班级编写粉笔板的短切、以证明表达式在后退时实际产生了正确的结果。 她曾在福特汽车公司工程部工作过、如果您问我、她是天才级的孩子。

    典型的 Clarke 变换:

    *完全克拉克变换(无平衡电压)
    * m_moter_state.v_alpha =(2.0 / 3.0)* VA -(1.0 / 3.0)* Vb -(1.0 / 3.0)* vc;
    * m_motor_state.v_beta = one_by_SQRT3 * vb - one_by_SQRT3 * vc;

    示例:

    该 SDK 在减法后将 BETA_SF (1/sqrt3)乘以;{MathVec3 * pInvec}作为 (pInVec->Value[1]- pInVec->Value[2])* BETA_SF;

    基于顺序的代数表达式更类似于: (Beta_SF * pInVec->value[1])-(Beta_SF * pInVec->Value[2]);

    代数中的操作顺序–增长1%

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

    经过改进的 Clarke 算法可使电机完全达到275Hz。 注意 Clarke 处理 FAST 估算器的 Vsense 和 Isense 模拟输入数据。 因此、它一定不能存在 x49c 数学协处理器可能会遇到的数学顺序编译错误。 谁知道 CCS 编译器如何处理因素排序?  

        //
        // Perform the Clarke transform for either 2 or 3 sensor setups
        //
        /**********************************************************************************
         * 	Full Clarke transform (no balanced voltages)
    	 *	m_motor_state.v_alpha = (2.0 / 3.0) * Va - (1.0 / 3.0) * Vb - (1.0 / 3.0) * Vc;
    	 *	m_motor_state.v_beta = ONE_BY_SQRT3 * Vb - ONE_BY_SQRT3 * Vc;
    	 **********************************************************************************/
        if(numSensors == 3)
        {
            pOutVec->value[0] =
            		 ((MATH_TWO_OVER_THREE * pInVec->value[0]) -
            				 (alpha_sf * pInVec->value[1]) - (alpha_sf * pInVec->value[2]));
    
            //((pInVec->value[0] * (float32_t) 2.0) - (pInVec->value[1] + pInVec->value[2])) * alpha_sf;
    
    
            pOutVec->value[1] = (beta_sf * pInVec->value[1]) - (beta_sf * pInVec->value[2]);
    
            //pOutVec->value[1] = (pInVec->value[1] - pInVec->value[2]) * beta_sf;
        }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="48581" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape/3720713 #3720713"] FPGA 监控 MCU 生成的 PWM [/quot]

    PWMDAC 也许能够监控 SVM 调制和击穿情况。 电流对策在红色/馈电延迟死区时间(总计200ns)基础上增加了10ns。

    回顾 CMPSSx 设置有一些更高的 DAC 影子加载值。 其中、2048+DACHVAL * 815µV Ω/分流 mV/A 高跳闸目标和2048-DACLVAL* 815µV Ω/分流 mV/A 低跳闸目标。 奇怪的是、DACLVAL 不仅仅是反向 DACHVAL、因为+Input 信号<1.65v 和<2048。   

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

    CMPSS 和 DAC 仅用于过流/电压故障保护、故障跳闸区域在 motorControlSDK 中配置为单次触发模式。 因此、这与使用 SVPWM 生成的电机控制无关。

    BTW、编译器优化在所有 instaspin 实验中启用。

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

    奇数部分 CMPSS DACLVAL 和 ePWM DC-B 动作限定器、设置为比较低电平或高电平(EPWM_DC_MODULE_B)事件 B1。 CMPSS 锁存器不会通过反相/非反相 DACLVAL 输出触发故障。

    我认为低侧直流电压的作用是这样的、因为 EPWMxB 低电平输出被强制为高电平、CMPB 不会通过死区发生器 B 传递。点是一半如果 ePWM-A 输出的 DC-B 跳闸未激活、则不会监控相电流周期。 因此、不能通过 CMPSS 停止击穿、但 PWMDAC 监控器也许可以帮助阻止 SVM 击穿命令?

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape/3722887 #3722887"]这样就与具有 SVPWM 生成功能的电机控制无关。

    我得到该值、但同时一个相位(A)具有最高电流。 据说 Clarke 变换公式可以通过减去而不是添加 B+C 来计算不均匀的电流分布 在将 A 换为 C 后、中心相 B 现在具有最低且非常锯齿形的电流。中心 NFETS 都在发生击穿后被替换。 这种锯齿波形检测到电流钳位、在低侧 INA240电流监控器输出中未注意到 ADC 采样和滤波反馈。  

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

    您应该设置正确 的 DACLVAL 和 DACHVAL 来根据硬件板触发过流/电压故障、并且 PWMA 和 PWMB 输出将根据 PWM 配置强制为低电平或高电平。 如果您在示例实验中使用 TI EVM 套件、则 CMPSS 应按上述方式工作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape/3730727 #3730727"]根据 PWM 配置、PWMB 输出将强制为低电平或高电平[/quot]

    然而、EPWMB 输出通过电机控制 SDK 丢失、并由 SW 动作限定器无限期拉高。 因此、DACLVAL 被截断、无法控制 PWMB 输出。 这是添加 CMPB 匹配计数并将其传递到低侧死区的充分理由。   

    如果情况并非如此、则 TRM 方框图和 ePWM 跳闸区域子模块的技术概述相对于 具有死区控制的直流子模块会产生误导性。

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

    通过查看 VESC 项目 SVM 代码(如上所链接)、我们很容易找到死区电流补偿、这显然有助于防止击穿。 另请注意一个与 CMSIS ARM_MATCH.h 非常相似的完整 PID 实现 注意、电机控制 SDK 代码中缺少 PI (D)约束。 对于 值低得多的低速估算器启动惯性、似乎(D)系数可能会通过(labs.h)非常主观的默认值来校正 KP_SPD、KI_SPD。

    在几个关键领域中、电机控制 SDK 严重缺乏有用的配置限制。 X49可能会使器件 VESC 固件受益、STM32F405/407 MCU 通常支持该固件。 x49可能会在不导致控制器意外火灾的情况下、将更多的工业用途包括在内。 点是 CMPSSx 触发区未能监控和阻止击穿情况、因为低侧动作限定器 EPWM-DC-B1对抑制过流情况的负半个周期没有影响。

    过去的 drv8320rs NexFET 烧写短路不是由固件启用 RsOnlineRecalibraiton ()引起的。 当电流重构(Lab13)无法补偿死区时间时、必须发生100ns 的击穿、因为当 FW 也启用时、电流突然达到峰值。 实验10中的文本误判甚至表明在电机运行时启用 RsOnlineRecalibration()是可以的。 另一个问题可能是、当电机150Hz 速度或 RsOlReCalc 在启用 FW 之前启用时、RsOlReCalc 标志未复位、现在已雾化。

    在电机启动过程中、似乎(MotorVars.RsOnline_Ohms)必须确定速度小于5Hz。 Lab10之外的文本使读者相信任何 Hz 速度都可用于注入电流。 问题{EST_setRsOnLineId_mag_A (estHandle、motorVars.RsOnLineCurrent_A)}可能通过{USER_MOTOR_MAX_CURRENT_A}具有较高的注入电流值。 在这种情况下、当固件启用时注入8.2A 电流、不是很危险的40Vdc、但在200-350Vdc 时、它很容易损坏逆变器。

    FIX: /* Set RsOnline Current <30% motorVars.RsOnLineCurrent_A =(USER_MOTOR_RES_EST_CURRENT_A * 0.2);  

    目前、我已从 LaunchXL-x49c 中移除 HV 逆变器、因为相电流饱和控制方法存在问题。

    PID 控制器:

     

        /**
       * @defgroup PID PID Motor Control
       *
       * A Proportional Integral Derivative (PID) controller is a generic feedback control
       * loop mechanism widely used in industrial control systems.
       * A PID controller is the most commonly used type of feedback controller.
       *
       * This set of functions implements (PID) controllers
       * for Q15, Q31, and floating-point data types.  The functions operate on a single sample
       * of data and each call to the function returns a single processed value.
       * <code>S</code> points to an instance of the PID control data structure.  <code>in</code>
       * is the input sample value. The functions return the output value.
       *
       * \par Algorithm:
       * <pre>
       *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
       *    A0 = Kp + Ki + Kd
       *    A1 = (-Kp ) - (2 * Kd )
       *    A2 = Kd
       * </pre>
       *
       * \par
       * where \c Kp is proportional constant, \c Ki is Integral constant and \c Kd is Derivative constant
       *
       * \par
       * \image html PID.gif "Proportional Integral Derivative Controller"
       *
       * \par
       * The PID controller calculates an "error" value as the difference between
       * the measured output and the reference input.
       * The controller attempts to minimize the error by adjusting the process control inputs.
       * The proportional value determines the reaction to the current error,
       * the integral value determines the reaction based on the sum of recent errors,
       * and the derivative value determines the reaction based on the rate at which the error has been changing.
       *
       * \par Instance Structure
       * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure.
       * A separate instance structure must be defined for each PID Controller.
       * There are separate instance structure declarations for each of the 3 supported data types.
       *
       * \par Reset Functions
       * There is also an associated reset function for each data type which clears the state array.
       *
       * \par Initialization Functions
       * There is also an associated initialization function for each data type.
       * The initialization function performs the following operations:
       * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains.
       * - Zeros out the values in the state buffer.
       *
       * \par
       * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function.
       *
       * \par Fixed-Point Behavior
       * Care must be taken when using the fixed-point versions of the PID Controller functions.
       * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered.
       * Refer to the function specific documentation below for usage guidelines.
       */
        /**
       * @brief  Initialization function for the floating-point PID Control.
       * @param[in,out] S               points to an instance of the PID structure.
       * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.
       */
      void arm_pid_init_f32(
            arm_pid_instance_f32 * S,
            int32_t resetStateFlag);
    
      /**
       * @brief  Reset function for the floating-point PID Control.
       * @param[in,out] S  is an instance of the floating-point PID Control structure
       */
      void arm_pid_reset_f32(
            arm_pid_instance_f32 * S);
      
      /**
       * @brief Instance structure for the floating-point PID Control.
       */
      typedef struct
      {
              float32_t A0;          /**< The derived gain, A0 = Kp + Ki + Kd . */
              float32_t A1;          /**< The derived gain, A1 = -Kp - 2Kd. */
              float32_t A2;          /**< The derived gain, A2 = Kd . */
              float32_t state[3];    /**< The state array of length 3. */
              float32_t Kp;          /**< The proportional gain. */
              float32_t Ki;          /**< The integral gain. */
              float32_t Kd;          /**< The derivative gain. */
      } arm_pid_instance_f32;
      
        /**
       * @brief         Process function for the floating-point PID Control.
       * @param[in,out] S   is an instance of the floating-point PID Control structure
       * @param[in]     in  input sample to process
       * @return        processed output sample.
       */
      __STATIC_FORCEINLINE float32_t arm_pid_f32(
      arm_pid_instance_f32 * S,
      float32_t in)
      {
        float32_t out;
    
        /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]  */
        out = (S->A0 * in) +
          (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]);
    
        /* Update state */
        S->state[1] = S->state[0];
        S->state[0] = in;
        S->state[2] = out;
    
        /* return to application */
        return (out);
    
      }

    zip 文件包含 TI 2012代码 Motorware FOC 控制 SVM 32IT_FP 控制类似的 CMSIS 32位 FP_PID。 同样、SDK 低速估算器通过高 user.h 惯性 kgm^2和超低的 KI_SPD、KP_SPD 值来搜索几秒钟的磁性 Nth 极。 在电机控制 SDK v3.01中是否修复了该问题? 为什么电机控制 FOC SDK 中遗漏了 PID 代码、似乎是以不可持续的属性将其赶出去?  

    e2e.ti.com/.../TI_2D00_PID_5F00_SVM_5F00_2012.zip

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

    正如您多次回答的那样、PI 增益是根据电机参数计算的、在大多数情况下、这些参数只是您的参考、您可能需要根据您的电机和系统调整这些参数。

    感谢您对有关 PID 和 Rs 在线问题的反馈、如果可能、我们可以在将来的更新中考虑您的建议。

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

    SDK 中似乎省略了与 kgm2相关的缺少 D 错误。   

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape/3738741 #3738741"]根据多次答复、PI 增益是根据电机参数计算的、这些参数在大多数情况下仅供您参考、

    我们在 SDK 中未使用参考电机、它们似乎具有 PI 可以轻松处理的非常低的 kgm2值。 这是一个巨大的绊脚石、因为梯形六步 FOC 超出了 SDK 实验的优势。 SDK 和 PI 控制的目的似乎不是更好的、与在后期代码流中预期的 Motorware FOC 控制套件相比、效果似乎更好。

    [引用 userid="35051" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1000528/fast-foc-phase-current-shape/3738741 #3738741"]如果可能,我们可以在将来的更新中考虑您的建议。

    然而、Axiom 项目在开环启动期间进行实时评估(LD/LQ)和 Rs 阻抗、并根据视频的证明进行工作。 在 SVM_RUN()调用期间(>1Hz),我只需要调整 KP_SPD、ki_SPD,FAST 估算器不会将更新的 PI 值置为有效。 从闪存运行 SDK 代码时、似乎存在某种 ROM 错误。