扫码加入

  • 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于单片机的开尔文电路电阻测量WIFI上传设计

5小时前
103
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1、基于单片机的开尔文电路电阻测量WIFI上传设计

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081433

1.1、系统概述

电机绕组电阻是衡量电机制造质量、绕组铜损、接触可靠性以及运行安全的重要参数之一。在电机出厂检测、维修检测和现场点检中,绕组电阻的测量往往要求具备高精度、高重复性和抗干扰能力。由于被测电阻通常处于毫欧级(如本设计指标:200mΩ),若采用普通两线法测量,测试线缆电流夹具、接触电阻等引入的误差将显著放大,导致测量结果不可信。

因此本系统采用开尔文四线检测方式(Kelvin 4-wire),即“电流线”与“电压采样线”分离:两根粗线负责向被测绕组注入大电流,两根细线在绕组两端直接采样电压降。由于电压采样线几乎不流过电流,其线阻与接触电阻产生的电压降可以忽略,从根本上抑制了导线电阻和接触电阻的误差。这种方式非常适合毫欧级绕组电阻测量,尤其适用于大电流注入的电机绕组测试场景。

本系统在硬件上构建050A可调电流源,电流大小由外部05V模拟电压控制(可由旋钮电位器、PLC模拟量输出、上位机DAC等方式提供)。系统通过高精度采样测得绕组两端电压降与测试电流,并在单片机内计算电阻值:

  • R = V / I
    并将结果在本地显示(LCD或数码管/彩屏均可实现),同时通过WIFI模块上传到服务器或局域网平台,实现数据记录、追溯、趋势分析和远程管理。

由于本系统供电为AC220V且电流源高达50A,系统设计必须充分考虑安全隔离、过流保护、散热设计、电磁兼容与测量精度等工程问题。整个系统可分为以下部分:
1)功能设计与测量原理
2)电路设计(按模块详细说明)
3)程序设计(按模块详细说明)
4)关键算法与通信协议实现
5)可靠性与安全性设计要点


2、系统功能设计

2.1、采用开尔文四线法实现毫欧级绕组电阻测量

系统使用四线连接方式:

  • I+、I-(电流注入端):向电机绕组施加测试电流,线径粗、接触必须可靠
  • V+、V-(电压采样端):直接连接到绕组测量点,线径可较细,但连接位置要尽量靠近绕组端子,避免采到夹具或电流端子的压降

测量流程为:
1)设置测试电流(0~50A可调)
2)启动电流源输出
3)稳定后采样电流I与电压V
4)计算R=V/I(单位可转换为mΩ)
5)显示与上传结果

开尔文法的优势体现在:

  • 将线阻和夹具接触电阻从测量回路中剔除
  • 对毫欧级测量误差显著降低
  • 在大电流测试下仍能保持较高准确性

2.2、050A可调恒流源输出,外部05V控制电流大小

根据指标要求:电流源050A可调,且电流大小由外部05V电压控制。这意味着系统需要实现一种“电压→电流”的线性映射:

  • Vin = 0V → Iset = 0A
  • Vin = 5V → Iset = 50A
  • 线性比例:Iset(A) = Vin(V) × 10

