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: 电机有声音,不转动,

Part Number: DRV8424

您好!

我们使用stm32F302RBT6 单片机控制drv8424RGER驱动芯片,来驱动电机转动,

初始化了drv8424的GPIO,

如下:

MX_DRV8424_GPIO_Init();

//PC10 close interrupt
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);

结果是电机有声音,不转动,

请问这个是什么原因的呢,

需要怎么解决下。

  • 您好,您的问题我们需要请求英文论坛工程师的帮助,如有答复将尽快回复您。

  • 您好,

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

  • 我是在STM32F302RBT6的

    main里mcu连接drv8424的gpio的初始化代码:

    MX_DRV8424_GPIO_Init(step_mode);
    /* USER CODE BEGIN 2 */

    //PC10 close interrupt
    STEP_TOFF(0);//7us 关断

    if (step_mode == eSTEP_ONE_32TEEN)
    {
    //改1/32 步进
    STEP_MODE_0(0);

    //STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_TWO)
    {
    //改1/2 步进
    //STEP_MODE_0(0);
    STEP_MODE_1(0);
    }
    else if (step_mode == eSTEP_ONE_FOUR)
    {
    //改1/4 步进
    STEP_MODE_0(0);
    STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_SIXTEEN)
    {
    //改1/16 步进
    //STEP_MODE_0(0);
    STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_32TEEN)
    {
    //改1/32 步进
    STEP_MODE_0(0);
    //STEP_MODE_1(1);
    }
    else if (step_mode == eSTEP_ONE_256TEEN)
    {
    //改1/256步进

    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);

    delay_us(800);

    STEP_DIR(1);

    1.TIM3里HAL_TIM_PeriodElapsedCallback回调函数设置10KHz的频率,拉高拉低PB4  STEP 引脚的,

    抓到了PB4的输出波形,是10KHz的频率,

    但电机不转动,也没有声音;

    2. 在maiin循环里

    while (1)
    {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

    /*
    HAL_Delay(10);
    if(dir)
    cntpwmval++; //dir==1 led0pwmval递增
    else
    cntpwmval--; //dir==0 led0pwmval递减
    if(cntpwmval>300)
    dir=0; //led0pwmval到达300后,方向为递减
    if(cntpwmval==0)
    dir=1; //led0pwmval递减到0后,方向改为递增
    TIM_SetTIM3Compare1(cntpwmval); //修改比较值,修改占空比

    */

    drv8424_step(200,half_T);

    HAL_Delay(5000);
    }

    void drv8424_step(int num,int half_T)
    {
    //改1/8 步进
    //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);
    }

    }

    这样调用可以听到电机有有声音,但不转动;

  • 你好,

    可以加下你的微信么,

    我的微信是wkf_25284,

    你的微信是多少呢.

  • 您好,

    请问您有没有探测过相位上的电机电流,来看下其波形在示波器上是什么样的?

    首先建议您可以尝试缓慢地旋转电机,比如信号为1000Hz + 1/16微步进。 对于该电机而言10kHz 可能太快了。 缓慢地开始,然后看下在给定电压和电流下步进电机的启动速度。

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

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

    可以加下你的微信么,

    十分抱歉,论坛目前只提供线上的技术支持。

  • .drv8424是 RGE 封装 24 引脚 VQFN

  • 引用您的回复:

    TI__Guru* 76275 points

    您好,

    请问您有没有探测过相位上的电机电流,来看下其波形在示波器上是什么样的?

    首先建议您可以尝试缓慢地旋转电机,比如信号为1000Hz + 1/16微步进。 对于该电机而言10kHz 可能太快了。 缓慢地开始,然后看下在给定电压和电流下步进电机的启动速度。

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

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

    RGE 封装 24 引脚 VQFN需要怎么定位下呢,

  • MODE0引脚配置:

    /*Configure GPIO pin : 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引脚配置:
    /*Configure GPIO pin : 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 关断

    //改1/16 步进
    //STEP_MODE_0(1);
    STEP_MODE_1(1);

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

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


    STEP_SLEEP_N(1);
    //PA4 DAC 输出0.66V电压 来实现电流输出控制

    STEP_ENABLE(1);

    HAL_Delay(200);

    STEP_DIR(1);

    STEP_STEP引脚

    是定时的拉高拉低,

    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 */


    //回调函数,定时器中断服务函数调用
    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)
    {
    // 定时器3每中断一次,计数器自加1
    // tim3_cnt ++;
    // 计数1000次,定时100s
    //if(tim3_cnt >= 50)
    {
    // 清除计数器
    //tim3_cnt = 0;
    // 翻转PB4:SETP_STEP引脚的电平状态
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4);

    }

    }


    }

    请问这样配置对么,

  • //72M/72=1M的计数频率,自动重装载为200-1,那么PWM频率为1M/200=5kHZ,time:200us

    MX_TIM3_Init(200-1,72-1); STEP_STEP PB4给的10k一次拉高拉低;

  • 纠正下:

    MX_TIM3_Init(200-1,72-1); STEP_STEP PB4给的5k一次拉高拉低;

  • 您好,

    感谢您提供的信息,工程师正在查看中。

    此外,是否方便再分享下包含输入信号到驱动器的示波器捕获结果(STEP、ENABLE、nSLEEP、nFAULT),我们可以确认这些都处于正确的状态。

    如果可以的话,还请再分享下OUT1信号(或任何输出信号)的电流波形,这样我们可以查看驱动器是否输出任何内容。

  • 好的,感谢!

    可能是占空比是50%,

    高低电平数目一致,

    不够io来驱动电机;

    我们现在换了stm32F207ZET6 mcu来调试地,

    有结果了再咨询您.

  • 请问有STM32F207 PWM的案例么,

    最好是有调试通过的demo.

  • demo我们确认下给您答复哈。

  • STM32F207 PWM出来了,TIM1_CH4 关联的PE14 IO,我们最终是想通过mcu输出pwm波到PE14 STEP引脚,

    来驱动电机转动.

    但drv8424还不能驱动电机转动,

    请问下,drv8424的10个GPIO的初始化怎么配置下地,

    nSLEEP 引脚电乐(nSLEEP
    控制引脚电压( STEP、DIR、ENABLE、nFAULT、DECAYO、DECAY1、TOFF、MO、M1)
    gpio怎么配置地,

    可以提供下配置的代码么,

  • 请问有STM32F207 PWM的案例么,

    最好是有调试通过的demo.

    我们并没有任何用于 STM32的参考代码但,不过 STM 在其网站上应该有提供有关 PWM 输出的示例,您可以看下。

    调试结果我们转达给工程师确认下哈。

  • 您好,

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

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

    能分享下流经 OUT1的电流到电机的示波器捕获吗?

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