拿到开发板还没有使用过电机与步进电机呢?
电机的控制太简单了,在这里就不演示了,直接个IO口的高低电平就可以正常控制了,所以就来操作一下稍微难一点而的步进电机。
步进电机的控制原理,应该都都知道,这个普中套件里面提供的是四线双极性步进电机,原理图如下图所示:
开发板上的连接图如下图所示:
这种步进电机可以正反转运动,同时还有三种控制方式:
1.单相四拍通电驱动时序
正转: A- B A B-
反转: B- A B A-
2.双相通电四拍驱动时序
正转:A-B AB AB- A-B-
反转:A-B- AB- AB A-B
3.半步八拍驱动时序
反转:A- A-B B AB A AB- B- A-B-
正转:A-B- B- AB- A AB B A-B A-
下面是主要代码,是单相四拍方式,
反转(逆时针),如果想正转,安装上方的工作顺序自行切换就可以了:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit SA = P1^0;
sbit SA_ = P1^1;
sbit SB = P1^2;
sbit SB_ = P1^3;
#define time 2000
void step_Motor(void);
void delay(uint ms);
void step_Motor2(void);
void step_Motor3(void);
void main()
{
while(1)
{
step_Motor();
}
}
void step_Motor(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
}
第一种:单相四拍方式,程序实现如上
第二种方式,如下,只提供主要操作代码:
void step_Motor2(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 0;
SB = 0;
SB_ = 1;
delay(time);
}
第三种,半步八拍(正转,顺时针):
void step_Motor3(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 0;
delay(time);
SA = 1;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 1;
delay(time);
SA = 0;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 0;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 10;
SB = 1;
SB_ = 1;
delay(time);
}
值得注意的是,如果你的步进电机的相序出错的话就会造成左右都懂,这样就要检查一下你的相序是不是对的。
温馨提示:
步进电机运行久了会很烫,不要用手直接触碰
对步进电机的调速,可以通过每步之间的延时来达到,延时越长,运动越慢。
好了,展示效果的时间到了。从动图中可以看到转的很慢,但是实际上转的比这个快一些,主要是动图丢帧比较严重。
好了,今天就到这里了,期望大家支持:)
拿到开发板还没有使用过电机与步进电机呢?
电机的控制太简单了,在这里就不演示了,直接个IO口的高低电平就可以正常控制了,所以就来操作一下稍微难一点而的步进电机。
步进电机的控制原理,应该都都知道,这个普中套件里面提供的是四线双极性步进电机,原理图如下图所示:
开发板上的连接图如下图所示:
这种步进电机可以正反转运动,同时还有三种控制方式:
1.单相四拍通电驱动时序
正转: A- B A B-
反转: B- A B A-
2.双相通电四拍驱动时序
正转:A-B AB AB- A-B-
反转:A-B- AB- AB A-B
3.半步八拍驱动时序
反转:A- A-B B AB A AB- B- A-B-
正转:A-B- B- AB- A AB B A-B A-
下面是主要代码,是单相四拍方式,
反转(逆时针),如果想正转,安装上方的工作顺序自行切换就可以了:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit SA = P1^0;
sbit SA_ = P1^1;
sbit SB = P1^2;
sbit SB_ = P1^3;
#define time 2000
void step_Motor(void);
void delay(uint ms);
void step_Motor2(void);
void step_Motor3(void);
void main()
{
while(1)
{
step_Motor();
}
}
void step_Motor(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
}
第一种:单相四拍方式,程序实现如上
第二种方式,如下,只提供主要操作代码:
void step_Motor2(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 0;
SB = 0;
SB_ = 1;
delay(time);
}
第三种,半步八拍(正转,顺时针):
void step_Motor3(void)
{
SA = 1;
SA_ = 0;
SB = 1;
SB_ = 0;
delay(time);
SA = 1;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 0;
delay(time);
SA = 0;
SA_ = 1;
SB = 1;
SB_ = 1;
delay(time);
SA = 0;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 1;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 0;
SB = 0;
SB_ = 1;
delay(time);
SA = 1;
SA_ = 10;
SB = 1;
SB_ = 1;
delay(time);
}
值得注意的是,如果你的步进电机的相序出错的话就会造成左右都懂,这样就要检查一下你的相序是不是对的。
温馨提示:
步进电机运行久了会很烫,不要用手直接触碰
对步进电机的调速,可以通过每步之间的延时来达到,延时越长,运动越慢。
好了,展示效果的时间到了。从动图中可以看到转的很慢,但是实际上转的比这个快一些,主要是动图丢帧比较严重。
好了,今天就到这里了,期望大家支持:)