步进电机驱动A4988,步进电机驱动程序编写
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°。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,是现代数字程序控制系统中的主要执行元件,应用极为广泛。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到-一个脉冲信号,
它就驱动步进电机按设定的方向转动一一个固定的角度,称为“步距角”,
它的旋转是以固定的角度一步- - 步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度, 从而达到调速的目的
三、步进电机与直流电机控制小车的差异
- 定时器配置
直流电机平衡小车:PWM模式
步进电机:输出比较模式(输出4路不同频率的PWM波)
2、直立控制
直流:PD控制
步进:P控制
3、速度反馈与控制
直流:编码器反馈
步进:上一个控制周期计算的频率值代替编码器反馈
/ 2018 7/9 更新 /
四,步进电机驱动程序
驱动程序原理都差不多,但可能太菜了,都运行不了,在网上看到了一篇A988驱动步进电机的程序:
https://blog.csdn.net/ff_tt/article/details/79904658
但是这个没有用到PWM ,而且电机初始化用的是寄存器不是库函数,,真心看不懂,但博主的这个程序可以运行
//参数
// dir:FALSE 正转TRUE反转
// period 周期
// step 脉冲
void Step_Control(u8 dir,u16 period,u32 steps)
{
u32 i;
for(i=0; i <= steps;i++)
{
DIR = dir;
STEP = 1;
delay_us(1);
STEP = 0;
delay_us(period);//period??D?£?×a?ù???ì£?2?òaD?óú1000
}
}
int main(void)
{
int i=0;
delay_init();
LED_Init();
MOTOR_Init();
Step_Micr(1);//1/2/4/8/16
while(1)
{
for(i=0;i<10;i++)
{
Step_Control(TRUE,1600,100);//正转
delay_ms(1000);
Step_Control(FALSE,1600,100);//反转
delay_ms(1000);
}
Step_Enable();//抱死
}
}
但不知道为什么要把周期设置为1600,当改变成其他数值的时候,电机运转就会出现异常
void MOTOR_Init(void)
{
RCC->APB2ENR|=1<<3;
GPIOB->CRH&=0xff000000;
GPIOB->CRH|=0x00333333;
}
这个不知道怎么改成库函数版本。。
2019年1月24日更新(经测试可用)
关于上面的寄存器版本改为库函数版本其实挺简单的,看一下STM32中文参考手册相关寄存器的配置就知道了。。。
如RCC那个就是把第三位置1,它的第三位对应的就是IO端口B
GPIOX_CRH是端口高配置寄存器,&是按位与,|是按位或,和0Xff000000与,就是把0-27位清零,3的16进制是0011,即MODE=11,输出模式,最大50HZ,通用推挽输出模式
main.c:
#include "delay.h"
#include "sys.h"
#include "motor.h"
//***************T:1400速度最快,噪声较大
// T: 1600较1400慢,噪声也很大
// T: 3200速度适中,噪声较小
// 速度越大,扭矩越小,
//动作所需时间:t=steps*period steps=角度 *细分(x)/1.8
//A4988针对42步以下步进电机,电压12V即可,A4988驱动器处于大电压下的工作时间不宜太长
#define FALSE 0 // 电机正转
#define TRUE 1 // 电机反转
int main(void)
{
delay_init();
MOTOR_Init();
Step_Micr(16);//1/2/4/8/16 细分选择
while(1)
{
Step_Control(FALSE,3200,3200);//正转
delay_ms(1000);
// Step_Control(TRUE,3200,1600);//反转
// delay_ms(1000);
Step_Enable();//抱死
}
}
moto.c
#include "motor.h"
#include "delay.h"
//IO初始化
void MOTOR_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//PB10控制电机方向
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB
GPIO_SetBits(GPIOB,GPIO_Pin_9); //PB.10 输出高(正转)
GPIO_SetBits(GPIOB,GPIO_Pin_13); //PB.11 输出高 (不使能)
GPIO_ResetBits(GPIOB,GPIO_Pin_10); //MS3
GPIO_ResetBits(GPIOB,GPIO_Pin_11); //MS2
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //MS1 整步
//printf("\r\n电机初始化成功!\r\n");
}
//细分
// x==1 全步
// x==2 半步
// x==4 1/4步
// x==8 1/8步
// x==16 1/16步
void Step_Micr(u16 x)
{
switch(x)
{
case 1: Full_step; break;
case 2: Half_step; break;
case 4: Quarter_step; break;
case 8: Eighth_step; break;
case 16:Sixteenth_step;break;
default: break;
}
}
//参数
// dir:FALSE正转 TRUE反转
// period 周期
// step 脉冲
void Step_Control(u8 dir,u16 period,u32 steps)
{
u32 i;
for(i=0;i<=steps;i++)
{
DIR = dir;
STEP = 1;
delay_us(1);
STEP = 0;
delay_us(period);
}
}
//此函数可抱死
// 0 抱死
// 1 正常
void Step_Enable()
{
ENA=0;
}
步进电机驱动A4988,步进电机驱动程序编写相关推荐
- 【膜摸摸】网红步进电机驱动A4988和DRV8825的对比和区别及选用实践 for 四轴CNC雕刻/3D打印
[转自]http://blog.csdn.net/ling3ye/article/details/47001251 用Arduino驱A4988驱动电机对于DIY3D打印机: 材料清单BOM: Ard ...
- 微型步进电机驱动控制器---步进电机一体机
微型步进电机驱动控制器,北京伟恩斯技术有限公司集驱动和控制于一体,结构紧凑,便于安装,广泛运用于生物仪器.医疗器械.工业自动化.多点控制组网矩阵等领域.有脉冲方向型,485总线型,CAN总线型等,通过 ...
- STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数
STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...
- a4988 脉宽要求_基于STM32的微型步进电机驱动控制器设计
基于STM32的微型步进电机驱动控制器设计 摘 要: 设计了一种微型步进电机驱动控制器,通过上位机界面修改步进电机转速.旋转角度.细分系数.该设计以STM32F103T8U6作为主控制器,以A4988 ...
- 【电机驱动芯片(单、双极性步进电机驱动方式/四相五线和42步进电机)——ULN2003、双H桥芯片(DRV8833/DRV8825)】
文章目录 一.步进电机工作原理 1.基本原理 2.相关总结 二.单极性步进电机驱动(以ULN2003芯片+28BYJ-48电机为例) 1.28BYJ-48四相五线步进电机介绍 2.ULN2003芯片介 ...
- arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- arduino 步进电机驱动库_一文看懂arduino驱动uln2003操作步进电机的方法
arduino驱动uln2003操作步进电机的方法 1.网上买的步进电机,很多接线顺序都不对.经过不懈努力查资料,终于找到了能用的接线方式: 电机上的12345针脚,对应着接线端子的42135. 2. ...
- arduino步进电机程序库_Arduino入门教程15(步进电机驱动库的使用):Arduino Uno R3+ULN2003+步进电机 使用Stepper驱动库,控制步进电机转动角度...
本篇介绍步进电机驱动库的使用,通过读取电位器输入,控制步进电机转动相应角度. Stepper库是官方提供的驱动库,我们启动Arduino IDE,点击「文件」-「示例」就能找到Stepper库,官方提 ...
- matlab步进电机半步控制器,步进电机驱动模式:整步、半步、细分
步进电机驱动模式:整步.半步.细分 步进电机驱动器有三种基本的步进电机驱动模式:整步.半步.细分.其主要区别在于电机线圈电流的控制精度(即激磁方式). 1.整步驱动 在整步运行中,同一种步进电机既可配 ...
- 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...
最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序 基于单片机系统的步进电机驱动 摘 要 本文介绍了基于80C52单片机的步进电机控制系统的设计.分别概括的介绍了单片机和步进 ...
最新文章
- [树形dp] Jzoj P5233 概率博弈
- 【南洋理工-CVPR2022】视觉语言模型的条件提示学习
- AI新方向:对抗攻击
- kmalloc、vmalloc、malloc的区别
- 【计算机组成原理】加减法器
- 这是哪里来的小妖精!!!
- 界址点圆圈怎么生成_大千世界怎么钓鱼?大千世界钓鱼方法及灵气之水获取攻略...
- modelandview为null的原因_一千个不用 Null 的理由!
- 深度学习aps_深度学习的目标检测算法是如何解决尺度问题的?
- 一些学习的网址和资料
- paip.验证码识别---判断图片是否是彩色图片
- linux更改445端口,windows连接非445端口(nginx转发)的samba服务卡顿
- 性能测试_cpu使用率和平均负载简述
- vue 利用科大讯飞实现实时语音转写
- ioncube php encode,ioncube加密与解密 php代码
- GIT、小乌龟、语言包下载
- Java程序:编程模拟和表达老虎Tiger和猫咪Cat等具体种类的生物都是一种动物。即它们都具有共同的名字属性name和运动行为run,只不过具体的名字叫法不同,运动行为的具体方式也不同。
- TensorFlow——decay设置
- 深度学习环境安装之显卡驱动程序安装
- vux组件库更换主题颜色的方法
热门文章
- brew 镜像_ps镜像快捷键,ps镜像图片效应功能怎么用?
- RHEL7设置默认启动图形化界面
- 生物信息学在疾病基础研究中的应用
- 百度地图生成器,图标消失,中文乱码和自定义名字undefind
- 高德地图生成自定义地图
- 海康/大华/华为等摄像头或者录像机无法通过GB28181注册到国标平台LiveGBS的问题排查方法...
- DHCP与DHCP中继--原理与配置--华为实验--配置接口模式、全局模式以及中继模式
- Ubuntu 20:Cadence IC615集成HSPICE
- Iphone8如何投屏到电脑 苹果手机投屏到电脑
- 线性系统大作业——0.一阶和二阶倒立摆建模与控制系统设计