The MCP2515 is a CAN (Controller Area Network) bus module widely used for automotive and industrial communication. Arduino'nun veriyi verimli bir şekilde göndermek ve almak için Can tabanlı sistemlerle arayüz oluşturmasını sağlar. Bu öğretici, Arduino ile MCP2515 modülünü kurma ve kullanarak size rehberlik edecektir.
Ne İhtiyacınız Olacak
- MCP2515 CAN BUS MODÜLÜ
- Arduino Kurulu (örn. UNO, Mega, Nano)
- Can-Bus uyumlu cihaz veya başka bir MCP2515 modülü
- Jumper telleri
- Breadboard (isteğe bağlı)
- Arduino IDE kurulu bir bilgisayar
Adım 1: MCP2515 modülünü anlamak
MCP2515 modülü, MCP2515 CAN denetleyicisini IC ve TJA1050'nin alıcı -vericisini kullanır. Modül, SPI arayüzü aracılığıyla Arduino ile iletişim kurar.
MCP2515 Pinout
Pin | İşlev |
---|---|
VCC | Güç kaynağı (5V) |
Gnd | Zemin |
CS | Çip Seçim |
BU YÜZDEN | SPI veri çıkışı |
Sİ | SPI veri girişi |
Sck | SPI saati |
İnt | Çıktı kesinti |
Adım 2: MCP2515'i Arduino'ya bağlama
Aşağıda, MCP2515 modülünü bir Arduino Uno'ya bağlamak için kablo kılavuzu verilmiştir:
MCP2515 PIN | Arduino pimi |
---|---|
VCC | 5V |
Gnd | Gnd |
CS | Pim 10 |
BU YÜZDEN | Pim 12 |
Sİ | Pim 11 |
Sck | Pin 13 |
İnt | Pim 2 |
Not: Diğer Arduino panoları için, SPI pimlerinin belirli panonuzun pinout'una karşılık geldiğinden emin olun.
Adım 3: Gerekli kütüphaneyi kurun
. MCP_CAN Kütüphane, MCP2515 modülü ile etkileşimi basitleştirir.
MCP_CAN Kütüphanesi Yükleme Adımları:
- Arduino IDE'yi açın.
- Gidip gelmek Eskiz > Kütüphane ekleyin > Kütüphaneleri Yönetin.
- Kütüphane yöneticisinde "MCP_CAN" ı arayın.
- Tıklamak Düzenlemek.
4. Adım: Kodu yükleyin
Verici Kodu (CAN veriyolunda veri gönderme):
#include <SPI.h>
#include <mcp_can.h>
#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515
void setup() {
Serial.begin(115200);
if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
Serial.println("CAN Bus Initialized Successfully");
} else {
Serial.println("CAN Bus Initialization Failed");
while (1);
}
CAN.setMode(MCP_NORMAL);
Serial.println("CAN Bus set to Normal Mode");
}
void loop() {
unsigned char data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
if (CAN.sendMsgBuf(0x100, 0, 8, data) == CAN_OK) {
Serial.println("Message Sent Successfully");
} else {
Serial.println("Error Sending Message");
}
delay(1000); // Send data every second
}
Alıcı Kodu (CAN veriyolundan veri okuma):
#include <SPI.h>
#include <mcp_can.h>
#define CAN_CS 10
MCP_CAN CAN(CAN_CS); // Set CS pin for MCP2515
void setup() {
Serial.begin(115200);
if (CAN.begin(MCP_ANY, 500000, MCP_8MHZ) == CAN_OK) {
Serial.println("CAN Bus Initialized Successfully");
} else {
Serial.println("CAN Bus Initialization Failed");
while (1);
}
CAN.setMode(MCP_NORMAL);
Serial.println("CAN Bus set to Normal Mode");
}
void loop() {
unsigned char len = 0;
unsigned char buf[8];
if (CAN.checkReceive() == CAN_MSGAVAIL) {
CAN.readMsgBuf(&len, buf);
unsigned long id = CAN.getCanId();
Serial.print("Message ID: 0x");
Serial.println(id, HEX);
Serial.print("Data: ");
for (int i = 0; i < len; i++) {
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
Adım 5: Kurulumu test edin
- MCP2515 modülünü Adım 2'de açıklandığı gibi Arduino'nuza bağlayın.
- Verici kodunu bir Arduino'ya ve alıcı kodunu başka bir Arduino'ya yükleyin.
- CAN veriyolunu oluşturmak için her iki MCP2515 modülünün Can_H ve Can_L pinlerini bağlayın.
- Her iki Arduino'daki seri monitörü açın ve baud hızını
115200
. - Alıcı Arduino'da Verici Arduino tarafından gönderilen mesajları görmelisiniz.
Sorun giderme
- Alınan veri yok: Modüller arasındaki CAN_H ve CAN_L bağlantılarını kontrol edin.
- Başlatma başarısız oldu: SPI bağlantılarının ve CS PIN'in kurulumunuzla eşleştiğinden emin olun.
- Düzensiz iletişim: Her iki modülün de aynı baud hızını kullandığını doğrulayın (bu örnekte 500 kbps).
MCP2515 CAN BUS MODÜLÜNÜNÜNLERİN UYGULAMALARI
- Araç teşhisi (OBD-II)
- Endüstriyel Otomasyon Sistemleri
- Robot iletişim
- CAN otobüs ağlarıyla IoT cihazları
Çözüm
Veri göndermek ve almak için Arduino ile MCP2515 CAN modülünü başarıyla ayarladınız. Bu modül, bir CAN veriyolunda güvenilir iletişim gerektiren uygulamalar için inanılmaz derecede çok yönlüdür. Tam potansiyelini keşfetmek için farklı mesaj kimlikleri ve veri yükleri ile deney yapın!