Skip to content

FNIRSI DPS-150:便携数控电源,从官方规格到串口直控 ​

FNIRSI DPS-150 官方产品图

调试开发板时,我希望脚本能设电压、开关供电,再读回状态,不必每次伸手按面板。DPS-150 的官方上位机只支持 Windows,但社区已经整理了 USB 串口协议,Mac 上用 Python 和 pyserial 也能控制。

这里记录的是 DPS-150P、固件 V1.6、硬件 V1.0 的实测。协议来自 nasheed-x/dps150_api,不是我从零逆向的;规格和界面图来自 官方说明书。

先分清供电口和数据口 ​

DC 与 Type-C 供电只能选一个,不能同时接电。 电脑通信走 Micro-USB 数据口,需要能传数据的线,而不是纯充电线。

接负载前先关闭输出,确认极性、目标电压和限流值。额定 30V 不等于接任意充电器都能输出 30V:它是降压电源,输入必须高于输出。本次输入 20.08V,设备报告的最大输出只有 19.88V。

官方规格数值
输出范围0~30V / 0~5A / 0~150W,受输入能力限制
输入DC 5.0~32V / 100mA~5A,支持 PD / QC
屏幕2.8 寸,320×240
设定分辨率电压 10mV,电流 1mA
设定精度电压 ≤0.1%±5mV;电流 ≤0.1%±3mA
回读精度输入电压 ≤0.2%±5mV;输出电压 ≤0.1%±10mV
负载调整率0.49%

这些是手册规格,不是本文重新测得的精度。输入边界应按自己设备的说明书核对,不要为追求输出上限盲目升高供电。

脚本发出去的是什么? ​

连接后枚举为 AT32 Virtual Com Port,USB VID:PID 为 2E3C:5740。通信使用 USB CDC,串口配置为 115200、8N1,RTS 拉高。

bash
system_profiler SPUSBDataType | grep -A6 "AT32 Virtual Com Port"
ls /dev/cu.usbmodem*

这不是发送 VOLT 5 一类文本指令,而是二进制帧:

字段帧头命令寄存器长度数据校验和
字节数1111N1
内容请求 F1,回包 F0读或写等操作目标地址数据长度按寄存器类型编码下式

校验和为 (Reg + Len + sum(Data)) & 0xFF,不含帧头和命令。电压、电流等浮点数使用 IEEE754 float32 小端;开关和状态不是浮点数。

命令用途常用寄存器数据
0xA1读寄存器0xFF 全状态139 字节
0xB1写寄存器0xC1 电压、0xC2 电流float32
0xB1写寄存器0xDB 输出开关uint8,0/1
0xC1连接 / 断开会话—会话控制
0xB0设置波特率—通信配置
0xC0进入 DFU 升级模式—普通控制不要发送

同一个数值在不同字段里含义不同:命令 0xC0 会进入 DFU,寄存器 0xC0 则是输入电压。不能把读输入电压与发升级命令混为一谈。

开关输出后,电压没有立刻跟上 ​

我先写入 5.000V / 0.500A,回读设定一致,再空载开启输出。第一次只读到 0.763V,并不是设定失败,而是软启动还没结束。关输出同样有电容泄放时间。

图中只画原始记录里的四个采样点,不插值成连续曲线。该次空载实验约 1.5s 升到设定值、约 1.2s 放到零;不同负载下不能直接沿用这个时长。

读回项目本次记录
型号 / 固件 / 硬件DPS-150P / V1.6 / V1.0
输入 / 温度20.08V / 30.5°C
稳定输出5.000V,空载电流 0A,CV 模式
全状态139 字节,包含设定、遥测、保护、预设与累计量

脚本的顺序因此应当是:关闭输出 → 写电压与限流 → 回读确认 → 开启 → 等待并检查实测值 → 关闭并检查残余电压。延时只是等待手段,不能代替回读,也不能保证负载安全。

最费时间的不是写入,而是认错回包 ​

设备会主动推送遥测。请求全状态后,先到的可能是 12 字节输出遥测,而不是期待的 139 字节状态包。若把“第一帧”当响应,字段就全乱了。

遇到的现象后来怎么处理
读全状态却只有 12 字节按目标寄存器过滤回包,不能只取第一帧
单读 0xE2/0xE3 最大能力值为 0改读全状态偏移 0x6F/0x73 的最大 V/I
设不到 30V检查输入电压与降压限制,不反复重发设定
开输出后只有零点几 V先看是否仍处于软启动,再检查保护状态
面板按键失效正常断开串口会话后解锁;异常断连可能需重插
输入不足、LVP 保护欠压状态禁止输出,先处理供电

不要把命令 0xC0 当软重启。 实测它让 USB CDC 消失并进入 DFU,需要物理拔插恢复;设备没有可用的软重启命令。远程调试时,这个区别尤其重要。

手册附录:面板、预设、保护与升级

面板介绍,来自官方说明书

主界面,来自官方说明书

主界面显示输入电压、温度、运行状态、输出 V/A/W、累计 Wh/Ah、设定值、预设组、面板锁与 CV/CC 模式。六个按键配合滚轮调参:设置键选中数位,滚轮调整,在电压与电流间切换后保存。

M1~M6 六组预设各自保存电压和恒流设定。进入数据组页选中数位、调整、保存,即可在不同设备间切换;切换前仍要核对负载。

状态含义
OK正常
OVP / OCP / OPP过压 / 过流 / 过功率
OTP / REP / LVP过热 / 反接 / 欠压

手册说明异常保护会关闭输出并蜂鸣。菜单可设置保护阈值、语言、界面风格、背光、音量与计量开关。

菜单界面,来自官方说明书

补充回读寄存器:0xC0 为输入电压,0xC3 为三项 float32 输出 V/A/W,0xDC 为保护状态,0xDD 为模式(0=CC、1=CV)。

官方 Windows 上位机可记录并缩放电压电流曲线,保存或删除记录;序列输出支持设定序号范围、循环、单步与暂停。电流扫描固定电压,电压扫描固定电流,都按步进与延时执行。

上位机基础功能,来自官方说明书

上位机高级功能,来自官方说明书

升级有两种入口:按住升级键插入数据线,或在上位机选择“固件升级 → BOOT/重启”。进入后电脑出现 U 盘,再拷入对应固件。它是专用升级流程,不是日常控制步骤。

固件升级界面,来自官方说明书

想自己接着做 ​

我使用的本地脚本封装了身份读取、全状态读取、设定与输出开关,只依赖 pyserial;本文没有提供这个脚本的公开下载。要复现协议,可从社区的 dps150_api 与 PROTOCOL.md 开始,先读状态,再做空载低压测试。

规格和七张图片来自 FNIRSI 产品页 与 官方说明书存档。社区协议说明与本机实测各有边界,不应把这一台 V1.6 的表现当成所有固件版本的保证。

这篇里有不清楚的地方,或者想聊类似的东西?私信我 →