玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

时间:2023-03-09 04:04:17
玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

我造*,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

本文介绍X-CTR100控制器控制步进电机,实现步进电机精确转速控制。

原理

如上图所示,步进电机系统一般包括控制器、驱动器和步进电机三部分。

步进电机

步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(或步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达调速的目的。因此在需要准确定位或调速控制时均可考虑使用步进电机。

步进电机根据尺寸进行分类,常用小型步进电机有42、57型号。

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

本文使用42型四线步进电机接口及参数

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

本文选用电机参数

步进电机种类、参数众多,详细说明请查阅本文参考资料文件夹内容。

驱动器

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

上图为常用步进电机驱动器,其中DRV8825和A4988为小型步进电机驱动器,驱动电流较小,常用于打印机、3D打印机、雕刻机等设备,支持的3d打印机有Prusa Mendel,ultimaker,printbot,makerbot等

TB6600为大功率驱动器,驱动电流更大,常用于大型设备。

驱动器虽然外形参数各异,驱动方法类似,一般包括EN(使能)、DIR(方向)、PLUS(脉冲)三个控制角。

本文以DRV8825为例进行说明。A4988与DRV8825引脚兼容,性能稍弱,详见下表。

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

参考:https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards

DRV8825 是德州仪器 (TI) 为打印机、 扫描仪和其他自动化设备设计的集成电机驱动芯片。 它集成了 2 个 H 桥电路, 以及片上 1/32 微步进分度器, 可以驱动一个双极型电机,或两个直流有刷电机。 输入电压范围 8.2~45V, 可以提供 1.75A 的有效电流, 并可承受 2.5A的峰值电流(在 24 V、 25° C 的应用环境下 )。低至 0.2Ω 的导通电阻, 保证了芯片良好的热特性。 另外, 还集成了快速响应的短路、 过热、欠压及交叉传导保护功能电路, 能够检测故障状况, 并迅速切断 H 桥, 从而为电机和驱动芯片提供保护

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

DRV8825相对4988 特点优势:

1、最大电流2.5A。

2、最高支持32细分。

3、4层PCB板,散热性能更好。

4、芯片内阻更小,发热更低,散热性更好。

DRV8825特点:

1、适合驱动8.2V~45V 2.5A以下的步进电机;

2、只有简单的步进和方向控制接口;

3、六个不同的步进模式:全、半、1/4、1/8、1/16、1/32;

4、可调电位器可以调节最大电流输出,从而获得更高的步进率;

5、自动电流衰减模式检测/选择;

6、过热关闭电路、欠压锁定、交叉电流保护;

7、接地短路保护和加载短路保护

DRV8825模块原理图:

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

DRV8825接线示意图

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

细分设置

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

电流调节

Rs电阻值市面上一般是0.1 欧(R100),对应的是驱动模块上面S1 S2电阻。这里是0.1欧姆(标号R100=0.1欧)。

但市面DRV8825驱动模块这个Vref出厂基本都是调到1.6V这样算下来,电流I=3.2。这也是很多人用DRV8825驱动模块发烫,电机发烫原因,这样很容易损坏电机和驱动模块。

所以拿到手第一时间把这个Vref参考电压调小到0.5V左右再根据电机参数微调。

Vref电压:电位器金属旋钮到GND的电压。可以通过调节电位器改变。

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

常见问题

1)DRV8825驱动板可以驱动57电机吗?

4988可以驱动的电机跟尺寸关系不大,主要与工作电流有关,理论上电流小于2A的步进电机都是可以驱动的,不论是42还是57电机。

2)可以驱动多大的电流?

如果DRV8825芯片上没有加散热片,电流最好在1.5以下。如果加散热片,电流可以达到2.5A。

3)步进电机的连接方式是什么?

正如DRV8825板子背面所标识的,连接方式是依次连接步进电机的1B-1A-2A-2B,或者反向为2B-2A-1A-1B,或者1A-1B-2B-2A,其它的方式一次类推。如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。

4)接上电机后,电机不能正常运行,在左右抖动,是什么原因?

电机出现抖动一般有两个原因,一是缺相:可能是DRV8825板子没有焊接好或因为外力导致DRV8825的输出端某一相断开,造成电机缺相从而抖动。也有可能是步进电机接线只用一相没有连接好;而是两相接错:如果步进电机没有按照正确的顺序进行连接,电机也会出现抖动的情况,请按照问题3进行正确的连接

5)电机丢步如何解决?

