feat: 光耦有信号时红灯呼吸加速 (~1.9s→~0.9s), 复位模式除外
This commit is contained in:
@@ -83,20 +83,26 @@ uint8_t g_rs485_id = 0;
|
|||||||
#define OPT_IN1 (GPIOB_ReadPortPin(GPIO_Pin_10))
|
#define OPT_IN1 (GPIOB_ReadPortPin(GPIO_Pin_10))
|
||||||
|
|
||||||
/*===========================================================================
|
/*===========================================================================
|
||||||
* LEDB 红色呼吸灯 (PB23, PWM11) — 快速心跳指示 (~2s 周期)
|
* LEDB 红色呼吸灯 (PB23, PWM11) — 心跳指示
|
||||||
* PWM freq ≈ 60MHz / (PWM_CLK_DIV * 128) ≈ 5.86kHz @DIV=80
|
* PWM freq ≈ 60MHz / (PWM_CLK_DIV * 128) ≈ 5.86kHz @DIV=80
|
||||||
* 周期 = 16步渐亮 + 3tick高亮 + 16步渐灭 + 3tick低亮
|
* 无光耦信号: 周期 ≈ 16步×2 + 3tick×2 ≈ 1.9s (DUTY_STEP=8, HOLD=3)
|
||||||
* ≈ (16*50ms)*2 + 150ms*2 ≈ 1.9s
|
* 光耦有信号: 周期 ≈ 8步×2 + 1tick×2 ≈ 0.9s (DUTY_STEP=16, HOLD=1)
|
||||||
|
* 复位模式(6)除外,光耦有信号不加速
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
#define PWM_CLK_DIV 80
|
#define PWM_CLK_DIV 80
|
||||||
#define PWM_CYCLE 128 // 7-bit 分辨率 (0~127)
|
#define PWM_CYCLE 128 // 7-bit 分辨率 (0~127)
|
||||||
#define BREATH_STEP_DELAY 1 // 每 50ms 更新一次
|
#define BREATH_STEP_DELAY 1 // 每 50ms 更新一次
|
||||||
#define BREATH_DUTY_STEP 8 // 每步跳 8 级占空比
|
#define BREATH_DUTY_STEP 8 // 每步跳 8 级占空比
|
||||||
|
#define BREATH_HOLD_TICKS 3 // 高/低电平保持 tick 数
|
||||||
#define BREATH_FADE_IN 0
|
#define BREATH_FADE_IN 0
|
||||||
#define BREATH_HOLD_HIGH 1
|
#define BREATH_HOLD_HIGH 1
|
||||||
#define BREATH_FADE_OUT 2
|
#define BREATH_FADE_OUT 2
|
||||||
#define BREATH_HOLD_LOW 3
|
#define BREATH_HOLD_LOW 3
|
||||||
|
|
||||||
|
/* 光耦有信号时加速参数 (周期 ~1s) */
|
||||||
|
#define BREATH_OPTO_DUTY_STEP 16 // 步长加倍 → 渐亮/渐灭各 8 步
|
||||||
|
#define BREATH_OPTO_HOLD_TICKS 1 // 保持 50ms
|
||||||
|
|
||||||
static uint8_t g_breath_phase = BREATH_FADE_IN;
|
static uint8_t g_breath_phase = BREATH_FADE_IN;
|
||||||
static uint8_t g_breath_duty = 0;
|
static uint8_t g_breath_duty = 0;
|
||||||
static uint8_t g_breath_tick = 0;
|
static uint8_t g_breath_tick = 0;
|
||||||
@@ -1335,49 +1341,62 @@ void TMR1_IRQHandler(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--- LEDB 红色呼吸灯 (PWM11, 50ms tick, ~1.9s 心跳周期) ---*/
|
/*--- LEDB 红色呼吸灯 (PWM11, 50ms tick, 光耦有信号时加速 ~1s) ---*/
|
||||||
|
{
|
||||||
|
uint8_t _step, _hold;
|
||||||
|
|
||||||
|
/* 非复位模式下光耦有信号 → 红灯快闪 (现场判断光耦是否正常) */
|
||||||
|
if (g_opt_trigger && g_output_radar_mode != OUTPUT_MODE_LOOP_X_RESET) {
|
||||||
|
_step = BREATH_OPTO_DUTY_STEP;
|
||||||
|
_hold = BREATH_OPTO_HOLD_TICKS;
|
||||||
|
} else {
|
||||||
|
_step = BREATH_DUTY_STEP;
|
||||||
|
_hold = BREATH_HOLD_TICKS;
|
||||||
|
}
|
||||||
|
|
||||||
g_breath_tick++;
|
g_breath_tick++;
|
||||||
switch (g_breath_phase) {
|
switch (g_breath_phase) {
|
||||||
case BREATH_FADE_IN: // 渐亮 0 → max, ~800ms
|
case BREATH_FADE_IN:
|
||||||
if (g_breath_tick >= BREATH_STEP_DELAY) {
|
if (g_breath_tick >= BREATH_STEP_DELAY) {
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
if (g_breath_duty + BREATH_DUTY_STEP >= PWM_CYCLE) {
|
if (g_breath_duty + _step >= PWM_CYCLE) {
|
||||||
g_breath_duty = PWM_CYCLE - 1;
|
g_breath_duty = PWM_CYCLE - 1;
|
||||||
g_breath_phase = BREATH_HOLD_HIGH;
|
g_breath_phase = BREATH_HOLD_HIGH;
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
} else {
|
} else {
|
||||||
g_breath_duty += BREATH_DUTY_STEP;
|
g_breath_duty += _step;
|
||||||
}
|
}
|
||||||
PWM11_ActDataWidth(g_breath_duty);
|
PWM11_ActDataWidth(g_breath_duty);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BREATH_HOLD_HIGH: // 最亮保持 ~150ms
|
case BREATH_HOLD_HIGH:
|
||||||
if (g_breath_tick >= 3) {
|
if (g_breath_tick >= _hold) {
|
||||||
g_breath_phase = BREATH_FADE_OUT;
|
g_breath_phase = BREATH_FADE_OUT;
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BREATH_FADE_OUT: // 渐灭 max → 0, ~800ms
|
case BREATH_FADE_OUT:
|
||||||
if (g_breath_tick >= BREATH_STEP_DELAY) {
|
if (g_breath_tick >= BREATH_STEP_DELAY) {
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
if (g_breath_duty <= BREATH_DUTY_STEP) {
|
if (g_breath_duty <= _step) {
|
||||||
g_breath_duty = 0;
|
g_breath_duty = 0;
|
||||||
g_breath_phase = BREATH_HOLD_LOW;
|
g_breath_phase = BREATH_HOLD_LOW;
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
} else {
|
} else {
|
||||||
g_breath_duty -= BREATH_DUTY_STEP;
|
g_breath_duty -= _step;
|
||||||
}
|
}
|
||||||
PWM11_ActDataWidth(g_breath_duty);
|
PWM11_ActDataWidth(g_breath_duty);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BREATH_HOLD_LOW: // 最暗保持 ~150ms
|
case BREATH_HOLD_LOW:
|
||||||
if (g_breath_tick >= 3) {
|
if (g_breath_tick >= _hold) {
|
||||||
g_breath_phase = BREATH_FADE_IN;
|
g_breath_phase = BREATH_FADE_IN;
|
||||||
g_breath_tick = 0;
|
g_breath_tick = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*--- 线圈载波检测 & 继电器输出刷新 (每 5ms) ---*/
|
/*--- 线圈载波检测 & 继电器输出刷新 (每 5ms) ---*/
|
||||||
if(loop1_RF_FLAG)
|
if(loop1_RF_FLAG)
|
||||||
|
|||||||
Reference in New Issue
Block a user