96 lines
2.5 KiB
C
96 lines
2.5 KiB
C
|
||
#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
|