基于CAN总线的数据采集控制系统开发Word文档格式.docx
- 文档编号:18732156
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:23
- 大小:367.43KB
基于CAN总线的数据采集控制系统开发Word文档格式.docx
《基于CAN总线的数据采集控制系统开发Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于CAN总线的数据采集控制系统开发Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
1.1.2设计要求
1.总线上的节点能发送信号,也能接收信号,通信方式采用一对多方式;
2.总线上有两个节点同时需要发送信息时,应比较两个待发送数据帧的标识符位场的大小以进行仲裁;
3.总线上可以任意挂接多个节点,而不需要改变待挂接节点的软硬件。
1.2总体设计方案
总体方案为:
在整体上分为两大模块,分别是CAN节点和CAN总线。
系统方案如图1.2所示。
图1.2系统设计方案
其中A1、A2和B都是由微控制器与CAN独立控制器组成的CAN节点,其中A1外接了一个温度传感器用于采集周围的温度,B板外接一个数码管显示器用于显示温度传感器采集到的温度,A2板用于向总线手动发送摁键中断信号。
1.3CAN控制器的选定
独立CAN总线控制器常用的有SJA1000和MCP2515两种,下面将之做一个比较。
SJA1000:
主要用于移动目标和一般工业环境中的区域网络控制。
PHILIPS半导体公司PCA82C200CAN控制器(BasicCAN)的替代产品,而且它增加了一种新的操作模式—PeliCAN,这种模式支持具有很多新特性的CAN2.0B协议。
MCP2515:
最大的优点是价钱便宜,与单片机是通过SPI接口的,接线简单只需要4根线即可[2][3]。
综合考虑,出于项目效率与经济效益两大因素,在此设计中采用MCP2515。
1.4微控制器控制模块的选定
由于AT89S52是一种低功耗,高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
所以,选用AT89S52就作为本项目的微控制器[4]。
1.5温度传感器模块的选定
由于在工业现场中,安装的传感器最好耐磨耐碰,体积小,接线方便,易于封装,适用于各种狭小空间设备数字测温和控制领域。
所以,在此选择DS18B20数字温度传感器。
1.6数码管显示模块的选定
本设计中选择LCD1602液晶显示器,因为1602是字符型液晶,能显示字母与数字,控制简单,成本较低[5]。
1.7电源模块的选定
方案1:
采用专用的外接电源模块给B母版供电(A1、A2也行)。
方案2:
A1节点采用A1母版上的CMOS电池供电,A2、B节点一样,考虑到AT89S52的电压极性引脚数不够,所以使用了CAN接线板,它上面提供了两排电压极性引脚,一组可作为CAN总线的CAN.H与CAN.L使用,一组便可作为扩展的电源引脚使用,这样,1602液晶显示器与18B20温度传感器就被供电了。
综合考虑上述方案,并且考虑到现场的移动性,狭窄性,因此,本设计选择方案2。
1.8最终方案
经过反复论证,我们最终确定的方案如下。
1.采用AT89S52单片机作为控制核心;
2.采用MCP2515控制器作为CAN控制器;
3.采用18B20温度传感器采集CAN现场温度;
4.采用LCD1602液晶显示器显示温度值及其他值;
5.采用智能节点所在母版自带的cmos电池供电。
系统总体结构如图1.3所示。
图1.3系统总体结构
第2章硬件设计
2.1系统工作原理及功能简介
工作原理:
CAN总线上的一对多播通信方式,非破坏性仲裁方式等。
功能简介:
在A1节点上,18B20温度传感器采集温度值,由AT89S52单片机处理发送给MCP2515控制器,接着MCP2515控制器把温度信号转换为CAN数据帧的形式放在发送缓冲器里,同时查看CAN总线电平,判断是否有其他节点在使用总线,如果没有,便开始发送数据帧。
最后,A2、B节点都能接收到此帧。
在B节点上,数据帧被放在MCP2515控制器的接收缓冲器中,接着把它转换成电平信号发送给AT89S52单片机,最后在1602液晶显示器上显示出来。
2.2AT89S52微控制器的简介
AT89S52为ATMEL所生产的一种低功耗、高性能CMOS8位微控制器具有8K在系统可编程FLASH存储器。
1.AT89S52主要功能
(1)拥有灵巧的8位CPU和在线可编程FLASH;
(2)晶片内部具有时钟振荡器(传统最高工作频率可至12MHz);
(3)内部程序存储器(ROM)为8KB;
(4)内部数据存储器(RAM)为256B;
(5)32个可编程I/O口线;
(6)8个中断向量源;
(7)三个16位定时器/计数器[4]。
2.AT89S52引脚图
AT89S52的引脚如图2.1所示。
图2.1AT89S52引脚
2.3MCP2515独立CAN控制器的介绍
MCP2515是Microchip的一款独立控制器局域网络(CAN)协议控制器,完全支持CANV2.0B技术规范。
该器件能发送和接受标准和扩展数据帧以及远程帧。
MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机的开销。
MCP2515与MCU是通过串行外设接口SPI来实现连接的[6]。
另外,MCP2515有两种封装类型:
18引脚PDIP/SOIC与20引脚TSSOP,在此项目中,我使用18引脚PDIP/SOIC,它的引脚如图2.2所示。
图2.2MCP251518引脚PDIP/SOIC
MCP2515芯片的部分引脚功能如下。
TXCAN:
连接到CAN总线的发送输出引脚;
RXCAN:
连接到CAN总线的接收输入引脚;
CLKOUT:
带可编程预分频器的时钟输出引脚;
OSC2:
振荡器输出;
OSC1:
振荡器输入;
VSS:
逻辑和I/O引脚的参考地;
INT:
中断输出引脚;
SCK:
SPI接口的时钟输入引脚;
SI:
SPI接口的数据输入引脚;
SO:
SPI接口的数据输出引脚;
CS:
SPI接口的片选输入引脚;
RESET:
低电平有效的器件复位输入引脚;
VDD:
逻辑和I/O引脚的正电源[7]。
2.4CAN总线概述
2.4.1CAN协议的背景
CAN(ControllerAreaNetwork)数据总线是一种极适于汽车环境的汽车局域网。
CAN总线是德国Bosch公司为解决汽车监控系统中的复杂技术难题而设计的数字信号通信协议,它属于总线式串行通信网络。
由于采用了许多新技术和独特的设计思想,与同类车载网络相比,CAN总线在数据传输方面具有可靠、实时和灵活的优点[8]。
1991年9月Philips半导体公司制定并发布了CAN技术规范(版本2.0),该技术规范包括A部分和B两部分,其中2.0A给出了CAN报文的标准格式;
2.0B给出了标准和扩展两种格式。
此后,1993年11月ISO正式颁布了道路交通运输工具一数据信息交换一高速通信控制器局域网(CAN)的国际标准IS011898,为控制器局域网的标准化和规范化铺平了道路[8]。
2.4.2CAN协议的原理
CAN的ISO/OSI参考模型分层结构如图2.3所示。
图2.3CAN分层结构
图2.3描述了CAN协议涉及到的协议栈有物理层与数据链路层,由于这是很基本的一些网络知识,而且本论文也不需要了解的那么细致,于是我在此做一省略。
CAN协议的特点如下。
(1)CAN是到目前为止唯一具有国际标准且成本较低的现场总线;
(2)CAN废除了传统总线的站地址编码,对通信数据块进行编码,为多主方式工作不分主从,通信方式灵活,通过报文标识符通信,可使不同的节点同时接收到相同的数据,无需站地址等节点信息;
(3)CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。
尤其是在网络负载很重的情况下也不会出现网络瘫痪情况(以太网则有可能出现这种情况);
(4)CAN只需通过报文滤波即可实现点对点、一点对多点即全局广播等方式传送接收数据,无需专门的“调度”;
(5)CAN上的节点数最多可达110个(主要取决于总线驱动电路);
(6)CAN采用短帧结构,单帧最大长度仅150位,传输时间短,从而保证了通信的实时性,受干扰概率低;
(7)CAN的每帧信息都有CRC校验及其他检错措施,降低了数据出错率,保证了数据通信的可靠性;
(8)CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响[8]-[12]。
2.5DS18B20温度传感器
DS18B20温度传感器是有DALLAS公司生产,它的主要特征如下。
(1)全数字温度转换及输出;
(2)先进的单总线数据通信;
(3)最高12位分辨率,精度可达正负0.5摄氏度;
(4)12位分辨率时的最大工作周期位750毫秒;
(5)可选择寄生工作方式;
(6)检测温度范围为-55摄氏度-+125摄氏度;
(7)内置EEPROM,限温报警功能;
(8)64位光刻ROM,内置产品序列号,方便多级挂接[13]。
DS18B20的引脚如图2.4所示。
图2.4DS18B20芯片封装
2.61602液晶显示器
所谓1602是指显示的内容为16*2,即可显示两行,每行16个字符。
1602分为两种:
绿色背光,黑色字体与蓝色显示屏,背光白色字体。
在此,我选择第一种。
字符型LCD1602通常有14条引脚线或者16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线(16脚)[5]。
在本设计中的1602是16脚的,1602的引脚图如图2.5所示。
图2.51602液晶显示器引脚
1602液晶显示器各引脚的功能如表2.1所示。
表2.11602液晶显示器各引脚功能表
引脚号
引脚名
电平
输入/输出
作用
1
VSS
电源地
2
VCC
电源(5V)
3
VEE
对比调整电压
4
RS
0/1
输入
0=输入指令1=输入数据
5
R/W
0=向LCD写入指令或数据
1=从LCD读取信息
6
E
1,1至0
使能信号,1时读取信息
1至0(下降沿)执行指令
7
DB0
数据总线line0(最低位)
8
DB1
数据总线line1
9
DB2
数据总线line2
10
DB3
数据总线line3
11
DB4
数据总线line4
12
DB5
数据总线line5
13
DB6
数据总线line6
14
DB7
数据总线line7(最高位)
15
A
+VCC
LCD背光电源正极
16
K
接地
LCD背光电源负极
2.7CAN总线现场的整体设计
2.7.1单片机引脚的设定
AT89S52中P0、P1、P2、和P3四个端口的最主要的共同点是:
都是具有8位的双向I/O口。
所以从功能效果上说,用哪个引脚连接外设都无所谓。
然而,考虑到连线的有序性,本设计决定引脚连线设定如下。
(1)与MCP2515控制器的连接(对三个节点统一):
sbitSCK=P2^3;
sbitSI=P2^2;
sbitSO=P2^1;
sbitCS=P2^0;
(2)A1节点中18b20温度传感器的连线:
sbitDQ=P2^4;
(3)A2节点中按键的连线:
sbitkey=P2^6;
(4)B节点中1602液晶显示器的连线:
sbiten=P0^2;
sbitrw=P0^1;
sbitrs=P0^0。
2.7.2整体设计
本项目硬件设计的连线如图2.6所示。
图2.6硬件连线
第3章软件设计
在进行CAN总线现场采集控制系统开发中,我们基于具体情况,主要使用KeilC51软件与proteusprofessional软件,采用主流设计语言C语言对单片机进行编程实现各项功能。
C语言功能丰富,表达能力强,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,应用十分广泛[14]。
3.1CAN总线系统总体流程
CAN总线的大致流程如图3.1所示。
图3.1系统总流程
3.2程序流程图
1.单片机AT89S52处理信号流程图
当整个系统上电复位时,首先MCU与MCP2515被初始化,接着等待中断,当确定中断发生,先要关掉中断(防止其他中断进入),然后再响应中断,具体如图3.2所示。
图3.2AT89S52单片机控制流程
2.报文发送流程图
由于MCP2515CAN独立控制器处理报文接收与报文发送的工作原理基本上一致,因此在这,本设计只给出报文发送流程图。
需要注意的有两个点,仲裁程序和出错处理程序,这两处的设计也正是CAN协议的优势,如图3.3所示。
图3.3报文发送流程
3.3部分功能代码
1.A1板主程序里头main()函数
voidmain()
{
unsignedcharnum=0;
unsignedcharb[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
Init2515();
//初始化MCP2515独立CAN控制器
Init_Cpu();
//初始化微控制器CPU
init_play();
//初始化显示
P34=0;
display(10);
while
(1)
{
unsignedchari=1;
if(key==0)//判断A1节点上的微控制器的P^2.6端口是否为零
delay10ms();
//延时10毫秒
while(key==0);
while(i==1)
read_temp();
//读取温度
ds1820disp();
//显示
CAN_Send_onebyte(tvalue);
//发送按键状
display(tvalue);
}
}
2.B板主程序里头main()函数
unsignedchara[8];
unsignedcharkey_code;
//初始化B板独立CAN控制器MCP2515
//初始化B板微控制器CPU
display(11);
//显示该板号b板
lcd_init();
{
lcdcom(0x80+0x40);
lcd("
Curre:
xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
);
key_code=CAN_Receive_onebyte();
gRXFlag=0;
delay_ms(100);
lcdcom(0x0c);
write_hms(11,key_code);
//写数据分
write_hms(14,key_code);
//写数据秒
rightturn"
3.延时头文件代码
#ifndef__FUNCTION_h__
#define__FUNCTION_h__
//writeyourheaderhere
//#include"
reg51.h"
voiddelay_ms(unsignedchart)
unsignedchari,j;
for(i=0;
i<
t;
i++)
for(j=0;
j<
33;
j++);
voiddelay10ms(void)//延时程序,延时10毫秒
for(i=20;
i>
0;
i--)
for(j=248;
j>
j--);
voiddelay_s(unsignedchart)//延时程序,延时1秒
for(i=0;
for(j=0;
34135;
j++);
#endif
4.18B20温度传感器读取温度值函数代码
read_temp()/*读取温度值并转换*/
uchara,b;
ds1820rst();
ds1820wr(0xcc);
//*跳过读序列号*/
ds1820wr(0x44);
//*启动温度转换*/
//*跳过读序列号*/
ds1820wr(0xbe);
//*读取温度*/
a=ds1820rd();
b=ds1820rd()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CAN 总线 数据 采集 控制系统 开发