typedef struct {
//Statemachine 内部使用变量
u8 GuideState; //当前状态机的状态
u16 uwStmTimebase; //statemachine 时基(50us)
u16 uwStartAttemptCount; //记录接收到启动命令之后,进入OFF_STATE的次数
u16 uwBemfThreshold; //启动过程中,反电势过零比较时使用的阈值电压,默认为100mv
u16 uwThreeComuThrehold; //三步换向时,换向点的电平值
u16 uwBemf; //启动过程中,记录不通电那一相的端电压
u32 uwAlignTime; //转子对位时间,默认为1.6s
u8 uwShortCycles; //记录刹车次数(一个OFF_STATE到另外一个OFF_STATE之间)
u16 uwSixStepCount; //开环脉冲换向计数器,记录了开环阶段的换向次数,等于START_PLUSE_TOTALNUM
u8 CheckType; //在START_PULSE_STATE使用,==1说明是电机未通电时转速过高跳转过来的,则进行过零点周期计算(类似于FIND_PERIOD),否则就发送3步换向脉冲
u16 BemfPrdSUM_SixStep;
u16 BemfPrdAVG_SixStep; //记录3步换向时,两个BEMF的间隔值(50us时基),由BemfPrdSUM_SixStep平均而来
u16 BemfPrdAVG_OpenPulse; //记录OPEN_PULSE时,两个BEMF的间隔值(50us时基),由BemfPrd_OpenPulse平均而来
u16 MaxDutyForStart; //对应于最大限流值的占空比,用于开环启动使用
u16 BemfPrd_SixStep; //3步换向时,记录两个BEMF的间隔值(50us时基)
u16 BemfPrd_OpenPulse; //OPEN_PULSE时,记录两个BEMF的间隔值(50us时基)
u16 uwCmtPRD_OpenPulse; //OPEN_PULSE时换向间隔(50us时基),600=30ms
u8 SampleBemfEn_OpenPulse; //==TRUE时可以采集过零点,每个cmtnpointer只采集一次
//Statemachine 外部使用变量
u16 dutyCycleCmd; //命令占空比,将在statemachine函数之后送入ramp模块
u16 AvoidCommuteTimer; //在OPEN_PULSE阶段,每次检测BEMF的时候,要避开二极管续流的那个点,
//换向后,当这个值大于START_PLUSE_COMMUTATE_TIME时才开始采样BEMF
u8 CmtPtrKeep_OpenPulse; //跳转到STOP_1S_STATE之前,保存当前的cmtpointer值,在返回RUN_2S_STATE时,恢复cmtpointer.
u8 CmtPtrKeep_SixStep; //在Three_step阶段,保存pwm.cmtpointer的值
u32 Timer2S_trigger; //在OPEN_PULSE阶段,运行2S,触发一次,跳入STOP_1S_STATE
u16 VirtualTimerKeep; //在Three_step阶段,用于计算BemfPeriod
u8 ExtenAdcSample; //在电机启动的部分中,ENABLE=采样非关键ADC通道,例如母线电流,外部模拟量,模块温度等,序列采样
// DISABLE=采集反电动势
}MOTORSTART_OTYP;
|