EA Elektro-Automatik作为全球仪器行业领导者Tektronix旗下的大功率直流电源品牌,凭借其产品功能强大、性能稳定可靠等优势,被广泛应用于多个行业,尤其在汽车电子、新能源及工业控制等领域备受青睐。
EA 电源产品支持选配 CAN 通信模块 IF-AB-CAN,以实现与 CAN 总线的无缝通信。本文将以某客户的电池充放电项目为例,详细介绍如何将 EA 双向直流电源配置为 CAN 总线网络中的一个节点,并实现远程控制与实时监控。诚挚感谢高望来先生为本文提供了宝贵的素材,并在专业领域给予支持。
CAN 通信基础知识
CAN(Controller Area Network,控制器局域网)是一种广泛应用于高实时性分布式控制系统的串行通信协议,最早由德国Bosch公司于1983年开发,旨在解决传统多线束布线方式带来的复杂性与高成本问题。CAN 总线具备高可靠性、低成本、高效传输和灵活组网等特点,被广泛用于汽车电子、工业控制、机器人、航空航天、医疗设备及能源管理系统等领域。
在 CAN 总线网络中,每个 ECU(电子控制单元)作为一个节点,通过总线实现与其他节点的通信。下图展示了典型的 CAN 总线连接结构:
CAN 数据帧的结构如下图所示。在实际应用中,发送数据时需重点关注仲裁段、控制段及数据段。
仲裁段
EA 电源产品默认设有三个基础 ID(BASEID),位于数据帧的仲裁段,用于消息识别与仲裁:
■ 000h:用于写入对象,消息类型为Send_ Object
■ 001h:用于查询对象,消息类型为Query_ Object
■ 002h:用于读取对象,消息类型为Read_ Object
这些基础 ID 通常用于应答式通信。例如,使用000h可发送 “Normal Sending” 类指令,如开启远程控制、设置电压、启动输出等;而 001h 可用于查询电压等参数。
此外,还有用于循环读取和发送指令的基础 ID:
■ 100h系列:用于循环读取,如:
100h:读取状态
101h:读取实际值(电压、电流、功率等)
102h:读取设定值
■ 200h系列:用于循环发送,如:
200h:远程控制与输出控制
201h:设置电源设定值
202h:设置负载设定值
控制段
控制段中的 DLC(Data Length Code)用于指定数据字节数。例如,在设置远程开启时若数据部分为5字节,则 DLC 应设为5。某些 CAN 通信软件(如 PCAN-View)支持手动设置 DLC,如下表所示:
部分软件默认 DLC 为 8,即数据段为 8 字节。若实际数据不足 8 字节,则低位以 0 填充。
数据段
本文以 8 字节标准帧为例。不同基础 ID 对应的数据内容有所差异,但均表示对特定寄存器进行读写操作,具体方法将在 “实践” 部分展开。
二
硬件与连接准备
EA 双向直流电源及其它 EA 系列产品可通过选配 EA-IF-CAN 通信模块(型号:EA-IF-AB-CAN,订货号:35400111)接入 CAN 总线。该模块支持 CAN 2.0 A/B 标准,最高传输速率 1 Mbit/s,接口为 9 针 D-Sub 公头。
若要通过电脑对电源进行控制与监视,需额外配置USB-CAN通信模块,使电脑也成为CAN总线上的一个节点。若USB-CAN模块未内置120Ω终端电阻或未启用电阻开关,则需在EA电源的CAN设置中开启终端电阻。
三 软件准备
■ Windows系统:可选用PCAN-View、PCAN-Explorer或Vector公司的CANoe等软件。
■ Linux系统:可通过candump命令接收消息,cansend命令发送消息。
四
实践操作
在 Windows 环境下使用 PCAN-View 进行通信
安装驱动及软件后,在设备管理器确认硬件识别正常。
打开PCAN-View,点击菜单栏中的 “Client → Connect” 进行连接设置,之后通过 “Transmit → New Message” 编辑并发送CAN消息。
1. 写入单个寄存器(Write Single Register)
以 EA PSB 10080-120 2U 双向直流电源(80V, 120A, 3kW)为例,常见操作如下:
Message | DLC | Data | 说明 |
000h | 5 | 019201FF00 | 开启远程控制(0192为寄存器地址,FF00表示“开”) |
000h | 5 | 01F40123D7 | 设置电压为14V(01F4为寄存器地址,23D7为16进制电压值) |
000h | 5 | 01F50101C4 | 设置电源电流为1A(01F5为寄存器地址,01C4为电流值) |
000h | 5 | 01F30101C4 | 设置负载电流为1A(01F3为寄存器地址,01C4为电流值) |
000h | 5 | 019501FF00 | 打开电源输出(0195为寄存器地址,FF00表示“开”) |
200h | 6 | 02B5147B0000 | 设置电压与电流(02B5代表电压,147B代表电流) |
以第一行命令为例,“01 92”对应的是远程控制的寄存器,“01”代表寄存器数量1,“FF 00”代表该寄存器的值:“开”。
电压值的换算公式如下:
Voltage_hex = voltage_value × 52428 / nominal_voltage
以14V为例:
14 × 52428 / 80 = 9175(十进制)→ 转十六进制为23D7。
2. 写入多个寄存器
(Write Multiple Registers, WMR)
该操作常用于函数发生器设置,例如设置一个时长为6秒、幅值为10V的任意波形:
Message | DLC | Data | Description |
000h | 5 | 019201FF00 | 远程控制开启,01 92为寄存器地址。 |
000h | 5 | 035301FF00 | 激活函数发生器任意波,选择电压设置 |
000h | 8 | 03 84 10 FF 00 00 00 00 | 设置序列1的交流初始值为00 00 00 00 |
000h | 8 | 03 84 10 FE 00 00 00 00 | 设置序列1的交流结束值为00 00 00 00 |
000h | 8 | 03 84 10 FD 00 00 00 00 | 设置序列1的交流初始频率值为00 00 00 00 |
000h | 8 | 03 84 10 FC 00 00 00 00 | 设置序列1的交流结束频率值为00 00 00 00 |
000h | 8 | 03 84 10 FB 00 00 00 00 | 设置序列1的交流相位角值为00 00 00 00 |
000h | 8 | 03 84 10 FA 41 20 00 00 | 设置序列1的直流初始值为41 20 00 00 |
000h | 8 | 03 84 10 F9 41 20 00 00 | 设置序列1的直流结束值为41 20 00 00 |
000h | 8 | 03 84 10 F8 4A B7 1B 00 | 设置序列1的直流结束值为4A B7 1B 00 |
000h | 5 | 035B010001 | 设置初始序列为序列1 |
000h | 5 | 035C010001 | 设置结束序列为序列1 |
000h | 5 | 035D010005 | 设置循环5次 |
000h | 5 | 035E01FF00 | 提交序列设置 |
000h | 5 | 01F501CCCC | 设置电流限制值,此处CC CC为额定值 |
000h | 5 | 01F601CCCC | 设置功率限制值,此处CC CC为额定值 |
000h | 5 | 035201FF00 | 运行该任意波 |
由于函数发生器中任意波的每一个序列设置,需要 32 个字节,放置在 16 个寄存器中,也就是每个寄存器容纳 2 个字节。实际在通过 CAN 标准帧对寄存器设置时,每个标准帧(8 个字节)的后 4 个字节或字符(表格红色字体),即为序列设置值,因此需要发送 8 个标准帧。具体帧的结构如下:
详解:以表格中“03 84 10 FA 41 20 00 00”为例。“03 84” (10进制为900)是起始寄存器(Start reg.),通过该寄存器,可以对函数发生器中任意波的序列1进行设置。如要设置序列2, 则起始寄存器为 0x0394,也就是增加0x10个,对应10进制数,就是16个。
因设置值需要16个寄存器存放,Nr. of regs to write 也就是 0x10。
在 CAN 总线上,无法保证按照发送顺序接收,因此引入一个标记 Marker 字节来解决此问题。
将一个超过4字节的信息,比如32字节的信息,分成8次发送,需要为每一个CAN标准帧做标记(Mark),按照倒序排列,第一个帧标记为FF,第八个帧为F8。这样在接收方收到这些帧后,能正确按照排序组装。举例中的标记Marker为 “FA” ,表示第六。
设置值需符合 IEEE754 浮点数格式,可使用在线工具
(如https://www.h-schmidt.net /FloatConverter /IEEE754.html)进行转换,或通过Python代码实现:
coding=utf-8
import struct
def float_to_hex():
try:
# 提示用户输入一个浮点数
float_value = float(input("请输入一个浮点数:"))
# 将浮点数转换为IEEE 754的32位十六进制表示
hex_representation = struct.pack('>f', float_value).hex().upper()
# 输出大写十六进制字符串
print ("对应的十六进制表示是: 0x" + hex_representation)
except ValueError:
print("输入无效,请输入一个有效的浮点数。")
if __name__ == "__main__":
float_to_hex()
3. 使用 PCAN-Explorer 导入 DBC 文件
PCAN-Explorer支持导入DBC文件,可更直观地解析与发送消息。用户可在项目视图中导入为特定型号(如PSB 10080-120 2U)预定义的DBC文件,提升配置效率。
在 Linux 环境下进行 CAN 通信
首先设置CAN总线波特率:
sudo ip link set CAN0 up type can bitrate 500000
接收总线数据:
candump CAN0
示例输出:
CAN0 101 [6] 23 D4 00 46 00 26
CAN0 101 [6] 23 D6 00 48 00 26
…
发送控制指令:
cansend CAN0 000#019201FF00 # 远程打开
cansend CAN0 000#01F40123D7 # 设置电压为14V
cansend CAN0 000#01F50101C4 # 设置电流为1A
cansend CAN0 000#019501FF00 # 打开输出
结语
通过上述设置与操作,用户可顺利将EA双向直流电源集成到CAN网络中,实现灵活的远程控制与实时监控。合理运用CAN通信功能,将显著提升测试自动化程度与系统集成效率。
相关产品
费思泰克FTP1000系列可编程直流电源是一款小体积、高性能、高功率密度的直流电源。1U/19”全宽/半宽的设计,单机更轻便,机柜集成更便捷。最大输出功率1
同惠TH6400系列多路输出可编程直流电源 一、产品概述 同惠TH6400系列多路输出可编程直流电源涵盖5个型号,单个通道功率范围覆盖5W-180W,具
Keysight EDU36311A三路输出电源是德科技智能测试台必备系列仪器之一,其主要特点如下: 一、主要技术指标 输出通道数:3个,独立 总功率
普源DP712可编程线性直流电源是一款性能优越、功能齐全的电源设备,其主要特性如下: 1.基本参数 通道数:1CH 总功率:150W 每通道输出:5
相关文章
电源并联扩容的关键之处在实际应用中,为了应对各种不同的使用需求,保证测试的灵活性、节省成本等种种原因,我们需要对多台直流电源进行并联达到扩容,以提升输出电流能力
研究背景钽电解电容器凭借其卓越性能,在电容元件领域独树一帜——它在紧凑的体积内实现了高电容量值,成为同类产品中的佼佼者。施加电压是钽电解电容器实现高可靠性运行的
小到家用电器,大到大型电力行业所用的仪器设备,几乎所有的电子设备都需要稳定的电源。TH7200系列是一款高性能、高精度、多功能的单相可编程交/直流电源,通过对高
直流可编程电源是广泛应用于新能源汽车、工业自动化、半导体测试、通信设备、可再生能源等领域的关键设备。它不仅提供稳定的直流输出,还具备编程功能,允许用户设定不同的
普源精电(RIGOL)推出5/10/15kW-3U,宽范围、高效率、易扩展的DP5000系列可编程宽范围大功率直流电源,可轻松并联达100台,吹响了RIGOL进
联系电话: 18165377573