28BYJ-48步进电机资料及调速程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit wela=P2^6;//定位段码位
sbit alarm=P2^7;//定义蜂鸣器位
uchar ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //反转
uchar cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正传
0
1
1
0
0x06
0
0
1
0
0x02
0
0
1
1
0x03
0
0
0
1
0x01
1
0
0
1
0x09
速度计算公式:运转速度=脉冲频率×60/步进电机分割数/减速比64
步进电机分割数=360/6.625
调速程序:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口。由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口,如下:
步进电机驱动
橙AP1.3
黄BP1.2
粉CP1.1
蓝DP1ห้องสมุดไป่ตู้0
十六制(P1口)
1
0
0
0
0x08
1
1
0
0
0x0c
0
1
0
0
0x04
#define uint unsigned int
#define st_mo P1
sbit k1=P2^0;//正转键
sbit k2=P2^1;//反转键
sbit k3=P2^2;//停止按键
sbit k4=P2^3;//加按键
sbit k5=P2^4;//减按键
sbit dula=P2^5;//定义段码位
左——右 CCW旋转方向(轴伸端视)
步进电机分三种:永磁式(PM) ,反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。
tempdata[1]=ducode[speed/10];
diaplay(0,2);
}
void timer1() interrupt 3//定时器2
{
TH1=(65536-1000)/256;//延时1ms
TL1=(65536-1000)%256;
if(k4==0)
{
delay(5);
if(k4==0)
{
uchar num;
init();
while(1)
{
if(k1==0)
{
buzzer();
for(num=0;num<512;num++)
{
if(k3==0)
{
buzzer();
break;
}
cw_motor();
}
}
if(k2==0)
{
buzzer();
for(num=0;num<64;num++)
步电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
uchar code ducode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义段码
uchar code wecode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//定位段码
uchar tempdata[8],speed=10;
{
st_mo=ccw[i];
delay(speed);
}
}
}
void cw_motor()//正转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周内部旋转一周
{
for(i=0;i<8;i++)
{
st_mo=cw[i];
delay(speed);
}
}
}
void diaplay(uchar first,uchar num)//LED显示函数
{
if(k3==0)
{
buzzer();
break;
}
ccw_motor();
}
}
st_mo=0;
}
}
void timer0() interrupt 1//定时器1
{
TH0=(65536-2000)/256;//延时2ms
TL0=(65536-2000)%256;
tempdata[0]=ducode[speed%10];
void delay(uchar z) //延时1ms
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay500us(void)//延时500us
{
int i;
for(i=0;i<58;i++);
}
void buzzer()//产生报警音
speed++;
}
while(k4==0);
if(k5==0)
{
delay(5);
if(k5==0)
{
if(speed>2)
speed--;
}
}
while(k5==0);
}
效果图
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
alarm=!alarm; //产生脉冲
}
alarm=1; //关闭蜂鸣器
}
void ccw_motor()//反转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周内部旋转一周
{
for(i=0;i<8;i++)
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
PT0=1;//边沿触发如不设置LED显示时会跳动
}
void main()
{
static uchar i;
P0=0xff;
wela=1;
wela=0;
P0=wecode[i+first];
wela=1;
wela=0;
P0=tempdata[i];
dula=1;
dula=0;
i++;
if(i==num)
{
i=0;
}
}
void init()/定时器1、2初始化函数
{
TMOD|=0X11;
sbit alarm=P2^7;//定义蜂鸣器位
uchar ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //反转
uchar cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正传
0
1
1
0
0x06
0
0
1
0
0x02
0
0
1
1
0x03
0
0
0
1
0x01
1
0
0
1
0x09
速度计算公式:运转速度=脉冲频率×60/步进电机分割数/减速比64
步进电机分割数=360/6.625
调速程序:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口。由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口,如下:
步进电机驱动
橙AP1.3
黄BP1.2
粉CP1.1
蓝DP1ห้องสมุดไป่ตู้0
十六制(P1口)
1
0
0
0
0x08
1
1
0
0
0x0c
0
1
0
0
0x04
#define uint unsigned int
#define st_mo P1
sbit k1=P2^0;//正转键
sbit k2=P2^1;//反转键
sbit k3=P2^2;//停止按键
sbit k4=P2^3;//加按键
sbit k5=P2^4;//减按键
sbit dula=P2^5;//定义段码位
左——右 CCW旋转方向(轴伸端视)
步进电机分三种:永磁式(PM) ,反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。
tempdata[1]=ducode[speed/10];
diaplay(0,2);
}
void timer1() interrupt 3//定时器2
{
TH1=(65536-1000)/256;//延时1ms
TL1=(65536-1000)%256;
if(k4==0)
{
delay(5);
if(k4==0)
{
uchar num;
init();
while(1)
{
if(k1==0)
{
buzzer();
for(num=0;num<512;num++)
{
if(k3==0)
{
buzzer();
break;
}
cw_motor();
}
}
if(k2==0)
{
buzzer();
for(num=0;num<64;num++)
步电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
uchar code ducode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义段码
uchar code wecode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//定位段码
uchar tempdata[8],speed=10;
{
st_mo=ccw[i];
delay(speed);
}
}
}
void cw_motor()//正转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周内部旋转一周
{
for(i=0;i<8;i++)
{
st_mo=cw[i];
delay(speed);
}
}
}
void diaplay(uchar first,uchar num)//LED显示函数
{
if(k3==0)
{
buzzer();
break;
}
ccw_motor();
}
}
st_mo=0;
}
}
void timer0() interrupt 1//定时器1
{
TH0=(65536-2000)/256;//延时2ms
TL0=(65536-2000)%256;
tempdata[0]=ducode[speed%10];
void delay(uchar z) //延时1ms
{
uchar i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void delay500us(void)//延时500us
{
int i;
for(i=0;i<58;i++);
}
void buzzer()//产生报警音
speed++;
}
while(k4==0);
if(k5==0)
{
delay(5);
if(k5==0)
{
if(speed>2)
speed--;
}
}
while(k5==0);
}
效果图
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
alarm=!alarm; //产生脉冲
}
alarm=1; //关闭蜂鸣器
}
void ccw_motor()//反转子程序
{
uchar i;
for(i=0;i<8;i++)//旋转一周内部旋转一周
{
for(i=0;i<8;i++)
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
PT0=1;//边沿触发如不设置LED显示时会跳动
}
void main()
{
static uchar i;
P0=0xff;
wela=1;
wela=0;
P0=wecode[i+first];
wela=1;
wela=0;
P0=tempdata[i];
dula=1;
dula=0;
i++;
if(i==num)
{
i=0;
}
}
void init()/定时器1、2初始化函数
{
TMOD|=0X11;