实现方式通常为:

  • 0~5V输入由ADC采样得到设定值
  • 单片机通过DAC/PWM+滤波输出控制电流源控制端
  • 电流源内部采用闭环控制(采样实际电流,与设定值比较后调节功率器件

为了适应被测电机额定电流大小、绕组发热及安全测试需求,电流调节功能非常重要。例如:

  • 小电机绕组测量可设为5~10A,避免过热
  • 大电机绕组测量可设为30~50A,提高电压降、提升分辨率

2.3、本地显示:实时显示测试电流、电压降与电阻值

系统应在本地显示以下内容:

  • 设定电流 Iset(A)
  • 实测电流 Imeas(A)
  • 电压降 Vmeas(mV)
  • 计算电阻 R(mΩ)
  • 状态提示:待机/输出/稳定/完成/报警

显示方式可采用LCD1602OLED、TFT彩屏或数码管。由于需要显示单位与较多参数,推荐使用LCD12864或OLED/TFT更易排版。本设计以“字符屏/简易屏”为常见嵌入式方案进行说明,重点在于测量与上传功能实现。

2.4、WIFI数据上传:上传测量结果与设备状态

系统通过WIFI模块(如ESP8266/ESP32)将数据上传到服务器。可支持:

  • HTTP/HTTPS POST上传(REST API
  • MQTT发布(工业物联网常用)
  • TCP/UDP局域网数据上报(简化)

上传内容包含:

  • 时间戳(可由RTC或NTP获得)
  • Iset、Imeas、Vmeas、R
  • 设备ID、工位号(可配置)
  • 测试模式、报警状态(如过流/过温)

通过上传可实现:

  • 自动记录每次电机绕组电阻
  • 批量生产线追溯
  • 远程监控测试过程与结果
  • 数据可视化趋势分析

2.5、安全与保护:过流、过温、开路、短路与异常检测

由于系统具备0~50A输出能力,必须设计完善保护:

  • 过流保护:实际电流超过阈值快速关断
  • 过温保护:功率器件(MOS/IGBT)温度过高关断
  • 开路检测:输出开路时电流无法建立,提示连接异常
  • 短路检测:输出短路导致电流飙升,硬件快速保护
  • 采样异常检测:电压、电流采样超范围或不合理时报警

此外,AC220V供电必须具备:


3、电路设计

3.1、系统硬件总体结构

硬件主要模块划分如下:
1)AC220V输入与电源模块(隔离+多路供电)
2)大电流可调恒流源模块(0~50A)
3)电流采样模块(分流器/霍尔传感器
4)开尔文四线电压采样模块(mV级差分放大)
5)A/D采样模块(高精度ADC或单片机ADC+前端)
6)控制与运算模块(单片机核心)
7)0~5V外部电流设定输入模块(模拟量输入保护与采样)
8)本地显示模块(LCD/OLED)
9)按键/旋钮/启动控制模块(可选)
10)WIFI通信模块
11)保护与报警模块(继电器蜂鸣器温度传感器、故障指示灯)

下面对各模块进行详细说明。


3.2、AC220V输入与电源模块(隔离供电与安全设计)

系统供电方式为AC220V,必须进行隔离与稳压后提供控制电路所需的低压电源(如5V、3.3V、12V等),同时为恒流源功率级提供直流母线电源。典型供电架构为:

  • AC220V → EMI滤波 → 整流桥 → 大电容滤波 → DC母线(如310VDC)
  • DC母线 → 隔离式开关电源(如AC-DC模块) → 12V/5V/3.3V控制电源
  • 或 DC母线 → PFC/LLC → 低压大功率DC(用于电流源功率级)

考虑到050A输出可能需要较低电压的大电流(例如几伏到十几伏),通常会采用**工频变压器/大功率开关电源**将220VAC转换为低压大电流直流母线(例如020V、1000W级别),再通过恒流控制输出。更安全的方案是:

  • AC220V → 低压大电流隔离电源(例如12V/24V/36V) → 恒流源输出
    这样测试回路与市电完全隔离,显著提高人身安全与抗干扰性能。

关键保护与器件建议:

  • 输入端保险丝、NTC浪涌抑制、MOV压敏吸收浪涌
  • EMI滤波器(共模/差模电感+电容)降低传导干扰
  • 接地与屏蔽处理,避免高功率回路干扰采样与WIFI
  • 控制电源采用隔离电源模块,保证通信与外设安全

3.3、大电流可调恒流源模块(0~50A)

恒流源是系统核心执行模块。其基本目标是:在负载电阻变化或连接状态变化时,仍能保持输出电流等于设定值。由于被测电阻约200mΩ,当I=50A时电压降约:

  • V = I×R = 50A × 0.2Ω = 10V
    这说明恒流源需要提供至少十几伏的输出能力(考虑线损与余量)。功率约:
  • P = I²×R = 2500 × 0.2 = 500W
    因此功率级必须具备足够的功率余量与散热能力。

3.3.1、恒流源拓扑选择

常见实现方式:
1)线性恒流源(功耗巨大,不适合50A)
2)开关型降压恒流(推荐):DC-DC Buck恒流控制
3)可控整流/相控(不推荐用于高精度采样环境)

