步进电机资料和调速程序(共6页).doc
精选优质文档-倾情为你奉上步电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机28BYJ48型四相八拍电机,电压为DC5VDC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍(A-AB-B-BC-C-CD-D-DA-A。)左右 CCW旋转方向(轴伸端视)步进电机分三种:永磁式(PM) ,反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。 红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口。由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口,如下:步进电机驱动 橙 A P1.3 黄B P1.2 粉C P1.1蓝D P1.0十六制(P1口) 1 0 0 0 0x08 1 1 0 0 0x0c 0 10 0 0x04 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#define uint unsigned int#define st_mo P1sbit k1=P20;/正转键sbit k2=P21;/反转键sbit k3=P22;/停止按键sbit k4=P23;/加按键sbit k5=P24;/减按键sbit dula=P25;/定义段码位sbit wela=P26;/定位段码位sbit alarm=P27;/定义蜂鸣器位uchar ccw=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09; /反转uchar cw=0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08; /正传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 tempdata8,speed=10;void delay(uchar z) /延时1msuchar 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() /产生报警音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+)st_mo=ccwi;delay(speed);void cw_motor()/正转子程序uchar i;for(i=0;i<8;i+)/旋转一周 内部旋转一周for(i=0;i<8;i+)st_mo=cwi;delay(speed);void diaplay(uchar first,uchar num) /LED 显示函数static uchar i;P0=0xff;wela=1;wela=0;P0=wecodei+first;wela=1;wela=0;P0=tempdatai;dula=1;dula=0;i+;if(i=num)i=0;void init()/定时器1、2初始化函数TMOD|=0X11;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()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+)if(k3=0)buzzer();break;ccw_motor(); st_mo=0;void timer0() interrupt 1/定时器1TH0=(65536-2000)/256; /延时2msTL0=(65536-2000)%256;tempdata0=ducodespeed%10;tempdata1=ducodespeed/10;diaplay(0,2);void timer1() interrupt 3/定时器2TH1=(65536-1000)/256; /延时1msTL1=(65536-1000)%256;if(k4=0) delay(5);if(k4=0)speed+; while(k4=0); if(k5=0) delay(5);if(k5=0)if(speed>2)speed-; while(k5=0);效果图专心-专注-专业