黄工无刷电机学习
登录
直播中
李艺银
7年用户
1031经验值
私信
关注
[问答]
请问51单片机按键如何控制步进电机加减速及正反转?
开启该帖子的消息推送
51单片机
请问51
单片机
按键如何控制步进电机加减速及正反转?
回帖
(2)
甘满盛
2021-10-14 10:35:29
之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。
所用硬件:步进电机及驱动器、STC89C52单片机、直流电源
1、硬件连接图
注意:上图为共阳极接法,实际连接参考总体线路连接。
驱动器信号端定义:
PUL+:脉冲信号输入正。( CP+ )
PUL-:脉冲信号输入负。( CP- )
DIR+:电机正、反转控制正。
DIR-:电机正、反转控制负。
EN+:电机脱机控制正。
EN-:电机脱机控制负。
电机绕组连接
A+:连接电机绕组A+相。
A-:连接电机绕组A-相。
B+:连接电机绕组B+相。
B-:连接电机绕组B-相。
电源连接
VCC:电源正端“+”
GND:电源负端“-”
注意:DC直流范围:9-32V。不可以超过此范围,否则会无法正常工作甚至损坏驱动器.
总体线路连接
输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信 号DIR+,DIR-③脱机信号EN+,EN-。输入信号接口有两种接法,可根据 需要采用共阳极接法或共阴极接法。
在这里我采用的是共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端); 脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接 入(不接也可,代码中未接,置空)。按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。
注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路, 以免损坏驱动器。
2、代码
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
***it PUL=P1^0; //脉冲输出
***it DIR2=P2^1; //正反转控制
***it zz=P3^0; //正转按键zz
***it fz=P3^1; //反转按键fz
//***it hw=P1^1; //红外接收
***it k1=P3^2; //加速
***it k2=P3^3; //减速
***it LED1=P2^5;
***it LED2=P2^6;
***it LED3=P2^7;
uchar k=0;
void delay(uint i) //延时函数(P1^0口PWM输出)
{
while(i--);
}
void motorsd(void) //电机调速,分4档频率分别为5HZ、7HZ、12.5HZ、50HZ
{
if(k1==0)
{
delay(2000);
if(k1==0)
{
if(k<60)
{
k=k+20;
}
else{k=0;}
while(!k1);
}
//while(!k1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(k2==0)
{
delay(2000);
if(k2==0)
{
if(k>0)
{
k=k-20;
}
else{k=60;}
while(!k2) ;
}
// while(!k2) ;
}
}
void main() //主函数
{
if(zz==0) //正转按下,LED1亮,电机正转
{
LED1=0;
LED2=1;
LED3=1;
DIR2=0;
while(1)
{
motorsd();
PUL=0;
delay(70-k);
PUL=1;
delay(70-k);
if(fz==0) //正转过程按下反转跳出循环,电机反转
{
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(fz==0) //按下反转,LED2亮,电机反转
{
LED2=0 ;
LED1=1;
LED3=1;
DIR2=1;
while(1)
{
motorsd();
PUL=0;
delay(70-k);
PUL=1;
delay(70-k);
if(zz==0) //反转过程中按下正转,跳出循环电机正转
{
break;
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3、常见问题解答
控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口威廉希尔官方网站 。
接通电源后如果驱动器灯亮,但是无法控制电机旋转,考虑控制部分驱动能力不足或者驱动器所设置的驱动电流不够(我就遇到过这种情况,后来通过调高驱动器限制电流解决的此问题)。如果调高驱动电流步进电机仍无法转动,查看威廉希尔官方网站 板上的按键有没有接对,程序中按键引脚可根据威廉希尔官方网站 板设计的按键引脚连接自行改动。
判断步进电机四条线的定义:将任意两条线接在一起,用手旋转电机,如果有阻力,则两条线是同一相。用相同方法测试另外两条线是否是同一相。确定同相的两条线任意接入两相接口,如果旋转方向相反只需换相即可。
增加启停及加减速功能代码:
https://download.csdn.net/download/weixin_42670445/11978165
之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。
所用硬件:步进电机及驱动器、STC89C52单片机、直流电源
1、硬件连接图
注意:上图为共阳极接法,实际连接参考总体线路连接。
驱动器信号端定义:
PUL+:脉冲信号输入正。( CP+ )
PUL-:脉冲信号输入负。( CP- )
DIR+:电机正、反转控制正。
DIR-:电机正、反转控制负。
EN+:电机脱机控制正。
EN-:电机脱机控制负。
电机绕组连接
A+:连接电机绕组A+相。
A-:连接电机绕组A-相。
B+:连接电机绕组B+相。
B-:连接电机绕组B-相。
电源连接
VCC:电源正端“+”
GND:电源负端“-”
注意:DC直流范围:9-32V。不可以超过此范围,否则会无法正常工作甚至损坏驱动器.
总体线路连接
输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信 号DIR+,DIR-③脱机信号EN+,EN-。输入信号接口有两种接法,可根据 需要采用共阳极接法或共阴极接法。
在这里我采用的是共阴极接法:分别将 PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端); 脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接 入(不接也可,代码中未接,置空)。按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。
注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路, 以免损坏驱动器。
2、代码
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
***it PUL=P1^0; //脉冲输出
***it DIR2=P2^1; //正反转控制
***it zz=P3^0; //正转按键zz
***it fz=P3^1; //反转按键fz
//***it hw=P1^1; //红外接收
***it k1=P3^2; //加速
***it k2=P3^3; //减速
***it LED1=P2^5;
***it LED2=P2^6;
***it LED3=P2^7;
uchar k=0;
void delay(uint i) //延时函数(P1^0口PWM输出)
{
while(i--);
}
void motorsd(void) //电机调速,分4档频率分别为5HZ、7HZ、12.5HZ、50HZ
{
if(k1==0)
{
delay(2000);
if(k1==0)
{
if(k<60)
{
k=k+20;
}
else{k=0;}
while(!k1);
}
//while(!k1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(k2==0)
{
delay(2000);
if(k2==0)
{
if(k>0)
{
k=k-20;
}
else{k=60;}
while(!k2) ;
}
// while(!k2) ;
}
}
void main() //主函数
{
if(zz==0) //正转按下,LED1亮,电机正转
{
LED1=0;
LED2=1;
LED3=1;
DIR2=0;
while(1)
{
motorsd();
PUL=0;
delay(70-k);
PUL=1;
delay(70-k);
if(fz==0) //正转过程按下反转跳出循环,电机反转
{
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(fz==0) //按下反转,LED2亮,电机反转
{
LED2=0 ;
LED1=1;
LED3=1;
DIR2=1;
while(1)
{
motorsd();
PUL=0;
delay(70-k);
PUL=1;
delay(70-k);
if(zz==0) //反转过程中按下正转,跳出循环电机正转
{
break;
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3、常见问题解答
控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口威廉希尔官方网站 。
接通电源后如果驱动器灯亮,但是无法控制电机旋转,考虑控制部分驱动能力不足或者驱动器所设置的驱动电流不够(我就遇到过这种情况,后来通过调高驱动器限制电流解决的此问题)。如果调高驱动电流步进电机仍无法转动,查看威廉希尔官方网站 板上的按键有没有接对,程序中按键引脚可根据威廉希尔官方网站 板设计的按键引脚连接自行改动。
判断步进电机四条线的定义:将任意两条线接在一起,用手旋转电机,如果有阻力,则两条线是同一相。用相同方法测试另外两条线是否是同一相。确定同相的两条线任意接入两相接口,如果旋转方向相反只需换相即可。
增加启停及加减速功能代码:
https://download.csdn.net/download/weixin_42670445/11978165
举报
颜若心颐
2022-8-26 13:59:14
51单片机直接去控制电机加减速,资源和速度都非常受限,可以考虑使用外接专用的运动控制芯片,参考一下这个文章:
https://blog.csdn.net/weixin_49237052/article/details/115693537
51单片机直接去控制电机加减速,资源和速度都非常受限,可以考虑使用外接专用的运动控制芯片,参考一下这个文章:
https://blog.csdn.net/weixin_49237052/article/details/115693537
举报
更多回帖
rotate(-90deg);
回复
相关问答
51单片机
请问
89c
51
单片机
如何
控制
两个
步进
电机
正反转
加减速
?
2021-10-27
1711
blinker平台是怎样去
控制
步进
电机
正反转
及
加减速
的
2021-10-15
1869
请问
51
单片机
是如何
控制
步进
电机
正反转
的?
2021-10-14
902
基于
51
内核的stc89c52板子是如何去
控制
步进
电机
的?
2021-06-29
808
关于实现
步进
电机
自动
正反转
程序怎么写的相关问题
2021-06-29
1617
跪求大神发一个
51
单片机
控制
直流
电机
2015-01-07
2487
请问
blinker是如何
控制
步进
电机
的
正反转
以及
加减速
的?
2021-06-29
1858
51
单片机
是如何
控制
电动机的
正反转
和调速的
2021-10-14
1887
请问
51
单片机
如何
控制
步进
电机
加速、
减速
及
反转
?
2021-10-18
1072
如何利用
单片机
按键
和串口
控制
步进
电机
正反转
调速?
2021-10-14
1495
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分