پروتکل ارتباطی 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); } }