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

📄 mass.h

📁 uCOS在PIC芯片中的移植:以PIC24HJ64GP210为例进行uCOS在Microchip芯片中的移植
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -