您的位置 首页 基础

Ti的C28x系列MCU CAN总线

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

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

假如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的规范帧而拟定的。

下面详细介绍下整个体系的一些细节
CAN通讯格局:规范帧

暂时由于项目中进行CAN的主机与从机数量有限,故选用规范帧即可,今后项目假如需求进步,能够选用扩展帧,扩展帧与规范帧的格局仅仅是ID长度的差异。

通讯速率:100Kbps

这是一个比较保存的波特率,由于暂时能够满意项目需求,故没有寻求更高的波特率,在闭环总线上,CAN通讯速率最高可达1Mbps。

通讯周期:100ms

这是主机恳求从机的周期,即主机每隔100ms,恳求一个从机,然后相应的从机收到恳求后,再呼应。

CAN总线的物理衔接方法:闭环总线通讯网络

即主机与最终一个从机的CAN通讯接口,会并联一个120欧姆的电阻,这是为了阻抗匹配,那什么叫阻抗匹配,笔者也不明白,百度了下,我们自行了解下:阻抗匹配是指负载阻抗与鼓励源内部阻抗相互适配,得到最大功率输出的一种作业状况。关于不同特性的电路,匹配条件是不一样的。阻抗匹配(Impedance matching)是微波电子学里的一部分,首要用于传输线上,来达至一切高频的微波信号皆能传至负载点的意图,不会有信号反射回来源点,然后提高动力效益。

通讯协议

通讯协议,怎样解说呢,笔者以为一方面是主机与从机的通讯的时分,详细的数据交流方法,这种方法决议着通讯数据的误码率、可靠性,决议整个体系的数据交流功率。另一方面,进行通讯的数据,怎么存储,这决议着代码量等。

现在本体系中选用的通讯协议为简化版别的CANOpen协议,根据这套协议,从机能够将要和主机交流的数据都放在一个int型的数组中,该数组的长度为256,当然也能够更长,仅仅下面的协议要随之更改。

然后从机的数据存储方法,决议着整个体系的通讯协议,这套协议是根据CAN规范帧的最小单元而定的,也便是一帧规范帧数据而定的。主机在每帧数据中,能够拜访不同从机,能够对从机中不同的数组元素进行拜访,能够是读数组中的元素,也能够赋值给数组中的元素。然后从机收到主机的恳求后,经处理之后,再发送给主机一个规范帧,这帧数据,是从机告知主机通讯是否成功,一起也包括主机想要的内容。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/37693.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部