Di ranah aplikasi otomotif dan industri, komunikasi yang andal antara beberapa mikrokontroler adalah yang terpenting. Protokol bus Controller Area Network (CAN) telah muncul sebagai solusi yang kuat untuk kebutuhan tersebut. Posting blog ini menggali dasar -dasar protokol bus CAN dan menunjukkan cara mengintegrasikan MCP2515 CAN Controller dengan Arduino, memungkinkan komunikasi yang mulus dalam proyek Anda.
Apa itu Protokol Bus?
Bus Controller Area Network (CAN) adalah standar bus kendaraan yang kuat yang dirancang untuk memungkinkan mikrokontroler dan perangkat berkomunikasi satu sama lain tanpa komputer host. Dikembangkan oleh Bosch pada 1980 -an, Can Bus telah menjadi standar dalam sistem otomotif tetapi juga banyak digunakan dalam otomatisasi industri dan sistem tertanam lainnya.
Fitur utama dari protokol bus CAN termasuk:
- Konfigurasi multi-master: Beberapa node dapat berkomunikasi di bus yang sama tanpa pengontrol pusat.
- Prioritas Pesan: Pesan diprioritaskan berdasarkan pengidentifikasi mereka, memastikan data kritis dikirim terlebih dahulu.
- Deteksi Kesalahan: Mekanisme deteksi kesalahan yang kuat, termasuk pemeriksaan CRC dan bit pengakuan, meningkatkan keandalan.
- Komunikasi berkecepatan tinggi: Mendukung tarif data hingga 1 Mbps, cocok untuk aplikasi real-time.
Fitur -fitur ini membuat bus yang ideal untuk skenario di mana banyak perangkat perlu berkomunikasi secara efisien dan andal, seperti dalam sistem manajemen mesin kendaraan, otomatisasi industri, dan robotika.
Memperkenalkan MCP2515 Can Controller
MCP2515 adalah pengontrol jaringan controller yang berdiri sendiri (CAN) yang berinteraksi dengan mikrokontroler melalui antarmuka periferal serial (SPI). Ini menangani protokol kaleng yang rumit, memungkinkan pengembang untuk fokus pada logika aplikasi tingkat lebih tinggi. Fitur utama dari MCP2515 meliputi:
- Dukungan untuk bingkai kaleng standar dan luas.
- Mekanisme penanganan dan penyaringan kesalahan bawaan.
- Kompatibilitas dengan berbagai mikrokontroler, termasuk Arduino.
- Konsumsi daya rendah, membuatnya cocok untuk sistem tertanam.
Dengan mengintegrasikan MCP2515 dengan Arduino, Anda dapat menambahkan kemampuan bus CAN ke proyek Anda, memungkinkan komunikasi dengan perangkat atau jaringan yang mendukung CAN lainnya.
Menyiapkan MCP2515 dengan Arduino
Untuk memulai, Anda membutuhkan komponen berikut:
- Dewan Arduino (mis., Arduino uno)
- MODUL CAN MCP2515 (sering kali dilengkapi dengan transceiver TJA1050)
- Kabel jumper
- Papan tempat memotong roti (opsional)
Berikut panduan langkah demi langkah untuk menyiapkan MCP2515 dengan Arduino Anda:
1. Kabel MCP2515 ke Arduino
Hubungkan modul MCP2515 ke Arduino sebagai berikut:
- Vcc ke 5v di Arduino
- Gnd ke Gnd di Arduino
- CS ke Pin 10 di Arduino
- Sck ke Pin 13 di Arduino
- Si (Mosi) ke Pin 11 di Arduino
- JADI (Miso) ke Pin 12 di Arduino
- Int ke Pin 2 di Arduino
Arduino MCP2515
------- -------
5V ------> VCC
GND ------> GND
Pin 10 ------> CS
Pin 13 ------> SCK
Pin 11 ------> SI (MOSI)
Pin 12 ------> SO (MISO)
Pin 2 ------> INT
2. Memasang pustaka yang diperlukan
Untuk berkomunikasi dengan MCP2515, Anda akan membutuhkan mcp_can perpustakaan. Instal melalui Manajer Perpustakaan Arduino:
- Buka Ide Arduino.
- Navigasikan ke Sketsa> Sertakan Perpustakaan> Kelola Perpustakaan ...
- Cari mcp_can dan instal mcp_can Perpustakaan oleh Cory J. Fowler.
3. Mengunggah kode contoh
Berikut adalah contoh dasar untuk dikirim dan menerima pesan CAN menggunakan MCP2515 dan Arduino:
Mengirim pesan kaleng
// Include the necessary libraries
#include
#include "mcp_can.h"
// Define the CS pin
#define CAN0_CS 10
// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);
void setup() {
Serial.begin(115200);
while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
Serial.println("CAN BUS Shield init fail");
Serial.println(" Init CAN BUS Shield again");
delay(100);
}
Serial.println("CAN BUS Shield init ok!");
CAN0.setMode(MCP_NORMAL);
}
void loop() {
byte data[] = {0x00, 0xFF, 0xAA, 0x55, 0x33, 0x66, 0x99, 0xCC};
// Send data: CAN ID = 0x100, data length = 8
if (CAN0.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
Serial.println("Message Sent Successfully!");
} else {
Serial.println("Error Sending Message...");
}
delay(1000);
}
Menerima pesan kaleng
// Include the necessary libraries
#include
#include "mcp_can.h"
// Define the CS pin
#define CAN0_CS 10
// Initialize the CAN controller
MCP_CAN CAN0(CAN0_CS);
void setup() {
Serial.begin(115200);
while (CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ) != CAN_OK) {
Serial.println("CAN BUS Shield init fail");
Serial.println(" Init CAN BUS Shield again");
delay(100);
}
Serial.println("CAN BUS Shield init ok!");
CAN0.setMode(MCP_NORMAL);
}
void loop() {
unsigned long canId;
byte len = 0;
byte buf[8];
// Check if data has been received
if (CAN0.checkReceive() == CAN_MSGAVAIL) {
CAN0.readMsgBuf(&canId, &len, buf);
Serial.print("CAN ID: 0x");
Serial.println(canId, HEX);
Serial.print("Data: ");
for (int i = 0; i < len; i++) {
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
Di sketsa pengiriman, Arduino mentransmisikan pesan kaleng dengan ID 0x100
setiap detik. Sketsa penerima mendengarkan pesan CAN yang masuk dan mencetak ID dan data ke monitor serial.
Aplikasi Bus Can dengan Arduino
Mengintegrasikan bus CAN dengan Arduino membuka banyak aplikasi di luar sistem otomotif. Beberapa kasus penggunaan populer meliputi:
- Robotika: Aktifkan komunikasi antara beberapa pengontrol motor dan sensor.
- Otomatisasi Industri: Memfasilitasi pertukaran data antara berbagai mesin dan unit kontrol.
- Otomatisasi Rumah: Hubungkan berbagai perangkat pintar dalam jaringan terpadu.
- Sistem akuisisi data: Mengumpulkan dan memproses data dari beberapa sensor secara efisien.
Kesimpulan
Protokol bus CAN, dengan keandalan dan efisiensinya, berfungsi sebagai tulang punggung untuk komunikasi dalam berbagai sistem tertanam. Dengan menggunakan MCP2515 Can Controller dengan Arduino, pengembang dapat dengan mudah mengintegrasikan kemampuan bus CAN ke dalam proyek mereka. Apakah Anda sedang mengerjakan sistem otomotif, otomatisasi industri, atau robotika yang kompleks, pemahaman dan pengungkit bus dapat secara signifikan meningkatkan kerangka kerja komunikasi sistem Anda.
Dengan panduan dan contoh komprehensif yang disediakan, Anda diperlengkapi dengan baik untuk memulai mengintegrasikan bus CAN ke dalam proyek Arduino Anda berikutnya. Happy Coding!