STM32F10驱动A4988步进电机驱动模块程序

STM32F10驱动A4988步进电机驱动模块程序,第1张

本人没用过A4988,但你给出的数据有明显错误:

1、VBB(电机电源):最小8V最大35V,你用(VMOT接+5V)5V(A4988资料上没VMOT这一接口)。

2、ENABLE(使能)端口接+A4988才能工作,你给它0V即是叫它休息不必工作。

以上

A4988控制逻辑简单,主要分为睡眠、正反转、复位、使能、细分等模式控制。

(1)睡眠模式:Sleep管脚电平置0,进入睡眠模式,驱动器输出待机模式;Sleep管脚置1,驱动器处于正常工作状态;

(2)正反转模式:正转模式DIR管脚置0或1,反转模式置1或0;

(3)复位模式:复位模式下容易消耗能量,产生的冲击电流较大。直接RESET管脚置1,在不影响系统工作时RESET管脚置0复位。一旦驱动芯片复位,系统将回归到原始A4988 I/O端口控制状态;

(4)使能模式:使能模式控制系统是否开始工作,ENBALBE管脚置0开始工作,置1停止工作;

(5)细分模式:通过MS1、MS2、MS3控制细分系数,A4988细分为1/16细分为最小,通过计算角度值可得最小细分角度为全步进角度的1/16。A4988驱动逻辑控制如表1所示。

拿到一个步进电机时,首先检测步进电机两条线之间的电阻,两条线之间电阻小的(在蠕动泵上测试为33Ω左右),接4988的1A、1B端(或2A、2B端),其中调换1A、1B端(或2A、2B端)的顺序可以改变电机的旋转方向。

使用中,把使能脚和细分脚全部接地,即不设置细分(步进值为1),复位脚和睡眠脚用跳线帽短接。

DIR=1,STEP为3.3V占空比50%,频率为500Hz的方波,电机电压Vmot=12V。

蠕动泵本质上也是步进电机。

电机参数:42步进24V0.4A,1.8°

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

如果4988芯片上没有加散热片,电流最好在1.2A以下。如果加散热片,电流可以达到2A。

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

相电流的大小跟步进电机的扭力有直接关系,如果感觉你的步进电机扭力不足,可以加大4988板子的电流配置。驱动板是通过一个小的电位器来实现对输出电流的配置的。可以通过用万用表测量电位器中间管脚的电位。电位和电流的关系满足下面的公式:Vref = A*0.8.也就是如果你想配置电机工作电流为1A,则电位应该配置在0.8V。默认的元件配置可以将电流调节到1.5A,如果需要更大电流需要修改电路中的R1,将30K的阻值改为20K(左右),就可以将电流调节到2A左右。

4988板子细分配置需要ramps或其它相似板子的短路块来配置。ramps上对应每个4988驱动都有ms1,ms2,ms3三个短路块来调节细分(需要取下4988板子才可以看到),

ms1 | ms2 | ms3

no | no | no |全细分

yes | no | no |1/2(2细分)

no | yes | no | 1/4 (4细分)

yes | yes | no |1/8(8细分)

yes | yes | yes | 1/16(16细分)

电机出现抖动一般有两个原因,

一是缺相:可能是4988板子没有焊接好或因为外力导致4988的输出端某一相断开,造成电机缺相从而抖动。也有可能是步进电机接线只用一相没有连接好;

而是两相接错:如果步进电机没有按照正确的顺序进行连接,电机也会出现抖动的情况,请按照问题3进行正确的连接。

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

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

/*-----------------------------------------------

名称:步进电机

------------------------------------------------*/

#include <reg52.h>

sbit step=P1^0//步进脉冲,一个正脉冲就转一个步距角

sbit dir=P1^1//1为正转,0为反转。

sbit sleep=P1^2

sbit res=P1^3

unsigned char sum=0

unsigned char i=200

/********************毫秒延时函数***************************/

void Delay(unsigned int xms)

{

unsigned int i,j

for(i=xmsi>0i--)

for(j=110j>0j--)

}

void ISR_Key(void) interrupt 2 //外部中断1

{

Delay(20)

sum++

if(sum==1)

{

dir=~dir

}

if(sum==1) sum=0

}

/******************************************************************/

/* 主函数 */

/******************************************************************/

main()

{

dir=1//正转

sleep=1//休眠无效

res=1//复位无效

step=1

EX1=1//外部中断1开

IT1=1//边沿触发

EA=1//全局中断开

while(i)

{

step=~step

Delay(2)

i--

//需要延时,不延时电机不动,延时太久也不动。改变这个参数可以调整电机转速 ,数字越小,转速越大。

}

dir=1//反转

while(1)

{

step=~step

Delay(2)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7760199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存