×
接口总线驱动 > 总线 > 详情

基于CAN总线的悬浮控制器监控终端的设计与实现

发布时间:2020-05-25 发布时间:
|
  CAN总线是德国BOSCH公司在20世纪80年代初为解决汽车中众多的控制与测试仪器之间的数据交换而开发的一种通信协议。由于CAN总线具有突出的可靠性、实时性和灵活性,因而得到了业界的广泛认同和运用,并在1993年正式成为国际标准和行业标准,被誉为“最有前途的现场总线”之一。CAN总线已广泛应用于背景干扰较强的控制系统之间的实时通信中。

  本文介绍一种基于TMS320LF2407A DSP的便携式CAN网络监控终端。它具有使用简单、界面友好、体积小的特点,适合于磁浮列车悬浮控制器的现场监督和调试。

  1  系统简介

  对于多点悬浮控制来说,为了降低风险和提高控制灵活性,1个悬浮点一般由1个单独的控制器控制,各个悬浮点和监控节点的关系如图1所示。

  CAN属于现场总线范畴,是一种有效支持分布式控制或实时控制的串行通信网络。CAN总线在工业控制领域广泛应用得益于其自身的技术特点。

  (1)只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无须专门的“调度”。

  (2)通信方式灵活。CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他节点发送信息,而不分主从且无须站点地址等节点信息。

  (3)CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间,尤其在网络负载很重的情况下也不会出现网络瘫痪情况。

  (4)采用短帧格式通信,传输时间短,受干扰概率低,具有极好的检错效果。每帧字节数最多8个,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8B也不会占用过长的总线时间,从而保证了通信的实时性。

  (5)CAN的每帧信息都有CRC校验及其他检错措施,保证了数据通信的可靠性。

  在实现上,CAN监控终端的主控芯片选用TI公司的TMS320LF2407A型DSP。数据输出用1块240×128的LCD液晶屏来实现,可以把各个参数变化的趋势用曲线描绘出来,灵活性好。用户输入采用行列扫描式键盘,使硬件实现和软件编程均比较方便。

  2  硬件设计

  系统的硬件组成框图如图2所示。从图中可以看出,TMS320LF2407A DSP是整个电路的核心部件。它是面向实时控制的高性能16位定点DSP,具有32K字的片内Flash程序存储器和2.5K字的片内RAM,运算速度可以达到40MIPS,并带有片上串行通信接口和CAN通信接口等。这些特点为CAN监控终端的设计和实现带来了很大便利。在硬件实现上,考虑到系统对体积和功耗的要求,将所有的DSP程序和LCD的字库均通过JTAG口直接烧写在DSP的片内Flash中,通电后程序即可直接在片内Flash中运行。DSP的晶振频率选择6MHz,通过DSP片内的PLL锁相环4倍频后使DSP的工作主频达到24MHz。

  由于DSP片内备有CAN控制器模块,因此,监控终端的CAN模块设计很简单,只需在DSP的CANTX和CANRX引脚上接1个CAN驱动芯片即可。这里选用的CAN驱动芯片是PCA82C250。

  DSP的供电电压为3.3V,而外围芯片基本上都是5V,如果将它们直接相连必然会导致电平冲突。解决的办法是:在DSP的数据总线和外围接口总线之间用1片LVC4245作为双向缓冲器。在进行数据交换时,DSP的R/W信号控制着LVC4245的数据流向。

  LCD选用240×128点阵的SMG240128A单色液晶屏。它的显示有效面积比较大,适合于显示曲线等信息,底层驱动的编写也比较容易。LCD与DSP的接口采用模拟口线方式,即用2片74HC573分别锁存数据总线和控制总线的数据,模拟LCD的驱动时序。LCD的几个状态位直接由DSP的I/O引脚读入。

  LCD和键盘接口的74HC573以及74HC244芯片均由1片GAL通过对DSP的地址总线进行译码实现选通,其电路简单,灵活性好。

  出于便携式的要求,系统采用电池供电方式。这里采用5节可充电5号电池作为电源,正常供电电压为5~7V,正好符合电源芯片TPS7350的供电要求。由于系统内需要3.3V和5V二种供电电源,故这里选用1片低压差芯片TPS7350作为5V电源的供电芯片,用另一片低压差芯片TPS7333作为3.3V电源的供电芯片。为防止电池电量不足时导致意外停机事故,这里还采用1片LM311构建了一个电池电量报警电路,以便在电池电压低于安全电压时点亮LED报警提示。为了操作方便,所有的硬件电路以及电池等均安装在一个便携的塑料外壳中。

  3  软件设计

  在图1所示的CAN网络结构图中,数据流向大致可以分为二类:各悬浮节点之间的通信和悬浮节点与监控节点之间的通信。由于悬浮节点之间的通信与监控终端没有直接关系,可以不予考虑。需要考虑的是各悬浮节点与监控终端的通信,这就要求在组成CAN网络时就必须制定一个悬浮节点和监控终端间的通信协议。在实现时,具体协议如下:

  (1)CAN监控终端的接收标识符为0,其他悬浮控制节点的标识符均不得与之冲突;全部节点使用统一的波特率(50Kbps或500Kbps);数据包的长度统一为8B。

  (2)CAN监控终端向悬浮节点的数据传送由监控终端的拨码开关指定数据包的标识符,各悬浮节点通过数据包的标识符和自身的本地标识符比较以确定是否接收该数据包。

  (3)CAN监控终端的监听是开放的,并不需要接收的数据包的标识符与自身的标识符一致。但数据包内第1个字节指明了发送该数据包的悬浮控制器的标号。如果该标号与拨码开关指定的标号一致,则继续处理其他字节的内容;否则,丢弃该包。数据包内第2字节表示参数的类型,其余字节是浮点形式的参数数据。

  (4)在系统开始运行时,各悬浮节点并不向CAN监控终端发送数据,只有在CAN监控终端向某个节点发出“发送允许”命令之后,该节点才定时地向CAN监控终端发送上传数据。如果CAN监控终端要监听其他节点的数据,则需先禁止当前节点的数据发送,再向其他节点发出“发送允许”命令。这样可以有效减小CAN总线上的数据流量。

  从实际出发,要求软件尽量简单,界面尽量友好,便于操作。在实现时,为充分利用LCD的显示能力,这里采用菜单的方式提示用户操作。完成后的软件界面如图3所示。

  程序采用分层的程序结构。最底层是一些硬件驱动程序,如键盘扫描、LCD状态读取和LCD数据写入等。在这些底层驱动程序的基础上再组织一些上层子程序供主程序调用。在编程语言的选择上,考虑到程序的结构相对比较复杂,程序主体采用C语言编程,只有少部分涉及到DSP一些底层操作的部分才使用汇编语言。软件的主体流程图如图4所示。

  初始化包括对CAN控制寄存器的初始化以及屏幕初始化,并在这之后读取拨码开关的状态,确定波特率及通信对象,向被监控节点发出“发送允许”命令等。

  程序主体是一个大循环。在初始化之后便不断扫描键盘。首先判断是否有键按下,如果用户没有操作,则检查CAN模块是否接收到数据。如果没有接收到数据,则继续扫描键盘。如果接收到了数据(即相应的CAN接收中断标志位置位),则将接收到的数据包按上述协议进行分析、整合处理,然后在屏幕上显示出接收到的数值;同时,在曲线的对应位置上描点,完成曲线的绘制。如果在键盘扫描过程中发现有按键按下,则分析按键的类别,然后转相应的子程序处理。处理完毕再返回主程序。

  LCD显示涉及的子程序比较多,分层也很多。在编写程序时首先在DSP的Flash ROM里定义一个段,将LCD显示过程中可能涉及的字符、汉字等点阵数据做成一个库,放入段内,在使用时再通过ROM访问指令读取。

  曲线的绘制过程如下:首先确定坐标的原点位置、X方向和Y方向的最大坐标以及输入数值的范围,然后在内存中开辟一个同X坐标点数一样大小的缓冲区BUFF,用于记忆已经绘制的各点的坐标;同时设定一个X指针,用于存储当前的X坐标。当接收到新的数据,确定好Y方向的坐标后,首先查找BUFF,得到原来显示在该X位置的点的Y坐标,将这个位置上的点清除,然后在新的Y坐标上描点,最后在BUFF的相应X位置上记录下新描点的Y坐标值,此时便完成了一个点的绘制。后面还要调整屏幕上的指针以标明当前显示的X坐标。当绘制到X方向的最大位置时,再返回X=0的位置继续绘图。

  CAN监控终端向悬浮节点发送数据的过程一般是伴随在相应的菜单操作并按下ENTER键生效后进行的。在每次数据发送之前,程序都需要读入拨码开关的状态,以确定通信的波特率和通信对象的标识符。在实现上,拨码开关的最高位控制着波特率,后面7位则决定了通信的发送标识符。

  4  结束语

  使用表明,这种基于TMS320LF2407A DSP的CAN总线监控终端在多悬浮控制器组成的网络中可以发挥很好的监控和调试作用,其结构小巧、界面友好,使用相当方便。 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
串口通信属性及事件解析