optical/EMBOS/Users/EmbBase/motos.h

328 lines
11 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __MOTOS_H__
#define __MOTOS_H__
//-------------------------------------------------------------------------------
#include "embfpga.h"
//-------------------------------------------------------------------------------
#define AXIS_NUM 6 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ
typedef struct
{
u16 axisConfig; // ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 poutType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ(CW/CCW<43><57>PULSE/DIR)
u16 spdSource; // ʵ<><CAB5><EFBFBD>ٶȿ<D9B6><C8BF><EFBFBD>(<28><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
u16 datSource; // ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD>ȡ(Ӳ<><D3B2><EFBFBD><EFBFBD><E5B2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3>)
}AxisConfig;
#ifdef _IN_MOTOS_C
#endif
//-------------------------------------------------------------------------------
//---------------------------------------------------------------
typedef struct
{
int enFlag;
s32 motosPos[AXIS_NUM];
}MotosPara;
#ifdef _IN_MOVECTRL_C
MotosPara g_motosPara;
#else
extern MotosPara g_motosPara;
#endif
//---------------------------------------------------------------
// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*
---------------------------------------------------------------------------------------------------------------------------------
| b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 |
---------------------------------------------------------------------------------------------------------------------------------
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | B<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>ON | <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽѡ<EFBFBD><EFBFBD> | | |
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
| b8 | b9 | b10 | b11 | b12 | b13 | b14 | b15 |
---------------------------------------------------------------------------------------------------------------------------------
| | | | | | | | <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
---------------------------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> ij<><C4B3>λΪ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
*/
#define POUT_EN 0x0001 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define POA_EN 0x0002 // A<><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define POB_EN 0x0004 // B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define SON_EN 0x0008 // <20>ŷ<EFBFBD>ON<4F><4E><EFBFBD><EFBFBD>
#define ALM_EN 0x0010 // <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ALM_LEVH 0x0020 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽΪ<C6BD><CEAA>
#define CONFIG_EN 0x8000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DEFAULT_CFG (CONFIG_EN|SON_EN|ALM_LEVH) // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define IO_CTRL_CFG (CONFIG_EN|ALM_EN|ALM_LEVH) // IO<49><4F><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ޱ<EFBFBD><DEB1><EFBFBD>
#define MOTOEN_CFG_NALM (CONFIG_EN|POUT_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENA_CFG_NALM (CONFIG_EN|POUT_EN|POA_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENB_CFG_NALM (CONFIG_EN|POUT_EN|POB_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENAB_CFG_NALM (CONFIG_EN|POUT_EN|POA_EN|POB_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>б<EFBFBD><D0B1><EFBFBD>
#define MOTOEN_CFG (CONFIG_EN|POUT_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENA_CFG (CONFIG_EN|POUT_EN|POA_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENB_CFG (CONFIG_EN|POUT_EN|POB_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENAB_CFG (CONFIG_EN|POUT_EN|POA_EN|POB_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>б<EFBFBD><D0B1><EFBFBD>(<28>͵<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>)
#define MOTOEN_CFG_LALM (CONFIG_EN|POUT_EN|SON_EN|ALM_EN) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENA_CFG_LALM (CONFIG_EN|POUT_EN|POA_EN|SON_EN|ALM_EN) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENB_CFG_LALM (CONFIG_EN|POUT_EN|POB_EN|SON_EN|ALM_EN) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTOENAB_CFG_LALM (CONFIG_EN|POUT_EN|POA_EN|POB_EN|SON_EN|ALM_EN) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ޱ<EFBFBD><DEB1><EFBFBD>
#define MOTO3EN_CFG_NALM (CONFIG_EN|POUT_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENA_CFG_NALM (CONFIG_EN|POUT_EN|POB_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENB_CFG_NALM (CONFIG_EN|POUT_EN|POA_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENC_CFG_NALM (CONFIG_EN|POUT_EN|POA_EN|POB_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENABC_CFG_NALM (CONFIG_EN|POUT_EN|SON_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD><D0B1><EFBFBD>
#define MOTO3EN_CFG (CONFIG_EN|POUT_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENA_CFG (CONFIG_EN|POUT_EN|POB_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENB_CFG (CONFIG_EN|POUT_EN|POA_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENC_CFG (CONFIG_EN|POUT_EN|POA_EN|POB_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MOTO3ENABC_CFG (CONFIG_EN|POUT_EN|SON_EN|ALM_EN|ALM_LEVH) // ͨ<>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//---------------------------------------------------------------
#define POUTA_EN MOUT_SEL_HIGH // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
#define POUTA_DIS MOUT_SEL_LOW // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41>ֹΪ<D6B9>͵<EFBFBD>ƽ
#define POUTB_EN MOUT_EN_HIGH // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
#define POUTB_DIS MOUT_EN_LOW // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><42>ֹΪ<D6B9>͵<EFBFBD>ƽ
#define SERVO_OFF MOUT_SON_HIGH // <20>ŷ<EFBFBD>OFFΪ<46>ߵ<EFBFBD>ƽ
#define SERVO_ON MOUT_SON_LOW // <20>ŷ<EFBFBD>ONΪ<4E>͵<EFBFBD>ƽ
//---------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ
typedef struct
{
int newConfig; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־<EFBFBD><D6BE>= 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ã<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; != 0<><30><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>д<EFBFBD>룬ͬʱˢ<CAB1>¼<EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AxisConfig axisConfig[AXIS_NUM];
}MotosConfig;
// <20><><EFBFBD><EFBFBD>λ<EFBFBD>ýṹ
typedef struct
{
s32 movement[AXIS_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>λp
u32 extraRepeat; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>movement<6E><74><EFBFBD>˶<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>
u32 interLong; // <20><EFBFBD><E5B2B9><EFBFBD><EFBFBD>λ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>movement<6E><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ
u32 pulsePerSegment; // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}MovementCtrl;
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȽṹ
typedef struct
{
u32 startPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 stopPPS; // ֹͣ<CDA3>ٶ<EFBFBD>
u32 runPPS; // <20>˶<EFBFBD><CBB6>ٶ<EFBFBD>
u32 slowPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 addPPSG; // <20><><EFBFBD>ټ<EFBFBD><D9BC>ٶ<EFBFBD>
u32 decPPSG; // <20><><EFBFBD>ټ<EFBFBD><D9BC>ٶ<EFBFBD>
u32 brkPPSG; // ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
}SpeedCtrl;
//---------------------------------------------------------------
// ֱ<>߲岹<DFB2>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ƽ
typedef struct
{
u32 vAxisId; // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
MotosConfig motosConfig; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MovementCtrl mvmtPara; // λ<>ƿ<EFBFBD><C6BF>Ʋ<EFBFBD><C6B2><EFBFBD>
SpeedCtrl spdPara; // <20>ٶȿ<D9B6><C8BF>Ʋ<EFBFBD><C6B2><EFBFBD>
int stopMode; // ֹͣ<CDA3>˶<EFBFBD><CBB6><EFBFBD>ʽ
// 0<><30><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>
// 1<><31><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><D9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ʱֹͣ<CDA3><D6B9>
int errInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void (*Delay)(u32); // <20><>ʱ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void (*RefreshPosition)(u32, s32*); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»ص<C2BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
u32 refPosPara; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>²<EFBFBD><C2B2><EFBFBD>
int (*WorkBeforeRun)(u32, u32); // <20><><EFBFBD><EFBFBD>ǰ׼<C7B0><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
int (*WorkAfterRun)(u32, u32); // <20><><EFBFBD>к<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
u32 workPara1, workPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int (*GetSlowDown)(u32,u32); // <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȽ<D9B6><C8BD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD>ٶȻָ<C8BB>
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>ټ<EFBFBD><D9BC>ٶȣ<D9B6>
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>
int (*GetEmergencyStop)(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>⼱ͣ<E2BCB1><CDA3><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><EFBFBD><E5A3A8><EFBFBD><EFBFBD>٣<EFBFBD>
u32 condPara1, condPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}InterMoveCtrl;
// <20>֧<EEB3A4>ֲ岹<D6B2><E5B2B9><EFBFBD><EFBFBD>
#define MAX_INTER_SIZE S32_MAX
#define STOP_MODE_SPD 0 // <20>ٶȵ<D9B6><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>ֹͣ
#define STOP_MODE_TAB 1 // <20>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>ֹͣ
#define TOSLOWMUTI 5
//------------------------------------------------------------------------------------------------
#define SUPPORT_SEGMENT 15 // ֧<><D6A7>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>16<31><36>
typedef struct
{
u32 interLong; // <20><EFBFBD><E5B2B9><EFBFBD><EFBFBD>λ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>movement<6E><74><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ
u16 sineOut[AXIS_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־. 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 segmnetNum[AXIS_NUM]; // <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>0--100
u32 startEsc[AXIS_NUM]; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 vppSegment[AXIS_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧÿ<D3A6><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 movement[AXIS_NUM][SUPPORT_SEGMENT+1]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
}MovementDat;
// <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>
typedef struct
{
// λ<>ƿ<EFBFBD><C6BF>Ʋ<EFBFBD><C6B2><EFBFBD>
s32 fillCount; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>FPGA<47>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
s32 execCount; // ִ<>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>idx<64><78>
s32 fillLimit; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
int bufsta; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
u32 lastEndPPS; // <20>϶ν<CFB6><CEBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ٶȣ<D9B6>Ҳ<EFBFBD><D2B2><EFBFBD>DZ<EFBFBD><C7B1>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>жΣ<D0B6><CEA3><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ٶȣ<D9B6>ÿ<EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>
u32 lastrunPPS; // <20>϶ε<CFB6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
int runstat; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>= 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC> = 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ״̬<D7B4><CCAC> = 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>״̬
int errInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
int waitNoData; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>־, = 0<><30><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>= 1<><31><EFBFBD>ȴ<EFBFBD>
int emptyCount;
int dataBegIndex; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
int exeingIdx; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
//------------
u32 mvmtStatus; // <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>0<EFBFBD><30><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>1<EFBFBD><31><EFBFBD><EFBFBD>Ч
MovementDat mvmtdat; // λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ٶȿ<D9B6><C8BF>Ʋ<EFBFBD><C6B2><EFBFBD>
u32 lowPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
u32 runPPS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ٶ<EFBFBD>
u32 calcGap; // <20><><EFBFBD>μ<EFBFBD><CEBC>ٶ<EFBFBD>
}MoveSwapData;
#define CRST_NORMAL 0 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
#define CRST_NSTOP 1 // ֹͣ״̬
#define CRST_QSTOP 2 // ֹͣ״̬
#define CRST_BREAK 3 // ɲ<><C9B2>״̬
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>߲岹<DFB2>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ƽ
typedef struct
{
u32 vAxisId; // ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
MotosConfig motosConfig; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MoveSwapData mvData; // λ<>ƺ<EFBFBD><C6BA>ٶ<EFBFBD>ˢ<EFBFBD>½ṹ
s32 dataBegIndex;
// ͣ<><CDA3><EFBFBD>ٶȿ<D9B6><C8BF>Ʋ<EFBFBD><C6B2><EFBFBD>
u32 stopPPS; // ͣ<><CDA3><EFBFBD>ٶ<EFBFBD>
u32 nstopPPSG; // <20><>ֹͨͣ<CDA3><D6B9><EFBFBD>ٶ<EFBFBD>
u32 qstopPPSG; // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD>ٶ<EFBFBD>
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void (*Delay)(u32); // <20><>ʱ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BAAF>
int (*RefreshData)(u32, u32); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>º<EFBFBD><C2BA><EFBFBD>
u32 refDatPara;
void (*RefreshPosition)(u32, s32*); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»ص<C2BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
u32 refPosPara; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>²<EFBFBD><C2B2><EFBFBD>
int (*WorkBeforeRun)(u32, u32); // <20><><EFBFBD><EFBFBD>ǰ׼<C7B0><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
int (*WorkAfterRun)(u32, u32); // <20><><EFBFBD><EFBFBD>ǰ׼<C7B0><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
u32 workPara1, workPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int (*GetSlowDown)(u32,u32); // <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȽ<D9B6><C8BD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD>ٶȻָ<C8BB>
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>ټ<EFBFBD><D9BC>ٶȣ<D9B6>
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>
int (*GetEmergencyStop)(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>⼱ͣ<E2BCB1><CDA3><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><EFBFBD><E5A3A8><EFBFBD><EFBFBD>٣<EFBFBD>
u32 condPara1, condPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}ContinuousInterMoveCtrl;
//------------------------------------------------------------------------------------------------
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void InitMotos(void);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
int GetMotosCounter(s32 * position);
// <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>λ<EFBFBD><CEBB>
void SetMotosCounter(s32 * position);
// ˢ<>µ<EFBFBD><C2B5><EFBFBD>λ<EFBFBD><CEBB>
void RefreshMotosPos(s32 * poslist);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 GetMotoCounter(int axisIdx);
void SetMotoCounter(int axisIdx, s32 pos);
void MotoServoCtrl(int axisIdx, int onoff);
void SetMotosConfig(MotosConfig * pConfig); // <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>6<EFBFBD><36>ͬ<EFBFBD><CDAC>
int InterpolationMotion(InterMoveCtrl * pCtrl);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>߲岹<DFB2>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>6<EFBFBD><36>ͬ<EFBFBD><CDAC>
int ContinuousInterpolation(ContinuousInterMoveCtrl * pCtrl);
u32 CalcDisplacement(u32 pps1, u32 pps2, u32 calcTime); // <20><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ<EFBFBD><CEBB>
u32 CalcGapTime(u32 disp, u32 pps1, u32 pps2); // <20><><EFBFBD><EFBFBD>ijλ<C4B3><CEBB><EFBFBD><EFBFBD><EFBFBD>ٶȱ仯<C8B1><E4BBAF>Ҫ<EFBFBD><D2AA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 CalcEndSpd(u32 disp, u32 pps1, s32 addgap);
#endif