optical/EMBOS/Users/EmbFunc/movectrl/movectrl.h

425 lines
11 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __MOVECTRL_H__
#define __MOVECTRL_H__
#include "config.h"
#include "motos.h"
#include "stm32motos.h"
#include "funcs.h"
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
typedef struct
{
u32 stspSpd; // <20><>ͣ<EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>λpps
u32 runSpd; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>λpps
u32 spdAdd; // <20><>ͣ<EFBFBD><CDA3><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>λpps2
u32 brkAdd; // ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>λpps2
} __attribute__ ((packed)) MotoSpd;
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
u16 vAxisId; // <20><><EFBFBD><EFBFBD>
u16 axisIdx; // <20>˶<EFBFBD><CBB6><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 axisOtp; // <20><><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 circleNum; // <20><>Ȧ<EFBFBD><C8A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MotoSpd rspd; // <20>ٶȲ<D9B6><C8B2><EFBFBD>
int syncflag; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>־
int syncList[AXIS_NUM]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
u8 (*sensorscan)(void);
//-------------------
int (*stopscan)(void); // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
//-------------------
int zeroflag; // <20>Ѿ<EFBFBD><D1BE><EFBFBD>λ<EFBFBD>ñ<EFBFBD>־
int cansflag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
int canscount; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int cansmvmt; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int val; // <20><>λ״̬
}RSenserCheck;
int RoundRunToSensor(RSenserCheck * pck);
int RoundRunToSensorEdge(RSenserCheck * pck);
int RoundRunToSensorCenter(RSenserCheck * pck);
int RoundRunToSensorBase(RSenserCheck * pck, int flag);
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>λ<EFBFBD><CEBB>
typedef struct
{
u16 vAxisId; // <20><><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct
{
int axisIdx; // <20><><EFBFBD><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 movement; // <20>˶<EFBFBD><CBB6><EFBFBD>
}config[AXIS_NUM];
u32 mrepeat; // <20>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
u32 interLong; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
u32 stopmode; // ֹͣģʽ
u32 segmentNum; // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MotoSpd rspd; // <20>ٶ<EFBFBD>
//-----------
int escStop; // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-----------
void (*RRunProc)(void);
}RMotoRun;
int RoundRunAsOffset(RMotoRun * pmr);
//-------------------------------------------------------------------------------
// ֱ<><D6B1><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
u16 vAxisId; // <20><><EFBFBD><EFBFBD>
u16 axisIdx; // <20>˶<EFBFBD><CBB6><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 movement; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>λ<EFBFBD><CEBB>
s32 mvposi; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>λ<EFBFBD><CEBB>
int syncflag; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>־
int syncList[AXIS_NUM]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
MotoSpd lspd; // <20>ٶ<EFBFBD>
u8 (*slowsensor)(void); // <20><><EFBFBD>ټ<EFBFBD><D9BC><EFBFBD><E2B4AB><EFBFBD><EFBFBD>
u8 (*zerosensor)(void); // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><E2B4AB><EFBFBD><EFBFBD>
int zeroval; // <20><>λ״̬
u8 (*limitpsensor)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 (*limitnsensor)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int (*emcstopscan)(void); // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
u32 para;
int (*moveasoffset)(s32, MotoSpd*); // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>
//-------------------------
int slowsta; // <20><><EFBFBD><EFBFBD>״̬
}MTSCtrl;
int LineRunToSensorCtrl(MTSCtrl * pmtsc);
//-------------------------------------------------------------------------------
// ֱ<><D6B1><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
typedef struct
{
u16 vAxisId; // <20><><EFBFBD><EFBFBD>
u16 axisIdx; // <20>˶<EFBFBD><CBB6><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 movement; // <20>ƶ<EFBFBD>λ<EFBFBD><CEBB>
u32 bafflewidth;// <20><>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>
int syncflag; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>־
int syncList[AXIS_NUM]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
MotoSpd lspd; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
MotoSpd mposspd; // <20>ҵ<EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ٶ<EFBFBD>
u8 (*zerosensor)(void); // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><E2B4AB><EFBFBD><EFBFBD>
int zeroval; // <20><>λ״̬
u8 (*limitpsensor)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 (*limitnsensor)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int (*emcstopscan)(void); // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
}MTSAMPCtrl;
int LineRunToSensorAsMidPosCtrl(MTSAMPCtrl * pmtsampc);
//------------------------------------------------------------------------------------
typedef struct
{
u16 vAxisId; // <20><><EFBFBD><EFBFBD>
u16 axisIdx; // <20>˶<EFBFBD><CBB6><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 movement; // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>λ<EFBFBD><CEBB>
int syncflag; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>־
int syncList[AXIS_NUM]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
u32 ppSegment;
MotoSpd hspd; // <20>ٶ<EFBFBD>
u8 (*limitpsensor)(u32); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 (*limitnsensor)(u32); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int (*precondition)(u32); // <20>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD>
int (*stopscan)(u32); // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
int (*slowscan)(u32);
u32 para;
}MVByHandCtrl;
int MoveByHandCtrl(MVByHandCtrl * pmbhc);
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>
// ʹ<><CAB9>STM32<33><32><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
u16 axisIdx; // <20>˶<EFBFBD><CBB6><EFBFBD>
u16 axisCfg; // <20><><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 newCfg; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 useOutPort; // <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0:ʹ<><CAB9>M<EFBFBD><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,1:ʹ<><CAB9>IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 movement; // λ<><CEBB><EFBFBD><EFBFBD>
u32 startPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 runPPS; // <20>˶<EFBFBD><CBB6>ٶ<EFBFBD>
u32 addPPSG; // <20><>ͣ<EFBFBD><CDA3><EFBFBD>ٶ<EFBFBD>
u32 brkPPSG; // ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 funTestTime; // <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> 0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD> (<28><>λ:0.1ms)
int syncList[AXIS_NUM]; // ͬ<><CDAC><EFBFBD>ƶ<EFBFBD>ѡ<EFBFBD><D1A1>
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
int (*GetNormalStop)(u32,u32); // һ<><D2BB>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ٶȽ<D9B6><C8BD>٣<EFBFBD>
int (*GetQuickStop)(u32,u32); // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶȽ<D9B6><C8BD>٣<EFBFBD>
u32 condPara1, condPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int blockRunflag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־
void (*ExecWhenRun)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>
void (*ExecWhenStart)(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD>
void (*ExecWhenStop)(void); // <20><><EFBFBD><EFBFBD>ֹͣʱִ<CAB1>еĺ<D0B5><C4BA><EFBFBD>
}SepMoveCtrl;
int SeparateExerStart(SepMoveCtrl * pCtrl); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD> <20><><EFBFBD><EFBFBD>
int SeparateExerStop(u16 axisIdx); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD> ֹͣ
int GetSeparateExerState(u16 axisIdx); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD> <20>õ<EFBFBD><C3B5><EFBFBD>ǰ״̬
//-------------------------------------------------------------------------------
int GetCommonNStop(void);
int GetCommonQStop(void);
int GetCommonEms(void);
//-------------------------------------------------------------------------------
#define MMPSS_TO_ST_PPSG(mmpss) (((mmpss)*PULSE_PER_MM)/(10*1000)) // 0.1ms<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------
#define MTM1_IDX 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
#define MTM1_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD>
#define MTM1_OTP POUT_CWCCW
#define MTM1_MOD 0x0001
#define MTM2_IDX 1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
#define MTM2_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD>
#define MTM2_OTP POUT_CWCCW
#define MTM2_MOD 0x0002
#define MTM3_IDX 2 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3
#define MTM3_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD>
#define MTM3_OTP POUT_CWCCW
#define MTM3_MOD 0x0004
#define MTM4_IDX 3 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4
#define MTM4_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD>
#define MTM4_OTP POUT_CWCCW
#define MTM4_MOD 0x0008
#define MTM5_IDX 4 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5
#define MTM5_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD> DEFAULT_CFG
#define MTM5_OTP POUT_CWCCW
#define MTM5_MOD 0x0010
#define MTM6_IDX 5 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6
#define MTM6_CFG MOTOENAB_CFG // <20><><EFBFBD><EFBFBD>
#define MTM6_OTP POUT_CWCCW
#define MTM6_MOD 0x0020
#define ALL_MOTO_MOD (MTM1_MOD|MTM2_MOD|MTM3_MOD|MTM4_MOD|MTM5_MOD|MTM6_MOD)
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD>ס<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MM_TO_PULSE(mm) ((mm)*PULSE_PER_MM)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>롱ת<EBA1B1><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>
#define MMPS_TO_PPS(mmps) ((mmps)*PULSE_PER_MM)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD> STM32<33><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ٶ<EFBFBD>
#define MMPSS_ASYN_TO_PPSG(mmpss) ((mmpss)*PULSE_PER_MM)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1/72000000<30><30>
#define MMPSS_TO_PPSG(mmpss) (FPGA_CLK/(PULSE_PER_MM)/(mmpss))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ƽ<EFBFBD><C6BD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1/72000000<30><30>
#define MMPSSS_TO_PPSSG(mmpsss) (FPGA_CLK/(PULSE_PER_MM)/(mmpsss))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1/72000000<30><30>
#define PPSS_TO_PPSG(ppss) (FPGA_CLK/(ppss))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>롱ת<EBA1B1><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>
#define PPS_TO_MMPS(pps) ((pps)/PULSE_PER_MM)
//-------------------------------------------------------------------------------
#ifndef MS_PULSE_PER_CIRCLE
#define MS_PULSE_PER_CIRCLE (10000) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿת<C3BF><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1>ȡ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MS_DEG_TO_PULSE(deg) ((deg)*MS_PULSE_PER_CIRCLE/DEG_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>0.01<EFBFBD>ȡ<EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MS_001DEG_TO_PULSE(deg) ((deg)*MS_PULSE_PER_CIRCLE/DEG001_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>תÿ<D7AA>֡<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>
#define RPM_TO_PPS(rpm) (((rpm)*MS_PULSE_PER_CIRCLE)/60)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>תÿ<D7AA><C3BF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD><EBB7BD>
#define RPSS_TO_PPSS(rpss) ((rpss)*MS_PULSE_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>תÿ<D7AA><C3BF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1/72000000<30><30>
#define RPSS_TO_PPSG(rpss) (FPGA_CLK/((rpss)*MS_PULSE_PER_CIRCLE))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>롱ת<EBA1B1><D7AA>Ϊ<EFBFBD><CEAA>תÿ<D7AA>֡<EFBFBD>
#define PPS_TO_RPM(pps) ((pps)* 60 / MS_PULSE_PER_CIRCLE)
//-------------------------------------------------------------------------------
#ifndef ECD_PULSE_PER_CIRCLE
#define ECD_PULSE_PER_CIRCLE (1000) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿת<C3BF><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
//-------------------------------------------------------------------------------
#ifndef PULSE_PER_SEGMENT
#define PULSE_PER_SEGMENT (1000) // ֱ<>߲岹<DFB2><E5B2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
//-------------------------------------------------------------------------------
// ÿȦ<C3BF>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20>ȣ<EFBFBD>
#define DEG_PER_CIRCLE (360)
#define DEG001_PER_DEG (100)
// ÿȦ<C3BF>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ 0.01<EFBFBD>ȣ<EFBFBD>
#define DEG001_PER_CIRCLE (DEG_PER_CIRCLE*DEG001_PER_DEG)
//-------------------------------------------------------------------------------
// <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ÿת<C3BF><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10000
#ifndef ROT_PULSE_PER_CIRCLE
#define ROT_PULSE_PER_CIRCLE (10000)
#endif
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>ȡ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ROT_DEG_TO_PULSE(deg) ((deg)*(s32)(ROT_PULSE_PER_CIRCLE)/DEG_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>0.01<EFBFBD>ȡ<EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ROT_001DEG_TO_PULSE(deg) ((deg)*(s32)(ROT_PULSE_PER_CIRCLE)/DEG001_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>0.01<EFBFBD>ȡ<EFBFBD>
#define PULSE_TO_ROT_001DEG(pls) ((pls)*(s32)(DEG001_PER_CIRCLE)/(ROT_PULSE_PER_CIRCLE))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD>ÿ<EFBFBD>롱ת<EBA1B1><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>
#define DPS_TO_PPS(dps) ((dps)*ROT_PULSE_PER_CIRCLE/DEG_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD>ÿ<EFBFBD><C3BF>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ1/72000000<30><30>
#define DPSS_TO_PPSG(dpss) (FPGA_CLK/((dpss)*ROT_PULSE_PER_CIRCLE/DEG_PER_CIRCLE))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1>ȡ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮һ<D6AE><D2BB><EFBFBD>ȡ<EFBFBD>
#define ROT_DEG_TO_PITK(deg) ((double)(deg)*2*PI*RADIAN_ACCURACY/DEG_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>0.01<EFBFBD>ȡ<EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮һ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>
#define ROT_001DEG_TO_PITK(deg) ((double)(deg)*2*PI*RADIAN_ACCURACY/DEG001_PER_CIRCLE)
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD>֮һ<D6AE><D2BB><EFBFBD>ȡ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define PITK_TO_RPP(dr) (((double)(dr))*ROT_PULSE_PER_CIRCLE/RADIAN_ACCURACY/PI/2+0.5*(dr>0?1:-1))
// <20><>λת<CEBB><D7AA><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD><C9A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮һ<D6AE><D2BB><EFBFBD>ȡ<EFBFBD>
#define RPP_TO_PITK(rpp) (((double)(rpp)*2*PI*RADIAN_ACCURACY/ROT_PULSE_PER_CIRCLE)+0.5*(rpp>0?1:-1))
//-------------------------------------------------------------------------------
// <20><>תת<D7AA><D7AA>Ϊ -180--180<38><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeRotToNP180(s32 * pval);
// <20><>תת<D7AA><D7AA>Ϊ -360--360<36><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeRotToNP360(s32 * pval);
// <20><>תת<D7AA><D7AA>Ϊ 0--360<36><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeRotTo0To360(s32 * pval);
// <20><>תת<D7AA><D7AA>Ϊ -360--0<><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeRotToN360To0(s32 * pval);
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ -180--180<38><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeMsToNP180(s32 * pval, int pdir);
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ -360--360<36><30>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void ChangeMsToNP360(s32 * pval);
void ChangeMsTo0To360(s32 * pval);
//-------------------------------------------------------------------------------
int GetMoveResultError(int rslt, int errinfo);
//-------------------------------------------------------------------------------
#endif