Axis.h 4.51 KB
#ifndef __AXIS_H
#define __AXIS_H
#include "sys.h"
#include "my_data.h"
#include "math.h"
#include "Axis_action.h"






typedef struct {

	u8 WorkModeNow;
	u8 Powered;	
//	u8 Fault ;
//	u8 Target_reached;	
	u8 Home_Found;
	u8 NodeStatus;
	u8 Tim4_NodeProNums;
	u8 Tim4_AxisDelayNum;

	short Current;
	u16 StatusWord;//位3:->故障	;位10:->到达目标位置	;位11:->轴限位触发	;位15:->原点到位;位5:->快速停止	;
	u16 ContWord;//
	u16 Ax_Status;//自定义变量,目的节省变量	。位0:->节点是否在线;位1:->收到1号报文;位2:->收到2号报文;位3:->收到3号报文;位4:->左限位触发;位5:->右限位触发;位6:->轴对应机构动作结束;
	u16 ErrCode;
//	signed long Pos_old;此量用于记录是否出圈
	signed int speed;	//rpm
	signed int Pos_Actual;	//电机的位置Pulse。对于转向轴,顺转P增大。
//	u32 Mc_Vol;暂时不用
	float  Angle_Actual;//针对转向轴时,舵轮姿态,相对车体X+方向的角度,左为正。相对于行走轴时是距离mm
//	float Velocity; //  此处是速度的另外一种记录形式,单位mm/s	,或者°/s,是对转速达额另外一种展示		
}Str_MToPc;//轴接收量的结构体


typedef struct {
//	
	u8 WorkMode;
	u8 JogEn;	
	u8 PowerOn;	
	u8 PowerOn_Step;
	u8 Reset;		
	u8 Reset_Step;
//	u8 Relative_Execute;
	u8 Relative_Step;	
//	u8 Relative_Executeold;
	u8 Absolute_Step;		
	u8 AbsoluteHold_Enable;
	u8 AbsoluteHold_Step;		
	u8 SpeedAbsolute_Step;	
//	u8 MoveHoldAbsolute_Execute;	
//	u8 MoveHoldAbsolute_Executeold;
//	u8 FindHome_Execute;
//	u8 FindHome_Executeold;	
	u8 FindHome_Step;
	u8 Stop;
	u8 Stop_old;
	u8 SetZero_Step;	
	u8 NodeProtTime_Step;	
	u16 ContWord;
	signed int Speed;//转速
	signed int TargetPos;//目标位置,走位置模式时的电机脉冲位置,最原始位置
	unsigned int TargetSpeed;


	float  Angle_Target;//主要针对转向轴
	float  Angle_Delta;//主要针对转向轴
	float  Velocity; //  mm/s

//	double local_delta;	
//	double Position;  //mm
	u16 Acc;//加速时间
	u16 Dcc;//加速时间
}Str_PcToM;//轴给出量的结构体


typedef struct {
	Str_PcToM PcToM;
	Str_MToPc MToPc;
	u8 Y;
	u16 Max_rpm;//单位1rpm
	u16 PulseS_Unit;//
	float Max_Speed;//单位1mm/s

}Str_MotorControl;//轴总结构体



/***


帮助:错误代码
0x7380 电机ABZ错误
0x7331 通讯式编码器没有连接 
0x7381 电机UVW错误
0x7320 通讯式编码器多圈错误 
0x7305 电机编码器计数错误 
0x7330 通讯式编码器校验错误
0x4210 散热器温度多高 
0x3210 总线电压过高 
0x3220 总线电压过低
0x2320 功率部分或者电机短路
0x2321 电流采样饱和 
0x7110 制动电阻负载过大
0x8611 跟随误差过大 
0x5112 逻辑电压过低 
0x2350 电机或者功率部分过载
0x8A80 脉冲频率过高 
0x4310 电机温度过高 
0x7122 电机UVW逻辑组合错误
0x7331 通讯式编码器没回应
0x6310 EEPROM校验出错 
0x5210 电流传感器出错
0x6010 软件看门狗复位 
0x6011 无效中断发生 
0x7400 检测到错误处理器型号
0x6320 电机型号错误
0x6321 电机缺相 
0xFF01 数字输出过载
0xFF11 STO1错误
0xFF12 STO2错误
0x5443 预使能错误
0x5442 正限位报错 
0x5441 负限位报错 
0x6012 SPI通讯故障
0x8100 总线通讯出错
0x81FF 总线通讯超时 
0x8A81 全闭环检查错误
0x7382 主编码器ABZ错误 
0x7306 主编码器计数错误
0xFF10 STO错误
0xFF1A STO1错误 
0xFF1B STO2错误
*/


/*************************轴SDO时变量对应的索引地址*********************************/
/***
#define PZero_Mode_Index   0x609800   //索引:int8,原点回零具体模式
#define PZero_Delta_Index  0x607c00		//索引:int32,原点偏移
#define PZero_Speed1_Index 0x609901		//索引:uint32,找原点第一次速度。找原点开关、限位开关速度
#define PZero_Speed2_Index 0x609902		//索引:uint32,找原点第2次速度。找原点速度
#define PZero_Mode   35    //35当前位置为原点,17负限位为原点
#define PZero_PcReferEn   1    //35当前位置为原点,17负限位为原点

#define MC_Status_Index   0x604100		//索引:uint16,轴实际位置
#define MC_ActualPos_Index   0x606300		//索引:int32,轴实际位置
#define MC_ActualSpeed_Index   0x606C00		//索引:int32,轴实际速度
#define MC_ActualCurrent_Index   0x607800		//索引:int16,轴当前电流

#define MC_ErrCode_Index   0x603F00		//索引:uint16,警告错误码
#define MC_WorkMode_Index   0x606000		//索引:int8,工作模式
#define MC_ConWord_Index   0x604000		//索引:uint16,控制字
#define MC_TargetPos_Index   0x607A00		//索引:int32,目标位置
#define MC_SpeedPos_Index   0x608100		//索引:uint32,梯形速度
#define MC_Accelaration_Index   0x608300		//索引:uint32,梯形加速度
#define MC_Deceleration_Index   0x608400		//索引:uint32,梯形减速度
#define MC_Speed_Index   0x60FF00		//索引:int32,目标速度

#define MC_Din_Index   0x20100B		//索引:int8,驱动器Din口
#define MC_Dout_Index   0x201014		//索引:int8,驱动器Dout口
***/

#define MaxMotNums 6//数组长度用 定义0-升降电机;1-左前舵轮行走轴;2-左前舵轮转向轴;3-右后舵轮行走轴;4-右后舵轮转向轴;5-输送轴


extern Str_MotorControl Motor[MaxMotNums];
void AxisData_Analysis(CanRxMsg*Message);

#endif