#ifndef __MYPROJECT_H_ #define __MYPROJECT_H_ #include #include #include #include // math.h包含算术运算的数学函数 #include #include typedef enum { mcReady = 0, mcInit = 1, mcCharge = 2, mcTailWind = 3, mcPosiCheck = 4, mcAlign = 5, mcStart = 6, mcRun = 7, mcStop = 8, mcFault = 9, mcBrake = 10 } MotStaType; extern MotStaType mcState; void CMP0_Init(void); void CMP3_Init(void); void CMP3_Interrupt_Init(void); void CMP5_Init(void); void Timer2_Init(void); void Timer3_Init(void); void Timer4_Init(void); void SPI_Init(void); void WatchDogConfig(uint32 value, uint8 Status); unsigned short CRC_Check(unsigned char start_sector, unsigned char offset_sector); extern void FOC_Init(void); extern void Motor_Open(void); #if (FiledWeakenCompEnable) typedef struct { uint16 FieldWeakenActualUS_Q15; uint16 FieldWeakenActualDcbus_Q15; int16 FieldWeakenIsTheta; int16 mcIqref; int16 mcIdref; } FieldWeakeningTypeDef; FieldWeakeningTypeDef xdata mcFieldWeaken; void GetFieldWeakenUsAndUdc_Q15(int16 Ud, int16 Uq, uint16 Dcbus); void GetFieldWeakenIdRefAndIqRef_Q15(int16 Is); void GetFieldWeakenIsTheta_Q15(void); int16 mcFieldWeakenPI(int16 feedbackvalue, int16 referencevalue); void FiledWeakenControl(int16 Ud, int16 Uq, uint16 Dcbusk, int16 Is); #endif #define P_Power(POWER) _Q15(POWER*2/HW_BOARD_CURR_BASE/HW_BOARD_VOLTAGE_BASE/1.5) #define DAC_OvercurrentValue (_Q8(I_ValueX(OverHardcurrentValue ))+0x7F) typedef struct { uint16 Max_ia; // IA的最大值 uint16 Max_ib; // IB的最大值 uint16 Max_ic; // IC的最大值 uint16 Max_is; uint16 time; } CurrentVarible; typedef struct { int16 mcDcbusFlt; // 母线电压 int16 mcDcbus_max; // 母线电压最大值 int16 mcDcbus_min; // 母线电压最小值 int16 mcDcbus_chazhi; // 母线电压最小值 int16 Powerlpf; // 功率滤波后的值 int16 UQFlt; // UQ滤波后的值 int16 UDFlt; // UD滤波后的值 uint16 State_Count; // 电机各个状态的时间计数 } FOCCTRL; extern CurrentVarible xdata mcCurVarible; extern FOCCTRL xdata mcFocCtrl; extern void Fault_Detection(void); extern void FaultProcess(void); extern void StarRampDealwith(void); uint32_t Abs_F32(int32_t Xn0); typedef enum { FaultNoSource = 0, // 无故障 FaultHardOVCurrent = 1, // 硬件过流 FaultSoftOVCurrent = 2, // 软件过流 FaultUnderVoltage = 3, // 欠压保护 FaultOverVoltage = 4, // 过压保护 FaultLossPhase = 5, // 缺相保护 FaultStall = 6, // 堵转保护 FaultStart = 7, // 启动保护 FaultIPMOTErr = 9, // IPM温度保护 FaultOffsetError = 11, // pianzhi FaultOverPower = 12, FaultshuruLoss = 14, FaultPWMLoss = 15, } FaultStateType; typedef struct { uint16 SecondStartTimes; // 二次启动保护的次数 uint16 StallTimes; // 堵转保护次数 uint16 LossPHTimes; // 缺相保护次数 uint16 CurrentPretectTimes; // 过流保护次数 uint8 StartFlag; // 启动保护的标志位,用于判断哪个方法起作用 uint8 StallFlag; // 堵转保护的标志位,用于判断哪个方法起作用 uint8 IbusOffsetProtectTimes; //偏执电压保护次数 uint8 shurulossTimes; } ProtectVarible; typedef struct { uint8 segment; // 分段执行 //voltage protect uint16 OverVoltDetecCnt; // 过压检测计数 uint16 UnderVoltDetecCnt; // 欠压检测计数 uint16 VoltRecoverCnt; // 过压恢复计数 uint16 OverTempDetecCnt; // 过温检测计数 uint16 OverHuantempDetecCnt; // 过温检测计数 uint16 OverGuantempDetecCnt; // 过温检测计数 uint16 TempRecoverCnt; // 过温恢复计数 uint16 HuantempRecoverCnt; // 过温恢复计数 uint16 GuantempRecoverCnt; // 过温恢复计数 uint32 CurrentRecoverCnt; // 过流保护恢复计数 uint8 IbusOffsetRecoverCnt; ///偏执电压保护恢复次数 //stall protect uint16 StallDelayCnt; // 堵转延迟判断计时 uint16 StallDectEs; // method 1,与ES相关 uint16 StallDectEs2; // method 1,与ES相关 uint16 StallDectSpeed; // method 2,与速度相关 uint32 StallReCount; // 堵转保护恢复计数 //Loss Phase protect uint16 Lphasecnt; // 缺相保护计时 uint16 AOpencnt ; // A缺相计数 uint16 BOpencnt ; // B缺相计数 uint16 COpencnt ; // C缺相计数 uint16 mcLossPHRecCount; // 缺相恢复计数 uint16 shurulossRecCount; // 缺相恢复计数 int16 shurulossCnt; int32 CurrentASum; int32 CurrentBSum; int32 CurrentCSum; int16 CurrentAAlign; int16 CurrentBAlign; int16 CurrentCAlign; //start protect int16 StartESCount; // 启动保护判断ES的计数 int16 StartEsCnt; // 启动保护判断ES的计时 int16 StartDelay; // 启动保护判断ES的延迟 int16 StartFocmode; // 启动保护判断FOCMODE状态的计时 int16 StartSpeedCnt; // 启动保护判断速度和ES的计时 uint32 commu_time; } FaultVarible; extern FaultStateType xdata mcFaultSource; extern ProtectVarible xdata mcProtectTime; extern FaultVarible idata mcFaultDect; extern void Fault_OverUnderVoltage(void); extern void Fault_Overcurrent(void); extern void Fault_OverCurrentRecover(void); extern void Fault_Stall(void); extern void Fault_phaseloss(void); extern void Fault_IPMOverTemp(void); extern void Fault_Detection(void); #endif