我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 649|回复: 0

基于CAN总线的嵌入式网络控制器 - 通信/网络 - 电子工程师

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:39:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<strong>引言</strong>

CAN (Controller Area Network)现场总线是一种支持分布式控制系统或实时性控制的串行通信网络.具有成本低、可靠性高、抗干扰能力和实时性强等特性,是最普及的工业现场总线之一。CAN总线现在己经广泛应用于诸多领域.具有较强的市场竞争力,但要充分发挥它的组网控制功能,打破地域界限,实现远程控制,就必须借助于现在被广泛应用的以太网(Ethemet)技术。

<strong>1 系统设计方案</strong>

本文所设计的嵌入式协议转换网关,可以实现CAN总线与以太网的互联,即实现以太网能够通过网关读取CAN总线上的数据,同时也可以向CAN总线发送命令以实现上位机对现场设备的监控。如图1网关架构图所示。


<ignore_js_op>





2010-4-8 11:31:13 上传
<strong>下载附件</strong> (3.16 KB)




</ignore_js_op>

图1控制器架构图

本系统的硬件要求功能强大,能够提供足够的平台,因此选择S3C2410X处理器。S3C2410X微处理器是Samsung公司为手持设备设计的低功耗、高集成度的基于ARM920T核的微处理器。S3C2410X内部没有集成的以太网控制器,所以系统设计中选择RTL8019AS控制器作为以太网控制器。另外S3C2410X中也没有集成的CAN控制器,在此选择MCP2510为CAN控制器,S3C2410X通过SPI端口控制MCP2510。

软件设计方面,由于以太网协议比较复杂,由于所选的微处理器和以太网协议比较复杂,以及系统对时间要求比较苛刻.为了更好的管理微处理器,选择了Linux操作系统作为软件开发平台。选择在S3C2410X处理器上运行Linux操作系统,可以为以后的功能拓展打下一个很好的基础,在此基础上扩展功能,无须再改变处理器和操作系统。

<strong>2 系统硬件电路设计</strong>

本文确定采用ARM9控制器S3C2410芯片为核心微处理器,以及源代码开放的“nux操作系统。其中硬件平台南核心模块和外同电路组成。核心模块上设计有S3C2410X微处理器、SDRAM存储器、F1ash存储器。采用该核心模块作为核心处理器,在硬件电路设计过程中只需设计其外围电路。

2.1电源电路设计


<ignore_js_op>





2010-4-8 11:31:13 上传
<strong>下载附件</strong> (3.78 KB)




</ignore_js_op>

图2 系统5V电源电路原理图

系统中电源的设计是至关重要的,因为它是系统工作的源动力,因此电源的设计也要非常谨慎.要考虑所设计的电源在达到系统稳定工作要求的同时,还要减少系统功耗。在该设计中,需要使用到5V,3.3V和1.8V的直流稳压电源。由于ARM核心板内含有1.8v内核供电电源,因此只需提供5V和3.3V的供电电路,其电源电路分别如网2,图3所示。


<ignore_js_op>





2010-4-8 11:31:13 上传
<strong>下载附件</strong> (3.22 KB)




</ignore_js_op>

图3系统3.3V电源电路原理图

2.2复位电路设计

复位电路的设计是为了在系统工作异常时,能够进行复位,使得系统重新同到正常状态。当nRESET信号变为低时,ARM920T就会放弃所有正在执行的程序,然后从停止点以下的指令地址中取出指令,复位电路图如4所示。


<ignore_js_op>





2010-4-8 11:31:13 上传
<strong>下载附件</strong> (2.47 KB)




</ignore_js_op>

图4系统复位电路原理图

2.3串口电路设计

串行端口的本质功能是作为CPU和串行设备间的编码转换器,RS232串行接口电路用于网关系统与应用系统的短距离双向串行通讯。在本设计中采用的是DB-9接口。在本设计中,虚拟机通过串口向目标机发送命令和接收命令,如在打开目标机时要启动目标机的Linux系统,命令run loadlinux就是通过串口到达目标机的,同样,还有一系列其他的命令语句,都是通过串口实现目标机与虚拟机的必要的命令通讯,串口的电路原理图如下图6所示。


<ignore_js_op>





2010-4-8 11:31:13 上传
<strong>下载附件</strong> (5.8 KB)




</ignore_js_op>

图5系统串口电路原理图

图中表示了RS-232接13与目标机之问的连接关系,它们之间包括了一个SP3232ECA电压转换芯片,SP3232ECA如图中所示,DB-9是接至虚拟机端的,虚拟机需要的工作电压为5v,而目标机即ARM核心板上的一r作电压为3.3v,要在两者问进行数据发送或接收时需进行电平转换。SP3232ECA在接至目标机端时,R1OUT和R20UT串接电阻用来防止意外的逻辑混乱。

2.4 CAN接口电路设计