推荐使用开关型Buck恒流源

  • MOSFET/IGBT作为主开关器件
  • 电感作为能量储存,输出平滑
  • 通过电流采样+误差放大+PWM调制实现电流闭环
  • 效率高,适合大电流输出

3.3.2、功率器件与驱动

功率MOSFET需要满足:

驱动可以采用:

3.3.3、电流闭环控制

恒流控制需要:

  • 实测电流I_meas(由分流器/霍尔获取)
  • 设定电流I_set(由外部0~5V采样得到)
  • 误差:e = I_set - I_meas
  • 控制器:PI调节得到PWM占空比
  • 通过PWM调整输出,使电流趋于设定值

闭环要点:

  • 电流采样必须快速且抗噪声
  • 控制环路需要稳定(PI参数合理,避免振荡)
  • 在不同负载与线缆条件下仍能稳定输出

3.4、电流采样模块(分流器/霍尔传感器)

电阻测量需要同时测得电流与电压。电流测量可采用:

3.4.1、分流器(Shunt)方案

使用低阻值大功率分流电阻(例如100μΩ~1mΩ)串联在电流回路中,通过测量其两端毫伏级电压来计算电流

  • I = Vshunt / Rshunt

优点:

  • 精度高、线性好
  • 成本相对可控
  • 温漂可通过选用合金分流器与温度补偿改善

缺点:

  • 有功耗(I²R)与发热
  • 需要差分放大/高精度ADC采样

3.4.2、霍尔电流传感器方案

使用闭环霍尔传感器测量电流,输出模拟电压与电流成比例。
优点:

  • 隔离测量、安全性高
  • 压降极小,发热少
    缺点:
  • 成本更高
  • 低电流精度可能不如分流器(视型号而定)

本系统目标电流范围0~50A,且对电阻测量精度要求较高,因此常见工程选择是:

  • 分流器用于精确测量(尤其在低电流区域)
  • 或采用高精度闭环霍尔传感器提高安全性与抗干扰

3.5、开尔文四线电压采样模块(mV级差分放大)

