📄 mass.h
字号:
#define TECH_BOUND_LIMIT 0x06
//作動寬度MassTech.ActWidth和MsgCN_Width,MsgTech_Momi.MassWidth信息内容
#define TECH_WIDTH_WIDE 0x01
#define TECH_WIDTH_MIDLE 0x02
#define TECH_WIDTH_NARROW 0x03
//按摩速度MassTech相关段速度停止定义
#define TECH_SPEED_STOP 0x0F
//默认升降速度定义
#define DEFAULT_SPEED_UD 0x08
//默认出退速度定义
#define DEFAULT_SPEED_FB 0x06
//默认揉捏速度定义
#define DEFAULT_SPEED_MOMI 0x06
//默认捶打速度定义
#define DEFAULT_SPEED_TATAKI 0x06
//捶打控速方式MassTech.TatakiMode内容
#define TECH_TATAKI_SIMPLE 0x01
#define TECH_TATAKI_ALTER 0x02
#define TECH_TATAKI_CYC 0x03
//出退速度MassTech.FrontBackSpeed特殊点定义
#define TECH_FB_BASE 0x0B
#define TECH_FB_SUR 0x0C
#define TECH_FB_LIMIT 0x0D
//升降反復次數MassTech.RepeatNum的無限循環定义
#define TECH_RPT_FOREVER 0x0F
//*********************************************邮箱及信息定义**************************************
//-----------------------------------------------------------------------------------------
//二值邮箱
extern OS_EVENT *MboxCmd_TechStart;//指令处理任务向手技处理任务发送手技开始命令的邮箱
extern OS_EVENT *MboxTech_Finish;//手技处理任务向指令处理任务发送手技完成通知的邮箱(预留.不能在指令处理中等待手技完成,因为要实时相应接收的其它指令)
extern OS_EVENT *MboxMomi_Finish;//揉捏处理任务向手技处理任务发送揉捏完成通知的邮箱
extern OS_EVENT *MboxTataki_Finish;//捶打处理任务向手技处理任务发送捶打完成通知的邮箱
extern OS_EVENT *MboxCN_Width;//电平变化中断处理向揉捏处理任务发送的宽度到位通知邮箱
//二值邮箱有效通知指针定义
#define MBOX_VALID (void*)0x01 //用于二值邮箱的有效指示
//-----------------------------------------------------------------------------------------
//手技处理任务向升降出退任务发送升降出退命令的邮箱
extern OS_EVENT *MboxTech_SurMove;
//手技处理任务向升降出退任务发送的升降出退命令MsgTech_SurMove信息内容
typedef struct
{
INT8U MsgClass:4;
INT8U MsgSurTech:4;
} MSG_TECH_SUR_STRUCT;
//手技处理任务向升降出退任务发送的升降出退命令
extern MSG_TECH_SUR_STRUCT MsgTech_SurMove;
//信息种类MsgTech_SurMove.MsgClass内容:
#define TECH_SUR_MOVE_BEGIN 0x01 //移动开始
#define TECH_SUR_MOVE_NOSE 0x02 //移动通知
#define TECH_SUR_FB_NOSE 0x03 //出退通知
#define TECH_SUR_RST_NOSE 0x04 //归位通知
#define TECH_SUR_CHECK_START 0x05 //检测开始
#define TECH_SUR_SHDR_PRS_ALLOW 0x06 //肩压允许
#define TECH_SUR_SHDR_PRS_START 0x07 //肩压启动
//升降手技MsgTech_SurMove.MsgSurTech内容
//在升降出退处理任务中的手技形式,在发布移动开始命令时根据指令中的手技形式而设置,在任务全程有效
//它将指令中的有感肩压和体型感知手技形式分解为肩膀检测,肩压和体型检测三种升降手技
#define TECH_SUR_MASSMODE_MOMI_CW 0x01
#define TECH_SUR_MASSMODE_MOMI_CCW 0x02
#define TECH_SUR_MASSMODE_TATAKI 0x03
#define TECH_SUR_MASSMODE_PRS 0x04
#define TECH_SUR_MASSMODE_RUB 0x05
#define TECH_SUR_MASSMODE_ROLL 0x06
#define TECH_SUR_MASSMODE_SHDR_DTCT 0x07
#define TECH_SUR_MASSMODE_MOMI_TATAKI 0x08
#define TECH_SUR_MASSMODE_MOMI_PRS 0x09
#define TECH_SUR_MASSMODE_FB_PRS 0x0A
#define TECH_SUR_MASSMODE_SHDR_PRS 0x0B
#define TECH_SUR_MASSMODE_POSIT_MOVE 0x0C
#define TECH_SUR_MASSMODE_BODY_DTCT 0x0F
//-----------------------------------------------------------------------------------------
//升降出退任务向手技处理任务发送升降出退状态通知的邮箱
extern OS_EVENT *MboxSurMove_Nose;
//升降出退任务向手技处理任务发送升降出退状态通知MsgSurMove_Nose信息内容
typedef struct
{
INT8U MsgClass:4;
INT8U MsgParam:4;
} MSG_SUR_TECH_STRUCT;
//升降出退任务向手技处理任务发送升降出退状态通知
extern MSG_SUR_TECH_STRUCT MsgSurMove_Nose;
//信息种类MsgSurMove_Nose.MsgClass内容:
#define SUR_TECH_POSIT 0x01 //升降位置到
#define SUR_TECH_UD_FINISH 0x02 //升降结束
#define SUR_TECH_MOVE_END 0x03 //移动结束
#define SUR_TECH_A_PRESS_FINISH 0x04 //单次指压结束
#define SUR_TECH_SHDR_CHK_START 0x05 //肩膀检测起始
#define SUR_TECH_SHDR_CHK_FINISH 0x06 //肩膀检测结束
#define SUR_TECH_SHDR_PRS_PREPARE 0x07 //肩压准备
#define SUR_TECH_POINT_CHK_FINISH 0x08 //体型点检测结束
#define SUR_TECH_SURFACE_ARRIVE 0x09 //体型面到
#define SUR_TECH_STRENG_ARRIVE 0x0A //强度到
//信息参数MsgSurMove_Nose.MsgParam内容(.MsgClass==SUR_TECH_POSIT):
#define SUR_TECH_POSIT_INIT 0x01 //初始位置到
#define SUR_TECH_POSIT_DIVIS 0x02 //分割点到
#define SUR_TECH_POSIT_RANGE_BEGIN 0x03 //范围起点到
#define SUR_TECH_POSIT_RANGE_END 0x04 //范围终点到
#define SUR_TECH_POSIT_FINISH 0x05 //终止点到
//-----------------------------------------------------------------------------------------
//手技处理任务向揉捏处理任务发送揉捏命令的邮箱
extern OS_EVENT *MboxTech_Momi;
//手技处理任务向揉捏处理任务发送揉捏命令MsgTech_Momi信息内容
typedef struct
{
INT16U MsgClass:4;
INT16U MomiDirect:1;
INT16U MomiSpeed:4;//1~10段
INT16U MomiRptNum:4;//1~15周期
INT16U MassWidth:2;//揉捏宽度取值同MassTech.ActWidth
} MSG_TECH_MOMI_STRUCT;
//手技处理任务向揉捏处理任务发送揉捏命令
extern MSG_TECH_MOMI_STRUCT MsgTech_Momi;
//信息种类MsgTech_Momi.MsgClass内容:
#define TECH_MOMI_WID_ADJ 0x01 //宽度调整
#define TECH_MOMI_RPT 0x02 //有限揉捏
#define TECH_MOMI_FRVR 0x03 //无限揉捏
//揉捏方向MsgTech_Momi.MomiDirect内容:
#define TECH_MOMI_CW 0x00 //正向
#define TECH_MOMI_CCW 0x01 //反向
//-----------------------------------------------------------------------------------------
//手技处理任务向捶打处理任务发送捶打命令的邮箱
extern OS_EVENT *MboxTech_Tataki;
//手技处理任务向捶打处理任务发送捶打命令MsgTech_Tataki信息内容
typedef struct
{
INT8U FollowMode:2;//取值同MassTech.FollowMode
INT8U TatakiMode:2;//取值同MassTech.TatakiMode
INT8U TatakiHSpeed:4;//1~10段
INT8U TatakiLSpeed:4;//1~10段
INT8U KeepTime:4;//1~10段
INT8U SpeedPtr:4;//锤打速度指针,手技处理任务负责对其初始化,捶打处理任务负责对其增减
} MSG_TECH_TATAKI_STRUCT;
//手技处理任务向捶打处理任务发送捶打命令
extern MSG_TECH_TATAKI_STRUCT MsgTech_Tataki;
//-----------------------------------------------------------------------------------------
//电平变化中断处理向揉捏处理任务发送的宽度通知,取值与手技指令中的相关取值相同
//extern INT8U MsgCN_Width;
//-----------------------------------------------------------------------------------------
//10ms定时器中升降位置控制向升降出退任务发送的升降到位通知邮箱
extern OS_EVENT *MboxUD_Sur;
//10ms定时器中出退位置控制向升降出退任务发送的出退到位通知邮箱
extern OS_EVENT *MboxFB_Sur;
//升降和出退各种通知的指针表示
#define YZ_MBOX_PST_ARRV (void*)0x01 //表升降到位
#define YZ_MBOX_BASE_ARRV (void*)0x03 //表原点到
#define YZ_MBOX_LIMIT_ARRV (void*)0x04 //表限位到
#define YZ_MBOX_CUR_LMT (void*)0x05 //表马达保护电流到
#define YZ_MBOX_CHK_ARRV (void*)0x06 //表体型感知点到
//电平变化中断处理向揉捏处理任务发送的宽度通知,取值与手技指令中的相关取值相同
//extern INT8U MsgCN_Width;
//-----------------------------------------------------------------------------------------
//揉捏或捶打停止指针定义
#define TECH_MBOX_STOP_RUN (void*)0x02 //强制无限揉捏或捶打作动停止
//*********************************************指令码定义**************************************
//指令码CmdCode内容
#define CMD_GET_STATUS 0x00
#define CMD_SET_MASS_TECH 0x02
#define CMD_SET_SPEED 0x04
#define CMD_SET_MASS_STOP 0x0C
//*********************************************外部函数声明**************************************
void System_Init (void);
void RecvServer(INT8U rxd_byte);
void SendServer(void);
void Mass_TxStart (INT8U *);
void Mass_RxISRHandler(void);
void Mass_TxISRHandler(void);
void Mass_ADC1ISRHandler(void);
void Mass_DMA0ISRHandler(void);
void CmdAnalyse(void);
void StopMass(void);
void SetupMbox(void);
void MassTechTask(void *p_arg);
void YZTask(void *p_arg);
void MomiTask(void *p_arg);
void TatakiTask(void *p_arg);
void DivisPointSet(void);
void PositionMove(INT8U ud_pst,INT8U fb_pst,INT8U ud_spd,INT8U fb_spd,INT8U ud_dly,INT8U fb_dly,INT8U bd_chk);
void OneShdrAct(void);
void OneFBAct(void);
INT8U GetSurPstDist(INT8U ud_pst);
INT8U GetStrngDist(INT8U strng);
void DivisPointSet(void);
void SetLimit(void);
#ifdef USER_DEBUG
void PrintHex(INT16U value);
extern INT8U Rest;
#endif
//*********************************************外部变量声明**************************************
extern OS_EVENT *MboxRx_Finish,*MboxTx_Finish;
extern INT8U Err;
extern INT16U AdDmaSpace[];
extern INT16S An0Cur,An1Cur,An2Cur,An3Cur;
extern INT16U An0Val,An1Val,An2Val,An3Val;
extern INT16U TatakiPwmSet,UpPwmSet,DownPwmSet,MomiCwPwmSet,MomiCcwPwmSet,FrontPwmSet,BackPwmSet,TestPwmSet;
extern INT8U RecvBuf[]; //数据接收缓存区
extern MASS_TECH_STRUCT MassTech;
extern MASS_STAT_STRUCT MassStat;
extern INT8U AllSurPstDist[][2],AllSurPstDistBak[][2];
extern INT8U UDNowPst,UDAimPst,UDAimSpd;
extern INT8U FBNowPst,FBAimPst,FBAimSpd;
extern MASS_STAT_STRUCT MassStat;
//體型感知使能變量
extern INT8U EnDtct;
#define DIS_DTCT 0x00 //禁止體型感知
#define EN_SHDR_DTCT 0x01 //使能肩膀檢測
#define EN_BODY_DTCT 0x02 //使能體型檢測
//void SetSpeed(INT8U spd_lvl,INT16U *run_cell,INT16U *stp_cell,INT8U *spd_tbl);//test
//*******************************************设置马达速度宏定义*********************************
#ifdef MOMI_TASK
const INT8U MomiPwmTable[10]={8,16,24,32,40,48,56,64,72,80};//每段速度对应的PWM占空比(%)
#else
extern const INT8U MomiPwmTable[];
#endif
#ifdef TATAKI_TASK
const INT8U TatakiPwmTable[10]={5,10,15,20,25,30,35,40,45,50};
#else
extern const INT8U TatakiPwmTable[];
#endif
#ifdef YZ_TASK
//指压保持时间定义(ms)
const INT16U PrsKeepTimeTab[10]={5000,4700,4500,4000,3500,3000,2500,2000,1500,1000};
//捶打保持时间定义(ms)
const INT16U TtkKeepTimeTab[10]={4700,4500,4000,3500,3000,2500,2000,1500,1000,500};
#else
extern const INT16U PrsKeepTimeTab[];
extern const INT16U TtkKeepTimeTab[];
#endif
#ifdef UD_DRIVER
const INT8U UpPwmTable[10]={8,16,24,32,40,48,56,64,72,80};//{6,12,18,24,30,36,42,48,54,60};
const INT8U DownPwmTable[10]={6,12,18,24,30,36,42,48,54,60};//{4,8,12,16,20,24,28,32,36,40};
#else
extern const INT8U UpPwmTable[];
extern const INT8U DownPwmTable[];
#endif
#ifdef FB_DRIVER
const INT8U FrontPwmTable[10]={8,16,24,32,40,48,56,64,72,80};//{6,12,18,24,30,36,42,48,54,60};
const INT8U BackPwmTable[10]={6,12,18,24,30,36,42,48,54,60};
#else
extern const INT8U FrontPwmTable[];
extern const INT8U BackPwmTable[];
#endif
#define SETUP_MOMI_CW(spd_lvl) SetSpeed(spd_lvl,&MomiCwPwmSet,&MomiCcwPwmSet,MomiPwmTable)
#define SETUP_MOMI_CCW(spd_lvl) SetSpeed(spd_lvl,&MomiCcwPwmSet,&MomiCwPwmSet,MomiPwmTable)
#define SETUP_TATAKI(spd_lvl) SetSpeed(spd_lvl,&TatakiPwmSet,(void*)0,TatakiPwmTable)
#define SETUP_UP(spd_lvl) SetSpeed(spd_lvl,&UpPwmSet,&DownPwmSet,UpPwmTable)
#define SETUP_DOWN(spd_lvl) SetSpeed(spd_lvl,&DownPwmSet,&UpPwmSet,DownPwmTable)
#define SETUP_FRONT(spd_lvl) SetSpeed(spd_lvl,&FrontPwmSet,&BackPwmSet,FrontPwmTable)
#define SETUP_BACK(spd_lvl) SetSpeed(spd_lvl,&BackPwmSet,&FrontPwmSet,BackPwmTable)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -