⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sm5k_lib.h

📁 基于mcx314的运动控制
💻 H
字号:
#include "app.h"

#ifndef SM5K_LIB
#define SM5K_LIB


typedef unsigned long  	uint32;
typedef          long  	int32;
typedef unsigned short  uint16;
typedef          short  int16;
typedef unsigned char   uint8;
typedef          char   int8 ;
typedef          long  	ret32;
typedef          short 	bool;

typedef struct{
	int PosX;
	int PosY;
	int PosZ;
}Axis3Param_t;

typedef struct{
	int32 Pos1;
	int32 Pos2;
	int32 Center1;
	int32 Center2;
	uint16 IplCmd;
} CiplParam_t;

typedef struct{
	int32 Pos1;
	int32 Pos2;
} Position2D_t;

#define ERR_Index_Exceed_Max	1
#define ERR_Invalid_AxisNo		2
#define ERR_Invalid_RegNo		3

#define C_WR0				0x0000
#define C_WR1				0x0001
#define C_WR2				0x0002
#define C_WR3				0x0003
#define C_WR4				0x0004
#define C_WR5				0x0005
#define C_WR6				0x0006
#define C_WR7				0x0007

#define C_rWR0				0x0008
#define C_rWR1				0x0009
#define C_rWR2				0x000A
#define C_rWR3				0x000B
#define C_rWR4				0x000C
#define C_rWR5				0x000D
#define C_rWR6				0x000E
#define C_rWR7				0x000F

#define C_RR0				0x0000
#define C_RR1				0x0001
#define C_RR2				0x0002
#define C_RR3				0x0003
#define C_RR4				0x0004
#define C_RR5				0x0005
#define C_RR6				0x0006
#define C_RR7				0x0007

#define C_R					0x0000
#define C_K					0x0001
#define C_A					0x0002
#define C_D					0x0003
#define C_SV				0x0004
#define C_V					0x0005
#define C_P					0x0006
#define C_DP				0x0007
#define C_C					0x0008
#define C_LP				0x0009
#define C_EP				0x000A
#define C_CP				0x000B
#define C_CM				0x000C
#define C_AO				0x000D

#define C_rLP				0x0010
#define C_rEP				0x0011
#define C_rCV				0x0012
#define C_rCA				0x0013

#define C_X					0
#define C_Y					1
#define C_Z					2
#define C_U					3

#define C_XDRV				0
#define C_YDRV				1
#define C_ZDRV				2
#define C_UDRV				3
#define C_XERR				4
#define C_YERR				5
#define C_ZERR				6
#define C_UERR				7
#define C_IDRV				8
#define C_CNEXT				9
#define C_BUSY			   15

#define C_CMD_DRV_QP		0x0020
#define C_CMD_DRV_QM		0x0021
#define C_CMD_DRV_CP		0x0022
#define C_CMD_DRV_CM		0x0023
#define C_CMD_DRV_Hold		0x0024
#define C_CMD_DRV_Release	0x0025
#define C_CMD_DRV_DEC_Stop	0x0026
#define C_CMD_DRV_EMG_Stop	0x0027

#define C_CMD_INP_2LINE			0x0030
#define C_CMD_INP_3LINE			0x0031
#define C_CMD_INP_CW			0x0032
#define C_CMD_INP_CCW			0x0033
#define C_CMD_INP_2BP			0x0034
#define C_CMD_INP_3BP			0x0035
#define C_CMD_INP_BP_REG_WEN	0x0036
#define C_CMD_INP_BP_REG_WDIS	0x0037
#define C_CMD_INP_BP_DATA_STACK	0x0038
#define C_CMD_INP_BP_DATA_CLEAR	0x0039
#define C_CMD_INP_1STEP			0x003A
#define C_CMD_INP_DEC_VALID		0x003B
#define C_CMD_INP_DEC_INVALID	0x003C
#define C_CMD_INP_INT_CLEAR 	0x003D

#define C_BIT_MANLD 		0x0030
#define C_BIT_DSNDE 		0x0031
#define C_BIT_SACC 			0x0032
#define C_BIT_AXIS4			0x005D

#define C_BIT_SLMTP			0x0020
#define C_BIT_SLMTM			0x0021
#define C_BIT_CMPSL			0x0025
#define C_BIT_PLSMD			0x0026
#define C_BIT_PLS_L			0x0027
#define C_BIT_DIR_L			0x0028
#define C_BIT_PINMD			0x0029
#define C_BIT_PIND0			0x002A
#define C_BIT_PIND1			0x002B

#define C_BIT_LMTMD			0x0022
#define C_BIT_LMTPL			0x0023
#define C_BIT_LMTML			0x0024
#define C_BIT_LMTPE			0x003C
#define C_BIT_LMTME			0x003D

