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

    

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

原理

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

步进电机

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

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

    

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

    

本文选用电机参数

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

驱动器

    

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

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

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

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

    

参考: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 桥, 从而为电机和驱动芯片提供保护

    

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模块原理图:

    

DRV8825接线示意图

    

细分设置

    

电流调节

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

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

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

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

    

常见问题

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),矩频特性曲线

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

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

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

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

动和噪声方法:

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

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

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

d. 选用电感较大的电机

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

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

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

例程

本例程实现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-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控制器控制步进电机精确转动,实际步进电机系统因项目不同差异较大。

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

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

参考

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

https://reprap.org/wiki/A4988_vs_DRV8825_Chinese_Stepper_Driver_Boards

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

玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  2. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  3. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  4. 玩转X-CTR100 l STM32F4 l 舵机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...

  5. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  6. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  7. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  8. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

  9. 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...

随机推荐

  1. 论文笔记——Rethinking the Inception Architecture for Computer Vision

    1. 论文思想 factorized convolutions and aggressive regularization. 本文给出了一些网络设计的技巧. 2. 结果 用5G的计算量和25M的参数. ...

  2. Visual Studio 项目模板制作(三)

    前面,我们已经制作好了模板,然后放到相应的Template目录就可以在Visual Studio中使用 本篇,我们采用安装VSIX扩展的方式来安装模板,这种方式需要安装Visual Studio SD ...

  3. Source not found :Edit Source Lookup Path 解决方案

    作者原创,转载请注明转载地址 在eclipse中用debug调试的时候,出现了以下问题,很是尴尬,经常碰到,所以有必要进行总结一下: 对该问题有两种解决方案, 一种比较文明:解决方法可参考如下网址: ...

  4. XML序列化、反序列化

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Run ...

  5. Qt5.3.2openglVS2010_QSqlField_字段类型

    1.本来想通过 QSqlField::typeID() 来找字段类型,但是没找到... 然而看到了 SQL_INTEGER.SQL_SMALLINT等的使用(在“static QVariant::Ty ...

  6. MySQL数据库性能优化

    mysql查询优化: 1.新增字段索引,查询时若使用到or关键字,则两个字段都需建立索引才能生效 2.sql语句包含子查询,mysql会创建临时表查询结束后删除,影响效率,所以应尽可能使用join替代 ...

  7. 难部署的taiga,式微的circus——趋势从进程管理到容器管理,简单才是美

    一直需要一个项目管理系统,一直没时间弄. taiga是github上搜project management star最多的项目,又是基于django用python写的后端,所以就用它: 但是,集中精力 ...

  8. Python -- xlrd,xlwt,xlutils 读写同一个Excel

    最近开始学习python,想做做简单的自动化测试,需要读写excel,然后就找到了xlrd来读取Excel文件,使用xlwt来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用x ...

  9. Python mysql-SQL概要

    2017-09-05 20:10:58 一.SQL语句及其种类 SQL使用关键字,表名,列名等组合成一条语句来描述操作的内容.关键字是指那些含义或者使用方法是先已经定义好的英语单词.根据RDBMS赋予 ...

  10. c# 获取方法所在的命名空间 类名 方法名

    平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...