相电流的大小跟步进电机的扭力有直接关系,如果感觉你的步进电机扭力不足、丢步,可以加大4988板子的电流配置。驱动板是通过一个小的电位器来实现对输出电流的配置的。可以通过用万用表测量电位器中间管脚的电位。电位和电流的关系满足下面的公式:Vref = I_TripMax= Vref/(5*Rs)(模块的Rs电阻为R100).也就是如果你想配置电机工作电流为1A,则电位应该配置在0.5V

6)DRV8825可以驱动两相六线或两相无线的电机吗?

可以,两相连线按照问题3连接,将中间抽头悬空即可。

7)电机停止转动时会有滋滋的电流声。

首先说明的是这是正常现象。步进电机的特点是走特定的角度而不是一直转,所以步进电机都有一个参数,步距角。如果通过细分,可以最小走步距角/细分数的角度,比如步距角为1.8度的步进电机,采用16细分,最小可以走的角度是1.8/16=0.1125度。但由于这个角度非常小,并且不一定在电机物理所在的位置(1.8度为一个物理位置),所以步进电机停止时也需要通电,从而保证电机不会自动跳到物理步距角上。因为这个特性使得步进电机在静止时会有电流声,这属于正常现象,不用担心。

X-SOFT软件生态,X-API文件如下。

参考自【开源&分享】蒙尘子 http://www.3dprinter-diy.com/forum.php?mod=viewthread&tid=1330

高级说明

步进电机主要参数

① 步进电机的相数:是指电机内部的线圈组数,目前常用的有两相、三相、五相步进电机。

② 拍数:完成一个磁场周期性变化所需脉冲数或导电状态,用m表示,或指电机转过一个齿距角所需脉冲数。

③ 保持转矩:是指步进电机通电但没有转动时,定子锁住转子的力矩。

④ 步距角:对应一个脉冲信号,电机转子转过的角位移。

⑤ 定位转矩:电机在不通电状态下,电机转子自身的锁定力矩。

⑥ 失步:电机运转时运转的步数,不等于理论上的步数。

⑦ 失调角:转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

⑧ 运行矩频特性:电机在某种测试条件下测得运行中输出力矩与频率关系的曲线 。

步进电机的特点

① 一般步进电机的精度为步距角的3-5%,且不累积;

② 步进电机外表允许的最高温度取决于不同电机磁性材料的退磁点;

③ 步进电机的力矩会随转速的升高而下降( U=E+L(di/dt)+I*R),矩频特性曲线

玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

④ 空载启动频率:即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。

步进电机的起步速度一般在10~100RPM,伺服电机的起步速度一般在100~300RPM。根据电机大小和负载情况而定,大电机一般对应较低的起步速度。

⑤ 低频振动特性:步进电动机以连续的步距状态边移动边重复运转。其步距状态的移动会产生1 步距响应。

电机驱动电压越高,电机电流越大,负载越轻,电机体积越小,则共振区向上偏移,反之亦然。步进电机低速转动时振动和噪声大是其固有的缺点,克服两相混合式步进电机在低速运转时的振

动和噪声方法:

a. 通过改变减速比等机械传动避开共振区;

b. 采用带有细分功能的驱动器;

c. 换成步距角更小的步进电机;

d. 选用电感较大的电机

e. 换成交流伺服电机,几乎可以完全克服震动和噪声,但成本高;

f. 采用小电流、低电压来驱动。

g. 在电机轴上加磁性阻尼器;

玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

例程

本例程实现X-CTR100控制器对步进电机精确转速控制。

由于步进电机特性,很难直接设置高转速,一般需要加减速过程,本例程包括了步进电机加减速运行。

另外还包括零转速和关闭使能状态下的力矩情况。

硬件说明

硬件资源:

  • 串口UART1
  • DRV8825驱动器,转接板(自备)
  • 42步进电机
  • 12V电源(3A)

硬件连接:

使用MicroUSB数据线连接X-CTR100 COM接口。

步进电机控制接口

STEP——PE9(RP接口)

DIR——PE4(RP接口)

EN——PE5(RP接口)

5V——5V(RP接口)

GND——GND(RP接口)

供电接口

12V外接供电电源连接到VIN1或VIN2,驱动器电源也连接至VIN1或VIN2,注意正负极。

步进电机连接转接板,如下图。

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

软件生态

X-SOFT软件生态,X-API文件如下。

ax_step.c——X-CTR100 步进电机操作源文件

ax_step.h——X-CTR100 步进电机操作头文件

X-API接口函数如下:

void AX_STEP_Init(void); //STEP 步进电机初始化    