被测绕组电阻约200mΩ,在50A时电压降约10V;但在小电流(例如1A)时电压降仅200mV;在更低电流时甚至只有几十毫伏。为了保证系统在不同电流设定下都能获得稳定的电阻计算结果,电压采样应具备:

  • 差分采样(抗共模干扰
  • 高精度、低零漂放大
  • 合理的量程切换或增益设计
  • 输入保护与滤波

3.5.1、差分放大器/仪表放大器

推荐使用仪表放大器(INA系列、AD620等)或高精度差分放大器

  • 共模抑制比(CMRR)
  • 低失调、低漂移
  • 易于实现高精度mV级采样

将V+与V-接入放大器输入,输出单端电压给ADC采样。增益设计需考虑最大压降:

  • 若最大压降约10V,增益不宜过大,否则输出超出ADC范围
  • 若希望小压降也有较高分辨率,可采用可编程增益(PGA)或双量程方案

3.5.2、输入保护与滤波

由于电机绕组可能存在感性,电流变化会产生瞬态电压,采样输入需保护:

  • 输入串联电阻限流
  • TVS二极管或钳位二极管保护
  • RC低通滤波降低开关噪声(尤其Buck开关产生的纹波)

3.6、A/D采样模块(高精度ADC)

电阻计算的精度取决于电压与电流测量精度。对于毫欧级测量,尤其在低电流测试时,电压采样可能只有数十毫伏,此时普通10位ADC(5V/1024≈4.88mV)分辨率不足,会造成明显量化误差。

因此推荐采用外置高精度ADC:

  • 16位或24位ADC(如ADS1115、ADS124S08、HX711类不太适合高速)
  • 支持差分输入更佳
  • I2C/SPI接口与单片机连接

典型建议:

  • 电压采样使用16~24位差分ADC
  • 电流采样也使用同一ADC或独立ADC,提高一致性
  • 采样速度不必特别高(例如10~100Hz即可),但需要低噪声与高精度

如果使用带高精度ADC的单片机(如部分STM32系列)也可实现,但要注意前端放大与滤波设计。


3.7、单片机控制与运算模块

单片机主要职责:

  • 采样外部0~5V电流设定输入
  • 读取电压/电流采样值(ADC)
  • 执行电流闭环控制(PI算法输出PWM)
  • 计算电阻R并滤波
  • 刷新本地显示
  • 管理测试状态机与保护逻辑
  • 通过WIFI上传数据

芯片选择建议:

  • 若需要较强的计算与通信能力,可选择STM32或ESP32
  • 若采用ESP32,可同时实现控制+WIFI一体化
  • 若采用传统51单片机,也可以配合ESP8266作为WIFI模块,但闭环控制与高精度采样实现难度更高

为了更贴近工程实现,本设计推荐使用STM32 + ESP8266ESP32单芯片方案。本文以“通用单片机 + WIFI模块”的结构来描述,重点在模块设计与程序组织。


3.8、0~5V外部电流设定输入模块

该模块将外部0~5V模拟电压转换为电流设定值Iset。电路设计要点:

  • 输入保护:串联电阻、钳位二极管,防止过压
  • 输入滤波:RC低通滤波抑制噪声
  • ADC采样:将电压映射为数字量
  • 标定与校准:0V对应0A,5V对应50A,可做线性校准

若外部控制电压来自工业设备(PLC),可能存在噪声和地电位差,建议采用隔离运放或隔离采样模块(可选),增强可靠性。


3.9、本地显示模块

显示模块用于实时显示关键数据:

  • Iset / Imeas
  • Vmeas
  • R(mΩ)
  • 状态与报警信息

显示方案:

  • LCD1602:实现简单,但显示内容受限
  • OLED 0.96寸:清晰、显示丰富,I2C接口
  • TFT彩屏:可显示曲线与更多信息,成本更高

在工业测试设备中,常见使用字符屏或小尺寸OLED即可满足需求。显示刷新建议采用固定周期(如200ms或500ms),避免频繁刷新引起闪烁。


3.10、WIFI通信模块

常见选择:

  • ESP8266:AT指令方式,成本低
  • ESP32:可作为主控或协处理器
  • 工业WIFI模块:稳定性更高但成本更高

若使用ESP8266 AT方式,单片机通过UART发送AT指令实现:

  • 连接路由器(STA模式)
  • 连接服务器(TCP/HTTP)
  • 上传数据(JSON格式)
  • 断线重连与心跳维护

如果系统需要高可靠与易维护,推荐使用MQTT协议,将测量数据以主题形式发布。服务器侧可使用EMQX/ Mosquitto等。


3.11、保护与报警模块(过流、过温、急停)

保护模块包括硬件保护与软件保护:

  • 硬件过流:比较器检测分流器电压超过阈值,直接关断PWM
  • 软件过流:采样检测Imeas超限后停止输出
  • 过温:NTC/数字温度传感器检测功率器件温度
  • 急停:外部急停按钮直接切断功率级使能
  • 继电器/接触器:作为安全隔离执行器,异常时断开输出

报警提示可通过:

  • 蜂鸣器
  • 指示灯
  • 屏幕提示
  • WIFI上报报警信息

4、程序设计

4.1、软件总体架构与任务划分

系统软件采用模块化+状态机+周期任务调度的结构。推荐任务周期:

  • 电流闭环控制:1kHz~10kHz(与PWM一致或多倍采样)
  • 电压/电流采样与滤波:100Hz~500Hz
  • 电阻计算与显示刷新:2Hz~5Hz
  • WIFI上传:1Hz~2Hz(或按测量完成上传)
  • 保护检测:与采样同步或更快

软件模块划分:
1)系统初始化模块(时钟、GPIO、ADC、PWM、UART、显示)
2)外部设定电压采样模块(0~5V→Iset)
3)电流闭环控制模块(PI控制器)
4)电压采样模块(Kelvin差分电压
5)电流采样模块(分流器/霍尔)
6)电阻计算与滤波模块
7)显示刷新模块
8)WIFI通信与上传模块
9)保护与报警模块
10)测试流程状态机模块


4.2、系统初始化模块

