2345|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

Ti的C28x系列的DSP(28069)(28377D)使用经验 [复制链接]

在一个项目中,笔者接触过这样一个通讯系统,整个系统的通讯架构大概如下图,典型的一主多从。

如果Slave_N的N超过10,那这样一个通讯系统还是比较复杂的。

笔者认为要这套系统有以下几点需要考虑:

1、通讯故障处理

(1)如果整个系统中,主机或这从机出现通讯故障,此时应该怎么处理?

笔者目前的做法是,每个DSP的CAN的收发函数,首先有一个故障检测,一旦检测到故障,则CAN停止收发数据,进入软件复位状态,如果没有检测到故障,则继续进行通讯。这故障是CAN寄存器总的故障位。但这个做法,笔者还没仔细测试过,是否有用,因为目前这套通讯系统还能够正常运行,没有出现特别奇怪的通讯故障问题。

Uint16 ECanFaultHandle(void) //从机的故障检测函数
{
        struct ECAN_REGS ECanaShadow;
 
        //ECanaRegs.CANTEC.bit.TEC //发送错误计数器
        //ECanaRegs.CANREC.bit.REC //接收错误计数器
 
      if (ECanaRegs.CANES.bit.EW == 1) //出现警告状态
      {
        EALLOW;
        ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
        ECanaRegs.CANMC.bit.SRES = 1;  //开始软件复位
        ECanaRegs.CANMC.bit.ABO = 1; //自动总线连接使能
        ECanaRegs.CANMC.all= ECanaShadow.CANMC.all;
        EDIS;
        return 0;
      }
      else if(ECanaRegs.CANES.bit.EP == 1) //被动错误
      {
        EALLOW;
        ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
        ECanaRegs.CANMC.bit.SRES = 1;  //开始软件复位
        ECanaRegs.CANMC.bit.ABO = 1; //自动总线连接使能
        ECanaRegs.CANMC.all= ECanaShadow.CANMC.all;
        EDIS;
        return 0;
      }
      else if(ECanaRegs.CANES.bit.BO == 1) //离线
      {
        EALLOW;
        ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;
        ECanaRegs.CANMC.bit.SRES = 1;  //开始软件复位
        ECanaRegs.CANMC.bit.ABO = 1; //自动总线连接使能
        ECanaRegs.CANMC.all= ECanaShadow.CANMC.all;
        EDIS;
        return 0;
      }
      else return 1;
 
}
(2)如果主机通讯没有故障,而从机出现故障怎么办?

笔者的做法是,主机会对从机的CAN通讯进行检测,一旦检测到某个从机不再发送数据,则主机会报一个CAN通讯故障,提示用户检查故障源。

2、总线的带宽

一主多从的通讯系统,如果主机和从机同时进行向CAN总线发送数据,此时CAN总线的数据势必非常多,但CAN总线的带宽是有限制的,当从机越来越多的时候,这势必会影响数据传输的速度,为了避免这个现象,怎么办?

当Slave_N的N超过20之后,该主机与从机该采用怎样的方式进行通讯呢?

笔者目前的做法,是采用的是主机请求,从机响应的方式,即一问一答,这有点类似Modbus协议。这样的方式,势必能够保证单位时间CAN总线的带宽不会影响数据传输的速度,但这种做法的缺点,如果从机数量过多,主机遍历从机的时间肯定越来越长,笔者认为,针对这种情况,一方面可以提高CAN通讯的波特率,另一方面可以缩短主机访问从机的周期。

3、通讯的效率

通讯效率,这个词可能描述得不够恰当,但针对这个一主多从的系统,我们确实得考虑,数据交换的数量,数据交换的便利性,代码量等方面的问题。在本次系统设计时,从机作为仅仅作为被动相应者,只有主机请求时,从机才会响应,所有从机只对主机负责,一个从机不请求另一个从机,也不响应另一个从机。

目前本次系统采用简化版的CANOpen协议,真正的CANOpen协议,笔者没有还接触过,这个CANOpen协议是基于CAN的标准帧而制定的。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表