📄 seatmotor.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 + -