/************************************************************************ Module# 20,25 Title: 運動制御関係モジュ−ル(運動制御) File : cont3.c Ver.1.0 written on Jan.12,1996 by M.M. Ver.1.1 Jan.28,1996 by J.W. Ver.2.0 Feb.13,1996 Ver.2.1 Feb.14,1996 *************************************************************************/ #include "m9401.h" #include "math.h" /* #define V1 45 */ #define V1_low 3 #define V2 20 #define V3 53 /*extern int Mag;*/ extern float V_ref,Th_ref; extern float Om,Th,V; extern float Th0; extern int V1; extern int Tc; extern int Act; extern float Pr,Pl; extern unsigned int Mr, Ml; extern unsigned int Pulse; extern int Run_n; extern float Xc,Yc; extern int Tmc,Ctrl; int mtr_l,mtr_r; extern unsigned char outportu(); /**/ unsigned int limit(); void control() {/* 運動制御 */ switch(Act) { case 0: /* strait */ if (Tc == 0){ mtr_r = V1; mtr_l = V1; } else if((mtr_l<(V1_low))||(mtr_r<(V1_low))){ mtr_l=V1; mtr_r=V1; } else if (Pr < Pl){ mtr_r += 1; mtr_l -= 1; } else if (Pr > Pl){ mtr_r -= 1; mtr_l += 1; } break; case 1: /* turn left */ mtr_r = V2; mtr_l = -V2; break; case 2: /* turn right */ mtr_r = -V2; mtr_l = V2; break; case 3:/* back */ mtr_r = -40; mtr_l = -40; break; case 4:/* stop */ mtr_r = 0; mtr_l = 0; break; case 5: /* strait */ if (Tc == 0){ mtr_r = V3; mtr_l = V3; } else if((mtr_l<(V1_low))||(mtr_r<(V1_low))){ mtr_l=V3; mtr_r=V3; } else if (Pr < Pl){ mtr_r += 1; mtr_l -= 1; } else if (Pr > Pl){ mtr_r -= 1; mtr_l += 1; } break; case 6:/* cover */ mtr_r = mtr_r + 5; mtr_l = mtr_l; break; default: mtr_r = 0; mtr_l = 0; break; } Tc++; limit(mtr_r); Mr = Pulse; limit(mtr_l); Ml = Pulse; outportu(PADR1,Mr); outportu(PBDR1,Ml); } unsigned int limit(data) int data; {/* モ−タ指令デ−タ・リミッタ− Ver.2.2 */ if( data < -127) Pulse = 0xff; else if( data < 0 ) Pulse = ((unsigned char)fabs(data) << 1) | 0x01; else if( data < 127 ) Pulse = ((unsigned char)data << 1) | 0x00; else Pulse = 0xfe; return(ON); }