void AX_STEP_SetEnable(uint8_t en); //STEP 步进电机使能控制

void AX_STEP_SetSpeed(int16_t speed); //STEP 步进电机转速控制

控制方法采用硬件定时器TIM1实现,通过在定时器中断中修改ARR周期,实现频率控制,通过CCR1实现50%占空比控制。

速度控制AX_STEP_SetSpeed()接口函数实现。

/**

* @简 述 STEP 步进电机转速控制

* @参 数 speed:电机转速,脉冲频率,单位20Hz,即1为20Hz,100为2000Hz,范围±5000

* 实际电机转速,与电机步距角,细分设置相关,例如1.8°电机,32细分,转动一圈需要200x32个脉冲。

* @返回值 无

*/

void AX_STEP_SetSpeed(int16_t speed)

{

    if (speed > 0)

    {

        //设置方向

        GPIO_SetBits(GPIOE, GPIO_Pin_4);

 

        //计算速度

        step_period = 50000 / speed; //20hz = 1S/

 

                                     //初始化定时器

        TIM1->ARR = step_period - 1;

        TIM1->CCR1 = step_period >> 1;//周期的一半

        TIM_CtrlPWMOutputs(TIM1, ENABLE);    //MOE 主输出使能    

        TIM_Cmd(TIM1, ENABLE);

    }

    else
if (speed < 0)

    {

        //设置方向

        GPIO_ResetBits(GPIOE, GPIO_Pin_4);

 

        //计算速度

        step_period = 50000 / (-speed);

 

        //初始化定时器

        TIM1->ARR = step_period - 1;

        TIM1->CCR1 = step_period >> 1;//周期的一半

        TIM_CtrlPWMOutputs(TIM1, ENABLE);    //MOE 主输出使能    

        TIM_Cmd(TIM1, ENABLE);

    }

    else

    {

        TIM_CtrlPWMOutputs(TIM1, DISABLE);

        TIM_Cmd(TIM1, DISABLE);

    }

}

软件说明

主程序,实现步进电机变速正转、变速反转、和停止,串口有提示信息输出,主程序代码如下。

int main(void)

{

    int16_t i;

 

     //X-CTR100初始化

    AX_Init(115200);

    printf("***X-CTR100 步进电机控制例程***\r\n\r\n");

 

    //模块初始化及配置

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    AX_STEP_Init(); //初始化步进电机    

    AX_STEP_SetEnable(1);

 

    while (1)

    {

        printf("*步进电机正方向转动测试\r\n\r\n");

        //加速

        for (i = 0; i <= 2000; i += 2)

        {

            AX_STEP_SetSpeed(i);

            AX_Delayms(2);

        }

        //恒速

        AX_Delayms(3000);

        //减速

        for (i = i; i >= 0; i -= 2)

        {

            AX_STEP_SetSpeed(i);

            AX_Delayms(2);

        }

        AX_Delayms(1000);

 

        printf("*步进电机反方向转动测试\r\n\r\n");

        //加速

        for (i = 0; i <= 2000; i += 2)

        {

            AX_STEP_SetSpeed(-i);

            AX_Delayms(2);

        }

        //恒速

        AX_Delayms(3000);

        //减速

        for (i = i; i >= 0; i -= 2)

        {

            AX_STEP_SetSpeed(-i);

            AX_Delayms(2);

        }

        AX_Delayms(1000);

 

        printf("*步进电机零转速和关闭使能测试\r\n");

        printf("*零转速,有维持力矩\r\n");

        AX_Delayms(3000);

        printf("*关闭使能,无维持力矩\r\n\r\n");

        AX_STEP_SetEnable(0);

        AX_Delayms(3000);

        AX_STEP_SetEnable(1);

 

    }

}

实现效果

打开X-Assistant软件,可以看到电机运行提示信息,DRV8825调节至32细分。

电机首先加速正转,后恒速运行,后减速到停止;再次电机反转,后恒速,后停止。

然后电机停止转动,此时保持维持力矩;最后关闭使能,维持力矩消失,电流减小。

    玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

总结

本文实现了X-CTR100控制器控制步进电机精确转动,实际步进电机系统因项目不同差异较大。

有些步进电机系统的控制远远比该例程复杂,一般包括精确位置闭环控制,相应速度控制,S曲线控制等。

本文采用基础框架是步进电机通用编程框架,复杂功能可以根据项目需要在此基础上添加。

参考

http://www.3dprinter-diy.com/forum.php?mod=viewthread&tid=1330

https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards

雷赛科技·步进电机及驱动器知识讲座