#define C_BIT_XOUT0			0x0040
#define C_BIT_XOUT1			0x0041
#define C_BIT_XOUT2			0x0042
#define C_BIT_XOUT3			0x0043
#define C_BIT_YOUT0			0x0044
#define C_BIT_YOUT1			0x0045
#define C_BIT_YOUT2			0x0046
#define C_BIT_YOUT3			0x0047
#define C_BIT_ZOUT0			0x0048
#define C_BIT_ZOUT1			0x0049
#define C_BIT_ZOUT2			0x004A
#define C_BIT_ZOUT3			0x004B
#define C_BIT_UOUT0			0x004C
#define C_BIT_UOUT1			0x004D
#define C_BIT_UOUT2			0x004E
#define C_BIT_UOUT3			0x004F
#define C_BIT_CIINT			0x005E

#define C_BIT_ASND			0x0012
#define C_BIT_CNST			0x0013
#define C_BIT_DSND			0x0014

#define	pSm5k_Reg_Base_Addr     (volatile unsigned short *)0x08000000 
#define	pSm5k_ExtIO_Base_Addr   (volatile unsigned short *)0x08000020 

#define C_R_DEFAULT 			8000000
#define C_R_DEFAULT_ROOT2	   11313708
#define C_R_DEFAULT_ROOT3	   13856406
#define C_R_DEFAULT_ROOT4	   16000000
#define C_CCW_ARC			   1
#define C_CW_ARC			   0
#define C_DIR_NEG			   1
#define C_DIR_POS			   0

#define RPS(v)	v*200*N_XIFEN

#define is_driving				smp860_is_driving
#define get_state				smp860_get_state
#define set_port				smp860_set_port
#define get_port				smp860_get_port
#define set_reg					smp860_set_reg
#define set_reg_multi_axis		smp860_set_reg_multi_axis
#define get_reg					smp860_get_reg
#define set_param				smp860_set_param
#define set_param_multi_axis	smp860_set_param_multi_axis
#define get_param				smp860_get_param
#define send_drv_cmd			smp860_send_drv_cmd
#define send_drv_cmd_multi_axis	smp860_send_drv_cmd_multi_axis
#define send_inp_cmd			smp860_send_inp_cmd
#define set_extio				smp860_set_extio
#define get_extio				smp860_get_extio

void   Error_process(int32 ErrNo);
uint16 GetAxisCmd( uint16 AxisNo);
uint16 GetmAxisCmd( uint16 *AxisArray);
void   wait_when_busy(void);
void   set_inp_axis ( uint16 *AxisArray );

bool   smp860_is_driving( uint16 axis);
bool   smp860_get_state( uint16 Index );
ret32  smp860_set_port(uint16 RegNo,uint16 Value);
ret32  smp860_get_port(uint16 RegNo,uint16 *pValue);
ret32  smp860_set_reg( uint16 AxisNo, uint16 RegNo, uint16 Value );
ret32  smp860_set_reg_multi_axis( uint16 *AxisArray, uint16 RegNo, uint16 Value );
ret32  smp860_get_reg( uint16 AxisNo, uint16 RegNo, uint16 *pValue );
ret32  smp860_set_param ( uint16 AxisNo, uint16 ParamID, int32 Data );
ret32  smp860_set_param_multi_axis ( uint16 *AxisArray, uint16 ParamID, int32 Data );
ret32  smp860_get_param ( uint16 AxisNo, uint16 ParamID, int32 *pData );
ret32  smp860_send_drv_cmd ( uint16 AxisNo, uint16 CmdID );
ret32  smp860_send_drv_cmd_multi_axis ( uint16 *AxisArray, uint16 CmdID );
ret32  smp860_send_inp_cmd ( uint16 CmdID );
ret32  smp860_set_extio(uint16 RegNo,uint16 Value);
ret32  smp860_get_extio(uint16 RegNo,uint16 *pValue);

ret32  smp860_board_init(int16 nCard);
ret32  smp860_set_bit(uint16 AxisNo,uint16 BitID,uint16 BitValue);
bool   smp860_get_bit(uint16 AxisNo,uint16 BitID);

ret32  smp860_emg_stop(uint16 AxisNo);
ret32  smp860_decel_stop(uint16 AxisNo);
ret32  smp860_get_speed(uint16 AxisNo);
ret32  smp860_get_command_pos(uint16 AxisNo);
ret32  smp860_get_encoder_pos(uint16 AxisNo);
ret32  smp860_set_command_pos(uint16 AxisNo, int32 Pos );
ret32  smp860_set_encoder_pos(uint16 AxisNo, int32 Pos );
ret32  smp860_change_target_pos(uint16 AxisNo, int32 Pos );

ret32  smp860_set_soft_limit(uint16 AxisNo, uint16 SLMode, int32 PLimit, int32 NLimit );
ret32  smp860_enable_soft_limit(uint16 AxisNo, uint16 LimSelect, uint16 Action );
ret32  smp860_disable_soft_limit(uint16 AxisNo, uint16 LimSelect);

ret32  smp860_set_hard_limit(uint16 AxisNo, uint16 StopMode );
ret32  smp860_enable_hard_limit(uint16 AxisNo, uint16 LimSelect, uint16 Level );
ret32  smp860_disable_hard_limit(uint16 AxisNo, uint16 LimSelect);