初始化内容包括:

  • 供电检测与自检
  • PWM输出初始化(默认关闭)
  • ADC初始化(多通道:I、V、Iset输入)
  • 定时器初始化(控制周期、采样周期)
  • 显示初始化并显示“READY”
  • WIFI模块初始化(AT测试、连接路由器、获取IP)
  • 参数加载(校准系数、设备ID、上传地址)

初始化完成后进入待机状态,等待用户启动测试或检测到外部控制信号


4.3、外部0~5V设定采样模块设计

该模块将外部模拟电压转换为电流设定值:

  • 采样电压:Vin
  • 限幅:Vin限制在0~5V
  • 映射:Iset = Vin × 10(A)
  • 滤波:对Iset进行滑动平均或一阶低通,避免噪声导致电流波动

此外,可加入“最小启动电流阈值”:

  • 当Vin < 0.05V时认为Iset=0,关闭输出
    防止微小噪声导致误输出。

4.4、电流闭环控制模块(PI控制)

电流闭环控制是恒流源稳定输出的关键。控制流程:
1)读取设定电流Iset
2)读取实际电流Imeas
3)计算误差 e = Iset - Imeas
4)PI计算:

  • u = u + kp*(e - e_prev) + ki*e
    5)限幅:u限制在0~PWM_MAX
    6)输出PWM占空比
    7)保存e_prev

PI参数选择要点:

  • kp过大易振荡,过小响应慢
  • ki过大容易积分饱和,过小稳态误差大
  • 可加入抗积分饱和(当输出饱和时停止积分)
  • 建议在不同电流设定下均稳定

4.5、开尔文电压采样模块(差分采样与滤波)

电压采样用于计算电阻,测量精度要求高。软件处理包括:

  • 读取ADC差分电压值
  • 换算成实际电压(mV)
  • 滤波:多次平均、滑动平均、一阶低通
  • 异常检测:
    • V过低(可能未连接)
    • V过高(可能接错或短路)

滤波建议:

  • 采样N次(如16次)取平均
  • 或采用一阶IIR:Vf = αVf + (1-α)Vnew(α可取0.9)

4.6、电流采样模块(换算与标定)

电流采样同样需要:

  • ADC读取
  • 换算成电流值Imeas
  • 零点校准(尤其霍尔传感器存在偏置)
  • 温漂补偿(分流器发热会变化,可用温度补偿系数)
  • 滤波与稳定判断

为了保证电阻计算可靠,应确保电流已稳定后再计算电阻。可设定:

  • 当|Imeas - Iset| < 0.5A 且持续200ms,则认为电流稳定
  • 稳定后采样并计算R,得到最终结果并上传

4.7、电阻计算与稳定性处理模块

电阻计算公式:

  • R(Ω) = V(V) / I(A)
    系统显示通常以mΩ为单位:
  • R(mΩ) = 1000 × V(V) / I(A)
    或采用mV与A计算:
  • R(mΩ) = V(mV) / I(A)

为了避免除法噪声与瞬态抖动,建议:

  • 当I < I_min(如1A)时不计算,显示“LOW I”
  • 采用多次平均:对R进行N次平均或中位值滤波
  • 输出最终稳定值,减少跳动

4.8、显示刷新模块

显示内容建议分页面:

  • 主界面:Iset、Imeas、V、R
  • 状态界面:WIFI连接、IP地址、服务器状态
  • 报警界面:过流/过温/开路/短路提示

刷新周期建议200ms~500ms。显示字符串拼接采用缓存方式,避免频繁定位造成闪烁。


4.9、WIFI通信与上传模块

WIFI模块逻辑包含:

  • 初始化:复位、AT测试、设置模式、连接AP
  • 连接服务器:HTTP/MQTT
  • 周期上传:发送JSON数据
  • 断线重连:检测连接状态,失败则重新连接
  • 上报报警:异常时立即上报

数据上传建议采用JSON结构,便于服务器解析,例如:

{
  "dev_id":"MTR_R_001",
  "iset":35.0,
  "imeas":34.8,
  "v_mv":6950,
  "r_mohm":199.7,
  "state":"RUN",
  "alarm":0
}

4.10、保护与报警软件模块

