【STM32篇】DRV8425驱动步进电机

【STM32篇】4988驱动步进电机_hr4988-CSDN博客

        在上篇文章中使用了HR4988实现了步进电机的驱动,在实际运用过程,HR4988或者A4988驱动步进电机会存在电机噪音太大的现象。本次将向各位友友介绍一个驱动简单且非常静音的一款步进电机驱动IC。

1.DRV8425简介

        DRV8424/25 是适用于工业和消费类应用的步进电机驱动器。该器件由两个 N 沟道功率 MOSFET H 桥驱动器、一个微步进分度器以及集成电流感应功能完全集成。DRV8424 可驱动最高 2.5A 的满量程输出电流 ;DRV8425 可驱动最高 2A 的满量程输出电流 取决于PCB 设计 )。
        这些器件使用能在 智能调优、快速、慢速和混合衰减选项之间进行选择的内部 PWM 电流调节方案。智能调优可通过自动调节实现出色的电流调节性能,并对电机变化和老化效应进行补偿和 减少电机的可闻噪声
        借助简单的 STEP/DIR 接口,可通过外部控制器管理步进电机的方向和步进速率。这款器件可配置为多种步进模式, 从全步进模式到 1/256 微步进模式皆可。该器件通过专用的 nSLEEP 引脚提供低功耗睡眠模式。提供的保护特性包括: 电源欠压、电荷泵故障、过流、短路以及过热保护。故障状态通过 nFAULT 引脚指示。
        DRV8425/8424有两种封装,在PCB空间足够的情况下,建议使用 HTSSOP (28)封装。

1.1 引脚配置和功能

图1. 28引脚俯视图

1.AOUT1、AOUT2连接电机的A+、A-,BOUT1、BOUT2连接电机的B+、B-;

2.CPH、CPL之间连接一个22nF的陶瓷电容器,这里如果使用了其他容量的电容,可能导致IC无法正常输出,所以在其他配置都没问题时器件无法输出,可能就说电容用错了(亲测如此)。

3.DIR、方向输入内置下拉,可接到MCU引脚上控制。

4.ENABLE引脚低电平禁用输出,高电平启动输出,内部上拉至DVDD。可连接至MCU引脚控制。

5.DVDD逻辑电源电压,典型值5V,可用于其他输入引脚上拉。

6.VREF电流设定基准输入,最大值3.3V。满量程调节电流 (IFS)IFS (A) = VREF (V)/KV (V/A) = VREF (V)/1.32 (V/A)

7.M0、M1设置步进模式,按照下表在M0、M1引脚上施加相应电压即可配置为需要的步进模式。

微步进分度器设置
M0M1步进模式
00
100% 电流的全步进 两相励磁
0
330k 至 GND
71% 电流的全步进 两相励磁
10
非循环 1/2 步进
Hi-Z0
1/2 步进
01
1/4 步进
11
1/8 步进
Hi-Z1
1/16 步进
0Hi-Z
1/32  步进
Hi-Z330k至 GND
1/64 步进
高阻态高阻态
1/128 步进
1Hi-Z
1/256 步进

电平输入如下图:

图2.三电平、四电平输入

8.DECAY0、DECAY1衰减模式设置引脚(根据自己的需求选择不同的衰减模式,这里直接使用智能调优动态)

衰减模式设置
DECAY0DECAY1上升步进下降步进
00智能调优动态衰减智能调优动态衰减
01智能调优纹波控制智能调优纹波控制
10混合衰减:快 30%混合衰减:快 30%
11慢速衰减混合衰减:快 30%
高阻态0混合衰减:快 60%混合衰减:快 60%
高阻态1慢速衰减慢速衰减

 9.STEP步进输入,上升沿前进一步,可接MCU的PWM引脚。软件也主要控制STEP/DIR引脚实现步进电机控制。

10.TOFF设置电流斩波期间的衰减模式关断时间;四电平引脚。还将设置智能调优纹波控制模式中的纹波电流。

智能调优动态控制电流纹波设置
TOFF特定微步进级别下的电流纹波
019mA + ITRIP 的 1%
119mA + ITRIP 的 2%
Hi-Z19mA + ITRIP 的 4%
330KΩ至GND19mA + ITRIP 的 6%

        该纹波控制方法可以更严格地调节电流电平,从而提高电机效率和系统性能智能调优纹波控制适用于能够承受可变关断时间调节方案的系统,以在电流调节中实现小电流纹波。选择低纹波电流设置可确保 PWM 频率不处于可闻范围之内。不过,较高的纹波电流值会降低 PWM 频率,从而降低开关损耗。

关断时间
TOFF关断时间
07us
116us
Hi-Z24us
330KΩ至GND32us

        除智能调优纹波控制模式外,TOFF 引脚将配置所有衰减模式的 PWM 关断时间。

11.nFAULT故障指示,故障时被下拉至低电平,需要外接上拉电阻。(可根据MCU上拉至3.3V)

12.nSLEEP睡眠模式输入,高电平启用器件。低电平脉冲将清除故障。请勿将该引脚接到DVDD,否则将无法退出睡眠模式。

        复位脉冲:该脉冲的宽度必须在 20µs 至 40µs 之间。如果 nSLEEP 在 40µs 至 120µs 的时间内保持低电平,则会清除故障,但器件有可能会关断,也有可能不关断。

1.2 器件模式

睡眠模式:nSLEEP=0;

        DRV8424/25 器件将通过 nSLEEP 引脚实现状态管理。当 nSLEEP 引脚为低电平时,DRV8424/25 器件将进入低功耗睡眠模式。在睡眠模式下,将会禁用所有内部 MOSFET 和电荷泵。必须在 nSLEEP 引脚触发下降沿之后再过去 tSLEEP 时间后,器件才能进入睡眠模式。如果 nSLEEP 引脚变为高电平,DRV8424/25 器件会自动退出睡眠模式。

禁用模式:nSLEEP=1,ENABLE=0;

        ENABLE引脚用于启用或禁用DRV8424/25器件,ENABLE为低电平时,禁止所有输出。

工作模式:nSLEEP=1,ENABLE=Hi-Z/1;

        当 nSLEEP 引脚为高电平、ENABLE 引脚为 Hi-Z 或 1 且 VM > UVLO 时,器件将进入运行模式。必须在经过 tWAKE 时间之后,器件才能针对输入做好准备。

1.3 复位脉冲

        锁存故障可通过快速 nSLEEP 脉冲清除。该脉冲的宽度必须在 20µs 至 40µs 之间。如果 nSLEEP 在 40µs 至 120µs 的时间内保持低电平,则会清除故障,但器件有可能会关断,也有可能不关断。到检测到nFULT引脚电平为低电平时,可发送复位脉冲清除故障。

图3.复位脉冲

nFAULT引脚警告主要分为:(用于保护器件)

VM欠压锁定;

电荷泵欠压;

过流保护;

热关断。

对于DRV8425而言,只能通过nFAULT引脚报警告,需要明确知道错误信息的也可以使用他家的其他串行结构的电机驱动芯片。但相对于4988,DRV8425的价格还是有点小贵的。

图4.嘉立创DRV8425价格信息

2.硬件设计

2.1硬件电路连接

图5.DRV8425电路连接

1.电源输入VCC工作电源电源:4.5V至33V。可根据电机规则选择合适的工作电压;

2.步进模式:通过修改R2、R3、R6、R7选择不同的步进模式,此处为1/125步进模式(M0=1,M1=Hi-Z;125个脉冲电机步进1.8°)。 步进细分越大,可闻噪声越小。

3.DECAY0、DECAY1=01,使用智能调优纹波控制,TOFF = 0,电流纹波19mA + ITRIP 的 1%。

4.通过R8、R10分压给VREF,调节输出电流大小。

5.DIR/STEP、ENABLE、nSEELP引脚由单片机控制外接单片机控制。

        在不出故障的前提下,使用DIR/STEP引脚控制步进电机,代码与4988几乎相同,但是不能软件改变步进模式。如果需要使用软件改变步进模式,可以选择DRV8434,其功能相似且支持SPI串行通行,可输出具体故障信息(例如电机未接入,IC通过nFULL引脚输出低电平报警,通过SPI可查询故障信息)。对于DRV8434的电机控制也可以直接使用DIR/STEP 引脚控制。

2.2 PCB文件

图6.PCB 2D图
图7.PCB 3D图

 3.软件设计

        在单片机选择上本次使用STM32F103C8T6。引脚连接如下图:

图8.引脚连接
引脚连接
STM32F103DRV8425
A0nSLEEP
A1ENABLE
A2DIR
A3(TIM2_CH4)STEP
A4(这里未接入)nFAULT

         在软件编写上与A4988的类似,这里使用定时器输出PWM波控制STEP引脚,通过控制PWM波的周期长度控制电机的转动速率,其他引脚都是用通用IO口控制输出高低电平即可,由于电机在一般情况下不会报警告,所以就没有接nFAULT引脚(报警时会被下拉为低电平)。所以我们配置TIM输出PWM波就可以控制电机工作。

        DRV8425支持最大500KHZ的脉冲频率,要想电机转速快一点只能通过增大PWM频率或者修改步进模式实现。这里定时器预分频为35,时钟频率一分频,TIM的时钟频率2MHZ;重装载寄存器值400,PWM频率5KHZ(0.0002s);360度需要200个1.8度,转动1.8度需要256个脉冲,电机旋转一周需要51200个脉冲即10.24秒。控制A2的电平高低就可以控制电机转动反向,控制TIM使能或使能就可以控制电机转动和停止,控制TIMx_ARR和TIMx_CCR1就可以控制电机转速

        以下是简单控制电机翻转正反转代码例程:

<motor.c>

#include "motor.h"
/*
引脚连接:
		PA0	- NSLEEP			睡眠引脚
		PA1 - ENABLE			使能引脚
		PA2 - DIR 				方向引脚
		PA3 - STEP	TIM2_CH4	步进引脚
*/
uint16_t motor_count;
uint8_t motor_dir;
void MOTOR_Init(void)
{
	//1.引脚初始化
	GPIO_InitTypeDef motor_gpio_init;
	motor_gpio_init.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2;
	motor_gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
	motor_gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&motor_gpio_init);	//DIR ENABLE 通用推挽输出模式
	motor_gpio_init.GPIO_Pin = GPIO_Pin_3;
	motor_gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOA,&motor_gpio_init);	//STEP 复用推挽输出
	
	//2.定时器初始化配置
	TIM_DeInit(TIM2);
	TIM_TimeBaseInitTypeDef motor_TimeInit;
	motor_TimeInit.TIM_Prescaler = 35;					//预分频值
	motor_TimeInit.TIM_ClockDivision = TIM_CKD_DIV1;
	motor_TimeInit.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
	motor_TimeInit.TIM_Period = 400;					//重装载值
	motor_TimeInit.TIM_RepetitionCounter = 0;			//重复计数值
	TIM_TimeBaseInit(TIM2,&motor_TimeInit);				//基本计数模式
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);			//配置更新中断
	TIM_ClearFlag(TIM2,TIM_FLAG_Update);				//清除更新中断位
	
	TIM_OCInitTypeDef motor_OCInit;
	TIM_OCStructInit(&motor_OCInit);
	motor_OCInit.TIM_OCMode = TIM_OCMode_PWM1;//小于CCR为有效电平
	motor_OCInit.TIM_OCIdleState = TIM_OCIdleState_Set;//空闲极性
	motor_OCInit.TIM_OCPolarity  = TIM_OCPolarity_Low;//有效电平
	motor_OCInit.TIM_OutputState = TIM_OutputState_Enable;
	motor_OCInit.TIM_Pulse = 200;
	TIM_OC4Init(TIM2,&motor_OCInit);					//配置通道4PWM
	//失能motor 
	MOTOR_STOP();
	//退出睡眠模式,使能输出
	MOTOR_NSLEEP_H();
	MOTOR_ENABLE_H();
	MOTOR_DIR_CW;									//顺时针
	MOTOR_START();
}

//中断服务函数
void TIM2_IRQHandler(void)
{
	if(RESET != TIM_GetITStatus(TIM2,TIM_IT_Update))
	{
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);		//清除中断标志位
		motor_count++;
		if(motor_count == 51200)//旋转一圈 360 / 1.8 * 256 = 51200
		{
			motor_count = 0;
			motor_dir = motor_dir ^1;//翻转方向
			MOTOR_DIR(motor_dir);
		}
	}
}

