利用PIC18FXX8进行CAN总线系统节点设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 30 卷第 10 期
2004 年 10 月
电子工程师
ELEC TRONIC ENGINEER
Vol. 30 No. 10
Oct. 2004
利用 PIC18FXX8 进行 CAN 总线系统节点设计
朱 芳
(无锡科技职业学院 , 江苏省无锡市 214028)
【摘 要】 采用带在片 C AN 的微控制器 PIC18FXX8 进行 C AN 总线系统智能节点的硬件电路设 计和软件设计 。
硬件电路设计时为了增强 C AN 总线节点抗干扰能力 ,采用 MICROCHIP 公司的 C AN 总 线驱动器 MCP2551 ,并通过高速光耦 6N137 与 MCP2551 相连 ,很好地实现了总线上各 C AN 节点间的电 气隔离 ;软件设计包括 PIC18FXX8 的 C AN 模块的初始化 、查询方式发送子程序和查询方式接收子程序 等应用中最基本的子程序 。
软件程序采用汇编语言编写 ,在实际应用中可采用 C 语言编写 。
关键词 :总线 , 节点 , C AN , PIC18FXX8
中图分类号 : T N334. 7
0 引 言
在 C AN 总线的通信协议中 , 没有节点地址的概
念 ,也不存在与节点地址相关的信息 ,它支持的是基于 数据的工作方式 。
亦即 ,CAN 总线面向数据而不是节 点 ,因此加入或撤消节点设备都不影响网络工作 ,这种 结构十分适用于控制系统快速 、可靠 、简明的特点 。
目前流行的 C AN 总线器件有两大类 :一类是独立 的 C AN 控制器 ,例如 82C200 、SJA1000 及 Intel 公司的 82526 和 82527 芯片等 ; 另一类是带在片 C AN 的微控 制器 ,例如 P8XC592 、Mot or ol a 的 MC68HC05X 系列等 。
在实际应用中 ,为了使硬件电路设计简单 ,并提高系统 的整体性能 ,往往采用带在片 C AN 的微控制器 。
本文 以 MICROCHIP 公司的 PIC18FXX8 系列微控制器为例 , 介绍 C AN 总线系统节点的硬件和软件设计 。
1 PIC18FXX8 微控制器的特性
PIC18FXX8 是 MICROCHIP 公司的带在片 C AN 的
微控制器 ,片内具有 Flash 程序存储器 、EE PR OM 数据
存储器 、自编程功能 、在线调试器
( ICD ) 、捕捉/ 比较/ 脉 宽调制功能 、多通道 10 位 A/ D 转换器 、比较器 、同步
串行口
(可以设置为 SPI 或 I 2C ) 和可寻址的通用异步 收发器 。
其 C AN 总线拓扑结构如图 1 所示 。
图 1 CAN 总线拓扑结构
收稿日期 : 2004207208
C AN 模块符合 C AN1. 2 、C AN2. 0A 和 C AN2. 0B 标
准 ,带有 3 个发送缓冲区 、2 个接收缓冲区 、2 个接收屏
蔽寄存器 、6 个完全接收滤波器 。
2 CAN 总线系统节点硬件电路设计
C AN 总线系统节点硬件电路如图 2 所示 。
图 2 CAN 总线系统硬件电路
MCP2551 是一款 ISO11898 兼容的高速 C AN 收发
器 。
其 业界标准引脚与功能使其可用于已有高速
C AN 收发器中 ,同时提供改进的性能 ,例如更宽的瞬
变电压与短路电压范围 ,以及更短的传播延迟 。
为了增强 C AN 总线节点的抗干扰能力 ,MCP2551 的 C ANTX 和 C ANRX 并不直接与 MCP2551 的 TXD 和 RXD 相连 ,而是通过高速光耦 6N137 后与 MCP2551 相 连 ,这样可实现总线上各 C AN 节点间的电气隔离 。
必 须注意 ,光耦电路所采用的两个电源 VCC 和 VDD 必 须完全隔离 ,否则 ,采用光耦就失去了意义 。
MCP2551与总线的接口部分也采用一定的安全
·单片机技术及应用·电子工程师2004 年10 月
和抗干扰措施。
MC P2551 的C ANH 和C ANL 引脚各自通过一个5 Ω电阻器与C AN 总线相连,电阻器可起到一定的限流作用, 保护MCP2551 免受过电流冲击。
C ANH、C ANL与地之间并联了2 个30 pF 电容器,可滤除总线上的高频干扰,具有一定的防电磁干扰能力。
另外,在两根C AN 总线接入端与地之间分别反接一个保护二极管,当C AN 总线有较高的负电压时,通过二极管的短路可起到一定的过压保护作用,MCP2551 的RS 脚上接有一个斜率电阻电阻器,其阻值可根据总线通信速度适当调整,一般为16 kΩ~140 kΩ。
3 CAN 总线系统节点软件设计
MOV WF C ANC ON
PIC- C AN-NOR MAL :
MOVF C ANS TAT ,0
ANDLW B’11100000’
MOV LB 0X01
MOV WF S ET-MODE- TEMP MOV LW B’10000000’
C PFSEQ SET-MODE- TEMP
G OTO PIC- C AN-NOR MAL
R ETUR N
程序流程如图3 所示。
C AN 总线节点的软件设计主要包括: C AN 节点初始化、报文接收和报文发送3 部分。
如果要在实际应用中进行C AN 通信,还必须了解总线脱离处理、过载处理和出错处理等。
3. 1 初始化子程序
初始化主要包括C AN 模块工作方式配置、接收滤波器设置、接收屏蔽寄存器设置、波特率参数设置、发送优先级设置和中断允许寄存器设置等。
下面提供了汇编语言编写的PIC18FXX8 C AN 通信初始化源程序,程序中寄存器符号对应PIC18FXX8 片内寄存器地址,这些符号可在程序的头部用伪指令
EQU 进行定义,后文不再对这一点作特别说明。
PIC- C AN- INIT: / / C AN 模块初始化
MOV LB 0X0F
MOV LW B’10000000’ / / 将C AN 模块设置为配置模式MOV WF C ANC ON
PIC- C AN- CONFIG:
MOVF C ANS TAT ,0
ANDLW B’11100000’
MOV LB 0X01
MOV WF SET-MODE- TEMP
MOV LW B’10000000’
C PFSEQ SET-MODE- TEMP
G OTO P IC- C AN- CONFIG
SET-B AUD- RATE: / / 设置波特率
SET-BUFFER0-MASK: / / 设置缓冲区1 的屏蔽码
SET-BUFFER0- FILTER : / / 设置缓冲区1 的滤波码
SET-BUFFER1-MASK: / / 设置缓冲区2 的屏蔽码
SET-BUFFER1- FILTER : / / 设置缓冲区 2 的滤波码
MOV LW B’10000000’ / / 将C AN 模块设置为标准通信模式
图3 初始化子程序流程
3. 2 查询方式发送子程序
信息的发送由C AN 控制器根据C AN 协议自动完成,用户需将发送信息按特定格式存入相应寄存器,并置位命令寄存器TXBxCON 的“发送请求”标志TXREQ 。
发送处理可通过中断处理或查询状态标志进行控制。
本子程序采用查询方式进行发送。
当PIC18FXX8 发送数据时,发送缓冲区对写操作锁定。
这样,CPU 必须检查相应TXBxCON 的“发送状态”标志TXREQ ,以确定是否可将新信息放入发送缓冲区。
C AN- S EN
D :
MOV LB 0X0F
B TFSS TXB0
C ON ,TXR EQ / / 判断发送缓冲区 1 是否空
G OTO S END0
B TFS
C TXB1C ON ,TXR EQ / / 判断发送缓冲区 2 是否空
G OTO S END1
B TFS
C TXB2C ON ,TXR EQ / / 判断发送缓冲区 3 是否空
G OTO S END2
G OTO C AN- R EC EIVE- END
SEND0 :
MOV LB 0X0F
BSF TXB0C ON ,0 / / 将发送缓冲区 1 设为高优先级
BSF TXB0C ON ,1
·14 ·
第30 卷第10 期朱芳:利用PIC18FXX8 进行CAN 总线系统节点设计·单片机技术及应用·
/ / 将ID 标识符及数据长度等信息写入相应寄存器TXB0S IDH、TXB0S IDL 、TXB0DL C
SEND0-LOOP :
/ / 将要发送的数据写入发送寄存器TXB0D0~TXB OD7 SEND1 :
B TFS
C C OMS TAT , R XB0OV FL / / 判断是否缓冲区 1 溢出
G OTO R EC EIVE- RX0OVFL
R ECEIVE0-LOOP : / / 接收缓冲区1 数据
R ECEIVE- R X0OVFL : / / 缓冲区1 溢出处理
SEND1-LOOP :
SEND2 :
SEND2-LOOP :
BSF TXB2C ON ,TXR EQ / / 置位“发送请求”标志
G OTO C AN- S END- END
C AN- S END- EN
D :
R ETUR N
3. 3 查询方式接收子程序接收子程序负责节点报文
的接收和其他情况的处
理。
接收子程序比发送子程序复杂,因为在处理接收报文过程中,同时要对诸如总线脱离、错误报警、接收溢出等情况进行处理。
接收处理可通过中断处理或查询状态标志进行控制,本子程序采用查询方式进行接收。
C PU 必须检查相应寄存器RXBxCON 的“接收状态”标志RXFUL ,以确定接收缓冲区是否有新信息。
C AN- RECEIVE :
MOV LB 0X0F
B TFS
C RXB0CON ,RXFUL / / 判断是否缓冲区 1 有数据
G OTO R EC EIVE0
B TFS
C RXB1CON ,RXFUL / / 判断是否缓冲区 2 有数据
G OTO R EC EIVE1
G OTO C AN- R EC EIVE- END
R ECEIVE0 :
G OTO C AN- R EC EIVE- END
R ECEIVE1 :
B TFS
C C OMS TAT ,R XB1OVFL / / 判断是否缓冲区 2 溢出
G OTO R EC EIVE- RX1OVFL
R ECEIVE1-LOOP : / / 接收缓冲区2 数据
R ECEIVE- R X1OVFL : / / 缓冲区2 溢出处理
G OTO C AN- R EC EIVE- END
C AN- R EC EIVE- EN
D :
R ETUR N
4 结束语
本文介绍了PIC18FXX8 发送和接收标准帧的操作子程序,由于篇幅有限,没有列出PIC18FXX8 发送和接收扩展帧的操作子程序。
PIC18FXX8 内部的寄存器地址和定义可参阅PIC18FXX8 Data Sheet 。
本设计已在某部队工程车中得到应用,系统工作稳定。
参考文献
[ 1 ] 邬宽明. 现场总线技术应用选编. 北京:北京航空航天大学出版社, 2003
[2 ] 邬宽明. CAN 总线原理和应用系统设计. 北京:北京航空
航天大学出版社,1996
[ 3 ] 刘和平. PIC16F87X单片机实用软件与接口技术. 北京:北京航空航天大学出版社,2002
CAN Bus System Node Design with PIC18FXX8
Zhu Fang
(Wuxi Professi onal C oll ege of Science and Technol ogy , Wuxi 214028 , China)【Abstract】Owi ng to its own characteristics , C AN bus is widely used in the auto industry and now is being extended to mechanical engineering industry , NC machines , robots , household electric appliances and so on. The paper describes a design of the C AN bus system intellegent nodes with the mi cro2controller PIC18FXX8 , including both circuit design and software design. In the circuit design , microchi p C AN bus driver MCP2551 is adopted and is connected with the hi gh2speed optical coupler 6N137 to increase the ability of anti2interference so that a good electrical isol ation between nodes on the bus can be achieved. The software design invol ves the C AN module setup of PIC18FXX8 and som e basic subprogram s , such as inquiry mode sending sub - program and receiving sub2pro2 gram. In order to be clear , the programs are written in assembler language while C language can be used in the practical apply.
Key word s : bus , nodes , C AN modul e , PIC18FXX8
·15 ·。