在S3C2410X处理器中没有直接嵌入的CAN接口,所以要选择独立的CAN控制器。由于S3C2410X处理器设有SPI接口,MCP2510控制器的引脚设计中也包括了SPI接口,这样CAN控制器MCP2510可以通过SPI接口与处理器的SPI接口相连,简化端口电路的设计,所以设计中所选则MCP2510作为CAN控制器。

MCP2510主要由3部分组成:CAN协议引擎:用来为器件及其运行进行配置的控制逻辑和SRAM寄存器:SPI协议模块。CAN协议引擎的功能是处理所有总线上的报文发送和接收。CPU通过SPI接口与器件进行通信。通过使用标准SPI读写命令对寄存器所有读写操作。MCP2510采用标准的4MHz晶体,内部寄存器的控制分频系数来调节。它的输出到总线的速率也可通过设置MCP2510的SPI接口与S3C2410X的SPIO相应的接口相连,实现CPU对其的控制。MCP2510控制器发送输出和接收输入引脚通过光电隔离连接到CAN总线收发器TJAl050上,光电隔离采用高速通信光耦6N137芯片,保证了节点之间在电气上的完全隔离和独立,提高了电路的稳定性和安全性。

2.5以太网接口电路设计

在本设计中RTL.8019AS是以太网控制的核心,10M以太网接口为系统提供了以太网接入的物理通道,它与S3C2410X的相应引脚相连,实现以太网的读写功能。RTL8019AS与S3C2410X相连的引脚如下表1所示。


<ignore_js_op>





2010-4-8 11:31:14 上传
<strong>下载附件</strong> (5.87 KB)




</ignore_js_op>

表1 RTL8019AS与S3C2410X相连的引脚

<strong>3 系统软件程序设计</strong>

3.1CAN控制器的驱动程序设计

CAN控制器的初始化流程图如下图6所示。其过程包括硬件使能、软件复位、内部设置的初始化和启动CAN等。


<ignore_js_op>





2010-4-8 11:31:14 上传
<strong>下载附件</strong> (2.25 KB)




</ignore_js_op>

图6 CAN控制器驱动流程图

驱动程序的源文件共有三个:mcpcan.c,spi_cmd.c和spi.co要把三个源文件合并编译链接成一个.O为后缀的驱动模块。在Makefile中用了如下命令行:

$(EXEC):$(OBJS)
$(LD)$(LDFLAGS)-o$@S(OBJS)
即/usr/local/arm/2.95.3/bin/arm-linux-ld -r candrv.o mcpcan.o spi_cmd.o spi.o

因为对MCP2510这个CAN控制器芯片的操作是靠CPU给它发送SPI (串行外设接口}命令来实现的,所以要用到S3C2410的关于SPI的那螳特殊功能寄存器。

3.2MCP2510控制器应用程序

MCP2510控制器应用程序主要包括了接收和发送两部分。报文发送函数为

void MCP2510_TX (int TxBuf,int IdType,unsigned int id,int DataLen.,char* data)

通过TxBuf参数指定发送到那个缓冲器(TXBUF0,TXBUFl,TXBUF2)。IdType决定发送报文帧的类型,STANDID表示标准数据帧,EXTID表承扩展数据帧。

报文接受函数为:void MCP251O_TX (int TxBuf, IdType,
unsigned int id.,int Data,char * data)通过TxBuf参数指定从哪个缓冲器接收((RXBUFO或RXBUFl)。接收后的报文帧的类型、帧ID、数据长度以数据内容分别保存在IdType,id,DataLen 和data中。

在应用程序中创建了一个线程send专门负责发送数据,再在主线程中接收数据到一个mepcan_data结构体中并打印出来。

ret=pthread_create(&id,NULL(void*) send,&data_send);
if(ret!=o){
printf("Create pthread error! \n");
exit (1);}
printf("Create pthread success. \n");

在send线程中对打开的设备接述符进行write操作,在主线程中对该设备描述符进行read操作。因为在驱动中已经考虑到了互斥,所以线程中没有做并发处理。

<strong>4 结论</strong>

本文的创新点:本文对嵌入式网关设备发展情况及以太网与CAN总线相互连接与通讯问题进行深入的研究,在对嵌入式系统和网关设备的学习、分析比较的基础上,选用功能强大的、具有很大扩展空闻的Linux操作系统和32位的S3C2410X处理器,作为研究开发平台,针对S3C2410X处理器,完成其外围硬件电路的设计,包含有电源电路、复位电路,为系统提供正常工作的条件;操作系统的完成参考ARM9嵌入式技术及Linux高级实践教程中的建立、安装、配置、移植等工作。完成了对CAN控制器MCP2510和以太网控制器RTL8019AS的硬件驱动。并在Linux下编写了CAN总线和以太网的应用程序。

已经产生经济效益200万元。


作者:张海春,肖亚  来源:《微计算机信息》《嵌入式专SOC)2009年第2-2期
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表