天天看点

pci简单通知控制器_基于Arduino的控制器局域网原型设计

01

控制器局域网简介

控制器局域网(Controller arean Network,CAN)是一种串行网络技术,最初是为汽车工业设计的,尤其是在欧洲汽车上,但也成为工业自动化以及其他应用领域的一种流行总线。CAN总线主要用于嵌入式系统中,顾名思义,是一种网络技术,可在微控制器之间提供快速通信,达到实时要求,从而消除了对更昂贵和更复杂技术的双端口RAM需求。

CAN是一种双线、半双工、高速网络系统,在功能和可靠性方面远远优于传统串行技术(如RS232),但CAN实现更具成本效益。

pci简单通知控制器_基于Arduino的控制器局域网原型设计

例如,TCP/IP是为传输大量数据而设计的,CAN则是针对实时性要求而设计的,其1 MBit/s的波特率在响应时间短、错误检测及时、错误恢复和错误修复方面可以轻松击败100 MBit/s的TCP/IP连接。

CAN网络既可以作为微控制器的嵌入式通信系统,也可以作为智能设备的开放式通信系统。一些用户,例如在医疗工程领域,选择CAN是因为他们必须满足特别严格的安全要求。

对安全性或可靠性要求极高的其他设备(如机器人、升降机和运输系统)的制造商必须考虑类似的要求。

控制器局域网的最大优点在于减少了布线量,并巧妙地防止了消息冲突(这意味着在消息传输过程中不会丢失数据)。

pci简单通知控制器_基于Arduino的控制器局域网原型设计

以下是需要了解CAN技术特性的概述。

控制器局域网络

  • 是一种用于嵌入式解决方案的串行网络技术。
  • 只需要两条名为CAN-H和CAN-L的线路。
  • 以每秒1兆位的数据速率运行。
  • 每个消息帧最多支持8字节。
  • 不支持节点ID,仅支持消息ID。一个应用程序可以支持多个消息ID。
  • 支持消息优先级,即消息标识越低优先级越高。
  • 支持两个消息ID长度,11位(标准)和29位(扩展)。
  • 不会遇到消息冲突(因为它们可能发生在其他串行技术)。
  • 对线缆要求不高。双绞线就足够了。

注:有关CAN的更多详细信息,请参阅本书文献附录中提到的“控制器局域网的可理解指南”。

02

硬件原型及其变体

正如本书前面提到的,假设读者对Arduino、Arduino Sketches和Arduino Shields有一些基本的了解。不过,我将借此机会提及原型硬件及其变体。

需要知道是尽管Arduino由于其价格低廉和易于编程而非常适合于制作硬件原型,但无论是在环境规格(例如温度范围等)还是在执行速度和内存资源方面,它并不是工业级的解决方案。

具体来说,当谈到1 Mbit/s和高数据流量的CAN应用时,Arduino可能会很快达到其极限。然而,正如下面几章中所解释的那样,有一些先进且兼容的Arduino替代品。

  • Arduino
pci简单通知控制器_基于Arduino的控制器局域网原型设计

为了开发和测试本书中所示的示例程序,我使用了Arduino Uno。该硬件包括一个开源硬件板,通常围绕8位Atmel AVR微控制器设计的,该微控制器具有2 KB RAM(工作内存)、32 KB闪存和1 KB EEPROM-电可擦编程只读存储器电(非易失性)。

这些技术规范对于CAN应用的基本原型设计和概念验证来说已经足够了。然而,为了重复这一点,随着对执行速度和扩展功能的需求不断增长,Arduino可能会很快达到它的极限。

注:本书中显示的所有Arduino程序都是用Arduino Uno开发和测试的。不能保证这些程序在任何其他兼容系统上都能正常工作。

  • Intel Galileo
pci简单通知控制器_基于Arduino的控制器局域网原型设计

Intel Galileo是一个基于Intel® Quark SoC X1000应用处理器的微控制器板,它是一个芯片上的32位Intel Pentium类系统。它被设计成硬件和软件引脚与为Uno R3设计的Arduino shields兼容。

Galileo板还与Arduino软件开发环境兼容,这将使可用性和引入变得非常简单。

除了Arduino硬件和软件兼容性之外,Galileo板还具有多个PC行业标准的I/O端口和功能,以扩展Arduino shield生态系统之外的本机使用和功能。一个全尺寸的mini-PCI-Express插槽、100Mb以太网端口、Micro-SD插槽、RS-232串行端口、USB主机端口、USB客户端端口和8MByte NOR-flash都是标准配置。

CPU是一个400MHz的32位Intel®Pentium指令集体系结构(ISA)兼容处理器,并且有高达8MB的闪存可用。

  • LeafLabs Maple Microcontroller Board
pci简单通知控制器_基于Arduino的控制器局域网原型设计

尽管它可能与Arduino相似,但差异才是真正使Maple脱颖而出的原因。

它利用一个32位ARM Cortex-M3的72兆赫时钟来推动39个GPIO,16个模拟引脚,12位ADC分辨率和15个16位分辨率的PWM引脚。为了确保您有足够的编程空间来调整硬件,Maple还提供128k闪存和20KB SRAM。所有这些性能都与Arduino Pro相同。

如果您当前基于Arduino的项目正在挑战ATmega的性能限制,那么将其移植到Maple可能是无需从头开始就可以继续开发项目的最快、最简单的方法。

通过将流行的“avr-gcc”编译器与codesource的“arm-none-eabi-gcc”互换,LeafLabs设法为Arduino提供了几乎完全相同的编程体验,尽管目标是一个完全不同的架构。另外,由于某些功能被分配到不同的针脚,一些Arduino shields是不兼容的,目前其中一些受到支持,将来会支持的更多。在产品页面上还有一个关于将Arduino库和源代码移植到Maple的指南。

03

Arduino CAN Shields

由于控制器局域网(CAN)主要针对工业解决方案(相比之下,在家庭和实验室等非工业用途上USB更受欢迎),市场上没有太多选择。

通过一些研究,发现了两个非常相似的解决方案,它们都使用同一个CAN库(如后面章节所述)。两种解决方案都使用微芯片MCP2515 CAN控制器。此外,这两种解决方案都是通过全球在线资源分发的。

微芯片MCP2515 CAN控制器

Microchip Technology公司的MCP2515是一个独立的控制器局域网(CAN)控制器,实现CAN规范2.0B版。它能够传输和接收标准和扩展数据以及远程帧。MCP2515有两个接受掩码和六个接受过滤器,用于过滤不需要的消息,从而减少主机MCU的开销。MCP2515通过工业标准串行外围接口(SPI)与微控制器(MCU)接口。

这些功能包括两个具有优先消息存储的接收缓冲区、六个29位过滤器、两个29位掩码和三个具有优先级和中止功能的传输缓冲区。

注:CAN规范2.0B使用11位消息标识符的标准CAN帧并具有29位消息ID的扩展格式。

以下章节中所述的两个CAN shields均采用微芯片MCP2551 CAN收发器,该收发器将内部TTL信号转换为CAN标准要求的差分电压。