#ifndef __STEPMOTOS_H__ #define __STEPMOTOS_H__ #include "config.h" #include "sintable.h" //------------------------------------------------------------------------ #ifndef STEP_MOTOS_NUM #define STEP_MOTOS_NUM 0 #endif #if (STEP_MOTOS_NUM > 4) #undef STEP_MOTOS_NUM #define STEP_MOTOS_NUM 4 #endif //------------------------------------------------------------------------ #ifndef MOTO1_CCWDIR #define MOTO1_CCWDIR CCWDIR_POSI #endif #ifndef MOTO2_CCWDIR #define MOTO2_CCWDIR CCWDIR_POSI #endif #ifndef MOTO3_CCWDIR #define MOTO3_CCWDIR CCWDIR_POSI #endif #ifndef MOTO4_CCWDIR #define MOTO4_CCWDIR CCWDIR_POSI #endif //------------------------------------------------------------------------ // 两相步进电机, 定子两组线圈, 磁场成90度排列, A+, A-, B+, B- // 分为50个电周期,每个电周期 7.2度 // 一个电周期角内分作 1024 (4096) 份, 对应一个正弦周期 (定义在sintable中) #define MOTO_NOPP (50) // 极对数 #define MOTO_PPC (MOTO_NOPP*SIN_TAB_SIZE) // 电机每圈可控位置 (50 * 4K = 200K) #define MAX_OUT_LEV 240 // 320 最大输出电流 (pwm占空比) #define FULL_STEP_PPC 200 // 整步/圈 #ifndef MICO_STEP_PPC #define MICO_STEP_PPC 1000 // 微步/圈 #endif #define PHASE_MUTI ((1.0f*MOTO_NOPP*SIN_TAB_SIZE)/(MOTO_PPC)) #define MAX_ABPOS_CIRCLE (1024*10) // 最大绝对圈数 #define MAX_MOTO_POS (MAX_ABPOS_CIRCLE*MOTO_PPC) // #define MAX_ADVANCE (MOTO_PPC/FULL_STEP_PPC) // 1.8度 #define MIN_ADVANCE (MOTO_PPC/FULL_STEP_PPC/10) // 0.18度 #define MICO_ADVANCE (MAX_ADVANCE/5) // 0.36度 //------------------------------------------------------------------------ #define CCWDIR_POSI 1 // 电机逆时针正向 #define CCWDIR_NEGA -1 // 电机逆时针反向 //------------------------------------------------------------------------ #define POS_TYPE float typedef void(*MotoCoilPwm)(int); typedef void(*MotoCoilCtrl)(void); //------------------------------------------------------------------------ void InitStepMotos(void); void SetMotoCtrlFuncs(int motoIdx, MotoCoilPwm coilapwm, MotoCoilCtrl acpon, MotoCoilCtrl acpoff, MotoCoilCtrl acnon, MotoCoilCtrl acnoff, MotoCoilPwm coilbpwm, MotoCoilCtrl bcpon, MotoCoilCtrl bcpoff, MotoCoilCtrl bcnon, MotoCoilCtrl bcnoff); void SetMotoCCWDir(int motoIdx, int dir); void ResetMotoPos(int motoIdx, int eff); void SetMotoEnable(int motoIdx, int eff); void SetMotoPosTo(int motoIdx, POS_TYPE pos, int eff); POS_TYPE GetMotoPos(int motoIdx); int MotoOneFullStep(int motoIdx, int dir, int eff); int MotoOneMicoStep(int motoIdx, int dir, int eff); //------------------------------------------------------------------------ #endif