DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 691|回复: 0
打印 上一主题 下一主题

[接口电路] 基于STC89C51的CAN总线点对点通信模块设计

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-22 09:20:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
张明轩,胡卓敏



(中北大学信息与通信工程学院,山西 太原 030051)
0 引言



现场总线是应用在生产最底层的一种总线型拓扑网络,是可用做现场控制系统直接与所有受控设备节 点串行相连的通信网络。在工业自动化方面,其控制的现场范围可以从一台家电设备到一个车间、一个工厂。一般情况下,受控设备和网络所处的环境可能很特殊, 对信号的干扰往往也是多方面的。但要求控制则必须实时性很强,这就决定了现场总线有别于一般的网络特点。此外,由于现场总线的设备通常是标准化和功能模块 化,因而还具有设计简单、易于重构等特点。



1 CAN总线概述



CAN (Controller Area  Network)即控制器局域网络,最初是由德国Bosch公司为汽车检测和控制系统而设计的。与一般的通信总线相比,CAN总线的数据通信具有突出的可 靠性、实时性和灵活性。其良好的性能及独特的设计,使CAN总线越来越受到人们的重视。由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业, 而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。目前,CAN已经形成国际标 准,并已被公认为几种最有前途的现场总线之一。它的直线通信距离最大可以达到l  Mbps/30m.其它的节点数目取决于总线驱动电路,目前可以达到110个。



2 CAN系统硬件设计



图l所示是基于 CAN2.0B协议的CAN系统硬件框图,该系统包括电源模块、MCU部分、CAN控制器、光电耦合器、CAN收发器和RS232接口。硬件系统MCU采 用STC89C5l,CAN控制器采用SJAl000,CAN收发器采用PCA82C250,光耦隔离采用6N137。







图 l中的CAN控制器SJAl000是CAN控制器(BasicCAN)PCA82C200的替代产品,它增加了一种新的操作模式(PeliCAN),这种 模式可以支持很多新特性的CAN2.OB协议。微处理器STC89C5l在一定的模式下可对SJAl000中的寄存器进行读写操作,以控制SJAl000 进行数据的发送和接收。



CAN收发器PCA82C250是CAN控制器与物理总线之间的接口。它最初是为汽车中的高速应用(lMbps)而设计的。该器件可以提供对总线的差



动发送和接收功能。它采用双线差分驱动方式,有助于抑制汽车等恶劣电气环境下的瞬变干扰。PCA82C250可对SJAl000传来的TTL电平和CAN总线差动信号进行相互转换,而且可使总线具有较好的EMC特性。



光耦隔离器可对总线上各个CAN节点进行电气隔离,以增强系统的可靠性,减少系统与系统之间的相互影响。



2.1 CAN控制器硬件电路的设计



将SJAl000的ADO~AD7连接到STC89C5l的P0口,CS连接到STC89C5l的P20,这样,当P20为O时,CPU片外存储器地址即可选中SJAl000,CPU



则通过这些地址对SJAl000执行相应的读写操作。设计时,可将SJAl000的RD、WR、ALE分别和STC89C5l的对应引脚相连,INT接STC89C51的IN-T0,这样,CPU可以通过中断方式来访问SJAl000。其连接电路图如图2所示。







2.2 光电耦合器的设计



为 了增强CAN总线节点的抗干扰能力,SJAl000的TX0和RX0并不直接和收发器PCA82C250的TXD和RXD相连,而是通过高速光耦 6N137后再和PCA82C250相连,这样就可以很好的实现各CAN节点间的电气隔离。应当注意的是光耦部分采用的电源VCC和VDD最好完全隔离, 可以用小功率的电源隔离模块来实现,这样就可以提高节点的稳定性和安全性。其电路图如图3所示。







2.3 CAN收发器的设计



PCA82C250 是一种差分收发器,它可完成TTL电平到差分信号的转换。它的CANH和CANL引脚各自通过一个5  Ω的电阻和CAN总线相连,该电阻可以起到一定的限流作用,可保护PCA82C250免受过流的冲击。而CANH和CANL与地并联了两个30pF的小电 容。可以过滤总线上的高频干扰并具有一定的防电磁辐射能力。PCA82C250的RS脚上应接一个斜率电阻,电阻大小可根据总线通信速度适当调节,一般可 在16~140 kΩ之间,这里选用47 kΩ电阻。图4所示是收发器的电路图。











2.4 总体电路分析



由 于本设计将SJAl000的AD0~AD7和STC89C5l的P0口相连,CS连接到P20口,ALE、WE、RD分别与单片机的对应各口相连,因 此,SJAl000就相当于单片机的外部存储器。访问SJAl000的寄存器就相当于对外部寄存器地址进行读写操作。SJAl000的MODE接高电平, 采用的是intel二分频模式,TXO和RX0通过高速光耦器件6N137与CAN收发器82C250连接,PCA82C250的TXD和RXD引脚分别 接发送和接收驱动信号,然后通过CANH和CANL接至物理总线传输介质上,这个介质可以是光纤或双胶线等。



3 CAN系统软件设计



STC89C51的软件设计由MCU初始化、SJAl000初始化、SJAl000的接收发送和数据显示模块等构成。其系统软件设计图如图5所示。







3.1 SJAl000初始化软件设计



SJAl000的初始化程序设计主要是通过对SJAl000的寄存器写入相应的控制字,从而确定SJAl000的工作方式。在对SJAl000的寄存器写入控制字时,要在SJAl000的复位模式下采用软件复位模式。其初始化流程图如图6所示。







3.2 SJAl000数据发送软件设计



报文的发送通常是由CAN控制器根据CAN协议规范自动完成的。首先由CPU将要发送的报文传送到发送缓冲器中,并置位命令寄存器中的发送请求标志。其发送流程图如图7所示。







3.3 SJAl000接收数据软件设计



CPU以一定的周期读取CAN控制器的状态寄存器,从而检查接收缓冲区的转台标志,指示是否至少接收到一个报文。当接收缓冲区状态标志指示为“空”时,表示没有接收到报文;在没有新的检查接收缓冲区状态的要求前,CPU则继续当前的任务。



当接收缓冲区状态标志为满的时候,即表明已接收一个或者多个报文。此时CPU将从CAN控制器取出第一个报文,并置位命令寄存器中的释放接收缓冲区标志。其接收流程图如图8所示。







4 测试



将 两个CAN系统模块挂接在CAN总线上,相当于构成CAN总线上两个节点,这样就可以点对点地发送数据,其测试方法就是在当其中一个节点的按键按下时,除 了自身的数码管1、2显示加一外,总线上另一节点接收到该数据后,它的数码管3、4也做加一操作,即与发送端节点的数码管1、2同步显示。这样就可以测试 CAN总线的点对点的通信。



5 结束语



通过此系统可以较好地完成CAN节点的点对点数据发送和接收,且正确率高,速度快。若加以扩张,再增加节点,其通信原理与上述相同。此外,也可以加上串口,这样就可以实现下位机的多点采集数据,上位机实现显示和控制。因此,本文设计在实践中如果加以扩张,会有很好的价值。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-28 17:41 , 耗时 0.088065 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表