保护策略建议分层:

  • 采样层:检测电流、电压、温度是否超限
  • 控制层:出现异常立即将PWM降为0并关闭使能
  • 状态层:进入FAULT状态,显示报警信息并上传报警
  • 恢复层:需要人工复位或等待温度下降后允许恢复

典型阈值(示例):

  • 过流:Imeas > Iset + 5A 或 > 55A
  • 过压:Vmeas > 20V(超出正常范围)
  • 过温:功率器件温度 > 90℃
  • 开路:Iset > 5A 但Imeas < 1A 持续500ms

5、核心程序示例(模块化代码)

5.1、基础宏定义与全局变量

#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

//---------------- 基本参数 ----------------
#define ADC_REF_V        3.300f          // ADC参考电压(示例3.3V)
#define I_MAX_A          50.0f
#define VIN_MAX_V        5.0f
#define ISET_SCALE       10.0f           // 0~5V -> 0~50A

#define I_MIN_CALC_A     1.0f            // 小于该电流不计算电阻
#define STABLE_I_ERR_A   0.5f            // 电流稳定误差阈值
#define STABLE_TIME_MS   200

#define PWM_MAX          1000
#define KP               0.80f
#define KI               0.05f

//---------------- 系统状态 ----------------
typedef enum {
    SYS_IDLE = 0,
    SYS_RUN,
    SYS_STABLE,
    SYS_DONE,
    SYS_FAULT
} sys_state_t;

typedef struct {
    float vin_set;      // 外部设定电压(V)
    float i_set;        // 设定电流(A)
    float i_meas;       // 实测电流(A)
    float v_meas;       // Kelvin电压(V)
    float r_mohm;       // 电阻(mΩ)
    float temp_pwr;     // 功率器件温度(℃)
} meas_t;

static meas_t g_meas;
static sys_state_t g_state = SYS_IDLE;

// PI控制相关
static float g_e_prev = 0.0f;
static float g_u = 0.0f;           // PWM控制量
static uint16_t g_pwm = 0;

// 稳定计数
static uint32_t g_stable_ms = 0;

// 报警码
static uint16_t g_alarm = 0;

5.2、外部0~5V设定采样与映射

static float clampf(float x, float a, float b)
{
    if(x < a) return a;
    if(x > b) return b;
    return x;
}

// 将外部设定电压转换为设定电流
void Update_Iset_FromVin(float vin)
{
    vin = clampf(vin, 0.0f, VIN_MAX_V);

    // 可加入死区,避免微小噪声导致输出
    if(vin < 0.05f) vin = 0.0f;

    g_meas.vin_set = vin;
    g_meas.i_set = vin * ISET_SCALE; // 0~5V -> 0~50A
    g_meas.i_set = clampf(g_meas.i_set, 0.0f, I_MAX_A);
}

5.3、电流闭环PI控制模块(输出PWM)

// 输入:设定电流 i_set,实测电流 i_meas
// 输出:PWM占空比 g_pwm
void CurrentLoop_PI(void)
{
    float e = g_meas.i_set - g_meas.i_meas;

    // 增量式PI:u = u + kp*(e - e_prev) + ki*e
    g_u += KP * (e - g_e_prev) + KI * e;

    // 限幅与抗积分饱和
    if(g_u < 0.0f) g_u = 0.0f;
    if(g_u > (float)PWM_MAX) g_u = (float)PWM_MAX;

    g_pwm = (uint16_t)g_u;
    g_e_prev = e;

    // 这里应调用硬件PWM设置函数
    // PWM_SetDuty(g_pwm);
}

5.4、电压、电流采样换算与滤波(示例)

// 下面函数通常由ADC驱动层提供原始采样值,这里仅示例接口
extern uint16_t ADC_ReadRaw_I(void);
extern uint16_t ADC_ReadRaw_V(void);
extern uint16_t ADC_ReadRaw_VinSet(void);
extern uint16_t ADC_ReadRaw_Temp(void);

// 标定系数(示例,实际需通过校准获得)
static float K_I = 0.02f;     // A/LSB
static float B_I = 0.0f;      // A偏置
static float K_V = 0.001f;    // V/LSB
static float B_V = 0.0f;      // V偏置
static float K_VIN = 0.001f;  // V/LSB
static float K_T = 0.1f;      // ℃/LSB