ret32  smp860_set_pls_outmode(uint16 AxisNo, uint16 Outmode);
ret32  smp860_set_pls_iptmode(uint16 AxisNo, uint16 iptmode);

ret32  smp860_home_move(uint16 AxisNo, uint16 Dir, int32 StrVel, int32 MaxVel, float Tacc );
//ret32  smp860_home_move_all( int32 StrVel, int32 MaxVel, float Tacc );

ret32  smp860_cv_move(uint16 AxisNo, uint16 Dir, int32 MaxVel);
ret32  smp860_tv_move(uint16 AxisNo, uint16 Dir, int32 StrVel, int32 MaxVel, float Tacc );
ret32  smp860_sv_move(uint16 AxisNo, uint16 Dir, int32 StrVel, int32 MaxVel, float Tacc, int32 Vsacc );

ret32  smp860_start_cr_move(uint16 AxisNo, int32 Dist, int32 MaxVel);
ret32  smp860_start_ca_move(uint16 AxisNo, int32 Pos, int32 MaxVel);
ret32  smp860_start_tr_move(uint16 AxisNo, int32 Dist, int32 StrVel, int32 MaxVel, float Tacc, float Tdec, int32 AO );
ret32  smp860_start_ta_move(uint16 AxisNo, int32 Pos, int32 StrVel, int32 MaxVel, float Tacc, float Tdec, int32 AO );
ret32  smp860_start_sr_move(uint16 AxisNo, int32 Dist, int32 StrVel, int32 MaxVel, float Tacc, int32 Vsacc, int32 AO );
ret32  smp860_start_sa_move(uint16 AxisNo, int32 Pos, int32 StrVel, int32 MaxVel, float Tacc, int32 Vsacc, int32 AO );

ret32  smp860_start_tr_line2(uint16 *AxisArray, int Dist1, int Dist2, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_ta_line2(uint16 *AxisArray, int Pos1, int Pos2, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_line2(uint16 *AxisArray, int Dist1, int Dist2, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_sa_line2(uint16 *AxisArray, int Pos1, int Pos2, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_tr_line3(uint16 *AxisArray, int Dist1, int Dist2, int Dist3, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_ta_line3(uint16 *AxisArray, int Pos1, int Pos2, int Pos3, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_line3(uint16 *AxisArray, int Dist1, int Dist2, int Dist3, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_sa_line3(uint16 *AxisArray, int Pos1, int Pos2, int Pos3, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_tr_line4(uint16 *AxisArray, int Dist1, int Dist2, int Dist3, int Dist4, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_ta_line4(uint16 *AxisArray, int Pos1, int Pos2, int Pos3, int Pos4, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_line4(uint16 *AxisArray, int Dist1, int Dist2, int Dist3, int Dist4, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_sa_line4(uint16 *AxisArray, int Pos1, int Pos2, int Pos3, int Pos4, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );

ret32  smp860_start_tr_arc2(uint16 *AxisArray, int OffsetC1, int OffsetC2, int OffsetE1, int OffsetE2, int Dir, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_ta_arc2(uint16 *AxisArray, int C1, int C2, int E1, int E2, int Dir, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_arc2(uint16 *AxisArray, int OffsetC1, int OffsetC2, int OffsetE1, int OffsetE2, int Dir, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_start_sa_arc2(uint16 *AxisArray, int C1, int C2, int E1, int E2, int Dir, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );

ret32  smp860_enable_ciint(uint16 Enable);
ret32  smp860_check_conti_buffer(void);

#define smp860_start_tr_2axis_continue_inp	smp860_start_tr_continue_inp2
#define smp860_start_sr_2axis_continue_inp	smp860_start_sr_continue_inp2
#define smp860_append_2axis_continue_inp	smp860_append_continue_inp2

ret32  smp860_start_tr_continue_inp2( uint16 *AxisArray, CiplParam_t *Node, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_continue_inp2( uint16 *AxisArray, CiplParam_t *Node, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_append_continue_inp2( uint16 *AxisArray, CiplParam_t *Node );

#define smp860_start_tr_2axis_continue_line2	smp860_start_tr_continue_line2
#define smp860_start_sr_2axis_continue_line2	smp860_start_tr_continue_line2
#define smp860_append_2axis_continue_line2		smp860_append_continue_line2

ret32  smp860_start_tr_continue_line2( uint16 *AxisArray, Position2D_t *Node, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_start_sr_continue_line2( uint16 *AxisArray, Position2D_t *Node, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );
ret32  smp860_append_continue_line2( uint16 *AxisArray, Position2D_t *Node );

ret32  smp860_prepare_tr_continue_line2( uint16 *AxisArray, int StrVel, int MaxVel, float Tacc, float Tdec, int AO );
ret32  smp860_prepare_sr_continue_line2( uint16 *AxisArray, int StrVel, int MaxVel, float Tacc, int Vsacc, int AO );


int smp860_get_arc_length(int C1,int C2,int E1,int E2,int Dir);



#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -