论文部分内容阅读
【摘 要】根据CAN总线技术特点,以ATmega16单片机为核心,通过控制CAN 控制器SJA1000工作,实现CAN总线通信。给出了基于CAN总线智能节点的硬件和软件设计方法,并实现了智能节点之间的通信。实际应用表明,该智能节点工作稳定可靠,具有较强的抗干扰能力。
【关键词】CAN总线;AVR单片机;SJA1000;智能节点;CAN收发器
CAN(Controller Area Network局域控制网)总线由Bosch、Benz研究试验,于1986年2月正式提出,至1993年11月Bosch CAN2.0成为国际标准(ISO11898)。2000年CAN总线芯片年度销售超过1亿片,欧产轿车都至少装配一条CAN总线网络。CAN的许多特点使其成为诸多工业测控领域中优先选择的现场总线之一。在广泛的工业领域,CAN总线可作为现场设备级的通信总线,并且与其他的总线相比,具有很高的可靠性和性价比。本文介绍了一种基于AVR单片机 ATmega16的CAN智能节点设计方案,软硬件均已通过测试。
一、节点硬件电路设计
CAN智能节点硬件电路如图1所示。电路主要由五部分组成:微控制器 ATmega16、独立CAN控制器SJA1000、CAN总线收发器82C250、高速光电耦合器6N137、看门狗复位电路。微控制器采用ATMEL公司生产的AVR单片机ATmega16,该单片机采用一级流水线技术,在当前指令执行时,就取出下一条要执行的指令,实现了一个时钟周期执行一条指令,大大提高了CPU的运行速度,同时也提高了系统的可靠性。ATmega16负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。SJA1000 负责完成CAN总线通信协议的物理层和数据链路层的功能。
图1 CAN总线智能节点硬件电路
为了增强CAN总线节点的抗干扰能力,在CAN控制器SJA1000和CAN总线收发器82C250之间加接高速光电耦合器6N137,这样就很好的实现了总线上各个CAN节点之间的电气隔离。光电耦合电路所采用的两个电源VCC和VDD必须完全隔离,虽然增加了节点的复杂性,但是却提高节点的稳定性和安全性。82C250与CAN总线接口部分也采取了一定的安全和抗干扰措施。82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可以起到一定的限流作用,保护82C250免受过流的冲击。CANH和CANL与地之间并联了两个30pf的小电容,可以起到消除总线上的高频干扰和一定的防电磁辐射能力。另外,在两根CAN总线接入端与地之间分别反接了一个保护二极管,当CAN总线有较高的负压时,通过二极管可以起到一定的过压保护作用。在程序运行过程中,微控制器有可能因为受到外界干扰而不能正确执行指令,甚至陷入死循环。为了防止由此导致的系统瘫痪,在电路中加入了看门狗复位芯片MAX813L。该芯片具有独立的看门狗计时器,当系统发生故障时间达到看门狗的计时值时,MAX813L自动产生复位信号给ATmega16和SJA1000复位。
二、软件设计
CAN总线通信程序是指在单片机控制下,模块将采集到的数据发送到总线上供上位机或其他模块使用,以及接收总线上发送给本模块的数据帧并将其存入缓冲区中的程序。如图2所示,在通电或复位后,主控制器通过运行它自身的复位例行程序来对SJAl000控制器进行初始化,以建立CAN总线通信。CAN总线通信程序由三大部分组成:SJAl000初始化、接收和发送。
1.SJA1000初始化。初始化是在程序运行前对SJA1000的工作方式进行设定,使其能够按照用户需要的方式进行CAN总线通信工作。SJA1000控制器在通电后或硬件复位后,必须通过初始化设置以建立CAN通信。而且SJA1000可以在主控制器工作期间被再次初始化,这可以通过发送软件复位请求来实现。SJA1000的初始化流程如图3所示。在通电后,CAN控制器在引脚17上获得一个低电平复位脉冲,使之进入复位模式。在开始对SJA1000的各个配置寄存器设定之前,主控制器通过读复位模式/请求标识来检测SJA1000是否进入复位模式。单片机要等待SJA1000完成上电复位后才能对SJA1000的配置寄存器进行配置,存储配置信息的寄存器只能在复位模式下才能写入。
2.CAN总线发送程序。对SJA1000进行初始化建立CAN总线通信后,模块就可以通过CAN总线发送和接收CAN数据包。消息的发送由CAN控制器SJA1000根据CAN的规则自动完成,主控制器必须把要发送的信息发送到SJA1000的发送缓冲器中,并设置“发送请求标识位”于命令寄存器中。发送过程既可由SJA1000产生的中断请求来控制,也可通过检测SJA1000控制部分的状态标识符来控制。本文使用的是中断方式, 在发送前和发送后需要进行一些判断,避免不必要错误。在发送前需要确保SJA1000没有正在接收报文,发送缓冲区没有处于锁定状态,在发送后需要判断发送是否完成才能中断返回。发送子程序流程如图4所示。
3.CAN总线接收程序。CAN控制器SJA1000根据规则自动接收消息,接收到的消息放入接收缓冲器,此时接收缓冲器状态标识RBS置为“1”(表示接收缓冲器中有接收到的消息)。主控制器将消息保存到程序设置的消息缓冲器中,同时释放接收缓冲器并对消息内容做出反应。接收过程可以通过SJA1000的中断请求或查询SJA1000的标识控制部分来进行。在系统应用中,模块从总线上获取上位机或者其他模块的信息,接收消息是被动的。如果采用查询法,将耗费大量的时间来查询SJA1000接收状态,且实时性不好。因而在接收程序设计中,采用中断法进行控制。如果SJA1000接收到消息,消息已通过接收过滤并存放于接收队列中,则产生一个接收中断,于是主控制器立即做出反应,把收到的消息送到消息存储器,并且在设置了相应命令寄存器中的标识符“RRB”后,发送释放接收缓存命令。接收队列中的下一个消息将会产生新的接收中断,因此在一个中断期间不必读出接收队列中所有可获得的消息。和这种情况相对的是立即读出队列中所有消息的程序,这样可以避免不断进入中断,流程图见图5。在释放了接收缓冲器后,消息检查状态寄存器中的接收缓冲器状态标识(RBS)清“0”,以标志接收缓冲器已被释放。整个接收过程在中断程序中实现,而不需要与主程序发生关联,甚至对消息的反应也可中断中进行。
三、结语
CAN总线具有较强的纠错能力,适用于高噪声环境,具有较远的传输距离,广泛应用于计算机测控领域,该设计作为CAN总线节点的一个模块,介绍了一种基于AVR单片机ATmega16的CAN智能节点设计方案,描述了主要设计思路,给出了设计流程图,通过串口调试软件实现了两个智能节点的通信测试。通过测试表明该智能节点具有结构简单、易于扩展、系统运行稳定、实时性好、抗干扰能力强等优点,具有良好的应用前景。
参 考 文 献
[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007
[2]刘建昌,周玮,王明顺.计算机控制网络[M].北京:清华大学出版社,2006
[3]史久根,张培仁,陈真勇.CAN现场总线系统设计技术[M].北京:国防工业出版社,2004
[4]朱悦涵,林立,邵明.基于CAN总线的智能节点设计[J].电子工程设计.2012(12):90~92
【关键词】CAN总线;AVR单片机;SJA1000;智能节点;CAN收发器
CAN(Controller Area Network局域控制网)总线由Bosch、Benz研究试验,于1986年2月正式提出,至1993年11月Bosch CAN2.0成为国际标准(ISO11898)。2000年CAN总线芯片年度销售超过1亿片,欧产轿车都至少装配一条CAN总线网络。CAN的许多特点使其成为诸多工业测控领域中优先选择的现场总线之一。在广泛的工业领域,CAN总线可作为现场设备级的通信总线,并且与其他的总线相比,具有很高的可靠性和性价比。本文介绍了一种基于AVR单片机 ATmega16的CAN智能节点设计方案,软硬件均已通过测试。
一、节点硬件电路设计
CAN智能节点硬件电路如图1所示。电路主要由五部分组成:微控制器 ATmega16、独立CAN控制器SJA1000、CAN总线收发器82C250、高速光电耦合器6N137、看门狗复位电路。微控制器采用ATMEL公司生产的AVR单片机ATmega16,该单片机采用一级流水线技术,在当前指令执行时,就取出下一条要执行的指令,实现了一个时钟周期执行一条指令,大大提高了CPU的运行速度,同时也提高了系统的可靠性。ATmega16负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。SJA1000 负责完成CAN总线通信协议的物理层和数据链路层的功能。
图1 CAN总线智能节点硬件电路
为了增强CAN总线节点的抗干扰能力,在CAN控制器SJA1000和CAN总线收发器82C250之间加接高速光电耦合器6N137,这样就很好的实现了总线上各个CAN节点之间的电气隔离。光电耦合电路所采用的两个电源VCC和VDD必须完全隔离,虽然增加了节点的复杂性,但是却提高节点的稳定性和安全性。82C250与CAN总线接口部分也采取了一定的安全和抗干扰措施。82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可以起到一定的限流作用,保护82C250免受过流的冲击。CANH和CANL与地之间并联了两个30pf的小电容,可以起到消除总线上的高频干扰和一定的防电磁辐射能力。另外,在两根CAN总线接入端与地之间分别反接了一个保护二极管,当CAN总线有较高的负压时,通过二极管可以起到一定的过压保护作用。在程序运行过程中,微控制器有可能因为受到外界干扰而不能正确执行指令,甚至陷入死循环。为了防止由此导致的系统瘫痪,在电路中加入了看门狗复位芯片MAX813L。该芯片具有独立的看门狗计时器,当系统发生故障时间达到看门狗的计时值时,MAX813L自动产生复位信号给ATmega16和SJA1000复位。
二、软件设计
CAN总线通信程序是指在单片机控制下,模块将采集到的数据发送到总线上供上位机或其他模块使用,以及接收总线上发送给本模块的数据帧并将其存入缓冲区中的程序。如图2所示,在通电或复位后,主控制器通过运行它自身的复位例行程序来对SJAl000控制器进行初始化,以建立CAN总线通信。CAN总线通信程序由三大部分组成:SJAl000初始化、接收和发送。
1.SJA1000初始化。初始化是在程序运行前对SJA1000的工作方式进行设定,使其能够按照用户需要的方式进行CAN总线通信工作。SJA1000控制器在通电后或硬件复位后,必须通过初始化设置以建立CAN通信。而且SJA1000可以在主控制器工作期间被再次初始化,这可以通过发送软件复位请求来实现。SJA1000的初始化流程如图3所示。在通电后,CAN控制器在引脚17上获得一个低电平复位脉冲,使之进入复位模式。在开始对SJA1000的各个配置寄存器设定之前,主控制器通过读复位模式/请求标识来检测SJA1000是否进入复位模式。单片机要等待SJA1000完成上电复位后才能对SJA1000的配置寄存器进行配置,存储配置信息的寄存器只能在复位模式下才能写入。
2.CAN总线发送程序。对SJA1000进行初始化建立CAN总线通信后,模块就可以通过CAN总线发送和接收CAN数据包。消息的发送由CAN控制器SJA1000根据CAN的规则自动完成,主控制器必须把要发送的信息发送到SJA1000的发送缓冲器中,并设置“发送请求标识位”于命令寄存器中。发送过程既可由SJA1000产生的中断请求来控制,也可通过检测SJA1000控制部分的状态标识符来控制。本文使用的是中断方式, 在发送前和发送后需要进行一些判断,避免不必要错误。在发送前需要确保SJA1000没有正在接收报文,发送缓冲区没有处于锁定状态,在发送后需要判断发送是否完成才能中断返回。发送子程序流程如图4所示。
3.CAN总线接收程序。CAN控制器SJA1000根据规则自动接收消息,接收到的消息放入接收缓冲器,此时接收缓冲器状态标识RBS置为“1”(表示接收缓冲器中有接收到的消息)。主控制器将消息保存到程序设置的消息缓冲器中,同时释放接收缓冲器并对消息内容做出反应。接收过程可以通过SJA1000的中断请求或查询SJA1000的标识控制部分来进行。在系统应用中,模块从总线上获取上位机或者其他模块的信息,接收消息是被动的。如果采用查询法,将耗费大量的时间来查询SJA1000接收状态,且实时性不好。因而在接收程序设计中,采用中断法进行控制。如果SJA1000接收到消息,消息已通过接收过滤并存放于接收队列中,则产生一个接收中断,于是主控制器立即做出反应,把收到的消息送到消息存储器,并且在设置了相应命令寄存器中的标识符“RRB”后,发送释放接收缓存命令。接收队列中的下一个消息将会产生新的接收中断,因此在一个中断期间不必读出接收队列中所有可获得的消息。和这种情况相对的是立即读出队列中所有消息的程序,这样可以避免不断进入中断,流程图见图5。在释放了接收缓冲器后,消息检查状态寄存器中的接收缓冲器状态标识(RBS)清“0”,以标志接收缓冲器已被释放。整个接收过程在中断程序中实现,而不需要与主程序发生关联,甚至对消息的反应也可中断中进行。
三、结语
CAN总线具有较强的纠错能力,适用于高噪声环境,具有较远的传输距离,广泛应用于计算机测控领域,该设计作为CAN总线节点的一个模块,介绍了一种基于AVR单片机ATmega16的CAN智能节点设计方案,描述了主要设计思路,给出了设计流程图,通过串口调试软件实现了两个智能节点的通信测试。通过测试表明该智能节点具有结构简单、易于扩展、系统运行稳定、实时性好、抗干扰能力强等优点,具有良好的应用前景。
参 考 文 献
[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007
[2]刘建昌,周玮,王明顺.计算机控制网络[M].北京:清华大学出版社,2006
[3]史久根,张培仁,陈真勇.CAN现场总线系统设计技术[M].北京:国防工业出版社,2004
[4]朱悦涵,林立,邵明.基于CAN总线的智能节点设计[J].电子工程设计.2012(12):90~92