177 lines
4.0 KiB
C
177 lines
4.0 KiB
C
|
||
#ifndef __MOTION_H__
|
||
#define __MOTION_H__
|
||
|
||
#include "config.h"
|
||
|
||
//--------------------------------------------------
|
||
// 运动控制
|
||
|
||
#ifndef MAX_AXIS_NUM
|
||
#define MAX_AXIS_NUM 4
|
||
#endif
|
||
|
||
//----------------------------------------------------------------------------------------------------------
|
||
|
||
// 电机速度结构
|
||
typedef struct
|
||
{
|
||
u32 startPPS; // 启动速度
|
||
u32 stopPPS; // 停止速度
|
||
u32 runPPS; // 运动速度
|
||
u32 slowPPS; // 慢速速度
|
||
u32 addPPSS; // 变速加速度
|
||
u32 brkPPSS; // 刹车加速度
|
||
u32 slowPPSS; // 慢速加速度
|
||
}MotionSpeedCtrl;
|
||
|
||
typedef struct
|
||
{
|
||
void (*RefreshPosition)(u32, s32*); // 坐标刷新回调函数
|
||
u32 refPosPara; // 坐标刷新参数
|
||
|
||
int (*GetSlowDown)(u32,u32); // 慢速运动条件函数,当为空时,不检测降速条件; 不为空时,条件满足,速度降低,条件消失,速度恢复
|
||
int (*GetNormalStop)(u32,u32); // 一般停止条件函数,当为空时,不检测停止条件; 不为空时,条件满足,降速到停止(按降速加速度)
|
||
int (*GetQuickStop)(u32,u32); // 快速停止条件函数,当为空时,不检测停止条件; 不为空时,条件满足,降速到停止(按刹车加速度)
|
||
int (*GetEmergencyStop)(u32,u32); // 紧急停止条件函数,当为空时,不检测急停条件; 不为空时,条件满足,立刻停止发送脉冲(无需降速)
|
||
u32 condPara1, condPara2; // 条件函数参数
|
||
|
||
}MotionCallbackCtrl;
|
||
|
||
//--------------------------------------------------
|
||
// 单轴异步轨迹运动
|
||
|
||
#define SPM_PARA_NUM 100 // 大于等于SeparateMotionCtrl.paraList
|
||
|
||
typedef struct
|
||
{
|
||
int motoIdx; // 运动轴索引
|
||
int runtype; // 运动模式,0, 位移模式(位移完成,然后停止); 1, 速度模式(无限运动模式,直到停止条件触发停止)
|
||
int blockRun; // 阻塞运行标志
|
||
s32 movement; // 位移量
|
||
|
||
MotionSpeedCtrl spdPara; // 速度
|
||
|
||
// 回调函数
|
||
MotionCallbackCtrl callback;
|
||
|
||
// 反馈信息
|
||
int errInfo; // 错误信息
|
||
int exerslt; // 执行结果
|
||
int runningflag; // 运行标志
|
||
int startflag; // 启动标志
|
||
int stopflag; // 停止标志(外部设置)
|
||
|
||
// 中间变量
|
||
union
|
||
{
|
||
u32 buff[SPM_PARA_NUM];
|
||
|
||
struct
|
||
{
|
||
int initedflag;
|
||
int outdir;
|
||
int oldcondsel;
|
||
|
||
s32 posbeforerun; // 运动前的位置
|
||
|
||
float startpps, runpps, slowpps, stoppps; // 速度
|
||
float addppss, brkppss, slowppss; // 加速度
|
||
|
||
u32 totalnum, runmidx;
|
||
u32 mvmtseg[3]; // 运动的三段的位移
|
||
u32 decpoint; // 降速分界点
|
||
u32 tablen12, tablen3;
|
||
u32 slowmvmt;
|
||
|
||
int slowsta, inslow; // 降速状态,正在降速标志
|
||
int brksta, inbrk; // 刹车状态,正在刹车标志
|
||
int nstpsta, innstp; // 停车状态,正在停车标志
|
||
}paraList;
|
||
}ctrlPara;
|
||
|
||
}SeparateMotionCtrl;
|
||
|
||
|
||
#define PULSE_DIR_POSI 1
|
||
#define PULSE_DIR_NEGA -1
|
||
|
||
#define SEPRUN_TPYE_MVMT 0 // 位置控制
|
||
#define SEPRUN_TPYE_SPEED 1 // 速度控制
|
||
|
||
//--------------------------------------------------
|
||
// 多轴直线插补运动
|
||
|
||
// 直线插补运动控制结构
|
||
typedef struct
|
||
{
|
||
s32 movement[MAX_AXIS_NUM]; // 各个轴的运动量,0,无运动;其他,运动长度,单位p
|
||
|
||
MotionSpeedCtrl spdPara; // 速度控制参数
|
||
|
||
// 回调函数及参数
|
||
MotionCallbackCtrl callback;
|
||
|
||
// 反馈信息
|
||
int errInfo; // 错误信息
|
||
|
||
}InterMotionCtrl;
|
||
|
||
//--------------------------------------------------
|
||
// 单轴连续位移运动
|
||
|
||
// 交换数据
|
||
typedef struct
|
||
{
|
||
// 设置数据
|
||
u32 mvmtStatus; // 本次运动数据状态,0,无效,1,有效
|
||
s32 movement; // 位移参数,本段位移
|
||
|
||
s32 thisIdx;
|
||
float thisBegPPS; // 本次的启动速度,也是上段结束时的速度
|
||
float thisEndPPS; // 本次结束时的速度
|
||
float thisRunPPS; // 本次的运行速度
|
||
float thisAddPPSS; // 本次的运行加速度
|
||
|
||
//----反馈状态
|
||
int bufsta; // 缓冲区状态
|
||
int runsta;
|
||
s32 exeingIdx;
|
||
float exeingMaxPPS;
|
||
|
||
s32 lastmvmt; // 上段的位移
|
||
float lastRunPPS;
|
||
float lastEndPPS; // 上次结束时的速度,也就是本段(正在执行段)的起始速度(每次表结束时设置)
|
||
float lastAddPPSS; //
|
||
|
||
int rslt;
|
||
int err;
|
||
|
||
}MotionSwapData;
|
||
|
||
typedef struct
|
||
{
|
||
int motoIdx; // 运动轴索引
|
||
|
||
// 回调函数
|
||
void (*RefreshPosition)(u32, s32*); // 坐标刷新回调函数
|
||
u32 refPosPara; // 坐标刷新参数
|
||
|
||
void (*RefreshData)(u32, u32); // 数据刷新回调函数
|
||
u32 refDatPara; // 数据刷新函数参数
|
||
|
||
MotionSwapData swapData; // 交换的位移和速度
|
||
|
||
// 反馈信息
|
||
int errInfo; // 错误信息
|
||
int exerslt;
|
||
int stopflag;
|
||
int runningflag;
|
||
|
||
// 中间变量
|
||
|
||
}ContinuousMotionCtrl;
|
||
|
||
|
||
#endif
|