<motor.h> 

#ifndef _MOTOR_H_
#define _MOTOR_H_

#include "stm32f10x.h"
#define MOTOR_NSLEEP_H()			GPIO_SetBits(GPIOA,GPIO_Pin_0)
#define MOTOR_NSLEEP_L()			GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define MOTOR_ENABLE_H()			GPIO_SetBits(GPIOA,GPIO_Pin_1)
#define MOTOR_ENABLE_L()			GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define MOTOR_DIR_CCW 				GPIO_SetBits(GPIOA,GPIO_Pin_2)			//逆时针
#define MOTOR_DIR_CW 				GPIO_ResetBits(GPIOA,GPIO_Pin_2)		//顺时针
#define MOTOR_DIR(x)	 			GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction )x)
#define MOTOR_STOP() 				TIM_Cmd(TIM2,DISABLE)					//停止转动
#define MOTOR_START() 				TIM_Cmd(TIM2,ENABLE)					//开始转动

#define SET_MOTOR_SPEED(x) {TIM_SetAutoreload(TIM2,x);TIM_SetCompare3(TIM2,x/2)}//设置速度



void MOTOR_Init(void);

#endif

链接:https://pan.baidu.com/s/1dy85ukQaq_6h0CbGaqduNw?pwd=1234 
提取码:1234 

4.演示

正反转一周视频演示:电机转动一周时间约10s

DRV8425驱动步进电机

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: drv8825是一种常用的步进电机驱动芯片,可以通过STM32微控制器来控制步进电机的运动。在使用drv8825驱动步进电机时,需要注意其电源电压和电流的设置,以及步进电机的相序和步距角等参数的配置。同时,还需要编写相应的控制程序,实现步进电机的正反转、加速、减速等运动控制功能。 ### 回答2: drv8825是一种高性能的步进电机驱动器芯片,可用于运行双极或四极步进电机,并提供最大1/32微步分辨率。它是一款集成了所有步进电机驱动器所需的功能的一体化解决方案,包括步进电机驱动器的电流控制、保护、需要时的微步顺序生成和节省空间的半流控制器。 通过使用stm32微控制器和drv8825步进电机驱动器,我们可以实现控制步进电机的频率、速度、方向、角度等,并发挥出更高的效率和更好的精确度。同时,由于drv8825步进电机驱动器具有保护函数,我们可以在失速、电机短路和过热等情况下保护整个系统的稳定性和安全性。 控制步进电机的方式是将stm32微控制器连接到drv8825的步进和方向管脚,根据需要设置电机的最大电流、速度和方向等参数,通过调整这些参数,电机可以平稳而精确地完成所需的步进动作。可以利用外部计数器和定时器来实现更精准的控制和调整步进电机的速度和位置。 因此,drv8825驱动步进电机stm32,不仅可以使电机运行更加平滑和精准,而且可以缩短电机的响应时间,从而实现更快的响应和更高的动态性能。最重要的是,由于drv8825具有高集成度和功能完善,可以降低电路的复杂度和成本,提高整个系统的可靠性和稳定性。 ### 回答3: DRV8825是一款非常效率的步进电机驱动器,它能够控制多种步进电机,包括双极或四极步进电机,它可以通过步进脉冲和方向控制来产生高精度的运动。STM32微控制器是一款高性能的嵌入式处理器,在许多应用中都可以使用,包括驱动步进电机STM32与DRV8825的连接通常采用SPI通信方式,这种通信方式可以实现高速传输,同时也便于控制步进电机的运动。在使用DRV8825驱动步进电机时,需要为其提供适当的电源,通常使用12V-36V DC电源,这样可以确保轻微的电机震动和最佳运行效果。 在使用STM32驱动步进电机时,需要使用适当的程序和库文件,这些程序和库文件可从STM32官方网站下载。 需要编写代码将STM32的引脚设置为适当的状态,以控制步进电机的行进方向和速度。最后,通过使用命令发送器来发送相应的命令,即可将步进电机控制器与STM32连接起来。 总之,使用DRV8825驱动步进电机STM32,可以轻松控制步进电机的位置和速度,实现高精度,高保真的运动控制。这种驱动方案不仅适用于工业应用,也适用于家庭科技和DIY爱好者。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值