208 lines
7.7 KiB
C
208 lines
7.7 KiB
C
#ifndef __MAIN__H
|
|
#define __MAIN__H
|
|
#include <stdlib.h>
|
|
#include "bsp.h"
|
|
|
|
|
|
#define USE_FILE_SYSTEM 1
|
|
#define SDCARD_BLOCK_MAX (10000)
|
|
|
|
#define OSC_CNT 40
|
|
#define SLOPE_CNT 20
|
|
|
|
#define SLOPE_VPT 1000
|
|
#define PRESS_VPT 3
|
|
#define FOLLOW_VPT 10
|
|
#define SHIELD_VPT 1.5
|
|
#define EME_STOP_VPT 4000
|
|
|
|
#define CENTRE_FRONT_CNT 0
|
|
#define CENTRE_FRONT_SUM 0
|
|
#define CENTRE_FRONT_VPT 0
|
|
#define CENTRE_VPT 2000
|
|
|
|
#define STOP_TIME_MS 500
|
|
#define CENT_TIME_MS 200
|
|
#define RUN_TIME_MS 0
|
|
#define EME_START_MS 0
|
|
#define EME_STOP_MS 2000
|
|
#define SLOPE_START_MS 3000
|
|
|
|
#define TRAVEL_TIME_MS 50000
|
|
|
|
#define PEAK 1430 //最高高度mm
|
|
#define VALLEY 1000 //最低高度mm
|
|
|
|
/*高度转应力表索引: 补偿表431点覆盖1000~1430mm(430个步进), h<1000时钳位到0防止越界*/
|
|
#define HEIGHT_TO_IDX(h) ((h) < 1000 ? 0 : ((h) - 1000))
|
|
|
|
#define BDC_STOP() (SET_TWIN_BIT0(),SET_TWIN_BIT1())
|
|
#define BDC_DOWN() (SET_TWIN_BIT0(),CLR_TWIN_BIT1())
|
|
#define BDC_UP() (SET_TWIN_BIT1(),CLR_TWIN_BIT0())
|
|
|
|
//#define BDC_STOP() Motor_Control(MOTOR_CMD_STOP)
|
|
//#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD)
|
|
//#define BDC_DOWN() Motor_Control(MOTOR_CMD_REVERSE)
|
|
|
|
/*控制等级*/
|
|
typedef enum {
|
|
LEVEL_1 = 1, // 一级
|
|
LEVEL_2 = 2, // 二级
|
|
LEVEL_3 = 3, // 三级
|
|
LEVEL_4 = 4, // 四级
|
|
LEVEL_5 = 5 // 五级
|
|
}ControlLevel_m;
|
|
|
|
/*设备阈值*/
|
|
typedef struct{
|
|
int32_t Slope_VPT;
|
|
int32_t Stop_VPT;
|
|
|
|
int32_t LeftUpVPT;//左上设备阈值
|
|
int32_t LeftLowVPT;//左下设备阈值
|
|
int32_t RightUpVPT;//右上设备阈值
|
|
int32_t RightLowVPT;//右下设备阈值
|
|
|
|
int32_t LeftUpShieldVPT; //左上屏蔽阈值
|
|
int32_t LeftLowShieldVPT; //左下屏蔽阈值
|
|
int32_t RightUpShieldVPT; //右上屏蔽阈值
|
|
int32_t RightLowShieldVPT; //右下屏蔽阈值
|
|
|
|
int32_t LeftUp_Org_AdZero;//左上设备原始AD零点
|
|
int32_t LeftLow_Org_AdZero;//左下设备原始AD零点
|
|
int32_t RightUp_Org_AdZero;//右上设备原始AD零点
|
|
int32_t RightLow_Org_AdZero;//右下设备原始AD零点
|
|
}ADTrack_t;
|
|
typedef struct{//电机参数
|
|
bool InitialFlag;//初始标志位
|
|
bool RestFlag;
|
|
bool OverheatFlag;//过热标志: 收到过热帧后置true, 持续下降触发控制盒复位
|
|
bool CaliFlag;
|
|
bool LoopOne;//循环一次标志位
|
|
int16_t Current_height;//当前高度mm(控制盒上报1000~1430)
|
|
int16_t CaliNum;//标校数量
|
|
int32_t LU_HeightStress[431];//左上传感器对应高度应力
|
|
int32_t LL_HeightStress[431];//左下传感器对应高度应力
|
|
int32_t RU_HeightStress[431];//右上传感器对应高度应力
|
|
int32_t RL_HeightStress[431];//右下传感器对应高度应力
|
|
}MotorPara_t;
|
|
/*数据读取状态机*/
|
|
typedef enum {
|
|
READ_STATUS_IDLE,
|
|
READ_STATUS_START,
|
|
READ_STATUS_LEFTUP,
|
|
READ_STATUS_WAIT_LEFTUP,
|
|
READ_STATUS_LEFTLOW,
|
|
READ_STATUS_WAIT_LEFTLOW,
|
|
READ_STATUS_RIGHTUP,
|
|
READ_STATUS_WAIT_RIGHTUP,
|
|
READ_STATUS_RIGHTLOW,
|
|
READ_STATUS_WAIT_RIGHTLOW,
|
|
READ_STATUS_SUPPORT_CONT
|
|
}ReadStatus_m;
|
|
|
|
/*主程序状态机*/
|
|
typedef enum {
|
|
APP_STATUS_IDLE,
|
|
APP_STATUS_ON,
|
|
APP_STATUS_OFF,
|
|
APP_STATUS_START_BEEP,
|
|
APP_STATUS_MOTOR_INIT,
|
|
APP_STATUS_ZERO_MARKING,
|
|
APP_STATUS_WAIT_MOTOR_INIT,
|
|
APP_STATUS_WAIT_MOTOR_CALI_UP,
|
|
APP_STATUS_WAIT_MOTOR_CALI_DOWN,
|
|
APP_STATUS_WAIT_STEADY,
|
|
APP_STATUS_END_BEEP,
|
|
APP_STATUS_HEIGHT_CONTROL,
|
|
APP_STATUS_POWER_RESET,//上电复位流程: 下降触发控制盒复位, 复位完成后编码器基准一致再进入校准
|
|
}AppStatus_m;
|
|
|
|
typedef struct{
|
|
__IO uint16_t rPayLen;
|
|
__IO bool HeaderFrame;
|
|
__IO uint16_t RxLen;
|
|
uint8_t RxBuff[10];
|
|
}Uart1Rx_t;
|
|
|
|
typedef struct{
|
|
__IO uint16_t rPayLen;
|
|
__IO bool HeaderFrame;
|
|
__IO uint16_t RxLen;
|
|
uint8_t RxBuff[4];
|
|
}Uart3Rx_t;
|
|
|
|
typedef struct {
|
|
AppStatus_m Status;//状态
|
|
ReadStatus_m RStatus;
|
|
AppPara_T Para;
|
|
Uart1Rx_t RxUart1Data;
|
|
Uart3Rx_t RxUart3Data;
|
|
|
|
ADTrack_t ADTrack;
|
|
MotorPara_t MotorPara;
|
|
uint32_t TD1mSDelayCnt;
|
|
uint32_t Read1mSDelayCnt;
|
|
uint32_t Uart1Delay1mSCnt;
|
|
uint32_t Uart3RxTimeOut1mSCnt;
|
|
uint32_t StopCollDelay1mSCnt;
|
|
uint32_t RunCollDelay1mSCnt;
|
|
uint32_t CentCollDelay1mSCnt;
|
|
uint32_t EmergencyDelay1mSCnt;
|
|
uint32_t SlopeCollDelay1mSCnt;
|
|
uint32_t CailUp1mSCnt;
|
|
uint32_t HeightContRolCnt;
|
|
uint32_t RestStop1mSCnt;//复位停顿计时: 收到复位帧后先停止电机, 计时结束再下降触发复位
|
|
uint32_t PwRstStop1mSCnt;//上电复位到底停顿计时: 下降到底后先停止电机, 计时结束再继续下降触发复位
|
|
uint16_t PwRstNoChg1mSCnt;//上电复位下降中高度无变化计时: 持续1秒无变化判定到底
|
|
int16_t PwRstLastHeight;//上电复位下降中上一次高度值, 用于比较高度是否变化
|
|
int16_t PwRstRiseRef;//上电复位反弹判定参考高度: 只跟随下降/持平更新(只跟跌不跟涨), 高度较其反升>1cm判定碰撞
|
|
int16_t PwRstMinHeight;//上电复位下降过程历史最低高度: 确认到底仅限接近最低点, 停在高处=被障碍物/碰撞保护托住
|
|
bool PwRstHtSeen;//上电复位已收到首帧有效高度标志: 高度基准就绪后才启动到底检测(防止首帧误判反弹)
|
|
uint8_t PwRstReboundCnt;//上电复位连续反弹计数: 首次反弹停1秒恢复下降观察, 再次反弹才转点动(到底确认时清零)
|
|
uint16_t PwRstInch1mSCnt;//上电复位点动下降节奏计时: 反弹后改为脉冲式下降减小触底冲击
|
|
uint16_t PwRstInchLastHeight;//上电复位点动周期起点高度: 周期结束时比较判断该周期是否移动
|
|
uint8_t PwRstInchNoMvCnt;//上电复位点动无位移周期计数: 连续2个点动周期无位移判定到底
|
|
bool PwRstErrValid;//上电复位报错帧已处理标志: 同一报错码连发只停顿一次, 防止连发广播把停顿无限续期
|
|
uint16_t PwRstErrCode;//上电复位已处理的报错码(帧[2]<<8|帧[3]): 不同报错码视为新报错重新停顿
|
|
uint16_t PwRstSamp1mSCnt;//上电复位高度采样计时: 每秒打印一次当前高度, 展示下降全程高度曲线
|
|
uint16_t PwRstRiseCandCnt;//上电复位反弹候选持续计时: 反升>1cm持续300ms才确认反弹, 滤除瞬时抖动毛刺
|
|
int16_t PwRstRiseCandMax;//上电复位反弹候选期间最高高度: 确认时高度须仍接近最高点(未回落)
|
|
uint16_t PwRstStartDlyCnt;//上电复位开始前延时: 等电机控制盒自身初始化完成(整体断电再上电时控制盒未就绪, 立即下降会因状态切换抖动误触发碰撞保护)
|
|
bool PwRstMovedFlag;//上电复位已发生位移标志: 高度变化过(电机已响应下降指令)后才允许堵转到底判定, 防止延时/控制盒软启动期间高度停滞误判到底
|
|
uint8_t FeedDogDlyCnt;
|
|
|
|
bool CaliZeroFlag;//校零标志位
|
|
bool PowerResetFlag;//上电复位流程标志: 上电复位中收到过复位帧, 收到高度帧(复位完成)后进入校准
|
|
bool PwRstBottomFlag;//上电复位最终到底标志: 点动下降中高度1秒无变化才确认, 之后点动下降触发复位帧
|
|
bool PwRstInchMode;//上电复位点动模式: 发生反弹后生效, 接近反弹高度时改脉冲式下降减小触底冲击
|
|
bool SideFlag;//侧压标志位
|
|
bool UpFlag;//上升标志位
|
|
bool DownFlag;//下降标志位
|
|
bool StopFlag;//停止标志位
|
|
bool EmeFlag;//应急标志位
|
|
bool LeftRunFalg;
|
|
bool RightRunFalg;
|
|
bool CentreRunFalg;
|
|
|
|
bool LeftUpCS1237ReadEndFlag;
|
|
bool LeftLowCS1237ReadEndFlag;
|
|
bool RightUpCS1237ReadEndFlag;
|
|
bool RightLowCS1237ReadEndFlag;
|
|
|
|
int32_t LeftUpCS1237_TrendArray[OSC_CNT];
|
|
int32_t LeftLowCS1237_TrendArray[OSC_CNT];
|
|
int32_t RightUpCS1237_TrendArray[OSC_CNT];
|
|
int32_t RightLowCS1237_TrendArray[OSC_CNT];
|
|
|
|
int32_t LeftUpCS1237_SlopeArray[SLOPE_CNT];
|
|
int32_t LeftLowCS1237_SlopeArray[SLOPE_CNT];
|
|
int32_t RightUpCS1237_SlopeArray[SLOPE_CNT];
|
|
int32_t RightLowCS1237_SlopeArray[SLOPE_CNT];
|
|
|
|
bool WaitFlag;
|
|
}AppDetect_t;
|
|
extern AppDetect_t App;
|
|
|
|
#endif
|