DIR:控制正反转,=1:正转,=0:反转;

STEP:接PWM,每个脉冲转对应一个角度;

sleep,reset:通常短接;

(RESET这个端口的配置,必须至高电平,否则脉冲被忽视,至于需不需要供地,这个没看板子的线路图,不过不需要自己去共地。所   以你们电机不动的原因不在于共地上,而在于RESET这个没有接入高电平上,可以直接接3.3V-5V ,也可以接Pin口上)

MS1,MS2,MS3:MS1和MS3引脚具有100kΩ的下拉电阻,MS2引脚具有50kΩ的下拉电阻。

当改变细分时,直到下一个STEP    上升沿改变才会生效。如果在驱动器没有复位的情况下更改了步进模式,并且必须保持绝对位置时,则必须在两个步进模式共有的步进位置更改步进模式,以避免丢失步数。 当器件掉电或由于TSD或过流事件而复位时,驱动器将被设置为默认(所有步进模式共用的起始位置)

000:全步 2相 ;100:半步 1-2 phase; 010:四分步 W1-2 phase;

110:八分步 2W1-2 Phase;111:16分步 4W1-2 Phase

(8W1-2 phase=1/32步 16W1-2phase=1/64步, 32W1-2 phase=1/128步)

VDD:接3.3V或者5V;

VMOT:电机直流供电:8~35V;

1B 1A 2A 2B:接步进电机 ,通常四相电机红绿为一组,蓝黄为一组,即1A,1B接步进电机的一组线圈,2A,2B接步进电机的一组线圈

A4988步进电机驱动板常见问题总结(侵删)

:http://blog.sina.com.cn/s/blog_49b559340102wus3.html

http://bbs.51testing.com/thread-1173365-1-1.html

二、步进电机(42步进电机两相一般为50齿,步距角1.8,相电流1.3-1.7A)

启动频率不能太高,要求速度较大时不建议使用步进电机;

步距角越小,电机运动越平滑;

混合式步进电机步距角的计算公式:

=180°/PNr

P:步进电机相数      Nr:步进电机转子N级或者S级的齿数

步进电机转速=脉冲频率*60/[(360/T)*X]

X:步进电机驱动器的细分数(电机运行时的真正步距角是固有步距角的几分之一)

T:步进电机固有步距角(每输入一个脉冲信号转子转过的角度)

细分控制:两相步进电机的基本步距角是1.8°,即一个脉冲走1.8°,如果没有细分,则是200个脉冲走一圈360°,细分是通过驱动器靠精确控制电机的相电流所产生的,与电机无关,如果是16细分,则发一个脉冲电机走0.1125°,即3200个脉冲走一圈360°。

步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到-一个脉冲信号,
它就驱动步进电机按设定的方向转动一一个固定的角度,称为“步距角”,
它的旋转是以固定的角度一步- - 步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,  从而达到调速的目的

三、步进电机与直流电机控制小车的差异

  1. 定时器配置

直流电机平衡小车:PWM模式

步进电机:输出比较模式(输出4路不同频率的PWM波)

2、直立控制

直流:PD控制

步进:P控制

3、速度反馈与控制

直流:编码器反馈

步进:上一个控制周期计算的频率值代替编码器反馈

/                                                                        2018 7/9 更新                                                                                              /

四,步进电机驱动程序

驱动程序原理都差不多,但可能太菜了,都运行不了,在网上看到了一篇A988驱动步进电机的程序:

https://blog.csdn.net/ff_tt/article/details/79904658

但是这个没有用到PWM ,而且电机初始化用的是寄存器不是库函数,,真心看不懂,但博主的这个程序可以运行

  1. //参数

  2. // dir:FALSE 正转TRUE反转

  3. // period 周期

  4. // step 脉冲

  5. void Step_Control(u8 dir,u16 period,u32 steps)

  6. {

  7. u32 i;

  8. for(i=0; i <= steps;i++)

  9. {

  10. DIR = dir;

  11. STEP = 1;

  12. delay_us(1);

  13. STEP = 0;

  14. delay_us(period);//period??D?£?×a?ù???ì£?2?òaD?óú1000

  15. }

  16. }

  1. int main(void)

  2. {

  3. int i=0;

  4. delay_init();

  5. LED_Init();

  6. MOTOR_Init();

  7. Step_Micr(1);//1/2/4/8/16

  8. while(1)

  9. {

  10. for(i=0;i<10;i++)

  11. {

  12. Step_Control(TRUE,1600,100);//正转

  13. delay_ms(1000);

  14. Step_Control(FALSE,1600,100);//反转

  15. delay_ms(1000);

  16. }

  17. Step_Enable();//抱死

  18. }

  19. }

