《可编程固定阻值电子负载的制作与自动化标定技术》

一、硬件组成

自制可编程固定电阻电子负载主要由三大核心部件构成:开关电源、串口 232 型 RTU 继电器模块以及 30W 的 RX24 黄金铝壳线绕功率电阻。当前的关键步骤是将这些部件通过焊线进行精准连接,随后将其整体封装于合适的壳体之中,并妥善布置对外接口。在电阻的梯度设计方面,采用的是 2^n 的模式,其中 n = 8,单位为欧姆。


▲ 图1 RTU继电器


▲ 图2 30W功率电阻


▲ 图3 实物

二、电器连接说明

在阻值与 RTU 继电器模块的分配策略上,采用的设计是:继电器的 IO 号与上述电阻梯度分配公式 2^n 中的 n 相等,即 IO1 对应的阻值为 n=1,也就是 2Ω,其余依次类推。此外,所有电阻的另一端均统一连接至继电器的公共端。通过这样的连接方式,既能实现单路选定固定阻值电阻,又能通过多路并联实现阻值的插补。虽然在当前项目中并不需要这种插补功能,但考虑到未来在其他方面的潜在应用需求,此处将其作为冗余设计予以保留。


▲ 图4 实物接线图

三、标定阻值

本阶段工作基于DM3068型数字万用表电阻档,系统标定了电子负载的阻值分布特性,并运用指数函数实现数据拟合。经分析验证,实测关键参数与设计技术规范具有良好的一致性,项目既定目标已达成。下一步计划开展整机集成与外壳封装工艺实施。。

▲ 图5 阻值与IO

python 复制代码
iodim=[1.0000,2.0000,3.0000,4.0000,5.0000,6.0000,7.0000,8.0000]
rdim=[2.3859,4.3510,8.3744,16.4076,32.2679,64.5908,128.2762,257.1318]
python 复制代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. BaiChao 2025-12-15
#
# Note:
#============================================================

from headm import *
from tsmodule.tsvisa        import *
import serial
from _ast import Or
from serial.serialutil import SerialException

dm3068open(4)
#------------------------------------------------------------
vi = serial.Serial()
vi.baudrate = 9600
vi.timeout = 1
try:
    vi.port = 'COM8'
except:
    printf('Set vi port COM8 error. ')
try:
    vi.open()
except serial.serialutil.SerialException:
    printf('Open vi port COM8 error.')
else:
    printf('Open vi port COM8 Ok.')
#------------------------------------------------------------
# 继电器控制指令字典
RELAY_COMMANDS = {
    # 第1路
    '1on': b'\x01\x05\x00\x00\xFF\x00\x8C\x3A',
    '1off': b'\x01\x05\x00\x00\x00\x00\xCD\xCA',
    # 第2路
    '2on': b'\x01\x05\x00\x01\xFF\x00\xDD\xFA',
    '2off': b'\x01\x05\x00\x01\x00\x00\x9C\x0A',
    # 第3路
    '3on': b'\x01\x05\x00\x02\xFF\x00\x2D\xFA',
    '3off': b'\x01\x05\x00\x02\x00\x00\x6C\x0A',
    # 第4路
    '4on': b'\x01\x05\x00\x03\xFF\x00\x7C\x3A',
    '4off': b'\x01\x05\x00\x03\x00\x00\x3D\xCA',
    # 第5路
    '5on': b'\x01\x05\x00\x04\xFF\x00\xCD\xFB',
    '5off': b'\x01\x05\x00\x04\x00\x00\x8C\x0B',
    # 第6路
    '6on': b'\x01\x05\x00\x05\xFF\x00\x9C\x3B',
    '6off': b'\x01\x05\x00\x05\x00\x00\xDD\xCB',
    # 第7路
    '7on': b'\x01\x05\x00\x06\xFF\x00\x6C\x3B',
    '7off': b'\x01\x05\x00\x06\x00\x00\x2D\xCB',
    # 第8路
    '8on': b'\x01\x05\x00\x07\xFF\x00\x3D\xFB',
    '8off': b'\x01\x05\x00\x07\x00\x00\x7C\x0B'
}

