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.

[参考译文] DRV8889-Q1:上电后和从睡眠模式唤醒后出现失步

Guru**** 2548280 points
Other Parts Discussed in Thread: DRV8889-Q1

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1568411/drv8889-q1-step-loss-after-power-on-and-wake-up-from-sleep-mode

器件型号:DRV8889-Q1


工具/软件:

我正在使用带有 DRV8889 驱动器的 STM32 微控制器来控制双极步进电机。 上电后、电机持续错过前两个 STEP 脉冲、只会从第三个脉冲开始后续移动(有时从第二个脉冲开始)。 此外、当驱动器退出睡眠模式时、电机不会响应唤醒后的第一步脉冲

for (int i=0;i<1000;i++){

wake_chart_driver();

HAL_DELAY (2);

enable_chart_output();

_chart_steps_GPIO (1、1、5);

STEP_COUNT++;

disable_chart_output();

sleep_chart_driver();

HAL_DELAY (1000);

}

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

    尊敬的 Maheshwari:

    感谢您的发布。

    上电后、电机始终会错过前两个步进脉冲、只会从第三个脉冲开始后续(有时从第二个脉冲开始)。 此外、当驱动器退出睡眠模式时、电机会不响应唤醒后的第一步脉冲

    请参阅数据表中的以下规格。 上电或从睡眠状态唤醒后、您必须等待大于 0.9ms(例如 1ms)、然后再发出 STEP 输入脉冲。 此外、在 SPI 就绪之前、不会接受 SPI 事务。 因此、最好在上电或从睡眠状态唤醒后等待 1ms、然后进行必要的 SPI 配置、然后为电机旋转发出阶跃脉冲。 谢谢你。

    此致、Murugavel  

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

    你好,谢谢你的答复,实际上我给了延迟>1ms,正如你可以看到在代码中我给了 2ms 的延迟

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

    尊敬的 Maheshwari:

    我给出了>1ms 的延迟、正如您在代码中看到的、我给出了 2ms 的延迟

    好极了。 在这 2ms 的延迟和器件配置后、您仍然会错过前两个 STEP 脉冲吗? 当器件通电或从睡眠中唤醒时、确保 STEP 输入引脚为逻辑低电平。 在发出 STEP 脉冲之前、必须启用输出、DRVOFF 引脚 为低电平并且 CTRL2 中的 DIS_OUT 位为 0b。 这是 DRV8889-Q1 的默认 CTRL2.DIS_OUT。 对于 DRV8889A-Q1、默认值为 1b、必须更改该值。 如果您使用的是非 A 器件、则默认值正常。  

    驱动阶跃输入必须是阶跃输入转换为高电平、然后转换为低电平、索引会根据每次从高电平到低电平转换的 DIR 向上或向下移动。 请参阅以下信息。

    此致、Murugavel  

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

    您好 Murugavel、

    我尝试了在发送任何 STEP 脉冲之前确保 STEP 引脚为低电平的方法。 此外、我正在启动步进脉冲之前启用驱动器输出。 下面是我用于初始化驱动程序的代码。 您能否回顾一下并告诉我您是否有任何建议或替代解决方案?

    **我使用了斜升技术来增加电流、并且我也尝试了直接使用 PWM 而不是通过斜升
      TIM1->CCR1 = 2000;(完整占空比)  

    void power_on_chart_driver (void){

    TIM1->CCR1 = 0;/* Vref = 0 */

    HAL_TIM_PWM_Start (&htim1、TIM_CHANNEL_1);

    HAL_DELAY (10);

    for (int i=0;i<100;i++){/*减小电流*/

    TIM1->CCR1 = i*20;

    HAL_DELAY (2);

    }

    HAL_DELAY (10);

    HAL_GPIO_WritePin (STEP_GPIO_Port、STEP_Pin、GPIO_PIN_RESET);/* INIT = 0 时的 STEP 引脚低电平状态*/

    HAL_GPIO_WritePin (dir_GPIO_Port、dir_pin、GPIO_PIN_SET);/* DIR 引脚低电平状态(init = 0 时)*/

    wake_chart_driver()/*从睡眠模式唤醒驱动程序*/

    HAL_DELAY(2);/*确保 tWake Time */

    enable_chart_output()/*启用驱动程序输出*/

    HAL_DELAY (2);/*确保输出启用后出现适当的延迟*/

    }

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

    尊敬的 Maheswari:

    我已经尝试了在发送任何步进脉冲之前确保 STEP 引脚为低电平的方法。

    这是唯一建议的分度器正确计时方法、始终为低电平步进空闲。

    此外、我正在启动步进脉冲之前启用驱动程序输出。 下面是我用于初始化驱动程序的代码。 您能否回顾一下并告诉我您是否有任何建议或替代解决方案?

    我们不熟悉固件或调试 、尤其是非 TI MCU。 我将尝试从驱动程序的角度帮助您制定调试方法。 在下面的代码片段中、唤醒延迟应为 2ms。 这不应该是 2000 而不是 2?

    我们 可以确保 DRV8889-Q1 在上电或从睡眠状态唤醒后不会丢失任何步进脉冲。 自 2020 年起、此器件用于多种终端产品。 要么存在与 tWAKE 不符合要求的唤醒外部延迟问题、要么外部 MCU 本身可能会在您的设置中减少两个脉冲。 您可使用示波器验证此情况、通过发出已知数量的脉冲(例如 6 个脉冲)来捕获 nSLEEP 上升沿、DRVOFF 和 STEP 脉冲、并根据代码序列测量唤醒时间、nSLEEP 上升沿和 DRVOFF 下降沿之间的时间。 然后寻找确切的 6 个步进脉冲。

    您能分享原理图以进行审核吗? 在 GPIO 到 STEP 引脚输入的路径中是否有任何 R 和 C?  谢谢你。

    此致、Murugavel