VaribleDef.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. /**
  2. * @copyright None
  3. * @file VaribleDef.h
  4. * @author Comment Vivre
  5. * @date 2024-08-26
  6. * @brief None
  7. */
  8. #ifndef __VARIBLE_DEF_H_
  9. #define __VARIBLE_DEF_H_
  10. /* ------------------------------------------- 运行 ------------------------------------------------------------- */
  11. /**
  12. @brief 电机运行状态定义
  13. */
  14. typedef enum
  15. {
  16. mcReady = 0, ///< 准备状态,该状态电机空闲,等待控制命令
  17. mcInit = 1, ///< 初始化,该状态进行启动前的变量初始化
  18. mcCharge = 2, ///< 预充电,电机启动前给自举电容充电,一般用于高压驱动,低压驱动一般不需要
  19. mcTailWind = 3, ///< 顺逆风检测,该状态下电机进行顺逆风检测
  20. mcPosiCheck = 4, ///< 初始位置检测
  21. mcAlign = 5, ///< 预定位
  22. mcStart = 6, ///< 启动,用于配置启动代码
  23. mcRun = 7, ///< 运行,
  24. mcStop = 8, ///< 停止
  25. mcFault = 9, ///< 故障状态
  26. mcBrake = 10, ///< 刹车
  27. } MotStateType;
  28. /**
  29. @brief 配置相关标志位定义
  30. */
  31. typedef union
  32. {
  33. uint8 SetMode; ///< 整个配置模式使能位
  34. struct
  35. {
  36. uint8 CalibFlag : 1; ///< 电流校准的标志位
  37. uint8 ChargeSetFlag : 1; ///< 预充电配置标志位
  38. uint8 AlignSetFlag : 1; ///< 预定位配置标志位
  39. uint8 TailWindSetFlag : 1; ///< 顺逆风配置标志位
  40. uint8 StartSetFlag : 1; ///< 启动配置标志位
  41. uint8 PosiCheckSetFlag : 1; ///< 位置检测配置标志位
  42. uint8 Break : 1; ////</ 刹车配置标志位
  43. } SetFlag;
  44. } MotStaM;
  45. extern MotStateType data mcState;
  46. extern MotStaM McStaSet;
  47. /**
  48. @brief 偏置电压定义
  49. */
  50. typedef struct
  51. {
  52. int16 IuOffset; //Iu的偏置电压
  53. int32 IuOffsetSum; //Iu的偏置电压总和
  54. int16 IvOffset; //Iv的偏置电压
  55. int32 IvOffsetSum; //Iv的偏置电压总和
  56. int16 Iw_busOffset; //Iw或Ibus的偏置电压
  57. int32 Iw_busOffsetSum;//Iw或Ibus的偏置电压总和
  58. int16 OffsetCount; //偏置电压采集计数
  59. int8 OffsetFlag; //偏置电压结束标志位
  60. } CurrentOffset;
  61. extern CurrentOffset xdata mcCurOffset;
  62. /* ------------------------------------------- 功能 ------------------------------------------------------------- */
  63. /**
  64. @brief RSD定义
  65. */
  66. typedef struct
  67. {
  68. uint16 StepTime[4]; ///< 一个脉冲的周期值
  69. uint8 Times; ///< 进入RSD中断次数
  70. uint16 Period; ///< 电周期值,除数不能超过16位
  71. int16 Count; ///< 当前脉冲数
  72. int16 CountPre; ///< 上一个状态脉冲数
  73. int16 State; ///< RSD的状态
  74. int16 Speed; ///< RSD的速度
  75. uint8 SpeedUpdate; ///< 速度更新标志
  76. uint8 HighSpdStart;
  77. uint32 RSDSpeedBase; ///< RSD的速度基准
  78. uint16 RSDCCWSBRCnt; ///< RSD反转后启动前刹车计数
  79. uint8 RSDStep; ///< 速度捕获计数
  80. uint8 SetFR;
  81. uint8 Status;
  82. uint8 ArrCnt;
  83. } MotorRSDTypeDef;
  84. extern MotorRSDTypeDef mcRsd;
  85. #define RSDSpeedCalBase (uint32)(32767*TIM2_Fre*15/Pole_Pairs/MOTOR_SPEED_BASE)
  86. #define RSDSpeedCalMaxSpeed (uint16)(TIM2_Fre*15/Pole_Pairs/MOTOR_SPEED_BASE)+1
  87. #define FORWARD (1)
  88. #define REVERSE (2)
  89. #define STATIC (3)
  90. #define DETECTING (0)
  91. /**
  92. @brief BMEF顺逆风
  93. */
  94. #define BEMF_FR_CCW (0xA0)
  95. #define BEMF_FR_CW (0xB0)
  96. #define BEMF_FR_ERR (0xC0)
  97. #define BEMF_FORWARD (1)
  98. #define BEMF_REVERSE (2)
  99. #define BEMF_STATIC (3)
  100. #define BEMF_DETECTING (0)
  101. #define BEMFSpeedCalBase (int32)(32767.0 / 8.0 * (TIM2_Fre * 60 / Pole_Pairs / MOTOR_SPEED_BASE))
  102. #define BEMFSpeedCalMinPeriod (int32)(1.0/8.0 * (TIM2_Fre * 60 / Pole_Pairs / MOTOR_SPEED_BASE)) + 1
  103. //定义使用BEMF启动时ATO_BW值
  104. #define ATO_BW_BEMF_START (400.0)
  105. #define OBSW_KP_GAIN_BEMF_START _Q12(2 * _2PI * ATT_COEF * ATO_BW_BEMF_START / BASE_FREQ)
  106. #define OBSW_KI_GAIN_BEMF_START _Q12(_2PI * ATO_BW_BEMF_START * ATO_BW_BEMF_START * TPWM_VALUE / BASE_FREQ)
  107. //定义使用BEMF启动时DKI QKI值
  108. #define DKI_BEMF_START _Q12(1.0)
  109. #define QKI_BEMF_START _Q12(1.0)
  110. //定义使用BEMF启动最低转速,ROM
  111. #define BEMFMotorStartSpeed _Q15(2500.0 / MOTOR_SPEED_BASE)
  112. #define BEMFMotorStartSpeedHigh _Q15(12000.0 / MOTOR_SPEED_BASE)
  113. typedef struct
  114. {
  115. int16 BEMFSpeed; //反电动势检测的速度
  116. uint32 BEMFSpeedBase; //反电动势检测的速度基准
  117. uint8 Status; // bemf检测状态
  118. uint8 FR_SET;
  119. uint8 FR ; // 当前转向
  120. uint8 FRPre; // 上一次转向
  121. int8 FRCount; // 正确转向计数,正数为CW,负数为CCW
  122. uint8 SpeedUpdate; ///< 速度更新标志
  123. uint8 HighSpdStart;
  124. uint16 PeriodTime; //转一圈的周期计数值/8,因除数只能是16位的
  125. uint16 SectorTime[6]; // 60度扇区时间
  126. } BEMFDetect_TypeDef;
  127. extern BEMFDetect_TypeDef xdata mcBemf;
  128. /**
  129. @brief 弱磁
  130. */
  131. typedef struct
  132. {
  133. int16 WeakenRunUq;
  134. int16 WeakenRunUd;
  135. uint16 WeakenUsRef;
  136. uint16 WeakenUsFed;
  137. int16 ThetaOutmin;
  138. int16 ThetaOutmax;
  139. int16 WeakenTheta;
  140. int16 udFlt;
  141. int16 uqFlt;
  142. int16 mcIsref;
  143. int16 IdRef;
  144. int16 IqRef;
  145. } FieldWeakeningTypeDef;
  146. extern FieldWeakeningTypeDef xdata mcFiledWeaken;
  147. /**
  148. @brief 电压补偿
  149. */
  150. typedef union
  151. {
  152. int32 s32;
  153. int16 s16[2];
  154. } s32tos16;
  155. typedef struct
  156. {
  157. uint16 mcDcbusFlt1;
  158. uint16 AverageVoltageValue;
  159. uint16 AverageVoltageValue1;
  160. s32tos16 mcDcbusFlt2Sum;
  161. s32tos16 UQVALUESum;
  162. s32tos16 UDVALUESum;
  163. int16 UQVALUEAVERAGE;
  164. int16 UDVALUEAVERAGE;
  165. uint16 mcDcbusFlt2cnt;
  166. uint16 cpscnt;
  167. uint16 Uqcps;
  168. uint16 Udcps;
  169. uint16 testUq;
  170. uint16 testUq1;
  171. uint16 testUq2;
  172. uint16 testUq3;
  173. int16 testUq4;
  174. int16 testUd;
  175. uint16 testUd2;
  176. int16 testUd3;
  177. uint16 testUd4;
  178. uint8 segmentationcnt;
  179. int16 SPIVar1;
  180. int16 SPIVar2;
  181. int16 SPIVar3;
  182. uint8 Undervoltage_flag;
  183. uint16 IncVoltage;
  184. int16 LineAngel;
  185. int16 LineAngelMax;
  186. int16 LineAngelMin;
  187. uint16 VCDelayCnt;
  188. int16 UdValueAveragehigh;
  189. uint16 ADC22222;
  190. } VOLCOMP;
  191. extern VOLCOMP data VoltageComp;
  192. /* ------------------------------------------- 保护 ------------------------------------------------------------- */
  193. /**
  194. @brief 故障定义
  195. */
  196. typedef enum
  197. {
  198. FaultNoSource = 0, ///< 无故障
  199. FaultHardOVCurrent = 1, ///< 硬件过流
  200. FaultSoftOVCurrent = 2, ///< 软件过流
  201. FaultOverVoltageDC = 3, ///< 过压
  202. FaultUnderVoltageDC = 4, ///< 欠压
  203. FaultPhaseLost = 5, ///< 缺相
  204. FaultStall = 6, ///< 堵转
  205. FaultNtcOTErr = 7, ///< NTC过温
  206. FaultMotorOTErr = 8, ///< 电机过温
  207. FaultTSD = 9, ///< MCU内部过温
  208. FaultOTWarning = 10, ///< IPM高温预警
  209. FaultUartLost = 11, ///< 通信丢失
  210. FaultPOST = 12, ///< FCT自检故障
  211. FaultLVW = 13, ///< LVW
  212. FaultGetOffset = 14, // 偏置电压保护
  213. FaultOverPowerErr = 15, ///<功率保护
  214. } FaultStateType;
  215. extern FaultStateType data mcFaultSource;
  216. typedef struct
  217. {
  218. uint8 SWOC_DectTimeCnt;
  219. int16 Is;
  220. uint8 HWOC_Times;
  221. uint8 HWOC_DectTimeCnt;
  222. } FaultCurrentVarible;
  223. typedef struct
  224. {
  225. uint16 DetecCnt;
  226. uint16 WarningDetecCnt;
  227. uint8 WarningFlag;
  228. } FaultTemperatureVarible;
  229. typedef struct
  230. {
  231. uint16 DectDealyCnt;
  232. uint16 DectCycleCnt;
  233. uint16 ALossCnt ;
  234. uint16 BLossCnt ;
  235. uint16 CLossCnt ;
  236. uint16 ABCLossCnt;
  237. uint16 mcLossPHRecCount;
  238. uint16 Max_ia;
  239. uint16 Max_ib;
  240. uint16 Max_ic;
  241. } FaultPhaseLossVarible;
  242. typedef struct
  243. {
  244. uint16 OverVoltDetecCnt;
  245. uint16 UnderVoltDetecCnt;
  246. uint16 VoltRecoverCnt;
  247. uint16 BusVoltDetecCnt;
  248. uint16 DectDealyCnt;
  249. uint16 VoltDetecBraketCount;
  250. uint8 FlagBrakeInit;
  251. uint16 VoltDetecBraketDuty;
  252. } FaultVoltageVarible;
  253. typedef struct
  254. {
  255. uint16 EsValue;
  256. uint16 Mode0DectCnt;
  257. int16 SpeedErr;
  258. uint16 DeviSpeedCnt;
  259. uint16 EsDectCnt;
  260. uint16 SpeedDectCnt;
  261. uint16 SpeedMinCnt;
  262. uint16 DectDealyCnt;
  263. uint8 Type;
  264. } FaultStallTypedef;
  265. typedef struct
  266. {
  267. uint16 OverPowerDetecCnt; ///< 过功率检测次数
  268. } FaultOverPower;
  269. typedef struct
  270. {
  271. uint16 DC_DelayTcnt;
  272. uint16 LP_DelayTcnt;
  273. uint16 OT_DelayTcnt;
  274. uint16 SWOC_DelayTcnt;
  275. uint16 Stall_DealyTcnt;
  276. uint16 OverPower_DealyTcnt;
  277. uint8 OV_Times;
  278. uint8 OT_Times;
  279. uint8 LP_Times;
  280. uint8 SWOC_Times;
  281. uint8 Stall_Times;
  282. uint8 OverPower_Times;
  283. } FaultRecoverTypedef;
  284. typedef struct
  285. {
  286. FaultCurrentVarible Current;
  287. FaultPhaseLossVarible PhaseLoss;
  288. FaultVoltageVarible Voltage;
  289. FaultStallTypedef Stall;
  290. FaultTemperatureVarible Temperature;
  291. FaultOverPower Power;
  292. } FaultVarible;
  293. typedef struct
  294. {
  295. uint8 CheckCount; //
  296. uint8 TSD_Enable_Flag; // 温度检测使能标志位
  297. uint8 TSD_Trigger_Flag; // 温度检测触发标志位
  298. uint8 ActualTemper; //
  299. uint16 Trigger_Value; //
  300. uint16 TSD_Dec_Time; // 温度检测时间计数
  301. }MCUTemperature;
  302. extern MCUTemperature xdata TSDTemperature;
  303. extern uint8 xdata mcPOSTErrSource;
  304. extern FaultVarible xdata fault;
  305. extern FaultCurrentVarible idata mcCurVarible;
  306. extern FaultRecoverTypedef xdata Restart;
  307. typedef struct
  308. {
  309. uint16 mcDcbusFlt; // 母线电压
  310. uint8 CtrlMode; // 控制模式
  311. uint16 mcADCCurrentbus; // 母线电流
  312. int16 Power; // 当前功率
  313. int16 PowerFlt; // 功率滤波后的值
  314. int16 SpeedFlt; // 当前速度滤波后的值
  315. int16 UqFlt; // Q轴电压
  316. int16 UdFlt; // D轴电压
  317. uint8 ChargeStep; // 预充电的步骤
  318. uint8 Start_Mode; // 启动方式
  319. int16 Max_ia;
  320. int16 Max_ib;
  321. int16 Max_ic;
  322. uint8 FR_SET;
  323. uint8 FR;
  324. uint8 Flg_ATORampEnd;
  325. int16 Ref; // 控制目标给定
  326. int16 IqRef; // Q轴给定电流
  327. int16 IdRef; // D轴给定电流
  328. int16 IqSpeedRef; // Q轴速度给定电流
  329. int16 IqADCCurrentRef; // Q轴母线电流给定电流
  330. int16 ExtDec;
  331. int16 LimitIqOut; // 限制功率输出
  332. uint16 PowerLimitValue; // 功率限制的值
  333. uint8 Mode0HoldCnt; // MODE0切MODE1延迟时间计数
  334. uint16 EMFsquare; // 当前FOC_ESQU滤波后的值
  335. uint16 RunStateCnt; // 运行状态计数
  336. uint8 LoopTime; // 外环控制周期计数
  337. uint16 State_Count; // 电机各个状态的时间计数
  338. int16 mcPosCheckAngle;// 位置检测的角度
  339. uint8 MCU_TEMP; //MCU超过70°后,读取当前温度值
  340. int16 Angle; //弱磁角度
  341. int16 NTCValue;
  342. int16 NTCValueFlt;
  343. } FOCCTRL;
  344. extern FOCCTRL xdata mcFocCtrl;
  345. /**
  346. @brief 环路输入参数爬坡定义
  347. */
  348. typedef struct
  349. {
  350. int16 RefValue;
  351. float OutValue_float;
  352. float IncValue;
  353. float DecValue;
  354. } MCRAMP;
  355. extern MCRAMP data mcRefRamp;
  356. /**
  357. @brief 脉宽计算定义
  358. */
  359. typedef struct
  360. {
  361. uint16 Compare; // 比较值
  362. uint16 Period; // 周期值
  363. uint16 TimerDR;
  364. uint16 TimerDROld;
  365. uint16 TimerARR; // 周期值
  366. uint16 TimerARROld; // 周期值
  367. uint16 Duty; // PWM占空比,Q15格式
  368. uint16 Freq; // PWM频率
  369. uint8 isUpdate; // PWM新的duty更新
  370. } PWMINPUTCAL;
  371. extern PWMINPUTCAL xdata mcPwmInput;
  372. extern bit isCtrlPowOn;
  373. /**
  374. @brief 启停定义
  375. */
  376. typedef struct
  377. {
  378. uint32 Times; // 启停次数
  379. uint16 TimeCnt; // 运行时间计数
  380. uint8 State; // 启停状态
  381. } debugONOFFTypeDef;
  382. extern debugONOFFTypeDef xdata debug_ONOFFTest;
  383. #endif