直流电源的 CAN 通信设置与实践

  时间:2025-09-30 11:17:50          

EA Elektro-Automatik作为全球仪器行业领导者Tektronix旗下的大功率直流电源品牌,凭借其产品功能强大、性能稳定可靠等优势,被广泛应用于多个行业,尤其在汽车电子、新能源及工业控制等领域备受青睐。

EA 电源产品支持选配 CAN 通信模块 IF-AB-CAN,以实现与 CAN 总线的无缝通信。本文将以某客户的电池充放电项目为例,详细介绍如何将 EA 双向直流电源配置为 CAN 总线网络中的一个节点,并实现远程控制与实时监控。诚挚感谢高望来先生为本文提供了宝贵的素材,并在专业领域给予支持。

CAN 通信基础知识

CAN(Controller Area Network,控制器局域网)是一种广泛应用于高实时性分布式控制系统的串行通信协议,最早由德国Bosch公司于1983年开发,旨在解决传统多线束布线方式带来的复杂性与高成本问题。CAN 总线具备高可靠性、低成本、高效传输和灵活组网等特点,被广泛用于汽车电子、工业控制、机器人、航空航天、医疗设备及能源管理系统等领域。

在 CAN 总线网络中,每个 ECU(电子控制单元)作为一个节点,通过总线实现与其他节点的通信。下图展示了典型的 CAN 总线连接结构:

 

直流电源的 CAN 通信设置与实践(图1)

CAN 数据帧的结构如下图所示。在实际应用中,发送数据时需重点关注仲裁段、控制段及数据段。

直流电源的 CAN 通信设置与实践(图2) 

仲裁段

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,如下表所示:

 

直流电源的 CAN 通信设置与实践(图3)

部分软件默认 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 公头。

 

直流电源的 CAN 通信设置与实践(图4)

若要通过电脑对电源进行控制与监视,需额外配置USB-CAN通信模块,使电脑也成为CAN总线上的一个节点。若USB-CAN模块未内置120Ω终端电阻或未启用电阻开关,则需在EA电源的CAN设置中开启终端电阻。

三  软件准备

■  Windows系统:可选用PCAN-View、PCAN-Explorer或Vector公司的CANoe等软件。

■  Linux系统:可通过candump命令接收消息,cansend命令发送消息。

实践操作

在 Windows 环境下使用 PCAN-View 进行通信

安装驱动及软件后,在设备管理器确认硬件识别正常。

 

直流电源的 CAN 通信设置与实践(图5)

打开PCAN-View,点击菜单栏中的 “Client → Connect” 进行连接设置,之后通过 “Transmit → New Message” 编辑并发送CAN消息。

 

直流电源的 CAN 通信设置与实践(图6)

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 个标准帧。具体帧的结构如下:

 

直流电源的 CAN 通信设置与实践(图7)

详解:以表格中“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文件,提升配置效率。

直流电源的 CAN 通信设置与实践(图8)

直流电源的 CAN 通信设置与实践(图9)

在 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通信功能,将显著提升测试自动化程度与系统集成效率。

相关产品

相关文章

安泰测试

联系电话: 18165377573