def set_io(c):
    """
    控制继电器开关状态
    参数c: 继电器控制指令,如'1on', '2off'等
    """
    if c in RELAY_COMMANDS:
        vi.write(RELAY_COMMANDS[c])
        printf(f"执行指令: {c}")
    else:
        printf(f"无效指令: {c}")

#------------------------------------------------------------
iodim = arange(1, 9)
rdim = []
for i in iodim:
    set_io(f"{int(i)}on")
    time.sleep(5)
    r = dm3068res()
    rdim.append(r)
    tspsave("measure", iodim=iodim, rdim=rdim)
    printf(i, r)
    set_io(f"{int(i)}off")
    time.sleep(5)
plt.plot(iodim, rdim, lw=3)
plt.xlabel("Set(IO)", color="steelblue", fontsize=24)
plt.ylabel("Measure(Ω)", color="steelblue", fontsize=24)
plt.grid(True, which='both', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================


▲ 图6 数据拟合


▲ 图7 指数函数拟合误差

python 复制代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY                     -- by Dr. BaiChao 2025-12-16
#
# Note:
#============================================================

from headm import *
from scipy.optimize import curve_fit


#------------------------------------------------------------
iodim,rdim =tspload('measure', 'iodim', 'rdim')
printf(iodim, rdim)
#------------------------------------------------------------
def power_of_two(n):
    return 2**n
#------------------------------------------------------------
rfit = power_of_two(iodim)
errr = rfit - rdim
#------------------------------------------------------------
# plt.plot(iodim, rdim, lw=3, label="Measure")
# plt.plot(iodim, rfit, lw=3, label="Fit")
plt.plot(iodim, errr, lw=3, label="Error")
plt.xlabel("Set(IO)", color="steelblue", fontsize=24)
# plt.ylabel("Measure(R)", color="steelblue", fontsize=24)
plt.ylabel("Error", color="steelblue", fontsize=24)
plt.grid(True, which='both', linestyle='--', alpha=0.7)
plt.tight_layout()
plt.show()



#------------------------------------------------------------
#        END OF FILE : TEST2.PY
#============================================================

总结


本文详细记录了可编程固定阻值电子负载的核心零部件及其制作过程。通过DM3068型数字万用表的电阻档功能,并借助Python脚本程序,实现了电子负载阻值分布特性的自动化标定。进一步利用指数函数对数据进行拟合。经过严谨的分析与验证,项目既定目标已成功达成。

相关推荐
数据知道14 分钟前
claw-code 源码分析:大型移植的测试哲学——如何用 unittest 门禁守住「诚实未完成」的口碑?
开发语言·python·ai·claude code·claw code
LCMICRO-1331084774619 分钟前
长芯微LPC556D1完全P2P替代DAC8830,是引脚兼容的16位数模转换器,该系列产品为单通道、低功耗、缓冲电压输出型DAC
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·电压输出型dac
炸炸鱼.21 分钟前
Python 网络编程入门(简易版)
网络·python
技术小黑22 分钟前
TensorFlow学习系列10 | 数据增强
python·深度学习·tensorflow2
forAllforMe23 分钟前
如何用定时器PWM产生SPWM?--电机驱动控制
嵌入式硬件
万粉变现经纪人26 分钟前
如何解决 import aiohttp ModuleNotFoundError: No module named ‘aiohttp’
python·scrapy·beautifulsoup·aigc·pillow·pip·httpx
AC赳赳老秦30 分钟前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
charlie11451419132 分钟前
嵌入式C++教程实战之Linux下的单片机编程(9):HAL时钟使能 —— 不开时钟,外设就是一坨睡死的硅
linux·开发语言·c++·单片机·嵌入式硬件·c
Agent产品评测局34 分钟前
企业生产报工自动化落地,数据采集全流程实现方案 —— 2026制造业数字化转型深度选型指南
运维·人工智能·ai·chatgpt·自动化
志栋智能36 分钟前
安全超自动化如何缩短平均检测与响应时间?
运维·安全·自动化