// 一阶低通滤波
static float lpf(float y, float x, float alpha)
{
    return alpha * y + (1.0f - alpha) * x;
}

void SampleAndFilter(void)
{
    uint16_t raw_i  = ADC_ReadRaw_I();
    uint16_t raw_v  = ADC_ReadRaw_V();
    uint16_t raw_vs = ADC_ReadRaw_VinSet();
    uint16_t raw_t  = ADC_ReadRaw_Temp();

    float i_new  = K_I * raw_i + B_I;
    float v_new  = K_V * raw_v + B_V;
    float vin_new= K_VIN * raw_vs;
    float t_new  = K_T * raw_t;

    // 低通滤波,alpha越大越平滑(响应越慢)
    g_meas.i_meas   = lpf(g_meas.i_meas, i_new, 0.90f);
    g_meas.v_meas   = lpf(g_meas.v_meas, v_new, 0.90f);
    g_meas.temp_pwr = lpf(g_meas.temp_pwr, t_new, 0.95f);

    Update_Iset_FromVin(vin_new);
}

5.5、电阻计算与稳定判定模块

void CalcResistance_mOhm(void)
{
    if(g_meas.i_meas < I_MIN_CALC_A)
    {
        g_meas.r_mohm = NAN; // 低电流不计算
        return;
    }

    // R(mΩ) = 1000 * V(V) / I(A)
    g_meas.r_mohm = 1000.0f * g_meas.v_meas / g_meas.i_meas;
}

uint8_t IsCurrentStable(uint32_t dt_ms)
{
    float err = fabsf(g_meas.i_set - g_meas.i_meas);

    if(g_meas.i_set < 0.5f)
    {
        g_stable_ms = 0;
        return 0;
    }

    if(err < STABLE_I_ERR_A)
        g_stable_ms += dt_ms;
    else
        g_stable_ms = 0;

    return (g_stable_ms >= STABLE_TIME_MS);
}

5.6、保护检测模块(过流、过温、开路)

#define ALM_OVERCURRENT  0x0001
#define ALM_OVERTEMP     0x0002
#define ALM_OPENLOAD     0x0004

void Protection_Check(void)
{
    g_alarm = 0;

    // 过流:超过设定+5A 或绝对超过55A
    if(g_meas.i_meas > (g_meas.i_set + 5.0f) || g_meas.i_meas > 55.0f)
        g_alarm |= ALM_OVERCURRENT;

    // 过温:功率器件温度>90℃
    if(g_meas.temp_pwr > 90.0f)
        g_alarm |= ALM_OVERTEMP;

    // 开路:设定>5A但实测<1A持续一定时间(这里简化为瞬时判定)
    if(g_meas.i_set > 5.0f && g_meas.i_meas < 1.0f)
        g_alarm |= ALM_OPENLOAD;

    if(g_alarm != 0)
    {
        // 立即关断PWM与输出使能
        g_pwm = 0;
        g_u = 0;
        // PWM_SetDuty(0);
        // OUT_Enable(0);

        g_state = SYS_FAULT;
    }
}

5.7、WIFI上传数据构造(JSON示例)

// 实际工程中会通过UART发送AT指令给ESP8266,或在ESP32中直接HTTP/MQTT
// 这里给出JSON字符串构造示例

void BuildJson(char *out, uint16_t maxlen)
{
    // 若电阻为NAN,上传null或特殊值
    char rbuf[32];
    if(isnan(g_meas.r_mohm)) strcpy(rbuf, "null");
    else snprintf(rbuf, sizeof(rbuf), "%.2f", g_meas.r_mohm);

    snprintf(out, maxlen,
        "{"
        ""dev_id":"MTR_R_001","
        ""iset":%.2f,"
        ""imeas":%.2f,"
        ""v_v":%.4f,"
        ""r_mohm":%s,"
        ""temp":%.1f,"
        ""state":%d,"
        ""alarm":%u"
        "}",
        g_meas.i_set,
        g_meas.i_meas,
        g_meas.v_meas,
        rbuf,
        g_meas.temp_pwr,
        (int)g_state,
        (unsigned)g_alarm
    );
}