但不知道为什么要把周期设置为1600,当改变成其他数值的时候,电机运转就会出现异常

  1. void MOTOR_Init(void)

  2. {

  3. RCC->APB2ENR|=1<<3;

  4. GPIOB->CRH&=0xff000000;

  5. GPIOB->CRH|=0x00333333;

  6. }

这个不知道怎么改成库函数版本。。

2019年1月24日更新(经测试可用)

关于上面的寄存器版本改为库函数版本其实挺简单的,看一下STM32中文参考手册相关寄存器的配置就知道了。。。

如RCC那个就是把第三位置1,它的第三位对应的就是IO端口B

GPIOX_CRH是端口高配置寄存器,&是按位与,|是按位或,和0Xff000000与,就是把0-27位清零,3的16进制是0011,即MODE=11,输出模式,最大50HZ,通用推挽输出模式

main.c:

  1. #include "delay.h"

  2. #include "sys.h"

  3. #include "motor.h"

  4. //***************T:1400速度最快,噪声较大

  5. // T: 1600较1400慢,噪声也很大

  6. // T: 3200速度适中,噪声较小

  7. // 速度越大,扭矩越小,

  8. //动作所需时间:t=steps*period steps=角度 *细分(x)/1.8

  9. //A4988针对42步以下步进电机,电压12V即可,A4988驱动器处于大电压下的工作时间不宜太长

  10. #define FALSE 0 // 电机正转

  11. #define TRUE 1 // 电机反转

  12. int main(void)

  13. {

  14. delay_init();

  15. MOTOR_Init();

  16. Step_Micr(16);//1/2/4/8/16 细分选择

  17. while(1)

  18. {

  19. Step_Control(FALSE,3200,3200);//正转

  20. delay_ms(1000);

  21. // Step_Control(TRUE,3200,1600);//反转

  22. // delay_ms(1000);

  23. Step_Enable();//抱死

  24. }

  25. }

moto.c

  1. #include "motor.h"

  2. #include "delay.h"

  3. //IO初始化

  4. void MOTOR_Init(void)

  5. {

  6. GPIO_InitTypeDef GPIO_InitStructure;

  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

  8. //PB10控制电机方向

  9. GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);

  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

  11. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz

  12. GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB

  13. GPIO_SetBits(GPIOB,GPIO_Pin_9); //PB.10 输出高(正转)

  14. GPIO_SetBits(GPIOB,GPIO_Pin_13); //PB.11 输出高 (不使能)

  15. GPIO_ResetBits(GPIOB,GPIO_Pin_10); //MS3

  16. GPIO_ResetBits(GPIOB,GPIO_Pin_11); //MS2

  17. GPIO_ResetBits(GPIOB,GPIO_Pin_12); //MS1 整步

  18. //printf("\r\n电机初始化成功!\r\n");

  19. }

  20. //细分

  21. // x==1 全步

  22. // x==2 半步

  23. // x==4 1/4步

  24. // x==8 1/8步

  25. // x==16 1/16步

  26. void Step_Micr(u16 x)

  27. {

  28. switch(x)

  29. {

  30. case 1: Full_step; break;

  31. case 2: Half_step; break;

  32. case 4: Quarter_step; break;

  33. case 8: Eighth_step; break;

  34. case 16:Sixteenth_step;break;

  35. default: break;

  36. }

  37. }

  38. //参数

  39. // dir:FALSE正转 TRUE反转

  40. // period 周期

  41. // step 脉冲

  42. void Step_Control(u8 dir,u16 period,u32 steps)

  43. {

  44. u32 i;

  45. for(i=0;i<=steps;i++)

  46. {

  47. DIR = dir;

  48. STEP = 1;

  49. delay_us(1);

  50. STEP = 0;

  51. delay_us(period);

  52. }

  53. }

  54. //此函数可抱死

  55. // 0 抱死

  56. // 1 正常

  57. void Step_Enable()

  58. {

  59. ENA=0;

  60. }

步进电机驱动A4988,步进电机驱动程序编写相关推荐

  1. 【膜摸摸】网红步进电机驱动A4988和DRV8825的对比和区别及选用实践 for 四轴CNC雕刻/3D打印

    [转自]http://blog.csdn.net/ling3ye/article/details/47001251 用Arduino驱A4988驱动电机对于DIY3D打印机: 材料清单BOM: Ard ...

  2. 微型步进电机驱动控制器---步进电机一体机

    微型步进电机驱动控制器,北京伟恩斯技术有限公司集驱动和控制于一体,结构紧凑,便于安装,广泛运用于生物仪器.医疗器械.工业自动化.多点控制组网矩阵等领域.有脉冲方向型,485总线型,CAN总线型等,通过 ...

  3. STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...

  4. a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计

    基于STM32的微型步进电机驱动控制器设计 摘 要: 设计了一种微型步进电机驱动控制器,通过上位机界面修改步进电机转速.旋转角度.细分系数.该设计以STM32F103T8U6作为主控制器,以A4988 ...

  5. 【电机驱动芯片(单、双极性步进电机驱动方式/四相五线和42步进电机)——ULN2003、双H桥芯片(DRV8833/DRV8825)】

    文章目录 一.步进电机工作原理 1.基本原理 2.相关总结 二.单极性步进电机驱动(以ULN2003芯片+28BYJ-48电机为例) 1.28BYJ-48四相五线步进电机介绍 2.ULN2003芯片介 ...

  6. arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用

    本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...

  7. arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法

    arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...

  8. arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...

    本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...

  9. matlab步进电机半步控制器,步进电机驱动模式:整步、半步、细分

    步进电机驱动模式:整步.半步.细分 步进电机驱动器有三种基本的步进电机驱动模式:整步.半步.细分.其主要区别在于电机线圈电流的控制精度(即激磁方式). 1.整步驱动 在整步运行中,同一种步进电机既可配 ...

  10. 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...

    最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序 基于单片机系统的步进电机驱动 摘 要 本文介绍了基于80C52单片机的步进电机控制系统的设计.分别概括的介绍了单片机和步进 ...

最新文章

  1. [树形dp] Jzoj P5233 概率博弈
  2. 【南洋理工-CVPR2022】视觉语言模型的条件提示学习
  3. AI新方向:对抗攻击
  4. kmalloc、vmalloc、malloc的区别
  5. 【计算机组成原理】加减法器
  6. 这是哪里来的小妖精!!!
  7. 界址点圆圈怎么生成_大千世界怎么钓鱼?大千世界钓鱼方法及灵气之水获取攻略...
  8. modelandview为null的原因_一千个不用 Null 的理由!
  9. 深度学习aps_深度学习的目标检测算法是如何解决尺度问题的?
  10. 一些学习的网址和资料
  11. paip.验证码识别---判断图片是否是彩色图片
  12. linux更改445端口,windows连接非445端口(nginx转发)的samba服务卡顿
  13. 性能测试_cpu使用率和平均负载简述
  14. vue 利用科大讯飞实现实时语音转写
  15. ioncube php encode,ioncube加密与解密 php代码
  16. GIT、小乌龟、语言包下载
  17. Java程序:编程模拟和表达老虎Tiger和猫咪Cat等具体种类的生物都是一种动物。即它们都具有共同的名字属性name和运动行为run,只不过具体的名字叫法不同,运动行为的具体方式也不同。
  18. TensorFlow——decay设置
  19. 深度学习环境安装之显卡驱动程序安装
  20. vux组件库更换主题颜色的方法

热门文章

  1. brew 镜像_ps镜像快捷键,ps镜像图片效应功能怎么用?
  2. RHEL7设置默认启动图形化界面
  3. 生物信息学在疾病基础研究中的应用
  4. 百度地图生成器,图标消失,中文乱码和自定义名字undefind
  5. 高德地图生成自定义地图
  6. 海康/大华/华为等摄像头或者录像机无法通过GB28181注册到国标平台LiveGBS的问题排查方法...
  7. DHCP与DHCP中继--原理与配置--华为实验--配置接口模式、全局模式以及中继模式
  8. Ubuntu 20:Cadence IC615集成HSPICE
  9. Iphone8如何投屏到电脑 苹果手机投屏到电脑
  10. 线性系统大作业——0.一阶和二阶倒立摆建模与控制系统设计