0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

深圳市日图科技有限公司 2025-10-10 09:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

CAN 通信基础知识

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

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

wKgZO2jnJ8KACheMAAG23DMTKQw184.png

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

wKgZPGjoWKCASGK_AARtX3l2EA0297.png

仲裁段

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

wKgZPGjnJ8KAZTVRAACNrPfsUSE390.png

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

wKgZO2jnJ8OAArK1AAHDwAWaNVg912.png

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

软件准备

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

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

实践操作

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

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

wKgZO2jnJ8OADzrkAAHMjJPSo60725.png

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

wKgZPGjnJ8OAUDy2AAVE2zbOq4w308.png

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

wKgZPGjnJ8SAIV0aAAC8iF84dfg211.png

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

wKgZO2joWW6AcKiRAAFGAvzKcSA132.pngwKgZO2joWXOARJCSAAEHXOmJjCU795.png

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN通信
    +关注

    关注

    5

    文章

    108

    浏览量

    18971
  • 局域网
    +关注

    关注

    6

    文章

    793

    浏览量

    49141
  • 直流电源
    +关注

    关注

    9

    文章

    1472

    浏览量

    56211
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    直流电源CAN通信设置实践

    EA Elektro-Automatik作为全球仪器行业领导者Tektronix旗下的大功率直流电源品牌,凭借其产品功能强大、性能稳定可靠等优势,被广泛应用于多个行业,尤其在汽车电子、新能源及工业控制等领域备受青睐。
    的头像 发表于 10-09 11:07 3079次阅读
    <b class='flag-5'>直流电源</b>的<b class='flag-5'>CAN</b><b class='flag-5'>通信</b><b class='flag-5'>设置</b>与<b class='flag-5'>实践</b>

    直流电源和稳压电源的区别

    直流电源和稳压电源的区别 直流电源是输出直流电的,直流电是指电流方向不随时间而变化的电流,注意是方向不变化,比如:干电池就是一个
    发表于 01-08 19:31 2747次阅读

    直流电源符号_直流电源品牌排行

    直流电源是一种常用的电源类型,它是一种能量转换装置,它把其他形式的能量转换为电能供给电路,以维持电流的稳恒流动。现代很多电子产品也是采用了直流电源直流电源的特性倍受人们关注,那么目前
    发表于 08-19 15:24 3.1w次阅读

    简易数控直流电源设计

    简易数控直流电源设计(高频开关电源技术指标)-简易数控直流电源设计,有需要的可以参考!
    发表于 09-15 18:42 94次下载
    简易数控<b class='flag-5'>直流电源</b>设计

    直流电源基础

    直流电源基础(电源技术期刊版面费多少)-直流电源基础,有需要的可以参考一下!
    发表于 09-16 09:21 61次下载
    <b class='flag-5'>直流电源</b>基础

    直流电源系统模块组成,直流电源系统作用

    直流电源系统是一种供电设备,它是用于水电厂、火电厂、各变电站等用户的直流设备,为信号供电设备、保护设备、自动装置、应急照明、应急用电以及断路器的开合操作提供直流电源直流电源系统是一种
    发表于 11-08 17:21 41次下载
    <b class='flag-5'>直流电源</b>系统模块组成,<b class='flag-5'>直流电源</b>系统作用

    程控直流电源是什么?为什么选择程控电源

      什么是程控直流电源?程控直流电源通过外部控制来设置输出电压和输出电流,并设置连续电流和电压稳定度,程控直流电源由微型计算机控制,该设备配
    发表于 01-11 09:58 10次下载
    程控<b class='flag-5'>直流电源</b>是什么?为什么选择程控<b class='flag-5'>电源</b>?

    直流电源的应用电路

    电子电路设备中,需要稳定的几十安以下的直流电源。下图为直流电源的框图。
    发表于 08-25 09:03 2060次阅读

    高压直流电源和特种直流电源俩者区别

    高压直流电源和特种直流电源都有一个相同点,就是他们的电压都很高,不同的地方也有很多,高压直流电源作为普通电源,特种电源的很多作用是高压
    的头像 发表于 03-09 11:15 3618次阅读
    高压<b class='flag-5'>直流电源</b>和特种<b class='flag-5'>直流电源</b>俩者区别

    直流电源系统的作用 直流电源系统的组成 直流电源系统常用接线方式

    直流电源系统的作用 直流电源系统的组成 直流电源系统常用接线方式  直流电源系统是指一种能够提供稳定的直流电压、电流的系统,主要用于供电、充
    的头像 发表于 10-30 09:57 4586次阅读

    分布式直流电源直流电源之间的区别是什么?

    )两者之间的区别主要在于用途、结构、技术和价格。 首先,分布式直流电源是一种为在建筑、数据中心、通信基站等大型场所的直流电负载设备供电的系统。它通过将交流电转换为
    的头像 发表于 11-16 11:17 4259次阅读

    可编程直流电源的基本原理以及参数设置

    可编程直流电源是一种常用的能提供稳定的直流电压和电流输出的电源设备,广泛应用于电子、通讯、自动化、实验室等领域。为了保证电路的正常工作和实验的准确性,正确设置可编程
    的头像 发表于 06-07 17:01 3894次阅读
    可编程<b class='flag-5'>直流电源</b>的基本原理以及参数<b class='flag-5'>设置</b>

    直流电源纹波怎么测量

    直流电源纹波是指直流电源输出电压中的交流成分,它会影响电子设备的正常工作。因此,测量直流电源纹波对于保证电子设备的正常运行和提高电源质量具有重要意义。 一、
    的头像 发表于 08-29 10:28 5413次阅读

    双向直流电源的典型应用

    双向直流电源为被测物提供精准稳定的电压和电流,同时支持将被测物生成的电能回馈给电网。双向直流电源可以测试多种电子设备,如电动汽车和航天设备的电池、驱动系统和直流母线等。双向直流电源的功
    的头像 发表于 11-19 10:16 2370次阅读
    双向<b class='flag-5'>直流电源</b>的典型应用

    直流电源怎么连接负载 常见直流电源接线方式

    直流电源连接负载的基本概念 在电子电路中,直流电源(DC Power Supply)是提供稳定直流电压或电流的设备。负载(Load)则是消耗电源能量的电子元件或设备。正确连接
    的头像 发表于 12-23 09:45 1.3w次阅读