5.8、主状态机流程(示例)

// 假设每10ms调用一次
void MainTask_10ms(void)
{
    // 采样与滤波
    SampleAndFilter();

    // 保护检测
    Protection_Check();
    if(g_state == SYS_FAULT)
        return;

    // 状态机
    switch(g_state)
    {
        case SYS_IDLE:
            // 当设定电流>0,进入运行
            if(g_meas.i_set > 0.5f)
            {
                // OUT_Enable(1);
                g_state = SYS_RUN;
                g_stable_ms = 0;
            }
            break;

        case SYS_RUN:
            // 执行闭环控制
            CurrentLoop_PI();

            // 判断稳定
            if(IsCurrentStable(10))
                g_state = SYS_STABLE;
            break;

        case SYS_STABLE:
            // 稳定后可进一步做多次采样平均
            CurrentLoop_PI();
            CalcResistance_mOhm();

            // 进入DONE或持续输出(按需求)
            // 这里示例:稳定后持续输出并周期上传
            g_state = SYS_DONE;
            break;

        case SYS_DONE:
            // 持续维持电流并刷新计算
            CurrentLoop_PI();
            CalcResistance_mOhm();
            break;

        default:
            break;
    }

    // 显示刷新、上传任务通常独立周期执行
}

6、关键精度设计与工程实现要点

6.1、毫欧级测量误差来源与抑制

在200mΩ测量中,误差主要来自:

  • 电压采样误差:放大器失调、噪声、ADC量化误差
  • 电流采样误差:分流器误差、温漂、霍尔偏置
  • Kelvin连接不规范:电压采样点不在绕组端子而在夹具上
  • 电流纹波:Buck开关纹波造成电压与电流波动
  • 温升:绕组与分流器发热导致电阻变化(铜温度系数明显)

抑制方法:

  • Kelvin采样线必须直接接到绕组端子,尽量靠近被测体
  • 电压采样前端使用高CMRR仪表放大器,布局屏蔽,差分走线
  • 采样与控制地分区,采用单点接地
  • 输出电流加滤波电感、电容,减少纹波
  • 软件中对V/I进行同步采样与平均
  • 加入温度采样,对电阻进行温度修正(可扩展)

6.2、50A大电流路径设计与散热

大电流路径必须:

  • 使用铜排或大截面积导线
  • 接线端子采用大电流端子,避免接触电阻过大
  • MOSFET、整流器、分流器要有足够散热(风扇+散热片
  • PCB走线需加厚铜或使用多层并联焊锡加厚、铜条加固

6.3、与AC220V相关的安全隔离

必须确保:

6.4、WIFI上传可靠性与数据完整性

WIFI在工业现场可能存在干扰或掉线,建议:

  • 断线重连机制
  • 缓存未上传数据(队列)
  • 上传包含序号与时间戳,服务器可去重
  • 支持本地存储(SD卡/Flash)作为备份(可扩展)

7、总结

基于单片机的开尔文电路电阻测量WIFI上传系统,针对电机绕组毫欧级电阻测量的高精度需求,采用开尔文四线检测方式有效消除导线电阻与接触电阻带来的误差,并通过050A可调恒流源提高测量电压降,从而增强分辨率与重复性。系统支持外部05V模拟量控制测试电流,可依据被测电机额定电流灵活设置测试条件,兼顾测量精度与绕组温升安全。

在电路设计方面,系统包含AC220V隔离供电、大功率恒流源、电流采样、差分电压采样、高精度ADC、单片机运算与控制、本地显示与WIFI通信等模块,并配套完善的过流、过温、开路短路保护机制,确保高电流测试过程安全可靠。在程序设计方面,系统通过PI闭环控制稳定输出电流,通过多级滤波与稳定判定实现可靠电阻计算,并以JSON形式完成WIFI数据上传,使测量结果能够实现自动记录与远程管理。

该设计具备明显的工程应用价值,适用于电机制造、维修与质量检测场景。通过进一步扩展温度补偿、量程自适应、曲线记录与云平台管理等功能,可将其升级为更高精度、更智能化的电机绕组电阻综合在线检测终端。

相关推荐