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.

[参考译文] DRV8424:电机有声音、但不旋转

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1279886/drv8424-the-motor-has-sound-but-does-not-spin

器件型号:DRV8424

大家好、

DRV8424RGER 驱动芯片采用 STM32F302RBT6单片电路来控制驱动电机的旋转。

按如下方式初始化 DRV8424的 GPIO:

MX_DRV8424_GPIO_Init ();

//PC10关闭中断
STEP_TOFF (0);

//修改1/8步长  
STEP_MODE_0 (1);
STEP_MODE_1 (1);

//设置1/32步进
// STEP_MODE_0 (0);//+ MODE1设置为悬空输入  

//衰减模式:智能调优纹波控制  
STEP_DECAY_0 (0);
STEP_DECAY_0 (1);


STEP_SLEEP_N (1);
//PA4 DAC 输出0.66V、用于电流输出控制  

STEP_ENABLE (1);

但当前的 行为 是电机有声音、但不 旋转。 您能帮助检查这个问题吗? 谢谢。

此致、

切里

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

    嘿 Cherry、

    发送步进信号的速率是每秒多大脉冲?  必须连续将 STEP 信号发送到 STEP 引脚、不能直接将其设置为高电平。  每个 STEP 脉冲会使电机大幅旋转(具体取决于电机规格、如每步进角度和微步进设置)。  转换为高电平、看起来 STEP 引脚设置为高电平。  

    此致、

    雅各布

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

    您好、Jacob:

    感谢您的支持!

    1) 1)在 STM32F302RBT6的 main 中、GPIO 的 MCU 初始化代码用于连接 drv8424:  

    MX_DRV8424_GPIO_Init(step_mode);
    /* USER CODE BEGIN 2 */
    
    //PC10 close interrupt
    STEP_TOFF(0);//7us shutdown
    
    if (step_mode == eSTEP_ONE_32TEEN)
    {
    //change 1/32 step
    STEP_MODE_0(0);
    
    //STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_TWO)
    {
    //change 1/2 step
    //STEP_MODE_0(0);
    STEP_MODE_1(0);
    }
    else if (step_mode == eSTEP_ONE_FOUR)
    {
    //change 1/4 step
    STEP_MODE_0(0);
    STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_SIXTEEN)
    {
    //change 1/16 step
    //STEP_MODE_0(0);
    STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_32TEEN)
    {
    //change 1/32 step
    STEP_MODE_0(0);
    //STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_256TEEN)
    {
    //change 1/256 step
    
    STEP_MODE_0(1);
    
    //STEP_MODE_1(1);
    }
    //change 1/32 step
    //STEP_MODE_0(0); // + MODE1 Set to floating input 
    
    //Decay mode: Smart tune ripple control 
    STEP_DECAY_0(0);
    STEP_DECAY_0(1);
    
    
    STEP_SLEEP_N(1);
    //PA4 DAC Outputs 0.66 V for current output control 
    
    STEP_ENABLE(1);
    
    delay_us(800);
    
    STEP_DIR(1);

    在 TIM3中的 HAL_TIM_PeriodElapsedCallback 函数中设置10KHz 的频率、将 PB4 STEP 引脚拉高。 捕获到 PB4的输出波形的频率为10KHz。

    但电机不旋转、而且没有声音。

    2) 2)在主循环中:

    while (1)
    {
    /* USER CODE END WHILE */
    
    /* USER CODE BEGIN 3 */
    
    /*
    HAL_Delay(10);
    if(dir)
    cntpwmval++; //dir==1 led0pwmval increment
    else
    cntpwmval--; //dir==0 led0pwmval Decrement 
    if(cntpwmval>300)
    dir=0; //led0pwmval when 300 is reached, the direction is decremented 
    if(cntpwmval==0)
    dir=1; //led0pwmval When decremented to 0, the direction changes to incremented 
    TIM_SetTIM3Compare1(cntpwmval); //Modify the comparison value and the duty cycle 
    
    */
    
    drv8424_step(200,half_T);
    
    HAL_Delay(5000);
    }
    
    void drv8424_step(int num,int half_T)
    {
    //change 1/8 step
    //STEP_MODE_0(1);
    //STEP_MODE_1(1);
    
    for(;num>0;num--)
    {
    STEP_DIR(1);
    STEP_STEP(1);
    
    //HAL_Delay(10000);
    STEP_STEP(0);
    Delay(half_T);
    //Delay(half_T);
    //HAL_Delay(10000);
    STEP_DIR(0);
    }
    
    }

    如上所示进行调用、电机会发出一些声音、但不会旋转。

    谢谢。此致、

    切里

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

    嘿 Cherry、

    还不错。  您是否探测了相位上的电机电流以查看其波形在示波器上是什么样的?   

    首先、我会尝试缓慢地旋转电机、比如信号为1000Hz + 1/16微步进。  对于电机而言、10kHz 可能太快。  开始缓慢、查看在给定电压和电流下步进电机的启动速度。   

    您是否在 VREF 上具有电压、例如3.3V 或某种其他电压(非 GND/悬空)?

    您能否确认 VCP 和 CPL/CPH 引脚上的电容值正确?  器件对这些值相当敏感。  

    此致、

    雅各布

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

    您好、Jacob:

    DRV8424是 RGE 封装和24引脚 VQFN 封装。

    MODE0引脚配置如下:

    /*配置 GPIO 引脚:PC9 */
    GPIO_STEP_MODE_0.Pin = GPIO_PIN_9;
    GPIO_STEP_MODE_0.Mode = GPIO_MODE_INPUT;//GPIO_MODE_INPUT;//GPIO_MODE_OUTPUT_PP;
    GPIO_STEP_MODE_0.PULL = GPIO_NOPULL;
    GPIO_STEP_MODE_0.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init (GPIOC、&GPIO_STEP_MODE_0);

    MODE1引脚配置如下:

    /*配置 GPIO 引脚: PD2 */
    GPIO_STEP_MODE_1.Pin = GPIO_PIN_2;
    GPIO_STEP_MODE_1.Mode = GPIO_MODE_INPUT;//GPIO_MODE_OUTPUT_PP;
    GPIO_STEP_MODE_1.Pull = GPIO_NOPULL;
    GPIO_STEP_MODE_1.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init (GPIOD、&GPIO_STEP_MODE_1);

    dvr8424相关引脚初始化配置如下:  

    //PC10 close interrupt
    STEP_TOFF(0);//7us shutdown
    
    //change to 1/16 step
    //STEP_MODE_0(1);
    STEP_MODE_1(1);
    
    //set 1/32 step
    //STEP_MODE_0(0); // + MODE1 set as floating input
    
    //Decay mode: Smart tune ripple control 
    STEP_DECAY_0(0);
    STEP_DECAY_0(0);
    
    
    STEP_SLEEP_N(1);
    //PA4 DAC Outputs 0.66 V for current output control 
    
    STEP_ENABLE(1);
    
    HAL_Delay(200);
    
    STEP_DIR(1);
    
    STEP_STEP pin

    这是常规的上拉和下拉。  

    TIM3 PB4 --- > TIM3_CH1配置:

    __HAL_RCC_GPIOB_CLK_ENABLE();
    /**TIM3 GPIO Configuration
    PB4 ------> TIM3_CH1
    */
    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    /* TIM3 interrupt Init */
    HAL_NVIC_SetPriority(TIM3_IRQn, 1, 3);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
    /* USER CODE BEGIN TIM3_MspInit 1 */
    
    
    //Callback function, timer interrupt service function call 
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    /* if(htim==(&htim3))
    {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
    tim3_cnt = htim3.Instance->CNT;
    tim3_cnt++;
    }
    */
    if (htim->Instance == TIM3)
    {
    // The counter self-increments by 1 for every interrupt of Timer 3 
    // tim3_cnt ++;
    // count 1000 times,Timing 100s
    //if(tim3_cnt >= 50)
    {
    // clear counter
    //tim3_cnt = 0;
    // Toggles the level state of PB4:SETP_step pin 
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);
    
    }
    
    }
    
    
    }

    您能否帮助查看上述设置和更改是否正常?

    // 72M/72 = 1M 计数频率、自动重新加载为200-1、然后 PWM 频率为1M/200 = 5kHz、时间:200us

    MX_TIM3_Init (2000-1、72-1);5k 拉至高电平一次、用于 STEP_STEP PB4。

    谢谢。此致、

    切里

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

    嘿 Cherry、

    请给我另一天的时间来研究这件事。  如果您可以将包含输入信号的示波器捕获结果(STEP、ENABLE、nSLEEP、nFAULT)发布到驱动器、这可能有助于确认它们都处于正确的状态。  

    OUT1信号(或任何输出信号)的电流波形将格外有用、因此我们可以查看驱动器是否输出任何内容。

    此致、

    雅各布

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

    嘿 Cherry、  

    请将这些示波器捕获的输出电流波形和输入信号发布到驱动器。  这将帮助我评估问题。  

    5kHz 的 PWM 频率应该没有问题、但我们需要验证器件是否正在接收预期的信号。   

    此致、

    雅各布

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

    您好、Jacob:

    非常感谢、此问题可能是由 50%占空比和相同数量的高电平和低电平 导致的、这会导致 IO 不足以驱动电机。

    客户已更换用于 调试的 stm32F207ZET6 MCU、并且想知道是否有  STM32F207 PWM 的演示。

    谢谢。此致、

    切里

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

    嘿 Cherry、

    50%占空比非常适合步进电机驱动、但如果输入不遵循逻辑输入电压电平、则不会起作用:  

    客户更换 stm32F207ZET6 MCU 以进行 调试,并想知道是否 可以参考 STM32F207 PWM 的演示。

    我们没有任何用于 STM32的参考代码、但 STM 应在其网站上提供有关 PWM 输出的示例、您可以开始使用

    此致、

    雅各布

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

    您好、Jacob:

    客户更换 stm32F207ZET6 MCU 以进行 调试[/报价]

    STM32F207 PWM 如下所示、TIM1_CH4与 PE14 IO 关联。 客户最终希望通过 MCU 将 PWM 波输出到 PE14 STEP 引脚、从而驱动电机。  

    但 drv8424尚无法驱动电机。

    您能否帮助分享如何配置 drv8424的10个 GPIO 的初始化?

    NSLEEP 用于控制引脚电压(STEP、DIR、Enable、nFAULT、DECAYO、 DECAY1、toff、MO、M1)、如何配置 GPIO? 是否有可能共享配置代码?

    谢谢。此致、

    切里

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

    嘿 Cherry、

    它是微控制器内的标准 GPIO 设置。  器件输入引脚应为 MCU 输出、DRV8424输出引脚应为 MCU 输入。   

    您可以使用 DRV8424EVM 并下载其 支持软件- DRV84XXEVM-GUI - DRV84xxEVM 软件 、以查看我们如何初始化器件上的引脚和 PWM。  此器件没有什么特别之处、只是正常的微控制器输入/输出和 PWM 设置。  

    如果您可以将流经 OUT1的电流图像发布到电机、那么示波器捕获可以帮助调试。   

    您的 nFAULT 引脚是否显示为低电平、表示发生了故障?  

    此致、

    雅各布