PD132L 车检器分析
型号: PD132L | 固件: V1.09 | 日期: 2020-04-22 | 平台: STM8S003F3P6 (IAR EWSTM8)
原始代码: vd_detector/reference/PD132L_V1.09-STM8_20200422/(MAIN.c 579 行 + uart.c)
1. 平台与工程
| 项 |
值 |
| MCU |
STM8S003F3P6(8 位, 16KB Flash) |
| 工具链 |
IAR EWSTM8(.ewp/.eww/.ewd) |
| 时钟 |
外部晶振(CLK_SWR=0xB4,注释 12MHz),无分频 |
| 看门狗 |
IWDG(PR=6, RLR=0xFF → ~1.02s)+ WWDG(窗口,事件触发软复位) |
| 调试 |
UART1 输出代码存在(INIT_UART() 被注释,未启用) |
2. 硬件资源
| 引脚 |
功能 |
| PC3 |
LP 线圈捕获(TIM1_CC3 输入,下降沿) |
| PD4 |
RLY1 存在继电器(低有效) |
| PD3 |
RLY2 脉冲继电器(低有效) |
| PB5 |
LEDA 存在指示灯(低有效点亮) |
| PA3 / PD2 |
SA1 / SA2 灵敏度拨码 |
| PC4 / PC5 / PC6 |
SW3 / SW2 / SW1 功能拨码 |
| PD5 |
SW0 功能拨码 |
| PB4 / PD6 |
扩展/预留输出 |
3. 检测算法
3.1 频率测量
- TIM1 输入捕获(CCR3),下降沿→下降沿测周期;PSC=0x0009 → 捕获时钟 ÷10
- 每周期得
Xn;有效性窗口 320 < Xn < 1620(超出判线圈断开/异常)
- 归一化:
LPCNT = 32768 / Xn(BASE = 2^15),累加 LPCNT 个周期得 Value/CAPVD ≈ 32768
3.2 滤波
- IIR:
Flt_Reg = 79(增强滤波拨码开)/ 64(关),Δ×Flt_Reg>>8 双向(升/降分支)
- 滤波作用于 CAPVD(每 CAP_OK 节拍)
3.3 基线
- 无车时 100 次滑动平均:
ORG_CNT==99 → Origin = ORG_SUM/100
- 有车冻结(
!VD_FLAG 才更新)
3.4 进入/离开
- 进入:
CAPVD < Origin − dlt_ORG,dlt_ORG = Origin×SensTable[SensLevel]>>16;置 VD_FLAG/FLAG_IN
- 离开:
CAPVD > Origin − dlt_ORG,dlt_ORG = Origin×SensTable1[...]>>16;SET_ASB=1 用当前档,否则固定最高档 SensTable1[3]
3.5 灵敏度表
- 归一化基数 32768 → 进入阈值 Δf/f = 300/32768≈0.92% … 21/32768≈0.064%
- 档位:SENS=0~3(拨码 SA1/SA2 组合 0x00/0x04/0x08/0x0C 映射)
3.6 状态机/时序
- TIM2 5ms tick → 50ms 主节拍(TM1cnt≥10)
- FLAG_IN → FLAG_IN_PLUSE(进入脉冲 500ms = 10 tick)→ FLAG_OUT → FLAG_PLUSE(离开脉冲 500ms)
- 有限存在:
HOLD_TIME = 5×1200 = 6000 tick = 300s 超时 → WWDG 复位继电器
- 线圈断开:RF_FLAG 检测失败 → LOOP_OK=0 → 继电器断开 + LED 快闪(6 次×200ms)
4. 拨码与配置
| 位 |
开关 |
含义 |
| swok&0x80 |
SET_ASB |
离开阈值自动(用当前档)/手动(固定最高档) |
| swok&0x40 |
SET_FLT |
增强滤波(79/64) |
| swok&0x20 |
SET_PLUS |
脉冲输出模式(继电器2=进入脉冲) |
| swok&0x10 |
SET_HOLD |
有限存在 |
| swok&0x0C |
SA1/SA2 |
灵敏度 0~3 |
去抖:连续 6 次读取一致才生效;灵敏度变化 → WWDG 复位("灵敏档拨开重新改档位")
5. 参数速查表
| 参数 |
值 |
| 归一化基数 |
32768 (2^15) |
| Xn 有效窗口 |
320 ~ 1620 |
| IIR 系数 |
79 / 64 |
| 基线窗口 |
100 |
| 灵敏度表 |
{300,60,32,21} / {60,32,21,14} |
| tick |
5ms → 主逻辑 50ms |
| 脉冲宽 |
500ms |
| 有限存在 |
300s |
| 看门狗 |
IWDG 1.02s + WWDG |
| 上电延时 |
800ms |
6. 版本特性
- V1.01: STM8 移植,"功能与 132T 一样"
- V1.03: 微调,"无存在改为 5 分钟"
- V1.09: 线圈断开时线圈上电继电器断开
7. 移植注意事项
- BASE=2^15=32768 → 灵敏度表量纲与 131072/524288 基数的产品不同,照搬数值会错 4~16 倍
- Xn 窗口随捕获时钟定标,换 MCU 必须重算
- 离开阈值"固定最高档"语义(SET_ASB 关)与 DLD 系"当前档滞回"不同