“CAN总线是一种流行的实时性现场总线,文中提出了一种基于MSP430单片机,并以MCP2510为CAN控制器的智能节点设计方案,该方案利用MSP430通过标准SPI接口可实现对MCP2510的控制,并能够完全实现CAN总线规范。
”1 引言
CAN总线是控制器局域网(Controller Area Net-work)总线的简称,它属于现场总线范畴,是一种能有效支持分布式控制或实时控制的串行通信网络,它可将挂接在现场总线上作为网络节点的智能设备连接成网络系统,并进一步构成自动化系统,从而实现基本的控制、补偿、计算、参数修改、报警、显示、监控、优化及控管一体化的综合自动化功能。
CAN总线智能节点在分布式控制系统中起着承上启下的作用。它位于传感器和执行机构所在的现场,一方面和上位机(PC或者工控机)进行通信,以完成数据交换;另一方面又可根据系统的需要对现场的执行机构或者传感器进行控制和数据采集。它常常将一些简单的过程控制程序放在底层模块中,从而减少了通信量,提高了系统控制的实时性。因此,智能化模块设计在CAN系统中有着十分重要的作用。
本文将给出一种用MSP430单片机和MCP2510 CAN控制器组成的总线智能节点的设计方案(见图1),该方案中的单片机和CAN控制器通过标准的SPI接口进行通信,因此,该节点能够完成对被控器件的数据采集上报,并接受上位机的命令,进而进行解析以完成对执行机构的控制。为了调试简单,本方案作了一些改动:一是使MCP2510工作在环回模式,也就是数据由发送缓存直接发送到接收缓存,由于不经过CAN收发器和CAN总线,而只是使用了它的一个发送缓存和一个接收缓存,因而方便了调试;二是把被控器件的数据采集和对执行机构的控制部分略去,而这些功能在以后可以方便地添加,这样,在实际使用时,只要对程序稍作修改就可应用。
2 硬件设计
本设计的整个接口模块主要由两部分组成:CAN控制器MCP2510和微控制器MSP430。图2所示是该智能节点的部分电路硬件原理图。下面对主要部分功能作一介绍。
2.1 MSP430F1232简介
MSP430系列微控制器是TI公司推出的功能强大的超低功耗16位微处理器。它集成了丰富的片上外围资源,因而开发方式十分简便,可以用C语言编写出效率很高的程序。所选MSP430F1232的工作电压为1.8~3.6V,内含8kB FLASH存储空间。片内集成了看门狗定时器(WTD)、基本时钟模块、US-ART、10位ADC、和带有3个捕获/比较器的16位定时器,因而片上资源十分丰富,完全可以满足一般的需要,同时减少了设计的复杂度。与其它单片机相比,MSP430的I/O端口功能更强,可实现双向的输入、输出,并可完成一些特殊的功能,如A/D转换、捕获比较等;另外,它还可以实现I/O的各种中断。
本设计中,MSP430的作用有两个:一是对执行机构的控制以及对输入模拟量或者开关量的信号采集;二是利用UART模块通过SPI模式与MCP2510通信并控制MCP2510以实现CAN规范。
2.2 MCP2510简介
MCP2510?1?是Microchip公司推出的功能很强的CAN控制器芯片,它支持CAN1.2、2.0A及2.0B规范;其内部结构见图3所示。该芯片内含3个发送缓存和2个接收缓存,可以对发送优先级进行管理,可滤除无用信息,MCP2510有6个可编程滤波器,而且中断资源十分丰富。最可贵的是,它可以通过标准的SPI接口与微控制器进行通信,从而放宽了MCU的选择范围?使得所有单片机都有接入的可能。
MCP2510的主要功能是在MCU的控制下实现CAN规范,它内部的所有寄存器和控制寄存器都映射到一个地址表上,MCU可以使用相应的命令格式通过标准的SPI接口来完成对MCP2510的初始化、工作状态的控制以及数据的读写。此外,MCP2510产生的中断还可以反馈给MCU来处理。
2.3 系统时钟
由于MSP430的时钟频率决定着指令周期,因而该时钟直接影响SPI接口的速率。MSP430F1232有两个可选的时钟:一是外部低速32.768kHz的时钟晶体;二是采用内部数控DCO的可调频率。本设计直接采用它内部的数控DCO作为它的主时钟MCLK和SMCLK,由于直接工作在800kHz,因而免去了使用晶体。MCP2510采用标准的4MHz晶体。MSP430中USART模块的CLK可由系统时钟分频得到,速率设定也十分方便。实际上,MCP2510输出到总线的速率也可通过设置内部寄存器的控制分频系数来调节。
此外,由于MCP2510的输出信号驱动能力不够,而且与CAN总线物理接口的要求存在很大的差异,所以,在实际应用中必须使用CAN收发器(如MCP2551等),它可支持的CAN速率最高可达1Mbps,而且容错能力很强。此外,它内部还有很强的保护电路,可以防止总线的其它节点对它的影响。
3 软件设计
在进行本系统节点的软件设计前,首先简要说明一下MCP2510的指令格式,MCP2510的5条指令如表1所列。
表1 MCP2510指令格式
指 令 |
指令格式 |
说 明 |
复位 |
1100 0000 |
使内部寄存器复位,进入配置模式 |
读取 |
0000 0011 |
从寄存器读取数据,指令在前,地址随后 |
写入 |
0000 0010 |
写数据到寄存器,指令在前,地址和数据随后 |
发送请求 |
1000 0nnn |
对发送缓存发送信息进行初始化 |
状态读取 |
1010 0000 |
读取常用状态寄存器的某些位数据 |
位修改 |
0000 0101 |
对豁口的某几件位修改 |
在使用时,可以把这些指令直接编写成函数形式,这样可使程序简练易读。同时,发送请求的硬件触发只需把TXnRTS置低即可。实际上,接收缓存收到信息后也能产生硬件触发,并在TXnRTS引脚产生低电平输出。
本设计的主程序流程图如图4所示。
上电复位后,MSP430首先完成自身外围模块的初始化,其任务主要是选择时钟模块中的时钟、使USART模块工作于SPI模式、以及对看门狗定时器的配置等;然后对MCP2510进行初始化,以对寄存器进行设置。需要注意的是,MCP2510只有在配置模式下才可以对控制参数进行配置,但它在复位以后就是配置模式。
当配置MCP2510到环回模式后,MSP430将写数据到MCP2510的发送缓存并控制其发送,此后,在接收缓存收到数据后,INT引脚将产生低电平中断以通知MSP430,MSP430响应中断后将读取数据,并和发送的数据进行比较,以验证程序的可行性。需要注意的是,无论是对MCP2510的读还是写,都必须使它的CS引脚处于低电平。
在实际应用中,MSP430和MCP2510都可以进入睡眠模式,并可以由中断来激活。整个节点的主要功能均由中断子程序来完成,其中的一部分是MSP430自身的中断(看门狗定时器溢出中断、SPI接收发送中断、ADC中断等),另一部分是MCP2510引起的中断,这部分中断资源十分丰富,包括信息接收发送中断、信息错误中断、总线激活中断等。它产生的所有中断都能使INT引脚为低电平, 单片机在检测到这些中断后,将通过SPI接口读取MCP2510内部的中断标志寄存器以判断是何中断,然后再进行进一步处理。
4 结束语
MSP430和MCP2510的很多实用功能本文还没有进一步开发,只是作了一个简单测试系统,而且许多实际应用中需要注意的问题也没有考虑到,需要进一步完善。此外,由于MCP2510使用标准的SPI接口与单片机通信,所以加上它可以不更换单片机,而只需对程序稍作修改即可,因此,采用该方案几乎可以在任何现有系统上实现CAN总线功能。
分享到:
猜你喜欢