1. PICREF-2智能充电器通信协议解析
在嵌入式电源管理系统中,可靠的数据通信是实现智能充电控制的基础。PICREF-2充电器采用RS-232串行通信与主机交互,其协议设计体现了典型的工业控制特征。物理层采用9600波特率、8数据位、1停止位、无校验位的配置,这种参数组合在1990年代是嵌入式设备的黄金标准——既能满足实时性要求,又避免了高速通信带来的信号完整性问题。
通信协议的核心是二进制数据帧结构,与ASCII协议相比,二进制编码显著提高了数据传输效率。实测表明,在相同波特率下,二进制协议的数据吞吐量比文本协议提升40%以上。每个消息帧包含:
- 命令字节(1字节)
- 数据字段(N字节)
- 校验和(1字节)
校验和采用经典的"求和取反"算法:将所有字节相加后保留低8位,再进行按位取反。这种校验方式在8位MCU上计算效率极高,PIC16C72执行完整校验计算仅需12个指令周期。但需要注意,当数据字节和为0xFF时会出现误判,这是所有简单校验算法的通病。
关键细节:主机发送的每个字节都会由充电器回显,这种单握手机制避免了在资源有限的MCU上使用中断。实际调试中发现,若主机在1秒内未收到回显,必须重发数据,这个超时值是通过数百次测试得出的最优平衡点。
2. 主从架构下的指令集设计
2.1 系统使能指令(04h)
这是最核心的控制指令,其数据字段包含两个关键字节:
typedef struct { uint8_t mode :4; // 充放电模式 uint8_t chem :2; // 电池化学类型 uint8_t reserve:2; } SystemEnableByte;充电模式支持从空闲(0000)到双电池循环充放电(1111)共16种组合。特别值得注意的是0011模式(单次充放电)与1111模式(循环充放电)的区别——后者需要硬件支持实时时钟,这在早期的PIC16C7x系列上是通过软件定时器模拟实现的。
化学类型编码直接影响终止算法选择:
- 00(NiCd): 使用ΔV终止
- 01(NiMH): 建议ΔT/Δt终止
- 10(铅酸): 绝对电压终止
- 11(锂离子): 需要额外保护电路
2.2 配置指令(2Ah)
包含15个配置参数,每个参数都经过精心编码:
- 温度参数:0.5°C/bit,采用二进制补码表示(-64°C ~ +63.5°C)
- 电压参数:58.5mV/bit(0-14.91V)
- 电流参数:10mA/bit(0-2.55A)
以快充电流设置为例,若需设置800mA,应发送:
fast_charge = 800 // 10 # 转换为80(0x50) checksum = (0x2A + 0x50) & 0xFF ^ 0xFF # 计算校验和 send([0x2A, 0x50, checksum])2.3 数据请求指令(15h)
该指令触发充电器返回14字节的实时数据,包含:
- 电池电压/电流(8位ADC量化值)
- 温度(带符号二进制)
- 系统状态字
- 错误标志位
电压值的转换公式为:
实际电压 = 读数 × 58.5mV在NiMH电池监控中,当检测到电压下降5mV(即ΔV=-0.005V)时,需要将其编码为:
encoded = int(-0.005 / 0.00585) & 0xFF # 约0xF73. 充电终止算法实现细节
3.1 ΔV终止法
这是NiCd电池的黄金标准,PICREF-2中采用滑动窗口算法:
- 每10秒记录电压采样值
- 计算最近3次采样的移动平均
- 当检测到负斜率超过阈值(默认5.85mV)时终止
实际调试中发现,在快充末期会出现电压波动,因此固件中添加了数字滤波:
#define FILTER_GAIN 0.2 filtered_voltage = (1-FILTER_GAIN)*filtered_voltage + FILTER_GAIN*raw_voltage;3.2 ΔT/Δt终止法
更适合NiMH电池,算法实现要点:
- 每分钟温度变化率计算:
ΔT/Δt = (T_now - T_1min) / 1min- 使用8位有符号数表示,分辨率0.5°C/min
- 典型阈值设为1°C/min(即编码值0x02)
3.3 安全保护机制
除算法终止外,系统强制包含三重保护:
- 最高电压限制(Fail-Safe)
- 温度窗口限制(-ΔT/+ΔT)
- 最大充电时间(18.2小时超时)
在PCB布局上,温度检测电路(10K NTC)应尽可能靠近电池触点,实测显示10cm引线会导致2°C的测量误差。
4. 硬件设计关键点
4.1 电源转换电路
Buck转换器采用PWM驱动方案:
- 开关管:IRF9540(P-MOSFET)
- 续流二极管:30BF20(200V/3A)
- 电感:100μH(2A饱和电流)
关键计算公式:
占空比 D = Vout / Vin 电感电流纹波 ΔIL = (Vin-Vout)×D / (L×fsw)当输入13.6V、输出8.4V(7节NiMH)时,20kHz开关频率下电感纹波电流约为300mA。
4.2 电流检测设计
采用50mΩ采样电阻+差分放大方案:
Vout = Ibat × 0.05 × GainLM6134运放设置为增益20倍,则2.55A满量程对应2.55V输出,正好匹配PIC的5V ADC输入范围。
5. 典型问题排查指南
5.1 通信失败
- 检查波特率误差:16MHz晶振产生的9600波特率实际为9615(误差0.16%)
- 验证握手信号:用逻辑分析仪捕捉TX/RX波形
- 测试校验和:人工计算示例帧验证固件算法
5.2 充电提前终止
- 确认ΔV阈值:NiCd建议5-10mV/节
- 检查温度传感器:25°C时应为10K±1%
- 测量电源纹波:超过100mVpp可能干扰ADC
5.3 电池检测异常
- 空载电压检测:电池电压低于1V/节时报错
- 接触电阻测试:充电路径总阻应<100mΩ
- 验证分压电阻:R5/R9/R10/R14精度需1%
在锂离子电池支持方面,原始设计需要特别注意——1997年时锂电保护IC尚未普及,现代改造建议增加TP4056等专用充电管理芯片,并通过光电隔离与PICREF-2交互。这种混合架构既保留了原有通信协议的优势,又符合现代锂电的安全规范。