TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

需要怎么解决下。

Cherry Zhou:

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

,

?? ??:

好的.

,

Cherry Zhou:

您好,

请问发送步进信号的速率是每秒多大脉冲? 必须连续地将 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,

你的微信是多少呢.

,

Cherry Zhou:

您好,

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

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

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

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

?? ?? said:可以加下你的微信么,

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

,

?? ??:

好的,

,

?? ??:

.drv8424是 RGE 封装 24 引脚 VQFN

,

?? ??:

引用您的回复:

Cherry Zhou 2 小时前 回复 ?? ??

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一次拉高拉低;

,

Cherry Zhou:

您好,

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

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

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

,

?? ??:

好的,感谢!

可能是占空比是50%,

高低电平数目一致,

不够io来驱动电机;

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

有结果了再咨询您.

,

?? ??:

请问有STM32F207 PWM的案例么,

最好是有调试通过的demo.

,

Cherry Zhou:

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怎么配置地,

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

,

Cherry Zhou:

?? ?? said:

请问有STM32F207 PWM的案例么,

最好是有调试通过的demo.

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

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

,

Cherry Zhou:

您好,

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

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

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

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

赞(0)
未经允许不得转载:TI中文支持网 » DRV8424: 电机有声音,不转动,
分享到: 更多 (0)