1、基于单片机的开尔文电路电阻测量WIFI上传设计
点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081433
1.1、系统概述
电机绕组电阻是衡量电机制造质量、绕组铜损、接触可靠性以及运行安全的重要参数之一。在电机出厂检测、维修检测和现场点检中,绕组电阻的测量往往要求具备高精度、高重复性和抗干扰能力。由于被测电阻通常处于毫欧级(如本设计指标:200mΩ),若采用普通两线法测量,测试线缆、电流夹具、接触电阻等引入的误差将显著放大,导致测量结果不可信。
因此本系统采用开尔文四线检测方式(Kelvin 4-wire),即“电流线”与“电压采样线”分离:两根粗线负责向被测绕组注入大电流,两根细线在绕组两端直接采样电压降。由于电压采样线几乎不流过电流,其线阻与接触电阻产生的电压降可以忽略,从根本上抑制了导线电阻和接触电阻的误差。这种方式非常适合毫欧级绕组电阻测量,尤其适用于大电流注入的电机绕组测试场景。
本系统在硬件上构建050A可调电流源,电流大小由外部05V模拟电压控制(可由旋钮电位器、PLC模拟量输出、上位机DAC等方式提供)。系统通过高精度采样测得绕组两端电压降与测试电流,并在单片机内计算电阻值:
由于本系统供电为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
实现方式通常为:
为了适应被测电机额定电流大小、绕组发热及安全测试需求,电流调节功能非常重要。例如:
- 小电机绕组测量可设为5~10A,避免过热
- 大电机绕组测量可设为30~50A,提高电压降、提升分辨率
2.3、本地显示:实时显示测试电流、电压降与电阻值
系统应在本地显示以下内容:
- 设定电流 Iset(A)
- 实测电流 Imeas(A)
- 电压降 Vmeas(mV)
- 计算电阻 R(mΩ)
- 状态提示:待机/输出/稳定/完成/报警
显示方式可采用LCD1602、OLED、TFT彩屏或数码管。由于需要显示单位与较多参数,推荐使用LCD12864或OLED/TFT更易排版。本设计以“字符屏/简易屏”为常见嵌入式方案进行说明,重点在于测量与上传功能实现。
2.4、WIFI数据上传:上传测量结果与设备状态
系统通过WIFI模块(如ESP8266/ESP32)将数据上传到服务器。可支持:
上传内容包含:
- 时间戳(可由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) → 恒流源输出
这样测试回路与市电完全隔离,显著提高人身安全与抗干扰性能。
关键保护与器件建议:
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
- 电流采样也使用同一ADC或独立ADC,提高一致性
- 采样速度不必特别高(例如10~100Hz即可),但需要低噪声与高精度
如果使用带高精度ADC的单片机(如部分STM32系列)也可实现,但要注意前端放大与滤波设计。
3.7、单片机控制与运算模块
单片机主要职责:
- 采样外部0~5V电流设定输入
- 读取电压/电流采样值(ADC)
- 执行电流闭环控制(PI算法输出PWM)
- 计算电阻R并滤波
- 刷新本地显示
- 管理测试状态机与保护逻辑
- 通过WIFI上传数据
芯片选择建议:
- 若需要较强的计算与通信能力,可选择STM32或ESP32
- 若采用ESP32,可同时实现控制+WIFI一体化
- 若采用传统51单片机,也可以配合ESP8266作为WIFI模块,但闭环控制与高精度采样实现难度更高
为了更贴近工程实现,本设计推荐使用STM32 + ESP8266或ESP32单芯片方案。本文以“通用单片机 + 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大电流路径设计与散热
大电流路径必须:
6.3、与AC220V相关的安全隔离
必须确保:
6.4、WIFI上传可靠性与数据完整性
WIFI在工业现场可能存在干扰或掉线,建议:
- 断线重连机制
- 缓存未上传数据(队列)
- 上传包含序号与时间戳,服务器可去重
- 支持本地存储(SD卡/Flash)作为备份(可扩展)
7、总结
基于单片机的开尔文电路电阻测量WIFI上传系统,针对电机绕组毫欧级电阻测量的高精度需求,采用开尔文四线检测方式有效消除导线电阻与接触电阻带来的误差,并通过050A可调恒流源提高测量电压降,从而增强分辨率与重复性。系统支持外部05V模拟量控制测试电流,可依据被测电机额定电流灵活设置测试条件,兼顾测量精度与绕组温升安全。
在电路设计方面,系统包含AC220V隔离供电、大功率恒流源、电流采样、差分电压采样、高精度ADC、单片机运算与控制、本地显示与WIFI通信等模块,并配套完善的过流、过温、开路短路保护机制,确保高电流测试过程安全可靠。在程序设计方面,系统通过PI闭环控制稳定输出电流,通过多级滤波与稳定判定实现可靠电阻计算,并以JSON形式完成WIFI数据上传,使测量结果能够实现自动记录与远程管理。
该设计具备明显的工程应用价值,适用于电机制造、维修与质量检测场景。通过进一步扩展温度补偿、量程自适应、曲线记录与云平台管理等功能,可将其升级为更高精度、更智能化的电机绕组电阻综合在线检测终端。
103