关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > CAN总线在家庭智能化控制系统中的应用研究

CAN总线在家庭智能化控制系统中的应用研究

作者:时间:2010-09-22来源:网络收藏


用单片机AT89C52作为微处理器;用SJAl000作为微控制器,SJAl000中集成了协议的物理层和数据链路层功能,可被动局面对通信数据的帧处理;高速光电隔离用6N137实现,其作用是防止串入信号干扰;MAX232用来完成RS 232电平到微控制器接口芯片TTL电平的转换。具体的硬件接口电路参见SJAl000的资料,但有以下几点需要注意:
(1)两端接有一个120 Ω的电阻,其作用是匹配阻抗,提高数据通信的抗干扰性及可靠性。但实际上只需保证CAN网络中“CAN_H”和“CAN_L”之间的跨接电阻为60 Ω即可。
(2)SJAl000的20引脚RXl在不使用时可接地,配合CDR.6的置位可使长度大大增加。
(3)引脚TX0,TXl的接法决定了串行输出的电平。具体关系可参考输出控制寄存器OCR的设置。
(4)AT82C250的RS引脚与地间接有1个斜率电阻。电阻大小可根据总线通信速度作适当调整,一般在16~140 kΩ之间。
(5)MAX232外围需要4个电解电容C1,C2,C3,C4,这些电容也是内部电源转换所需电容,其取值均为1μF/25 V,宜选用钽电容并且位置量靠近芯片,电源Vcc和地之间要接1个0.1μF的去耦电容。
在微处理控制下,RS 232和CAN进行数据交换时,采用串口接收和CAN中断方式可提高工作效率。SJAl000的初始化在复位模式下才可以进行,主要包括工作方式的设置、时钟分频和验收滤波寄存器的设置、波特率参数的设置以及中断允许寄存器的设置等。其主程序流程图如图3所示。


数据能否准确传递还取决于波特率和流量控制,这也是软件设计时不可忽略的地方。因此接下来主要介绍CAN波特率的设置、串口波特率的自动检测、串口数据流量控制。
CAN协议中的要素之一是波特率。可以设置位周期中的位采样点位置和采样次数,以使可以自由地优化网络性能,但在优化过程中,要注意位定时参数基准参考振荡器的容差和系统中不同信号传播延迟之间的关系。
系统的位速率fbit表示每单位时间传输数据位的量,即波特率fbit=1/tbit。额定的位定时由3个互不重叠的段SYNC_SEG,TSEGl和TSEG2组成,这3个时间段分别是tSYNC_SEG,tTSEGl和tTSEG2。所以,额定位周期tbit是3个时间段的和:tbit=tSYNC_SEG+tTSEGl+tTSEG2。位周期中这些段都用整数个基本时间单位来表示。该时间单位叫时间份额TQ,时间份额的持续时间是CAN系统时钟的一个周期tSCL,可从振荡器时钟周期tCLK取得。通过编程预分频因数(波特率预设值BRP)可以调整CAN系统时钟,即tSCL=BRP×2tCLK=2BPR/CLK。
对CAN位定时计算的另一个很重要的时间段是同步跳转宽度(SJW),持续时间是tSJW。SJW段并不是位周期的一段,只是定义了在重同步事件中被增长或缩短的位周期的最大TQ数量。此外,CAN协议还允许用户指定位采样模式(SAM),分别是单次采样和三次采样模式(在3个采样结果中选出1个)。在单次采样模式中,采样点在TESG1段的末端。而三次采样模式比单次采样多取两个采样点,它们在TSEGl段末端的前面,之间相差一个TQ。上面所提到的BPR,SJW,SAM,TESGl,TESG2都可由用户通过CAN控制器的内装中寄存器BTR0和BTRl来定义。设置好BTR0和BTRl后,实际传输的波特率范围为:最大=1/(tbit-tSJW),最小=1/(tbit+tSJW)。
检测转换装置的串口波特率,首先可对主机的接收波特率(以9600 b/s为例)进行设定,并在终端发送一个特定的字符(以回车符为例),这样,主机根据接收到的字符信息就可以确定转换装置的通信波特率。回车符的ASCII值是0DH,在不同波特率下接收到的值如表1所列。


数据在两个串口之间的传输时,常常会出现丢失数据的现象。由于单片机缓冲区有限,如接收数据时缓冲区已满,那么此时继续发送来的数据就会丢失。而流控制能有效地解决该问题,当接收端数据处理不过来时,流就会发出“不再接收”的信号,而使发送端停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据丢失。常用的两种流控制是硬件流控制(包括RTS/CTS,DTR/CTS等)和软件流控制XON/XOFF(继续/停止),下面仅就硬件流控制RTS/CTS加以说明。



评论


相关推荐

技术专区

关闭