پروتکل ارتباطی CAN یکی از قویترین پروتکل های ارتباطی است که به صورت گسترده ای در صنایع و همچنین ECU ماشین ها به کار گرفته می شود . در ارتباط CAN تنها از دو سیم جهت انتقال دیتا استفاده می شود ، به همین سبب هزینه پیاده سازی آن بسیار پایین تر از سایر پروتکل ها است . در بسیاری از میکروکنترلر ها واحد های سخت افزاری جهت ارتباط CAN وجود ندارد . ماژول MCP2515 یک مبدل SPI به CAN و بلعکس است که این قابلیت را دارد تا از میکروکنترلر های فاقد واحد CAN ، جهت ارتباط با باس های CAN استفاده نمود . به راحتی توسط این ماژول می توان از طریق میکروکنترلر ها با انواع ECU خودرو و همچنین کامپیوتر های صنعتی ارتباط برقرار کرد . این ماژول دارای پین هدر هایی جهت اتصال تغذیه و میکروکنترلر و نیز دارای ترمینال خروجی CAN است .

 

مشخصات :

  • مبدل 0B یه SPI و برعکس
  • دارای نرخ انتقال تا حداکثر 1Mbps
  • دارای پین هدر های تغذیه و SPI
  • دارای ترمینال اتصال به باس CAN
  • دارای تغذیه 5 ولتی

 

از این ماژول می توان در کاربرد های زیر استفاده نمود :

  • ECU خودرو ها
  • ارتباط CAN توسط میکروکنترلر ها
  • تجهیزات نظامی
  • تجهیزات صنعتی
  • تجهیزات ارتباط با سیم با فاصله زیاد
  • خانه های هوشمند

 

 

پین های ماژول MCP2515 :

 

راه اندازی ماژول MCP2515 توسط آردوینو :

در مثال زیر با استفاده از کتابخانه ACAN2515 بین دو ماژول MCP2515 دیتا به صورت CAN انتقال و نتایج در Serial Monitor آردوینو IDE نمایش داده می شود .

کد های مدار فرستنده دیتا :

#include <SPI.h> //Library for using SPI Communication
#include <mcp2515.h> //Library for using CAN Communication
#include <DHT.h> //Library for using DHT sensor
#define DHTPIN A0
#define DHTTYPE DHT11

struct can_frame canMsg;
MCP2515 mcp2515(10);
DHT dht(DHTPIN, DHTTYPE); //initialize object dht for class DHT with DHT pin with STM32 and DHT type as DHT11

void setup(){
  while (!Serial);
  Serial.begin(9600);
  SPI.begin(); //Begins SPI communication
  dht.begin(); //Begins to read temperature & humidity sensor value
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
  mcp2515.setNormalMode();
}

void loop(){
  int h = dht.readHumidity(); //Gets Humidity value
  int t = dht.readTemperature(); //Gets Temperature value
  canMsg.can_id = 0x036; //CAN id as 0x036
  canMsg.can_dlc = 8; //CAN data length as 8
  canMsg.data[0] = h; //Update humidity value in [0]
  canMsg.data[1] = t; //Update temperature value in [1]
  canMsg.data[2] = 0x00; //Rest all with 0
  canMsg.data[3] = 0x00;
  canMsg.data[4] = 0x00;
  canMsg.data[5] = 0x00;
  canMsg.data[6] = 0x00;
  canMsg.data[7] = 0x00;
  mcp2515.sendMessage(&canMsg); //Sends the CAN message
  delay(1000);
}

 

کد های مدار گیرنده :

#include <SPI.h> //Library for using SPI Communication 
#include <mcp2515.h> //Library for using CAN Communication

struct can_frame canMsg; 
MCP2515 mcp2515(10); // SPI CS Pin 10 

void setup() {
  SPI.begin();   //Begins SPI communication
  Serial.begin(9600); //Begins Serial Communication at 9600 baud rate 
  mcp2515.reset();                          
  mcp2515.setBitrate(CAN_50KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz 
  mcp2515.setNormalMode();  //Sets CAN at normal mode
}

void loop(){
 if ((mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) && (canMsg.can_id == 0x036)){
     int x = canMsg.data[0];         
     int y = canMsg.data[1];  
     Serial.print("Kelembaban: ");
     Serial.print(x);
     Serial.print(" Suhu: ");
     Serial.println(y);      
   }
}

 

 

Tags:
About Author: USER_4