optical/NxFuncs/closedriver/stepmotos.h
2025-09-04 09:45:08 +08:00

96 lines
2.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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