王 涣,刘钟宇
(中国电子科技集团公司第四十七研究所,沈阳 110032)
一个由CAN 总线构成的单一网络中,理论上可以挂接无数个节点[1]。一个CAN 节点要完成相应的测控功能,需要以下部分:CAN 收发器直接与CAN的物理总线相连,控制CAN 控制器与总线物理层之间的逻辑电平信号;CAN 控制器内部集成了完整的CAN 通信协议,用以完成CAN的各项功能,并实现与模块控制器的接口;模块控制器既要控制各执行元件完成特定测控任务,又要处理一定的人机接口功能,还要控制CAN 控制器实现与其他节点的数据通信[2]。
从图1 中可以看出,微处理器AT89S52 负责SJA1000的初始化,通过控制SJA1000 实现数据的接收和发送等通信任务。SJA1000的AD0~AD7 连接到AT89S52的P0 口。连接到AT89S52的P2.7,P2.7为0的CPU 片 外 存 储 器 地 址 可 对SJA1000 执行相应的读写操作。SJA1000的、、ALE 分别与AT89S52的对应引脚相连,接AT89S52的。AT89S52 可以通过中断方式访问SJA1000。控制器SJA1000 通过串行数据输出线TX和串行数据输入线RX 连接到收发器PCA82C250。收发器通过有差动发送和接收功能的两个总线终端CANH 和CANL 连接到总线电缆。输入Rs 用于模式控制,参考电压VREF的输出电压是额定VCC的0.5 倍,其中收发器的额定电源电压是5V。R3 和R4是120Ω,称为终端电阻,起增大负载、减少回波反射作用,是一种阻抗匹配的补偿措施。它对于匹配总线阻抗起着相当重要的作用,否则数据通信的抗干扰性及可靠性会大大降低,甚至无法通信。
CAN 总线节点的软件设计主要包括三大部分:SJA1000 初始化、报文发送和报文接收。
AT89S52 上电或复位后,调用复位程序给SJA1000的复位端RST 提供复位信号,使SJA1000进入复位模式,SJA1000的初始化只有在复位模式下才可以进行[3]。初始化程序框图如图2 所示。
初始化程序主要包括以下寄存器的设置:①时钟分频寄存器定义:BasicCAN 模式还是PeliCAN模式;是否使能CLKOUT 及输出时钟频率;是否旁路CAN 输入比较器;TX1 输出是否用专门的接收中断输出。②通过验收码寄存器和验收屏蔽寄存器定义接收报文的验收码和对报文和验收码进行比较的相关位定义验收屏蔽码。③通过总线定时寄存器定义总线的位速率、位周期内的采样点和一个位周期内的采样数量。④通过输出寄存器定义CAN 总线输出管脚TX0、TX1的输出模式和输出配置。⑤最后,清除SJA1000的复位请求标志进入工作模式,SJA1000 方可进行报文的发送和接收。
图1 CAN 总线节点电路图
图2 初始化程序框图
单片机将要发送的报文送到SJA1000的发送缓冲器中,然后将SJA1000 命令寄存器的发送请求标志位(TR)置位,发送过程由SJA1000 独立完成。在新报文写入发送缓冲器之前,必须先检查状态寄存器的发送缓冲器状态标志(TBS),若为“1”,发送缓冲器被释放,可将新的报文写入缓冲器,否则,发送缓冲器将被锁定,新报文不能被写入。发送程序框图如图3 所示。
图3 发送程序框图
报文的接收也是由SJA1000 独立完成的。收到的报文通过接收滤波放在FIFO 队列中,第一条报文进入接收缓冲器,由状态寄存器的接收缓冲器状态标志位(RBS)和接收中断标志位(RI)标出。单片机从接收缓冲器取走一条报文后可通过置位SJA1000 中命令寄存器的释放接收缓冲器的标志位(RRB)来释放接收缓冲器。接收程序的设计采用中断方式,这时在主程序中必须使用SJA1000的中断使能寄存器(PeliCAN 模式)或控制寄存器(BasicCAN 模式)的中断接收使能位(RIE)置“1”。若FIFO 满,但还有报文接收,导致数据超载时,进行相应处理。接收程序框图如图4 所示。
图4 接收程序框图
通过硬件、软件两方面,介绍了一种CAN 总线网络节点电路的设计。如果要将CAN 总线应用于通信任务比较复杂的系统中,那么在软件设计上还需要加入CAN 总线错误处理、总线脱离处理、接收滤波处理、波特率参数设置和自动检测等程序,以及CAN 总线通信距离和节点数的计算等方面的内容。
[1]邬宽明.CAN 总线原理和应用系统设计[M].北京:北京航空航天大学出版社,2002.
[2]甘永梅,李庆丰,刘小娟.现场总线技术及其应用[M].北京:机械工业出版社,2004.
[3]李全利,仲伟峰,徐军.单片机原理及应用[M].北京:清华大学出版社,2006.