一、实验目的:了解步进电机工作原理,掌握用单片机的步进电机控制系统的硬件设计方法,熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试水平。二、实验内容:步进电机加减速及其正反转控制,转速显示。三、工作原理步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对执行机构的控制。步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、打印机以及光学仪器中得到广泛的应用。步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。从图中可以看出,电机的定子上有六个等分磁极,A、A′、B、B′、C、C′,相邻的两个磁极之间夹角为60°,相对的两个磁极组成一相(A-A′,B-B′,C-C′),当某一绕组有电流通过时,该绕组相应的两个磁极形成N极和S极,每个磁极上各有五个均匀分布矩形小齿,电机的转子上有40个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为9°。当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的小齿和转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子和定子的齿相互对齐。由此可见,错齿是促使步进电机旋转的原因。三相步进电机结构示意图例如在三相三拍控制方式中,若A相通电,B、C相都不通电,在磁场作用下使转子齿和A相的定子齿对齐,我们以此作为初始状态。设与A相磁极中心线对齐的转子的齿为0号齿,由于B相磁极与A相磁极相差120°,不是9°的整数倍(120÷9=40/3),所以此时转子齿没有与B相定子的齿对应,只是第13号小齿靠近B相磁极的中心线,与中心线相差3°,如果此时突然变为B相通电,A、C相不通电,则B相磁极迫使13号转子齿与之对齐,转子就转动3°,这样使电机转了一步。如果按照A→B→C的顺序轮流通电一周,则转子将动9°。步进电机的运转是由脉冲信号控制的,传统方法是采用数字逻辑电路——环形脉冲分配器控制步进电机的步进。下图为环形脉搏冲分配器的简化框图。三相六拍环形脉搏冲分配器①运转方向控制。如图所示,步进电机以三相六拍方式工作,若按A→AB→B→BC→C→CA→A次序通电为正转,则当按A→AC→C→CB→B→BA→A次序通电为反转。②运转速度的控制。图中可以看出,当改变CP脉冲的周期时,ABC三相绕组高低电平的宽度将发生变化,这就导至通电和断电的变化的速率发生了变化,使电机转速改变,所以调节CP脉冲的周期就可以控制步进电机的运转速度。③旋转的角度控制。因为每输入一个CP脉冲使步进电机三相绕组状态变化一次,并相应地旋转一个角度,所以步进电机旋转的角度由输入的CP脉冲数确定。G2010实验仪选用的是20BY-0型4相步进电机,其工作电压为4.5V,在双四拍运行方式时,其步距角为18O,相直流电阻为55Ω,最大静电流为80Ma。采用8031单片机控制步进电机的运转,按四相四拍方式在P1口输出控制代码,令其正转或反转。因此P1口输出代码的变化周期T控制了电机的运转速度:n=60/T.N式中:n——步进电机的转速(转/分);N——步进电机旋转一周需输出的字节数;T——代码字节的输出变化周期。设N=360°/18°=20,T=1.43ms,则步进电机的转速为2100转/分。控制P1口输出的代码字节个数即控制了步进电机的旋转角度。正方向:ABCD反方向:ADCB四、实验器材:51单片机最小系统板一个,G2010实验仪中的20BY-0型4相步进电机一个,四位一体共阴极数码管一个,独立按键三个。五、实验过程:硬件电路图:最小系统与独立按键、数码管显示电路图123456ABCD654321DCBATitleNumberRevisionSizeBDate:24-Dec-2011SheetofFile:D:\360data\重要数据\桌面\步进电机综合实验\电路图\xuangua.ddbDrawnBy:P1.01P1.12P1.2P1.4P1.5P1.6P1.7RSTP3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7XTAL218XTAL119GNDP1.3P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7PSENALEEAP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0VCCSTC89C55VCCVCCP1.0P1.1P1.2P1.3VCCR1210KK412MC230PFC130PFK3K2K1C122ufR1R2R3R4R5R8R6R7SR420361KR9R10R11步进电机电路图按键:K1为正反转切换键k2为转速加按键k3为转速减键显示:共阴极数码管三位整数显示转速,顺时针为正转,首位灭零;逆时针为反转,首位为负理论调速范围:1~100r/min六、实验总结程序清单:/*本程序为步进电机控制程序步进电机步距角18°P1口低四位输出控制数码管共阴极P0为数据口P20~P22为位选个位~百位p23为正反转位反转为负号三个独立按键P24~26减加正反转切换键*/#includereg51.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharsbitsum=P2^4;//加sbitinc=P2^5;//减sbitchange=P2^6;//正反转ucharcodesled[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40};//共阴极数码表ucharcodexx[4]={0x01,0x02,0x04,0x08};//正时钟旋转相序表ucharspeed[4]={0};//转速显示数据个十百千位正反转标志ucharspeeder=5;//转速标志位用于转速的改变和计算ucharjj_speed;//电机转动转速控制位ucharjj;//电机脉冲给定计数位ucharii;//数码管显示控制ucharledwx=0x7f;//数码管位选端bitfloag=1;//电机正反转标志,1正转0反转/*******************************/voiddelay()//延时电路10ms{uinti,j;for(i=10;i0;i--)for(j=114;j0;j--);}/*******************************/voidinit()//程序初始化开定时器中断{EA=1;ET0=1;TMOD=0x01;TH0=(65536-4608)/256;//定时5ms中断TL0=(65536-4608)%256;TR0=1;}/*******************************/voidt0_time()interrupt1{TH0=(65536-4608)/256;//定时5ms中断TL0=(65536-4608)%256;jj_speed++;ledwx=_crol_(ledwx,1);P2=0xff;//数码管全灭P0=sled[speed[ii++]];//送数据P2=ledwx;//点亮一个数码管if(ledwx==0xf7){ledwx=0x7f;ii=0;}if((jj_speed/2)==speeder){if(floag)//电机正转{if(jj==4)jj=0;P1=xx[jj++];}else//电机反转{if(jj==0)jj=4;P1=xx[--jj];}jj_speed=0;}}/*******************************/voidcount()//转速显示各数位的计算{uintn=0;n=300/speeder;//转速speed[0]=n%10;speed[1]=(n/10)%10;speed[2]=n/100;if(floag)speed[3]=10;elsespeed[3]=11;}/*******************************/voidmain(){init();//初始化count();while(1){sum=1;if(sum==0)//是否为加键按下{delay();if((sum==0)&&(speeder300)){speeder++;count();//修改参数}while(sum==0);//等键释放}inc=1;if(inc==0)//是否为减键按下{delay();if((inc==0)&&(speeder3)){speeder--;count();}while(inc==0);//等键释放}change=1;if(change==0)//是否为正反转键按下{delay();if(change==0)floag=~floag;count();while(change==0);}}}