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.

[参考译文] TMS320F28379D:tmdxiddk379d:编码器角度问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163725/tms320f28379d-tmdxiddk379d-encoder-angle-issues

器件型号:TMS320F28379D
主题中讨论的其他器件:TMDXIDDK379D

您好!

我正在为自己的快速电流环路含传感器 FOC 应用修改 tmdxiddk379d 示例代码。 我最初为我的应用使用2048 PPR 编码器、一切都按预期工作。 我现在已经切换到32、768 PPR 编码器、并且遇到了一些问题。

在运行期间、角度似乎有一个跳变。 每次旋转时、我都会听到机械"砰"声、我猜这是场随角度跳转的结果。 您可以看到下面的角度跳跃。

如果转速超过~150RPM、电机将失去同步功能、控制将变得不稳定。  但是、当我用手使转子断电并旋转时、角度会在波形图仪中正确报告、平滑斜升至1.0 p.u.u.u.u.u.h、然后回到0。

了解新编码器可能会出现这种情况的原因会有所帮助。 我想它可能与在索引脉冲的每个上升沿加载到计数器中的索引上的计数值有关、因为每次旋转时跳转似乎会发生一次。 但是、我不理解为什么值会不正确。 初始化例程应负责处理这一问题。

以下是我的一些 QEP 初始化参数:

 

 // Init QEP parameters
    qep1.LineEncoder = ENC_SLOTS;    // set the number of slots in the encoder
    qep1.MechScaler  = 0.25 / qep1.LineEncoder;
    qep1.PolePairs   = POLES / 2;
    qep1.CalibratedAngle = 0;    // Parameter: Raw angular offset
                                 //            between encoder index and phase A

    // Configure the decoder for quadrature count mode, counting both
    // rising and falling edges (that is, 2x resolution)
    // For US Digital HB6M Encoder, A leads B for positive speed
    EQEP_setDecoderConfig(EQEP1_BASE, (EQEP_CONFIG_2X_RESOLUTION |
                                       EQEP_CONFIG_QUADRATURE |
                                       EQEP_CONFIG_NO_SWAP));

    EQEP_setEmulationMode(EQEP1_BASE, EQEP_EMULATIONMODE_RUNFREE);

    // Configure the position counter to be latched on a unit time out
    // and latch on rising edge of index pulse
    EQEP_setLatchMode(EQEP1_BASE, (EQEP_LATCH_RISING_INDEX |
                                   EQEP_LATCH_UNIT_TIME_OUT));

    // Configure the position counter to reset on a maximum position
    EQEP_setPositionCounterConfig(EQEP1_BASE, EQEP_POSITION_RESET_MAX_POS,
                                              (4 * qep1.LineEncoder) - 1);

    // Disables the eQEP module position-compare unit
    EQEP_disableCompare(EQEP1_BASE);

    // Enable the unit timer, setting the frequency to PWM Frequency
    EQEP_enableUnitTimer(EQEP1_BASE, QEP_UNIT_TIMER_TICKS);

    // Configure and enable the edge-capture unit. The capture clock divider is
    // SYSCLKOUT/128. The unit-position event divider is QCLK/32.
    EQEP_setCaptureConfig(EQEP1_BASE, EQEP_CAPTURE_CLK_DIV_2,
                                      EQEP_UNIT_POS_EVNT_DIV_256);

    // Enable QEP edge-capture unit
    EQEP_enableCapture(EQEP1_BASE);

关于如何解决这一问题的任何想法都将受到赞赏。 CLA 中的编码器代码从示例中未经修改。 谢谢!

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

    ENC_SLOTS 值为32、768。

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

    您好、Ryan、

    您可以尝试以开环方式运行电机、并查看是否正确报告了位置。 有关 更多详细信息、请参阅 "。">www.ti.com/.../spracl1的第7.5.2节"位置编码器方向验证"。

    [引用 userid="520172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163725/tms320f28379d-tmdxiddk379d-encoder-angle-issues 命令]操作期间、角度似乎有一个跳转。 每次旋转时、我都会听到机械"砰"声、我猜这是场随角度跳转的结果。 您可以看到下面的角度跳转。[/quot]

    如果每次旋转都发生此问题、我们不应该在图形中的每个周期(0-1.0 pu)看到角度的"跳跃"?

    [引用 userid="520172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163725/tms320f28379d-tmdxiddk379d-encoder-angle-issues ]了解新编码器可能会发生这种情况的原因会有所帮助。 我想它可能与在索引脉冲的每个上升沿加载到计数器中的索引上的计数值有关、因为每次旋转时跳转似乎会发生一次。 但是、我不理解为什么值会不正确。 初始化例程应负责此操作。[/quot]

    应在索引脉冲加载什么计数值? 它是否与问题发生时跳转到的值匹配? 这可能是确认这种想法的一种方法。

    最棒的

    Kevin

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

    感谢 Kevin 的评论。 更确切地说、图中显示的角度是电角、而不是机械角、因此每个周期中都没有跳转。 我能够解决角度上的跳变。 事实证明、所使用的编码器无法支持我尝试从系统命令的速度。 我将返回使用具有2048 PPR 的编码器。

    不过,我还有一个与这个问题有关的问题。  本段来自 构建级别4第27页的文档"使用快速电流环路对 PMSM 进行快速响应控制":

    '如果由于任何故障偶尔使电机旋转方向反转、请尝试通过将 runMotor 设置为 MOTOR_STOP、然后再次设置为 MOTOR_RUN 来重新启动电机。 对于 QEP、在从 lsw = ENC_WAIT_for_INDEX 转换到 lsw = ENC_GUST_INDEX 时、可能需要进行一些微调。 这可以用作修复它的练习。"

    TI 是否知道此问题的原因? 我每次运行电机时都会发生该情况。 首先、我将转子角度与 α 轴对齐、然后将角度计数归零(ENC_ALIGNing)。 然后、我强制一个角度并注入一些 q 轴电流、直到我达到索引脉冲(ENC_WAIT_FOR_INDEX)。 每次触发索引脉冲时、都会保存此偏移值并重新加载到计数器中。 此时、电机已准备好运行(ENC_CALIBRACY_DONE)。 我最初的速度命令为100 RPM (7500 RPM 基本速度)。 速度和电流调节器运行正常、并使电机加速。 然后、在大约1或2秒后、速度反馈下降、电机将开始反向旋转、电流命令随后会因误差而增加、 控制结束从过流事件跳闸。 以下是此事件期间的速度响应图:

    红色是速度命令、绿色是具有加速度限制的速度基准、白色是编码器的速度响应。 有什么想法、为什么会突然下降、速度变为负值?

    谢谢。

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

    您好、Ryan、

    很抱歉耽误你的回答。 发生此跳闸问题时、您是否收到任何其他报告的故障? 您提到过流、但在此之前可能还有其他人吗?

    [引用 userid="520172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163725/tms320f28379d-tmdxiddk379d-encoder-angle-issues/4379918 #4379918"> TI 是否知道此问题的原因? 每次我运行电机时都会发生这种情况。

    如果他熟悉这种行为、请让我作为同事。

    最棒的

    Kevin

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

    大家好、Kevin、这个问题已经解决。 编码器定位螺钉在机器轴上不够紧、因此随着速度的增加、会出现轻微的转差、直到角度达到反向生成扭矩为止-这说明了突然减速和不稳定。 现在一切都按预期工作。