世纪电源网社区logo
社区
Datasheet
标题
返回顶部
未解决

I2C通信换成CAN通信

[复制链接]
查看: 2937 |回复: 8
1
cpu666
  • cpu666
  • 离线
  • LV6
  • 高级工程师
  • 积分:931
  • |
  • 主题:54
  • |
  • 帖子:129
积分:931
LV6
高级工程师
  • 2019-9-18 08:51:26
10问答币
开关电源原来用I2C通信,现在换成CAN通信,遇到以下问题:
I2C通信中有PMBUS表,共256个地址,每个变量VOUT IOUT有专门对应的地址,那CAN协议中要传送的数据地址怎么定义,要存放在哪里?ID ?


hpf0532
  • 积分:3211
  • |
  • 主题:6
  • |
  • 帖子:193
积分:3211
LV8
副总工程师
  • 2019-9-18 09:18:01
  • 倒数8
 
CAN总线没有主机,用ID区分消息优先级和功能,没有地址的概念。
cpu666
  • cpu666
  • 离线
  • LV6
  • 高级工程师
  • 积分:931
  • |
  • 主题:54
  • |
  • 帖子:129
积分:931
LV6
高级工程师
  • 2019-9-18 10:51:46
  • 倒数7
 
那比如要发送几个变量,Vout Iout PIN Pout,怎么确定哪个ID对应哪个变量,能否简单给举个例子?
ID 0X300 对应Vout
ID 0X500 对应Iout 需要怎么配置。
hpf0532
  • 积分:3211
  • |
  • 主题:6
  • |
  • 帖子:193
积分:3211
LV8
副总工程师
  • 2019-9-18 11:43:46
  • 倒数6
 
你可以直接用ID区分,也可以用数据帧的第一个字节区分,具体协议自己定就行了。CAN只是硬件层面的。
cpu666
  • cpu666
  • 离线
  • LV6
  • 高级工程师
  • 积分:931
  • |
  • 主题:54
  • |
  • 帖子:129
积分:931
LV6
高级工程师
  • 2019-9-18 13:30:27
  • 倒数5
 
我知道自己定义的,具体怎么写呢?还请指教啊
yeeyee
  • yeeyee
  • 离线
  • LV6
  • 高级工程师
  • 积分:926
  • |
  • 主题:0
  • |
  • 帖子:8
积分:926
LV6
高级工程师
  • 2019-9-27 11:27:44
  • 倒数4
 
应该放ID域。
cpu666
  • cpu666
  • 离线
  • LV6
  • 高级工程师
  • 积分:931
  • |
  • 主题:54
  • |
  • 帖子:129
积分:931
LV6
高级工程师
  • 2019-9-27 17:18:16
  • 倒数3
 
是有相关的寄存器么,我没有找到,demon code中定义的结构体,然后直接给ID赋值了
yeeyee
  • yeeyee
  • 离线
  • LV6
  • 高级工程师
  • 积分:926
  • |
  • 主题:0
  • |
  • 帖子:8
积分:926
LV6
高级工程师
  • 2019-9-28 09:56:32
  • 倒数2
 
例如某款CAN电源( 目前知道,3款都类似实现)。
远程,扩展帧 ,125K
ID 固定 4Byte  0xHHHHHHHH  ;
数据  8 BYTE  0x HHHHHHHH  HHHHHHHH
前面  4 BYTE  可以放ID;后面 4 BYTE 可存放数值。
cpu666
  • cpu666
  • 离线
  • LV6
  • 高级工程师
  • 积分:931
  • |
  • 主题:54
  • |
  • 帖子:129
积分:931
LV6
高级工程师
最新回复
  • 2019-10-11 18:12:29
  • 倒数1
 
谢谢回答,现在可以实现最基本的收发功能,但是滤波部分没有起作用,所有ID DSP都可以接收。滤波配置如下:


   C1FLTCON0Lbits.F0BP = 1 ; // message stored in FIFO1
    C1FLTOBJ0L = 0x1000; // EID = 0x00002
    C1FLTOBJ0H = 0x4000;  // Match messages with extended identifier address
    C1MASK0L = 0xF7FF;  // MEID = 0x1FFFE - Last bit is 0
    C1MASK0H = 0xFFFF; // Match message types
    C1VECLbits.FILHIT = 0;
    C1FLTCON0Lbits.FLTEN0 = 1; // Enable the filter 0
理论上应该只能通过ID= 0x00002 和ID= 0x00003的报文,请问能否看出问题出在哪里?
另外,接收报文必须使用滤波器么?上位机给DSP发什么,接收什么不就可以了。
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号