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-F28069M:在 Instaspin 实验12中、电机不会随着有传感器反馈而移动

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/686419/launchxl-f28069m-motor-not-moving-with-sensored-feedback-in-instaspin-lab-12

器件型号:LAUNCHXL-F28069M

大家好、

在 Instaspin 实验12 a & b 中、我在使 PMSM 运动方面遇到了一些严重的困难。在实验5d 等中、如果没有编码器、电机运行正常。 我使用的是小尺寸 PMSM 电机(http://www.namiki.net/product/dccorelessmotor/pdf/SOBL23-1207.pdf)

编码器似乎可以正常工作、因为值确实在监视窗口中的"st_obj.vel.conv.Pos_mrev"中更新。 在一次机械旋转过程中、刻度为0至1。 此外、方向应正确、相位应正确插入。 噪声不应成为问题、因为这也可以使 PWM 导通。 一旦将"使能系统"和"运行识别"更改为1、PWM 就会开启、但电机会将自身对准锁定位置、产生一些小噪声、但不会通过增加速度基准(或在12a 中运行惯性识别)来移动。 已启用 Rs 重校准。

还尝试在 user.h 中调整电机变量、它们应该是可以的(ish)。 其中一个挑战是电机的定子 d 和 q 电感似乎很低、自动识别将其跟踪为大约5*10^(-10) H 使用示波器测量这些值得出的结果约为0.0002H。 额定磁通的测量值非常接近给定的板值。 不过、在以前的无传感器实验室中、这些都是可以的。 还尝试将 PWM 频率更改为高达60Hz。

您将在下面找到 user.h 参数。

//! 简要介绍 A、B 和 C 相的 ADC 电流偏移
#define I_A_offset (0.8304952979)
#define I_B_OFFSET (0.831510365)
#define I_C_OFFSET (0.8265882134)
//! 简要介绍 A、B 和 C 相的 ADC 电压偏移
#define V_A_offset (0.2917994261)
#define V_B_OFFSET (0.2907087803)
#define V_C_OFFSET (0.2908745408)

#define my_motor 113
#define USER_MOTOR_MY_MOTOR

#Elif (USER_MOTOR== my_MOTOR")
#define USER_MOTOR_TYPE MOTOR_Type_PM
#define USER_MOTOR_NUM_POLE_PAIRS (4)
#define USER_MOTOR_RR (空)
#define USER_MOTOR_Rs (3.56)
#define USER_MOTOR_LS_d (0.00007)//系统获取的最低值没有错误
#define USER_MOTOR_LS_q (0.00007)
#define USER_MOTOR_Rated 磁通(0.0022)//板值
#define USER_MOTOR_磁 化电流(空)
#define USER_MOTOR_RES_EST_CURRENT (0.1)
#define USER_MOTOR_IND_EST_CURRENT (-0.1)
#define USER_MOTOR_MAX_CURRENT (0.45)
#define USER_MOTOR_FLUX_EST_FREQ_Hz (100)//已尝试多个值超出范围
#define USER_MOTOR_ENCODER_LINes (880)
#define USER_MOTOR_MAX_SPEED_KRPM (2.0)
#define USER_SYSTEM_INER惯性(0.0044)//无传感器惯性识别中定义的值
#define USER_MOTOR_FRICTion (0.01)
#define USER_SYSTEM_BANGE_SCALE (1.0)

#define USER_PWM_FREQ_kHz (60.0)

#define USER_NUM_PWM_TICKS_PER_ISR_TICK (2)

不确定接下来要测试什么。 如果有人对此有任何好的调试技巧、我将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于低电感电机、我们建议使用 lab2c 来识别电机参数。 您是否能够成功运行此项目而不出现任何问题?

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

    感谢您的回复! 已经完成了2c 多次、但如前所述、它提供的电感非常低、不确定它是否可以成立、因为如果使用该尺寸的电感、它将会产生误差。 一直在尝试使用这些值和板值运行12b、但没有成功。

    谢谢、

    维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于 lab12a 和 lab12b、确保正确连接非常重要。 如果电机或编码器电线按错误的顺序连接、则电机无法正常移动。 同时、每个电路板还需要正确连接编码器。

    设置正确的 USER_MOTOR_ENCODER_LINEOS 提供编码器上的线数对于 ENC 模块的设置和配置非常重要。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复!

    编码器在调试模式下提供正确的值、一个机械周期为上述字段提供1.0。 还检查了旋转方向是否正确以及相位是否正确插入。 遗憾的是、这些都没有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在实验2c 中使用不同的初始值进行了一些参数识别。 获得了一些新的 user.h 值、这些值现在可以在无传感器实验室中非常顺利地工作。 转速较低(<200RPM)时会产生一些扭矩纹波、但在较高速度时效果良好。 当增加 PWM 频率时、情况会变得更好、但实际上无法再从60kHz 上升。

    新值如下:
    #define USER_MOTOR_Rs (3.56160378)
    #define USER_MOTOR_LS_d (0.000735975744)
    #define USER_MOTOR_LS_q (0.000735975744)
    #define USER_MOTOR_Rated 磁通(0.00843063649)
    #define USER_MOTOR_磁 化电流(空)
    #define USER_MOTOR_RES_EST_CURRENT (0.1)
    #define USER_MOTOR_IND_EST_CURRENT (-0.1)
    #define USER_MOTOR_MAX_CURRENT (0.5)
    #define USER_MOTOR_FLUX_EST_FREQ_Hz (100)

    #define USER_PWM_FREQ_kHz (60.0)
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK (2)

    但是、这对原始问题没有帮助。 在实验12 A 或 b 中电机根本不会移动。有任何关于如何继续的想法吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果电机可以使用无传感器实验正常运行,则必须检查编码器连接并再次按照 lab12a 指南进行设置,确保使用正确的参数调用 ENC_setup()。 并尝试调优 gMotorVars.SpinTAC.VelIdGoalSpeed_KRPM 和 gMotorVars.SpinTAC.VelIdTorqueRampTime_sec 以识别电机惯性。

    如果电机在 lab12a 中运行失败、gMotorVars.SpinTAC.VelIdErrorID 是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答!

    错误代码为2004。 电机根本不会移动。 尝试调节这两个参数、但遗憾的是、这并不会产生影响、并且错误代码保持不变。

    一直在尝试确保所有与编码器相关的设置都正确无误。 我在12b 中旋转了电机、但没有启用系统。 在这里、我在观察窗口中添加了"st_obj.vel.conv.Pos_mrev"、这在一次机械旋转期间提供了0至1的刻度值。该值随着电机在无传感器实验室中的旋转方向而增加。 我了解到、这应该表明所有器件都在使用编码器本身?

    我有点困惑:

    1.下面的变量在12802.11b 的观察窗口中给出了以下错误。 这是我需要担心的吗?

    2.虽然 我选择并保存了预定义符号 QEP、但属性菜单中不会突出显示它。 这是否表示编码设置中存在错误? 除了 user.h 之外、我还没有在项目文件中编辑任何其他代码、我在其中添加了编码器行定义。

    ENC_setup 的其他参数为:

    ifndef QEP
    #define USER_IQ_FULL_SCALE_FREQ_Hz (800.0)  
    其他
    #define USER_IQ_FULL_SCALE_FREQ_Hz (USER_MOTOR_NUM_POLE_PAIRS)
    #endif

    #define USER_ISR_FREQ_Hz ((float_t) USER_PWM_FREQ_kHz * 1000.0 /(float_t) USER_NUM_PWM_TICKS_PER_ISR_TICK)

    #define USER_PWM_FREQ_kHz (60.0)

    #define USER_NUM_PWM_TICKS_PER_ISR_TICK (2)

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

    一直在进行这方面的工作、但问题仍然存在。 现在真的很困在了这里。 有没有关于如何解决此问题的好建议?

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

    由于您可以使用无传感器 InstaSPIN-FOC 识别和运行电机、因此您可以使用 lab05c 和 lab05d 来识别惯性并通过无传感器 instaSPIN-Motion 运行电机。 如果两者都可以正常运行电机、但在 lab12a 上失败、我必须再次指出、您需要再次检查编码器连接和配置。

    您不必担心您提到的上述两个问题、这两个问题是项目中的正确设置。

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

    大家好、

    更改了电机和编码器并使其立即工作。 两者都是相似的类型、因此它们没有显著变化。 它在一开始就有类似的问题:它与某个立场保持一致,但没有移动。 在将 PWM 频率从60kHz 降低到30kHz 并将 USER_J1.h 中的抽取值更改为1之后、它开始工作。 使用电流探头更详细地查看了这一点。 在30kHz 时、有相当多的 PWM 感应电流纹波(由于低电感、每个脉冲之后的电流下降)、但出于某种原因、增大开关频率不会使其变得平滑、而是使其变得更糟。 电机现在运行相当正常、但希望以更高的 PWM 频率运行、但似乎会在其他方面引起问题。

    有什么想法、为什么它的运行方式是这样的?

    电机规格: https://www.faulhaber.com/fileadmin/Import/Media/EN_1028_B_FMM.pdf

    编码器规格: https://ams.com/documents/20143/36005/AS5040_DS000374_3-00.pdf/3fb0c913-036c-71c5-7ebb-4111aa093ace

    user_j1.h 参数

    #ifdef __cplusplus
    extern "C"{
    #endif

    秘书长的报告
    //定义

    //! 简要介绍电流和电压
    秘书长的报告
    //! \brief 定义 IQ 变量的满量程频率、Hz
    //! \brief 根据与该值的比率将所有频率转换为(pu)
    //! \brief 此值必须大于预期的电机最大速度
    ifndef QEP
    #define USER_IQ_FULL_SCALE_FREQ_Hz (495.0)// 800示例、具有缓冲器、用于8极6 krpm 电机在磁场减弱时运行至10 krpm;Hz =(RPM *极)/ 120
    其他
    #define USER_IQ_FULL_SCALE_FREQ_Hz (USER_MOTOR_NUM_POLE_PAIRS /0.008)//(4/0.008)= 500个示例、其中包含将8极6 kRPM 电机运行到6 kRPM 的缓冲器;Hz =(RPM *极)/ 120
    #endif

    //! \brief 定义系统内 IQ30电压变量的满量程值
    //! 简要说明根据与该值的比率、所有电压均转换为(pu)
    //! \brief 警告:此值必须满足以下条件:USER_IQ_FULL_SCALE_VOLTAGE_V > 0.5 * USER_MOTOR_MAX_CURRENT * USER_MOTOR_LS_d * USER_VOLTAGE_FILTER_POLE_Rps、
    //! \brief 警告:否则,该值可能会饱和并翻转,从而导致值不准确
    //! \brief 警告:此值通常大于测得的最大 ADC 值、尤其是在高反电动势电机的运行速度高于额定速度时
    //! 简要警告:如果您知道反电动势常数的值、并且知道由于磁场减弱而以多种速度运行、请确保将此值设置为高于预期反电动势电压
    //! 简要建议从比 USER_ADC_FULL_SCALE_VOLTGE_V 大~3倍的值开始、如果 Bemf 计算可能超过这些限制、则增加到4-5倍
    //! \brief 此值也用于计算最小磁通值:USER_IQ_FULL_SCALE_VOLTAGE_V/USER_EST_FREQ_Hz/0.7
    针对 boostxldrv8301_RevB 典型用法和 Anaheim 电机的#define USER_IQ_FULL_SCALE_VOLTAGE_V (18.0)// 24.0示例

    //! \brief 定义 AD 转换器输入端的最大电压
    //! 简要介绍将由最大 ADC 输入(3.3V)和转换(0FFFh)表示的值
    //! 简要说明硬件相关、这应基于 ADC 输入的电压感应和缩放
    #define USER_ADC_FULL_SCALE_VOLTGE_V (26.314)// 26.314 boostxldrv8301_RevB 电压调节

    //! \brief 定义 IQ 变量 A 的满量程电流
    //! \brief 根据与该值的比率将所有电流转换为(pu)
    //! \brief 警告:此值必须大于预期的电机最大电流读数、否则读数将回滚至0、从而导致控制问题
    #define USER_IQ_FULL_SCALE_CURRENT_A (18.0)//针对 boostxldrv8301_RevB 典型用法的20.0示例

    //! \brief 定义 AD 转换器上的最大电流
    //! 简要介绍将由最大 ADC 输入(3.3V)和转换(0FFFh)表示的值
    //! 简要说明硬件相关、这应基于 ADC 输入的电流感应和缩放
    #define USER_ADC_FULL_SCALE_CURRENT_A (33.0)// 33.0 boostxldrv8301_RevB 电流调节

    //! \brief 定义使用的电流传感器数量
    //! 由硬件功能定义的\brief
    //! \brief 可以是(2)或(3)
    #define USER_NUM_CURRENT_SENSORS (3)// 3首选设置、以在整个速度范围内实现最佳性能、允许100%占空比

    //! \brief 定义电压(相位)传感器的数量
    //! 简要必须为(3)
    需要#define USER_NUM_VOLTGE_SENSORS (3)// 3

    //! 简要介绍 A、B 和 C 相的 ADC 电流偏移
    //! 简要说明与硬件相关的一次性、但校准也可以在运行时完成
    //! \brief 在初始电路板校准后,这些值应针对您的特定硬件进行更新,以便在编译二进制文件后可以加载到控制器中
    #define I_A_offset (0.8331743479)
    #define I_B_OFFSET (0.8355930448)
    #define I_C_OFFSET (0.8392037153)

    //! 简要介绍 A、B 和 C 相的 ADC 电压偏移
    //! 简要说明与硬件相关的一次性、但校准也可以在运行时完成
    //! \brief 在初始电路板校准后,这些值应针对您的特定硬件进行更新,以便在编译二进制文件后可以加载到控制器中
    #define V_A_offset (0.5271264911)
    #define V_B_OFFSET (0.5257175565)
    #define V_C_OFFSET (0.5249399543)


    //! 简要介绍时钟和计时器
    秘书长的报告
    //! \brief 定义脉宽调制(PWM)频率、kHz
    //! 简单的 PWM 频率可直接在此处安全地设置为高达30KHz (在某些情况下最大值为60KHz)
    //! 简要对于更高的 PWM 频率(对于低电感、高电流纹波电机、典型值为60 KHz 以上)、建议使用 ePWM 硬件
    //! 简要介绍可调节的 ADC SOC、以抽取控制系统的 ADC 转换完成中断、或使用软件请求示例。
    //! \brief 否则,您可能会丢失中断并中断控制状态机的计时
    #define USER_PWM_FREQ_kHz (30.0)//30.0示例、典型值为8.0 - 30.0 KHz;极低电感、高速电机可能需要45-80 KHz

    //! \brief 定义允许的最大电压矢量(Vs)幅度。 该值设置的输出的最大幅度
    //! 简要介绍 ID 和 IQ PI 电流控制器。 Id 和 Iq 电流控制器输出为 Vd 和 Vq。
    //! 简要说明 Vs、Vd 和 VQ 之间的关系为:Vs = sqrt (Vd^2 + Vq^2)。 在该 FOC 控制器中
    //! \brief Vd 值设置为等于 USER_MAX_VS_MAG_USER_VD_MAG_FACTOR。 Vq = sqrt (USER_MAX_VS_MAG^2 - Vd^2)。
    //! \brief 对于 SQRT (3)/2 = 86.6%占空比时峰值为正弦波、将 USER_MAX_VS_MAG 设置为0.5。 这种情况不需要电流重构。
    //! 简要设置 USER_MAX_VS_MAG = 1/SQRT (3)= 0.5774、用于峰值为100%占空比的纯正弦波。 这种情况下(Lab10a-x)需要电流重构。
    //! \brief 设置 USER_MAX_VS_MAG = 2/3 = 0.6666以生成梯形电压波形。 这种情况下(Lab10a-x)需要电流重构。
    //! \brief 有关空间矢量过调制的信息,请参阅实验10以了解有关使 SVM 发生器能够一直运行到梯形的系统要求的详细信息。
    #define USER_MAX_VS_MAG_PU (0.5)//如果不使用电流重构技术,则设置为0.5。 有关更多信息、请查看 lab10a-x 中的模块 svgen_current。


    //! \brief 抽取
    秘书长的报告
    //! \brief 定义每个 ISR 时钟节拍的 PWM 时钟节拍数
    //! 注意:有效值仅为1、2或3
    #define USER_NUM_PWM_TICKS_PER_ISR_TICK (1)

    //! \brief 定义每个控制器时钟节拍(软件)的 ISR 节拍数(硬件)
    //! \brief 控制器时钟节拍(CTRL)是用于软件中所有时序的主时钟
    //! \brief 通常情况下、PWM 频率触发器(可由 ePWM 硬件抽取以减少开销) ADC SOC
    //! \brief ADC SOC 触发 ADC 转换完成
    //! \brief ADC 转换完成会触发 ISR
    //! \brief 这将硬件 ISR 速率与软件控制器速率相关联
    //! \brief 典型地想考虑16KHz ISR 上的某种形式的抽取(ePWM 硬件、电流或 EST)、以确保中断完成并为后台任务留出时间
    #define USER_NUM_ISR_TICKS_PER_CTRL_TICK (2)// 2示例、控制器时钟速率(CTRL)以 PWM/2运行;例如30 KHz PWM、15 KHz 控制

    //! \brief 定义每个电流控制器时钟节拍的控制器时钟节拍数
    //! \简要 说明控制器时钟速率与电流控制器(FOC)速率之间的关系
    #define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1)// 1典型值、正向 FOC 电流控制器(IQ/ID/IPART/SVPWM)以与 CTRL 相同的速率运行。

    //! \brief 定义每个估算器时钟节拍的控制器时钟节拍数
    //! 控制器时钟速率与估算器(FAST)速率之间的简要关系
    //! 简要取决于所需的动态性能、FAST 提供了低至1KHz 的良好结果、而更动态或更高速的应用可能需要高达15KHz 的频率
    #define USER_NUM_CTRL_TICKS_PER_EST_TICK (1)// 1典型值,FAST 估算器以与 CTRL 相同的速率运行;

    //! \brief 定义每个速度控制器时钟节拍的控制器时钟节拍数
    //! 控制器时钟速率与速度环路速率之间的简要关系
    #define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (15)// 15 (典型值)以匹配 PWM、例如15kHz PWM、控制器和电流环路、1KHz 速度环路

    //! \brief 定义每个轨迹时钟节拍的控制器时钟节拍数
    //! \控制器时钟速率与轨迹环路速率之间的简短关系
    //! \brief 通常与速度相同
    #define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (15)// 15 (典型值)以匹配 PWM、例如:10kHz 控制器和电流环路、1KHz 速度环路、1KHz 轨迹


    //! 简要限制
    秘书长的报告
    //! \brief 定义要在 Id 参考中应用的最大负电流
    //! \brief 仅用于磁场减弱、这是一个安全设置(例如防止退磁)
    //! 简要用户还必须注意、总电流幅度[sqrt (ID^2 + IQ^2)]应保持在任何机器设计规格以下
    #define USER_MAX_NEW_ID_REF_CURRENT_A (-0.5 * USER_MOTOR_MAX_CURRENT)//-0.5 * USER_MOTOR_MAX_CURRENT 示例,进行调整以满足电机的安全需求

    //! \brief 定义 R/L 估算频率、Hz
    //! 简要介绍低电感电机的值较高、电感较高时的值较低
    //! 简要介绍电机。 这些值的范围为100Hz 至300Hz。
    #define USER_R_OVER L_EST_FREQ_Hz (100)//默认为300

    //! \brief 定义磁通积分器的低速限值、pu
    //! \brief 这是 ForceAngle 对象处于活动状态的速度范围(CW/CCW),但仅当启用时
    //! \brief 超出此速度-或者如果已禁用- ForcAngle 将永远不会被激活,并且角度仅由 FAST 提供
    #define USER_ZEROSPEEDLIMIT (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz)// 0.002pu、1-5 Hz 典型值;Hz = USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz

    //! \brief 定义力角频率、Hz
    //! \brief ForceAngle 对象使用的定子矢量旋转频率
    //! \brief 可以是正的或负的
    #define USER_FORCE_ANGE_FREQ_Hz (2.0 * USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz)// 1.0典型强制角启动速度


    //! 简要说明极点
    秘书长的报告
    //! \brief 定义模拟电压滤波器极点位置、Hz
    //! \brief 必须与 VPH 的硬件过滤器相匹配
    #define USER_VOLTGE_FILTER_POLE_Hz (364.682)// 364.682,bootxldrv8301_RevB 硬件的值


    //! 简要介绍用户电机和 ID 设置
    秘书长的报告

    //! \brief 定义 SpinTAC Control 的默认带宽
    //! \brief 此值应通过调整过程来确定 SpinTAC Control
    //! \brief 如果之前已确定带宽度值
    //! \brief 将其乘以20转换为带宽
    #define USER_SYSTEM_BANTANG带宽(20.0)

    提前感谢!

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

    进展顺利。 如果要应用高于30kHz 的 PWM 频率、则必须将 USER_NUM_PWM_TICKS_PER_ISR_TICK 设置为2或3、对于 instaSPIN-FOC 实验项目、最好保持 USER_PWM_FREQ_kHz /USER_NUM_PWM_TICKS_PER_ISR_TICK < 25kHz、否则 ISR 将是时间溢出。