优化上电复位到底检测与碰撞反弹判定:新增每秒高度采样日志、反弹300ms持续确认滤除急停抖动毛刺、上电先延时2秒等控制盒初始化、延时期间排除堵转判定并增加已位移前置条件;报错帧按错误码沿触发处理防停顿无限续期
This commit is contained in:
@@ -33,6 +33,7 @@ typedef struct{
|
||||
|
||||
/* 控制盒信息帧→复位→恢复 观测打印: ISR推事件, 主循环打印完整时间线(未知帧全记录用于捕捉过热报错) */
|
||||
void Uart3ErrLog_Push(uint8_t type, const uint8_t *pFrame, uint16_t height); /* type:0首次信息帧 1复位中回应 2复位完成 3未知帧 */
|
||||
void Uart3ErrLog_PushBottom(uint8_t type, uint16_t height); /* 上电复位到底判定事件(type:4堵转/5反弹, 8高度采样, 1ms例程调用) */
|
||||
void Uart3ErrLogLoopHandler(void); /* 主循环调用: 打印报错/复位事件 */
|
||||
|
||||
void DebugUartIRQ(char Data);
|
||||
@@ -46,6 +47,7 @@ void Dbg1msRoutine(void);
|
||||
#define DBG_ARRAY(ARRAY,SIZE)
|
||||
|
||||
#define Uart3ErrLog_Push(type, pFrame, height) (0)
|
||||
#define Uart3ErrLog_PushBottom(type, height) (0)
|
||||
#define Uart3ErrLogLoopHandler() (0)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -115,6 +115,7 @@ typedef enum {
|
||||
APP_STATUS_WAIT_STEADY,
|
||||
APP_STATUS_END_BEEP,
|
||||
APP_STATUS_HEIGHT_CONTROL,
|
||||
APP_STATUS_POWER_RESET,//上电复位流程: 下降触发控制盒复位, 复位完成后编码器基准一致再进入校准
|
||||
}AppStatus_m;
|
||||
|
||||
typedef struct{
|
||||
@@ -152,9 +153,29 @@ typedef struct {
|
||||
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;//下降标志位
|
||||
|
||||
Reference in New Issue
Block a user