⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seatmotor.c

📁 基于摩托罗拉(现在飞思卡尔)系列MC68HC908单片机开发车辆ECU系统!
💻 C
字号:
#include <MC68HC908GR16.h>
#include"seatmotor.h"
#include"fault_diagnose.h"
#include"mirror.h"
Bool slide_sensor_fault=0;
Bool back_sensor_fault=0;
Bool front_sensor_fault=0;
Bool rear_sensor_fault=0;

Bool slide_motor_fault=0;
Bool back_motor_fault=0;
Bool front_motor_fault=0;
Bool rear_motor_fault=0;

Bool current_recall_stopped=0;
UINT8 mirror_old_x;  
UINT8 mirror_old_y;

UINT8 mirror_timer;
Bool x_nochange=0;
Bool y_nochange=0;
UINT8 slide_direction=0;
UINT8 back_direction=0;
UINT8 front_direction=0;
UINT8 rear_direction=0;
UINT16 i;
UINT16 slide_current_position;
UINT16 back_current_position;
UINT16 front_current_position;
UINT16 rear_current_position;
UINT16 slide_backward_margin_position;
UINT16 back_counterclockwise_margin_position;
UINT16 front_up_margin_position;
UINT16 rear_up_margin_position;



void slide_motor_move_forward(void){
  slidemotor=1;
  positivedirection=1;
  reversedirection=0;
  slide_direction=forward;
  PTE_PTE2=0;
  PTE_PTE3=0;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void slide_motor_move_backward(void){
  slidemotor=1;
  positivedirection=0;
  reversedirection=1;
  slide_direction=backward;
  PTE_PTE2=0;
  PTE_PTE3=0;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void slide_motor_stop(void){
  slidemotor=0;
  positivedirection=0;
  reversedirection=0;  
  i=0xffff;
  while(i--);
  T2SC_TSTOP=1;
  slide_direction=none;
}
void front_motor_move_up(void){ 						  
  frontmotor=1;
  positivedirection=1;
  reversedirection=0;
  front_direction=up;
  PTE_PTE2=1;
  PTE_PTE3=0;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void front_motor_move_down(void){
  frontmotor=1;
  positivedirection=0;
  reversedirection=1;
  front_direction=down;
  PTE_PTE2=1;
  PTE_PTE3=0;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void front_motor_stop(void){
  frontmotor=0;
  positivedirection=0;
  reversedirection=0;
  i=0xffff;
  while(i--);
  T2SC_TSTOP=1;
  front_direction=none;
}
void rear_motor_move_up(void){
  rearmotor=1;
  positivedirection=1;
  reversedirection=0;
  rear_direction=up;
  PTE_PTE2=0;
  PTE_PTE3=1;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void rear_motor_move_down(void){
  rearmotor=1;
  positivedirection=0;
  reversedirection=1;
  rear_direction=down;
  PTE_PTE2=0;
  PTE_PTE3=1;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}
void rear_motor_stop(void){
  rearmotor=0;
  positivedirection=0;
  reversedirection=0;  
  i=0xffff;
  while(i--);
  T2SC_TSTOP=1;
  rear_direction=none;
}

void back_motor_move_clockwise(void){
  backmotor=1;
  positivedirection=1;
  reversedirection=0;
  back_direction=clockwise;
  PTE_PTE2=1;
  PTE_PTE3=1;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}

void back_motor_move_counterclockwise(void){
  backmotor=1;
  positivedirection=0;
  reversedirection=1;
  back_direction=counterclockwise;
  PTE_PTE2=1;
  PTE_PTE3=1;
  PTE_PTE4=1;
  T2SC_TSTOP=0;
  i=0xffff;
  while(i--);
}

void back_motor_stop(void){
  backmotor=0;
  positivedirection=0;
  reversedirection=0;
  i=0xffff;
  while(i--);
  T2SC_TSTOP=1;
  back_direction=none;
  }















void recall(UINT16 slide_recall_position,UINT16 back_recall_position,UINT16 front_recall_position,UINT16 rear_recall_position,UINT8 left_mirror_recall_x,UINT8 left_mirror_recall_y,UINT8 right_mirror_recall_x,UINT8 right_mirror_recall_y) 
{


if(slide_current_position>slide_recall_position){ //座椅向前滑动
  slide_motor_move_forward();
  } else if(slide_current_position<slide_recall_position){	 //座椅向后滑动 
  slide_motor_move_backward();
  }






while(slide_direction!=none) {			 //滑动电机在运动中
  slide_sensor_check();          //检查滑动电机传感器电路
  if(current_recall_stopped||(slide_motor_fault=motor_circuit_fault())||slide_sensor_fault){ //滑动电机或者传感器出现故障,结束此方向回调,开始下一方向回调
    slide_motor_stop(); 
  }
  if(margin_position_reached()){			 //电机到达边缘位置,位置仍然未回调成功
   if(slide_direction==forward){
   slide_current_position=0xff;				//重新设定初始位置,消除位置累积误差
   }
   if(slide_direction==backward){
   slide_current_position=slide_backward_margin_position;
   }
   slide_motor_stop();
  }
  if(slide_direction==forward){
  if(slide_current_position<=slide_recall_position){
    slide_motor_stop(); 
  }
  }
  if(slide_direction==backward){
  if(slide_current_position>=slide_recall_position){
    slide_motor_stop();  
  }
  }
 
 
  
}	

  	

  //滑动电机停止运动后,椅背电机开始运动
  if(!current_recall_stopped){
  if(back_current_position<back_recall_position){ 
  back_motor_move_counterclockwise();  
}else if(back_current_position>back_recall_position){
  back_motor_move_clockwise();
  }
  }


while(back_direction!=none) {          //椅背电机在运动中
  back_sensor_check();							//检查椅背电机传感器电路
  if(current_recall_stopped||(back_motor_fault=motor_circuit_fault())||back_sensor_fault){				//椅背电机或者传感器出现故障,结束此方向回调,开始下一方向回调
    back_motor_stop(); 
  }
   if(margin_position_reached()){			 //电机到达边缘位置,位置仍然未回调成功
   if(back_direction==clockwise){
   if(abs(back_current_position-0xff)<0x0F)
   back_current_position=0xff;				//重新设定初始位置,消除位置累积误差
   }
   if(back_direction==counterclockwise){
   if(abs(back_current_position-back_counterclockwise_margin_position)<0x0F)
   back_current_position=back_counterclockwise_margin_position;
   }
    back_motor_stop();
  }
 if(back_direction==counterclockwise){
 if(back_current_position>=back_recall_position){
    back_motor_stop(); 
  }
 }
 if(back_direction==clockwise){
 if(back_current_position<=back_recall_position){
 back_motor_stop(); 
  }
 }
}		  
 
//椅背电机停止运动后,前部电机开始运动
if(!current_recall_stopped){
	if(front_current_position<front_recall_position){ 
   front_motor_move_up();
}else if(front_current_position>front_recall_position){
  front_motor_move_down();
} 
}


while(front_direction!=none) {											//前部电机在运动中
  front_sensor_check();													//检查前部电机的传感器电路
  if(current_recall_stopped||(front_motor_fault=motor_circuit_fault())||front_sensor_fault){			//前部电机或者传感器出现故障,结束此方向回调,开始下一方向回调
    front_motor_stop(); 
  }
   if(margin_position_reached()){			 //电机到达边缘位置,位置仍然未回调成功
   if(front_direction==down){
   front_current_position=0xff;				//重新设定初始位置,消除位置累积误差
   }
   if(front_direction==up){
   front_current_position=front_up_margin_position;
   }
   front_motor_stop();
  }
 if(front_direction==up){
 if(front_current_position>=front_recall_position){
  front_motor_stop(); 
  }
 }
 if(front_direction==down){
 if(front_current_position<=front_recall_position){
  front_motor_stop(); 
  }
 }
  
  
}


 
//前部电机停止运动后,后部电机开始运动
 if(!current_recall_stopped){
	if(rear_current_position<rear_recall_position){ 
  rear_motor_move_up();
}else if(rear_current_position>rear_recall_position){
  rear_motor_move_down();
 }
 }


while(rear_direction!=none) {        //后部电机在运动中
	rear_sensor_check();					  //检查后部电机的传感器电路					 
  if(current_recall_stopped||(rear_motor_fault=motor_circuit_fault())||rear_sensor_fault){					//后部电机或者传感器出现故障,结束此方向回调,开始下一方向回调
    rear_motor_stop(); 
  }
   if(margin_position_reached()){			 //电机到达边缘位置,位置仍然未回调成功
   if(rear_direction==down){
   rear_current_position=0xff;				//重新设定初始位置,消除位置累积误差
   }
   if(rear_direction==up){
   rear_current_position=rear_up_margin_position;
   }
   rear_motor_stop();
  }

if(rear_direction==up){
if(rear_current_position>=rear_recall_position){
    rear_motor_stop(); 
  }
}
if(rear_direction==down){
if(rear_current_position<=rear_recall_position){
    rear_motor_stop(); 
  }
}
}
		
 

if(!current_recall_stopped){
mirror_recall(left_mirror_recall_x,left_mirror_recall_y,0x30,0x34);
}





if(!current_recall_stopped) {
mirror_recall(right_mirror_recall_x,right_mirror_recall_y,0x31,0x36);
}






}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -