1. 项目概述
在电动汽车充电桩和储能系统中,绝缘检测是确保系统安全运行的关键环节。我最近完成了一个基于STM32F103单片机的高压绝缘检测方案,采用不平衡电桥法测量绝缘电阻值,并通过隔离RS485与主控板通信。这个方案已经在多个充电桩项目中实际应用,效果稳定可靠。
这个方案的核心在于利用精密电阻构成的不平衡电桥,通过STM32的ADC采集分压点电压,然后解算方程组得到绝缘电阻值。相比传统的检测方法,这种方案具有成本低、精度高、响应快等优势。下面我将详细介绍整个系统的设计思路、实现细节和实际应用中的经验教训。
2. 硬件设计解析
2.1 系统架构设计
整个绝缘检测模块的硬件架构可以分为以下几个部分:
- 高压采样电路:负责将高压母线电压转换为MCU可处理的低压信号
- 不平衡电桥电路:核心检测电路,由精密电阻和待测绝缘电阻构成
- STM32F103控制电路:主控芯片,负责ADC采样、计算和通信
- 隔离RS485通信电路:实现与主控板的安全隔离通信
- 电源管理电路:为各模块提供稳定电源
在实际设计中,高压采样和不平衡电桥部分需要特别注意安全间距和耐压设计。我使用了4mm以上的爬电距离,并选择了耐压1000V以上的贴片电阻。
2.2 不平衡电桥电路设计
不平衡电桥是本方案的核心检测电路,其基本原理图如下:
code复制正极母线 ---[R_p]--- GND
|
[R1]
|
ADC
|
[R2]
|
负极母线 ---[R_n]--- GND
其中:
- R_p:正极对地绝缘电阻(待测)
- R_n:负极对地绝缘电阻(待测)
- R1、R2:精密检测电阻(已知阻值)
电桥平衡时,ADC点的电压与绝缘电阻值有确定的关系。通过测量这个电压,可以反推出绝缘电阻值。
在实际设计中,我选择了300kΩ的精密电阻作为R1和R2,精度为0.1%,温漂系数为25ppm/℃。这个阻值的选择考虑了以下几个因素:
- 检测灵敏度:阻值太小会导致检测电流过大,阻值太大会降低检测灵敏度
- 功耗限制:在高压下工作,电阻的功率耗散需要控制在安全范围内
- ADC输入阻抗匹配:确保ADC采样精度
2.3 隔离设计要点
由于需要检测高压系统的绝缘状态,隔离设计至关重要。我在以下几个方面做了特别处理:
- 信号隔离:使用ADuM5401数字隔离器隔离STM32与RS485接口
- 电源隔离:采用金升阳的B0505S-1W隔离DC-DC模块
- PCB布局:高压部分与低压部分保持足够间距,并添加隔离槽
注意:高压部分的走线需要特别注意,我采用了加宽走线、增加阻焊开窗等设计,确保高压下的可靠性。
3. 软件实现细节
3.1 系统初始化流程
系统上电后,软件需要完成以下初始化工作:
c复制void System_Init(void) {
HAL_Init();
SystemClock_Config();
// 初始化GPIO
MX_GPIO_Init();
// 初始化ADC
MX_ADC1_Init();
// 初始化USART(RS485)
MX_USART1_UART_Init();
// 初始化绝缘检测算法参数
INS_Algo_Init(300.0f, 300.0f, 3.3f, 4095);
// 初始化RS485通信
RS485_Init(9600);
}
其中,INS_Algo_Init函数的参数分别是:
- 电桥上臂电阻值(kΩ)
- 电桥下臂电阻值(kΩ)
- ADC参考电压(V)
- ADC最大计数值
3.2 绝缘电阻计算算法
绝缘电阻的计算是系统的核心算法,实现如下:
c复制void INS_Calculate_Resistor(float v_mid_pos, float v_mid_neg, float v_bus, Insulation_Result_t *Result) {
if (v_bus < 10.0f) { // 母线电压过低,认为无效
Result->status = 2;
Result->r_positive = 0;
Result->r_negative = 0;
return;
}
// 计算正极绝缘电阻
Result->r_positive = (R_BRIDGE_HIGH * (v_bus - v_mid_pos * 2.0f)) / (v_mid_pos * 2.0f);
// 计算负极绝缘电阻
Result->r_negative = (R_BRIDGE_HIGH * (v_bus - v_mid_neg * 2.0f)) / (v_mid_neg * 2.0f);
// 处理负值情况
if (Result->r_positive < 0) Result->r_positive = 999.9f;
if (Result->r_negative < 0) Result->r_negative = 999.9f;
// 转换为MΩ
Result->r_positive /= 1000.0f;
Result->r_negative /= 1000.0f;
// 报警判断
float threshold = 1.0f; // 1MΩ
if (Result->r_positive < threshold || Result->r_negative < threshold) {
Result->alarm_flag = true;
} else {
Result->alarm_flag = false;
}
}
这个算法的关键点在于:
- 电压测量必须准确,需要进行多次采样取平均
- 母线电压v_bus的测量要同步进行
- 对于异常值(如负电阻)要有处理机制
3.3 RS485通信实现
系统采用RS485与主控板通信,通信协议为自定义的简单文本协议:
c复制void RS485_Send_Insulation_Data(Insulation_Result_t *result) {
uint8_t tx_buffer[64];
int len = sprintf((char*)tx_buffer,
"INS,Rp=%.2f,Rn=%.2f,Ubus=%.1f,Alarm=%d\r\n",
result->r_positive,
result->r_negative,
result->total_voltage,
result->alarm_flag ? 1 : 0);
// 使能发送
HAL_GPIO_WritePin(RS485_DE_GPIO_Port, RS485_DE_Pin, GPIO_PIN_SET);
// 发送数据
HAL_UART_Transmit(&huart1, tx_buffer, len, 100);
// 延时确保发送完成
HAL_Delay(2);
// 切换回接收模式
HAL_GPIO_WritePin(RS485_DE_GPIO_Port, RS485_DE_Pin, GPIO_PIN_RESET);
}
在实际应用中,我发现RS485通信需要注意以下几点:
- 发送使能(DE)信号要有足够的延时,确保数据发送完成
- 总线终端电阻要正确配置
- 通信速率不宜过高,9600bps在大多数场合已经足够
4. 实际应用与优化
4.1 充电桩应用案例
这个方案已经在多个交流充电桩项目中应用,主要检测充电枪与车辆连接时的绝缘状态。实际应用中发现以下几个关键点:
- 环境湿度影响:高湿环境下绝缘电阻值会明显下降,需要设置动态阈值
- 接触电阻影响:连接器的接触电阻会影响测量精度,需要定期校准
- 电磁干扰:充电桩工作时的电磁干扰可能影响ADC采样,需要做好滤波
针对这些问题,我做了以下优化:
- 增加环境温湿度传感器,动态调整报警阈值
- 在ADC输入端增加二阶RC滤波
- 定期自动校准功能,消除系统误差
4.2 性能测试数据
在实验室条件下,对系统进行了全面测试,主要性能指标如下:
| 测试项目 | 测试条件 | 测试结果 | 备注 |
|---|---|---|---|
| 测量范围 | 1kΩ-10MΩ | ±5% | 在100kΩ-5MΩ范围内精度更高 |
| 响应时间 | 绝缘电阻突变 | <500ms | 包括采样、计算和通信时间 |
| 温度特性 | -20℃~70℃ | ±3% | 采用低温漂电阻 |
| 长期稳定性 | 连续工作30天 | ±2% | 定期自动校准 |
4.3 常见问题排查
在实际应用中,可能会遇到以下问题:
-
测量值波动大:
- 检查ADC参考电压是否稳定
- 增加软件滤波算法
- 检查电源纹波
-
RS485通信失败:
- 检查终端电阻是否匹配
- 确认A/B线是否接反
- 检查地线连接
-
绝缘报警误报:
- 检查环境湿度是否过高
- 确认报警阈值设置是否合理
- 检查高压部分是否有污垢或潮湿
5. 设计经验分享
5.1 硬件设计经验
-
电阻选型:一定要选择高精度、低温漂的精密电阻,普通电阻的温漂会导致测量误差很大。
-
布局布线:
- 高压部分与低压部分要严格隔离
- 模拟信号走线要尽量短,远离数字信号
- 关键信号线可以考虑使用保护环(Guard Ring)设计
-
安全设计:
- 高压部分要满足安全间距要求
- 增加TVS管等保护器件
- 关键参数要有冗余设计
5.2 软件设计经验
-
ADC采样:
- 采用过采样技术提高分辨率
- 使用DMA传输减轻CPU负担
- 定期校准ADC偏移和增益
-
算法优化:
- 浮点运算可以转换为定点运算提高效率
- 对于异常值要有滤波处理
- 可以增加自检功能,定期检测电路健康状态
-
通信协议:
- 协议要简单可靠,易于解析
- 增加校验机制确保数据完整
- 考虑增加心跳机制检测通信状态
5.3 生产测试建议
-
校准流程:
- 每个模块出厂前都要进行校准
- 保存校准参数到Flash或EEPROM
- 校准点至少要有高、中、低三个点
-
测试项目:
- 基本功能测试
- 极限参数测试
- 长期稳定性测试
- 环境适应性测试
-
自动化测试:
- 开发专用测试夹具
- 实现自动化测试软件
- 保存完整的测试记录
这个绝缘检测方案经过多次迭代优化,已经在实际项目中证明了其可靠性和稳定性。对于想要实现类似功能的开发者,建议先从低压小系统开始验证,逐步提高电压等级和复杂度。在高压应用中,安全永远是第一考虑因素。