《数控系统软件设计》PPT课件.ppt
数控系统软件设计控制步进电机的环形分配程序步进电机控制组成脉冲分配驱动电源硬件软件(I/O)步进电机控制任务方向转速步数以实验板四相八拍步进电机为例:1.接口电路四相八拍通电顺序状态AABBBCCCDDDA序号12345678正转:12345678反转:87654321操作过程状态AABBBCCCDDDA序号12345678端口状态00010 x0100110 x0300100 x0201100 x0601000 x0411000 x0c10000 x0810010 x09DCBA例:假如x电机当前序号3(状态:0010),正转:则进入序号4(状态:0110)反转:则进入状态2(状态:0011)/-/步进电机软件环形分配程序/-/-变量定义-#include reg52.h/-三种步进电机工作方式软件分配表-unsigned char code step_tab04=0 x8,0 x4,0 x2,0 x1;/4相单4拍unsigned char code step_tab14=0 xc,0 x6,0 x3,0 x9;/4相双4拍unsigned char code step_tab28=0 x1,0 x3,0 x2,0 x6,0 x4,0 xc,0 x8,0 x9;/4相8拍/-变量定义结束-数控系统速度控制设计1。改变进给脉冲频率2。加入升降速控制一。数控机械速度控制程序设计调速方法:硬件数控:改变振荡器频率来改变进 给脉冲频率软件数控:循环等待延时/*-约延时100us -*/delay(unsigned char dy)unsigned char ii;while(-dy)for(ii=0;ii3)step_index=0;/正转 else if(-step_index0)step_index=3;/反转 P1=step_tab1step_index;for(i=0;i=0)DirX=1;else DirX=0;/计算三坐标终点坐标绝对值和方向计算三坐标终点坐标绝对值和方向 AbsYe=abs(ye);if(ye=0)DirY=1;else DirY=0;AbsZe=abs(ze);if(ze=0)DirZ=1;else DirZ=0;Q_DDA=AbsXeAbsYe?AbsXe:AbsYe;/求三坐标最大长度作为求三坐标最大长度作为Q值值 Q_DDA=Q_DDAAbsZe?Q_DDA:AbsZe;M=Q_DDA;/计数长度计数长度 if(Q_DDA=0)return;/直线距离为直线距离为0,不做任何操作,不做任何操作SigmaX=0;SigmaY=0;SigmaZ=0;Length=(long)AbsXe*(long)AbsXe+(long)AbsYe*(long)AbsYe+(long)AbsZe*(long)AbsZe;Length=(long)(sqrt(float)Length);Timer=(int)(Length*27648/Q_DDA*10/current_F);/计算每步(计算每步(0.00125mm=1/800)所需要的时间)所需要的时间 RCAP2H=(65536-Timer)/256;TH2=RCAP2H;/设定设定T2定时器常数定时器常数 RCAP2L=(65536-Timer)%256;TL2=RCAP2L;X_DIR=DirX;Y_DIR=DirY;Z_DIR=DirZ;/方向设定,直线插补方向方向设定,直线插补方向TR2=1;二.符号判别法圆弧插补二.符号判别法圆弧插补二.符号判别法圆弧插补-P20引入:引入:Pi=Ff N Xf YfPi=0 进给xPi=1 进给y进给方向:Xf=/N Yf Yf=N Xf引入符号判别法目的是:A.符号判别法仍然只适用于第一象限情况,但编程时,不需要有许多的条件判断语句。B.符号判别法可以使直线、圆弧插补在任何象限编程时,不需要有许多的条件判断语句。C.符号判别法只适用于圆弧在第一象限的情况D.符号判别法可以使圆弧插补在任何象限编程内编程比较方便。/-圆弧插补子程序-/(X0,Y0)起点坐标;(Xe,Ye)终点坐标;圆心在原点/N:顺圆逆圆标志,N=1顺圆;N=0.逆圆/Xf,Yf:动点(xi,yi)的符号,=0表示正;=1表示负/Ff:偏差函数符号位,=0表示正;=1表示负/Pi:进给坐标判别位,=0走X;=1走Y/deltaXf,deltaYf:两坐标进给方向,=0走正方向,=1走负方向void circle(bit N,long X0,long Y0,long Xe,long Ye)long Fi=0;/偏差函数 long deltaX,deltaY;/进给量=正负1 long Xi=X0,Yi=Y0;/动点坐标 bit Ff,Pi,Xf,Yf,deltaXf,deltaYf;do if(Fi=0)Ff=0;/偏差函数符号判别 else Ff=1;if(Xi=0)Xf=0;/判别动点坐标符号 else Xf=1;if(Yi=0)Yf=0;else Yf=1;Pi=FfNXfYf;/进给坐标判别位计算 deltaXf=(!N)Yf;/进给方向判别 deltaYf=N Xf;if(Pi=0)/进给deltaX if(deltaXf=0)deltaX=1;else deltaX=-1;Fi=Fi+2*Xi*deltaX+1;/算新的偏差 Xi=Xi+deltaX;/进给控制 x_step(deltaXf,6);/延时600us else /Pi=1,进给deltaY if(deltaYf=0)deltaY=1;else deltaY=-1;Fi=Fi+2*Yi*deltaY+1;/算新的偏差 Yi=Yi+deltaY;/进给控制 y_step(deltaYf,6);/延时600us while(Xi!=Xe|Yi!=Ye);/终点判别