Controller Area Network
A message protocol originally designed for motor vehicles that allows different microcontrollers to communicate with one another and a computer, that acts as a host, in a prioritized fashion.
The Controller Area Network or CAN was developed by Robert Bosch GmbH in early 1986. It was first introduced at that year’s SAE congress. CAN was born out of Bosch’s initiative to evaluate existing serial bus systems and attempting to refine them into something usable on automotive platforms. The system was originally called the “Automotive Serial Controller Area Network” and was based around a technology called a non-destructive arbitration mechanism. This allowed the bus to grant access to the message received from the device with the highest priority, while avoiding delays.
CAN is a serial bus that controls and broadcasts signals from multiple inputs in a manner that allows devices denoted with higher importance to take precedence over those with lower precedence. Typically you will see devices such as sensors, actuators, levers, valves, timers, switches, and other control devices connected to a CAN network. The connection is actually made through a processor that acts as the host and a CAN controller which sends signals to the bus. Each node connected to the controller is able to send and receive messages, however, these messages cannot be sent simultaneously. Here is where the non-destructive arbitration mechanism kicks in. Each message that is sent contains an ID. These IDs typically identify the type of message being sent and the device sending it. This ID consists of up to eight bytes of data and is transmitted serially to the bus. If two or more messages are sent at the same time, the message with the more dominant ID will overwrite the less dominant IDs. This allows the overriding message to get through. The network is capable of operating at up to 1 Mbit/s speeds (assuming a network length less than 40 m). Another important fact is that the data link protocol for CAN is standardized in ISO 11898 -1.
Certain programs allow for the remote network control of a CAN. One such program is called CANopen. Further data about CAN and other open source CAN controllers can be found at the CAN Wikipedia page.