- Ievads CAN
- CAN salīdzinājums ar SPI & I2C
- CAN protokola lietojumprogrammas
- Kā izmantot CAN protokolu Arduino
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- Savienojums starp diviem MCP2515 CAN moduļiem
- Arduino programmēšana CAN saziņai
- CAN raidītāja sānu koda skaidrojums (Arduino Nano)
- CAN uztvērēja sānu koda skaidrojums (Arduino UNO)
- CAN komunikācijas darbs Arduino
Šodien jebkura vidējā automašīna sastāv no aptuveni 60 līdz 100 sensoru vienībām, lai uztvertu un apmainītos ar informāciju. Automobiļu ražotājiem pastāvīgi padarot savu automašīnu gudrāku, izmantojot tādas funkcijas kā autonomā braukšana, gaisa spilvenu sistēma, riepu spiediena kontrole, kruīza kontroles sistēma utt. Atšķirībā no citiem sensoriem, šie sensori apstrādā kritisko informāciju, un tāpēc dati no šiem sensoriem būtu jāpaziņo, izmantojot standarta automobiļu sakaru protokolus. Piemēram, kruīza kontroles sistēmas dati, piemēram, ātrums, droseļvārsta stāvoklis utt., Ir būtiskas vērtības, kuras tiek nosūtītas elektroniskajai vadības ierīcei (ECU).lai izlemtu automašīnas paātrinājuma līmeni, nepareiza komunikācija vai datu zudums šeit var izraisīt kritiskas kļūmes. Tādējādi atšķirībā no standarta sakaru protokoliem, piemēram, UART, SPI vai I2C, dizaineri izmanto daudz uzticamus automašīnu sakaru protokolus, piemēram, LIN, CAN, FlexRay utt.
No visiem pieejamajiem protokoliem CAN galvenokārt tiek izmantots un populārs. Mēs jau esam apsprieduši, kas ir CAN un kā CAN darbojas. Tātad, šajā rakstā mēs vēlreiz izpētīsim pamatus un pēc tam, visbeidzot, mēs arī apmainīsimies ar datiem starp diviem Arduinos, izmantojot CAN komunikāciju. Izklausās interesanti labi! Tātad, sāksim darbu.
Ievads CAN
CAN jeb Controller Area Network ir sērijveida sakaru kopne, kas paredzēta rūpnieciskām un automobiļu vajadzībām. Tas ir uz ziņojumu balstīts protokols, ko izmanto saziņai starp vairākām ierīcēm. Kad vairākas CAN ierīces ir savienotas kopā, kā parādīts zemāk, savienojums veido tīklu, kas darbojas kā mūsu centrālā nervu sistēma, ļaujot jebkurai ierīcei runāt ar jebkuru citu mezglā esošo ierīci.
CAN tīkls sastāvēs tikai no diviem vadiem CAN augstas, un tās zemu divvirzienu datu pārraidi, kā norādīts iepriekš. Parasti sakaru ātrums CAN svārstās no 50 Kbps līdz 1Mbps, un attālums var svārstīties no 40 metriem ar ātrumu 1Mbps līdz 1000 metriem ar ātrumu 50 Kbps.
CAN ziņojuma formāts:
CAN sakarībā dati tiek pārsūtīti tīklā kā noteikts ziņojuma formāts. Šajā ziņojuma formātā ir daudz segmentu, bet divi galvenie segmenti ir identifikators un dati, kas palīdz nosūtīt ziņojumus un atbildēt uz tiem CAN kopnē.
Identifier or CAN ID: Identifikators ir pazīstams arī kā CAN ID vai arī PGN (parametru grupas numurs). To izmanto, lai identificētu CAN ierīces, kas atrodas CAN tīklā. Atkarībā no izmantotā CAN protokola veida identifikatora garums ir 11 vai 29 biti.
Standarta CAN: 0-2047 (11 biti)
Paplašināta CAN: 0-2 29 -1 (29 biti)
Dati: tie ir faktiskie sensoru / vadības dati, kas jānosūta no vienas ierīces uz otru. Dati par lielumu var būt no 0 līdz 8 baiti.
Datu garuma kods (DLC): no 0 līdz 8 pašreizējo datu baitu skaitam.
CAN izmantotie vadi:
CAN protokols sastāv no diviem vadiem, proti, CAN_H un CAN_L, lai nosūtītu un saņemtu informāciju. Abi vadi darbojas kā diferenciālā līnija, kas nozīmē, ka CAN signālu (0 vai 1) attēlo potenciāla starpība starp CAN_L un CAN_H. Ja starpība ir pozitīva un lielāka par noteiktu minimālo spriegumu, tā ir 1 un, ja starpība ir negatīva, tā ir 0.
Parasti saziņai ar CAN tiek izmantots vītā pāra kabelis. CAN tīkla divos galos parasti tiek izmantots viens 120 omu rezistors, kā parādīts attēlā, tas ir tāpēc, ka līnijai jābūt līdzsvarotai un piesaistītai vienam un tam pašam potenciālam.
CAN salīdzinājums ar SPI & I2C
Tā kā mēs jau esam iemācījušies izmantot SPI ar Arduino un IIC ar Arduino, salīdziniet SPI un I2C funkcijas ar CAN
Parametrs | SPI | I2C | VAR |
Ātrums | 3Mbps līdz 10Mbps | Standarts: 100Kbps | 10–1 MB / s ir atkarīgs arī no izmantotā stieples garuma |
Ātri: 400 Kbps | |||
Ātrgaitas ātrums: 3.4Mbps | |||
Tips | Sinhrona | Sinhrona | Asinhrona |
Vadu skaits | 3+ (MISO, MOSI, SCK, SS1, SS2… SS (n)) | 2 vadi (SDA, SCL) | 2 vadi (CAN_H, CAN_L) |
Duplekss | Pilnīgs duplekss | Pusduplekss | Pusduplekss |
CAN protokola lietojumprogrammas
- CAN protokola izturības un uzticamības dēļ tos izmanto tādās nozarēs kā automobiļi, rūpniecības mašīnas, lauksaimniecība, medicīnas iekārtas utt.
- Tā kā elektroinstalācijas sarežģītība CAN tiek samazināta, tos galvenokārt izmanto automobiļu lietojumos, piemēram, automašīnās.
- Zemākas ieviešanas izmaksas un arī aparatūras komponentu cena ir zemāka.
- Viegli pievienot un noņemt CAN kopnes ierīces.
Kā izmantot CAN protokolu Arduino
Tā kā Arduino nav iebūvēta CAN porta, tiek izmantots CAN modulis ar nosaukumu MCP2515. Šis CAN modulis ir savienots ar Arduino, izmantojot SPI komunikāciju. Apskatīsim sīkāk par MCP2515 detalizēti un to, kā tas ir saskarnē ar Arduino.
MCP2515 CAN modulis:
MCP2515 modulim ir CAN kontrolieris MCP2515, kas ir ātrgaitas CAN uztvērējs. Savienojums starp MCP2515 un MCU notiek caur SPI. Tātad, tas ir viegli saskarne ar jebkuru mikrokontrolleru, kam ir SPI saskarne.
Iesācējiem, kuri vēlas apgūt CAN Bus, šis modulis darbosies kā labs sākums. Šī CAN SPI plāksne ir ideāli piemērota rūpnieciskai automatizācijai, mājas automatizācijai un citiem automobiļu iegultiem projektiem.
MCP2515 funkcijas un specifikācija:
- Izmanto ātrgaitas CAN uztvērēju TJA1050
- Izmēri: 40 × 28mm
- SPI vadība, lai paplašinātu Multi CAN kopnes saskarni
- 8MHZ kristāla oscilators
- 120Ω spailes pretestība
- Ir neatkarīgs taustiņš, LED indikators, barošanas indikators
- Atbalsta 1 Mb / s CAN darbību
- Zema pašreizējā gaidīšanas režīma darbība
- Var savienot līdz 112 mezgliem
MCP2515 CAN moduļa pinout:
Piespraudes nosaukums |
LIETOT |
VCC |
5V strāvas ievades tapa |
GND |
Zemes tapa |
CS |
SPI SLAVE select pin (Active low) |
TĀ |
SPI galvenā ieejas verga izejas vads |
SI |
SPI galvenā izejas verga ievades vads |
SCLK |
SPI pulksteņa tapa |
INT |
MCP2515 pārtraukuma tapa |
Šajā apmācībā apskatīsim, kā nosūtīt mitruma un temperatūras (DHT11) sensora datus no Arduino Nano uz Arduino Uno, izmantojot CAN kopnes moduli MCP2515.
Nepieciešamās sastāvdaļas
- Arduino UNO
- Arduino NANO
- DHT11
- 16x2 LCD displejs
- MCP2515 CAN modulis - 2
- 10k potenciometrs
- Maizes dēlis
- Vadu savienošana
Ķēdes shēma
Savienojums CAN raidītāja pusē:
Komponents - tapa |
Arduino Nano |
MPC2515 - VCC |
+ 5V |
MPC2515 - GND |
GND |
MPC2515 - CS |
D10 (SPI_SS) |
MPC2515 - TIK |
D12 (SPI_MISO) |
MPC2515 - SI |
D11 (SPI_MOSI) |
MPC2515 - SCK |
D13 (SPI_SCK) |
MPC2515 - INT |
D2 |
DHT11 - VCC |
+ 5V |
DHT11 - GND |
GND |
DHT11 - OUT |
A0 |
Ķēdes savienojumi CAN uztvērēja pusē:
Komponents - tapa |
Arduino UNO |
MPC2515 - VCC |
+ 5V |
MPC2515 - GND |
GND |
MPC2515 - CS |
10 (SPI_SS) |
MPC2515 - TIK |
12 (SPI_MISO) |
MPC2515 - SI |
11 (SPI_MOSI) |
MPC2515 - SCK |
13 (SPI_SCK) |
MPC2515 - INT |
2 |
LCD - VSS |
GND |
LCD - VDD |
+ 5V |
LCD - V0 |
Uz 10K potenciometra centra PIN |
LCD - RS |
3 |
LCD - RW |
GND |
LCD - E |
4 |
LCD - D4 |
5 |
LCD - D5 |
6 |
LCD - D6 |
7 |
LCD - D7 |
8 |
LCD - A |
+ 5V |
LCD - K |
GND |
Savienojums starp diviem MCP2515 CAN moduļiem
H - var augstu
L - VAR zems
MCP2515 (Arduino Nano) |
MCP2515 (Arduino UNO) |
H |
H |
L |
L |
Kad visi savienojumi tika izveidoti, mana aparatūra izskatījās šādi zemāk
Arduino programmēšana CAN saziņai
Vispirms mums ir jāinstalē CAN bibliotēka Arduino IDE. MCP2515 CAN moduļa un Arduino saskarne kļūst vienkāršāka, izmantojot šo bibliotēku.
- Lejupielādējiet Arduino CAN MCP2515 bibliotēkas ZIP failu.
- No Arduino IDE: Skice -> Iekļaut bibliotēku -> Pievienot.ZIP bibliotēku
Šajā apmācībā kodēšana ir sadalīta divās daļās: viena kā CAN raidītāja kods (Arduino Nano) un otra kā CAN uztvērēja kods (Arduino UNO), kuras abas ir atrodamas šīs lapas apakšdaļā. To pašu izskaidro šādi.
Pirms rakstāt programmu datu nosūtīšanai un saņemšanai, pārliecinieties, vai esat instalējis bibliotēku, veicot iepriekš minētās darbības, un CAN modulis MCP2515 tiek inicializēts jūsu programmā šādi.
Inicializēt MCP2515 CAN moduli:
Lai izveidotu savienojumu ar MCP2515, rīkojieties šādi:
1. Iestatiet piespraudes numuru, kur ir pievienots SPI CS (pēc noklusējuma 10)
MCP2515 mcp2515 (10);
2. Iestatiet datu pārraides ātrumu un oscilatora frekvenci
mcp2515.setBitrate (CAN_125KBPS, MCP_8MHZ);
Pieejamie Baud likmes:
CAN_5KBPS, CAN_10KBPS, CAN_20KBPS, CAN_31K25BPS, CAN_33KBPS, CAN_40KBPS, CAN_50KBPS, CAN_80KBPS, CAN_83K3BPS, CAN_95KBPS, CAN_100KBPS, CAN_125KBAN, CAN_125KB
Pieejamais pulksteņa ātrums:
MCP_20MHZ, MCP_16MHZ, MCP_8MHZ
3. Iestatiet režīmus.
mcp2515.setNormalMode (); mcp2515.setLoopbackMode (); mcp2515.setListenOnlyMode ();
CAN raidītāja sānu koda skaidrojums (Arduino Nano)
Raidītāja sadaļā Arduino Nano saskarē ar MCP2515 CAN moduli caur SPI tapām un DHT11 nosūta temperatūras un mitruma datus CAN kopnei.
Vispirms tiek iekļautas nepieciešamās bibliotēkas, SPI bibliotēka SPI komunikācijas izmantošanai, MCP2515 bibliotēka CAN komunikācijas lietošanai un DHT bibliotēka DHT sensora lietošanai ar Arduino . Mēs iepriekš saskarnes DHT11 ar Arduino.
# iekļaut
Tagad ir definēts DHT11 (OUT pin) tapas nosaukums, kas ir savienots ar Arduino Nano A0
#define DHTPIN A0
Turklāt DHTTYPE ir definēts kā DHT11.
#define DHTTYPE DHT11
A canMsg struct datu tips glabāšanai CAN ziņojuma formātu.
struct can_frame canMsg;
Iestatiet piespraudes numuru, kur ir pievienots SPI CS (pēc noklusējuma 10)
MCP2515 mcp2515 (10);
Turklāt tiek inicializēts objekta dht DHT klasei ar DHT tapu ar Arduino Nano un DHT tipu kā DHT11.
DHT dht (DHTPIN, DHTTYPE);
Nākamais tukšajā iestatījumā ():
Sāciet SPI komunikāciju, izmantojot šādu paziņojumu
SPI.sākt ();
Pēc tam izmantojiet zemāk esošo paziņojumu, lai sāktu saņemt temperatūras un mitruma vērtības no DHT11 sensora.
dht.sākt ();
Pēc tam MCP2515 tiek atiestatīts, izmantojot šādu komandu
mcp2515.reset ();
Tagad MCP2515 kā pulkstenis ir iestatīts ātrums 500 KB / s un 8 MHz
mcp2515.setBitrate (CAN_500KBPS, MCP_8MHZ);
Un MCP2525 ir iestatīts normālā režīmā
mcp2515.setNormalMode ();
Tukšā lokā ():
Šis paziņojums iegūst mitruma un temperatūras vērtību un saglabā veselu skaitļu mainīgos h un t.
int h = dht.lasītMitrums (); int t = dht.lasītTemperatūra ();
Tālāk CAN ID tiek norādīts kā 0x036 (pēc izvēles) un DLC kā 8, un mēs piešķiram h un t datus datiem un datiem un visus datus atstājam ar 0.
canMsg.can_id = 0x036; canMsg.can_dlc = 8; canMsg.data = h; // Atjaunināt mitruma vērtību mapē canMsg.data = t; // Atjaunināt temperatūras vērtību mapē canMsg.data = 0x00; // Atpūtiet visu ar 0 canMsg.data = 0x00; canMsg.data = 0x00; canMsg.data = 0x00; canMsg.data = 0x00; canMsg.data = 0x00;
Galu galā, lai nosūtītu ziņojumu CAN BUS, mēs izmantojam šādu paziņojumu.
mcp2515.sendMessage (& canMsg);
Tāpēc tagad temperatūras un mitruma dati tiek nosūtīti kā ziņojums uz CAN kopni.
CAN uztvērēja sānu koda skaidrojums (Arduino UNO)
Uztvērēja sadaļā Arduino UNO ir saskarne ar LCD displeju MCP2515 un 16x2. Arduino UNO šeit saņem temperatūru un mitrumu no CAN kopnes un parāda LCD saņemtos datus.
Vispirms tiek iekļautas nepieciešamās bibliotēkas, SPI bibliotēka SPI komunikācijas izmantošanai, MCP2515 bibliotēka CAN komunikācijas lietošanai un LiquidCrsytal bibliotēka 16x2 LCD lietošanai ar Arduino .
# iekļaut
Pēc tam tiek definēti LCD tapas, kas tiek izmantotas savienojumam ar Arduino UNO.
const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 8; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Struct datu tips ir deklarēta glabāšanai CAN ziņojuma formātu.
struct can_frame canMsg;
Iestatiet piespraudes numuru, kur ir pievienots SPI CS (pēc noklusējuma 10)
MCP2515 mcp2515 (10);
Tukšā iestatījumā ():
Vispirms LCD ir iestatīts 16x2 režīmā un tiek parādīts sveiciena ziņojums.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("VAR ARDUINO"); kavēšanās (3000); lcd.clear ();
Sāciet SPI komunikāciju, izmantojot šādu paziņojumu.
SPI.sākt ();
Pēc tam MCP2515 tiek atiestatīts, izmantojot šādu komandu.
mcp2515.reset ();
Tagad MCP2515 kā pulkstenis ir iestatīts ātrums 500 KB / s un 8 MHz.
mcp2515.setBitrate (CAN_500KBPS, MCP_8MHZ);
Un MCP2525 ir iestatīts normālā režīmā.
mcp2515.setNormalMode ();
Nākamais tukšuma cilpā ():
Šis ziņojums tiek izmantots, lai saņemtu ziņojumu no CAN kopnes. Ja tiek saņemts ziņojums, tas nonāk nosacījumā if .
ja (mcp2515.readMessage (& canMsg) == MCP2515:: ERROR_OK)
In ja stāvoklī dati tiek saņemti un glabāti c anMsg , datus, kas ir mitruma vērtību un datus, kas ir temperatūras vērtību. Abas vērtības tiek saglabātas veselā skaitlī x un y.
int x = canMsg.data; int y = canMsg.dati;
Pēc vērtību saņemšanas temperatūras un mitruma vērtības tiek parādītas 16x2 LCD displejā, izmantojot šādu paziņojumu.
lcd.setCursor (0,0); lcd.print ("Mitrums:"); lcd.print (x); lcd.setCursor (0,1); lcd.print ("Temp:"); lcd.print (y); kavēšanās (1000); lcd.clear ();
CAN komunikācijas darbs Arduino
Kad aparatūra ir gatava, augšupielādējiet programmu CAN raidītājam un CAN uztvērējam (pilnīgas programmas ir norādītas zemāk) attiecīgajās Arduino plāksnēs. Kad darbina jūs ievērosiet temperatūras vērtība lasīt DHT11 tiks nosūtīts uz citu Arduino caur CAN komunikācijas un redzams uz LCD un 2 nd Arduino, kā jūs varat redzēt zemāk attēlā. Esmu izmantojis arī maiņstrāvas pulti, lai pārbaudītu, vai LCD displejā redzamā temperatūra ir tuvu faktiskajai istabas temperatūrai.
Pilnīgu darbu var atrast zemāk esošajā videoklipā. Ja jums ir kādi jautājumi, atstājiet tos komentāru sadaļā vai izmantojiet mūsu forumus citiem tehniskiem jautājumiem.