#include "control.h" extern unsigned char save_flag; extern void Flash_Save(void); void MotorStartCheck(void) { if(MOTORSTATE==STATEERROR)return; if(SetSpeed>0&&startflag==1) { MOTORSTATE=STATESTARTPID; Dir=dirflag; HALLcount=0; HALLcount1=0; HALLcountTemp=0; } } void MotorStartPID(void) { if(MOTORSTATE==STATEERROR)return; PID_init(); PIDcompute(MINSPEED,0); HALL_MOTOR_START(); TargS1=SetSpeed; MOTORSTATE=STATERUNPID; } void MotorRunPID(void) { if(MOTORSTATE==STATEERROR)return; if(SetSpeed==0||startflag==0) //给出停止信号 { MOTORSTATE=STATESTOP; } TargS1=SetSpeed; if(TimeCountPID>=20)//计算实时速度并时行PID运算 { TimeCountPID=0; RealS1=HALLcountTemp*500/MPolePairs;//HALLcount*100*60/6/POLEPAIRS; PIDcompute(TargS1,RealS1); } } void MotorStop(void) { if(MOTORSTATE==STATEERROR)return; Motor_Start_F=0; MOTOR_STOP0(); if(RealS==0) { MOTORSTATE=STATESTARTCHECK; //停下来后才切换流程 } } void MotorError(void) { MOTOR_STOP0(); Motor_Start_F=0; MOTORSTATE=STATEERROROVER; printf("MotorError\n"); } void MotorBreak(void) { unsigned int dd; if(GPIO_ReadPin(BKIN_GPIO_PORT,BKIN_GPIO_PIN)==GPIO_Pin_RESET) { for(dd=0;dd<500;dd++) {;} if(GPIO_ReadPin(BKIN_GPIO_PORT,BKIN_GPIO_PIN)==GPIO_Pin_RESET) { MOTOR_STOP0(); Motor_Start_F=0; while(GPIO_ReadPin(BKIN_GPIO_PORT,BKIN_GPIO_PIN)==GPIO_Pin_RESET); } } } void MotorErrorOver(void) { unsigned char times=0; times=0; LEDOFF();TimeCountTemp=0; while(TimeCountTemp<200); while(1) //发生故障,则故障指示灯闪烁。需重启 { SampleSpeed(); if(SetSpeed == 0) //故障时,不加速后恢复 { ErrorCode = 0; WaitStart(); GPIO_WritePin(VOUT_EN_GPIO_PORT,VOUT_EN_GPIO_PIN,GPIO_Pin_SET); break; } } } void WaitStart(void) { if(SetSpeed==0) MOTORSTATE=STATESTARTCHECK; } void EnDirCheck(void) { if((GPIO_ReadPin(EN_GPIO_PORT,EN_GPIO_PIN)==GPIO_Pin_SET)\ &&(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_SET) ) { LevelSet = 2; } else if((GPIO_ReadPin(EN_GPIO_PORT,EN_GPIO_PIN)==GPIO_Pin_RESET)\ &&(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_SET) ) { LevelSet = 3; } if((GPIO_ReadPin(EN_GPIO_PORT,EN_GPIO_PIN)==GPIO_Pin_SET)\ &&(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_RESET) ) { LevelSet = 1; } printf("Level=%d\n",LevelSet); }