STM32
直播中

而无返还

8年用户 1251经验值
擅长:光电显示
私信 关注
[问答]

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

如何玩转X-CTR100 STM32F4 DRV8825 A4988步进电机控制?

回帖(1)

刘飞

2021-12-22 13:46:19
   




本文介绍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文件如下。

高级说明

步进电机主要参数
① 步进电机的相数:是指电机内部的线圈组数,目前常用的有两相、三相、五相步进电机。
② 拍数:完成一个磁场周期性变化所需脉冲数或导电状态,用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 步进电机控制例程***rnrn");

    //模块初始化及配置
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    AX_STEP_Init(); //初始化步进电机   
    AX_STEP_SetEnable(1);

    while (1)
    {
        printf("*步进电机正方向转动测试rnrn");
        //加速
        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("*步进电机反方向转动测试rnrn");
        //加速
        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("*步进电机零转速和关闭使能测试rn");
        printf("*零转速,有维持力矩rn");
        AX_Delayms(3000);
        printf("*关闭使能,无维持力矩rnrn");
        AX_STEP_SetEnable(0);
        AX_Delayms(3000);
        AX_STEP_SetEnable(1);

    }
}

实现效果

打开X-Assistant软件,可以看到电机运行提示信息,DRV8825调节至32细分。
电机首先加速正转,后恒速运行,后减速到停止;再次电机反转,后恒速,后停止。
然后电机停止转动,此时保持维持力矩;最后关闭使能,维持力矩消失,电流减小。
   




总结

本文实现了X-CTR100控制器控制步进电机精确转动,实际步进电机系统因项目不同差异较大。
有些步进电机系统的控制远远比该例程复杂,一般包括精确位置闭环控制,相应速度控制,S曲线控制等。
本文采用基础框架是步进电机通用编程框架,复杂功能可以根据项目需要在此基础上添加。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分