Những lỗi hoạt động truyền thông trên mạng CAN được ghi nhận và lưu lại trong bộ nhớ dữ liệu của những nút mạng tham dự vào truyền thông. Mặc dù hệ thống CAN sử dụng dây điện ít hơn nhằm giảm trọng lượng và chi phí, nhưng nó cũng sử dụng nhiều mô-đun phức tạp hơn. Vấn đề truyền tải dữ liệu có thể xảy ra nếu giắc cắm trên mô-đun bị ăn mòn hoặc lỏng lẻo, hay bị chập cháy. Một số mô-đun thậm chí có thể mất bộ nhớ nếu bình ắc quy hết điện hoặc không được kết nối với hệ thống điện. Và ta cần dùng một máy chẩn đoán để nạp lại chương trình cho bộ điều khiển thì mới có thể hoạt động lại. Ngoài việc sử dụng máy chuẩn đoán thì ta có thể dùng đồng hồ đo điện để đo kiểm các giá trị điện trở tương ứng để so sánh và đưa ra kết luận.
KẾT LUẬN
Hệ thống Can-Bus đã làm giảm trọng lượng xe, từ đó làm giảm chi phí vận hành bảo dưỡng và sửa chữa. Can Bus đã loại bỏ hàng km dây điện. Việc truyền và nhận tín hiệu dữ liệu 1 cách nhanh chóng và chính xác hơn nhiều khi dùng cáp xoắn đôi chống nhiễu cho hệ thống. CAN bus hoàn toàn dễ dàng triển khai trên nhiều loại xe. Nó đã đạt tiêu chuẩn với hệ sinh thái hỗ trợ phong phú.không chỉ vây, Can-bus có khả năng Khả năng chống lại nhiễu điện từ (EMI). Nghiên cứu về bố trí mạng Can trên ô tô, những đặc điểm, kết cấu về dây dẫn, nguyên lý truyền dẫn, kết hợp với những kiến thức về lập trình điều khiển, em đã hoàn thiện mô hình về nguyên lý truyền dẫn mạng Can trên ô tô. Mô hình được hoàn thiện với kết quả truyền dẫn ổn định, song cùng với sự hạn chế ở kiến thức thực tế và kinh phí mô hình thực tế em mới chỉ đi sâu vào nguyên lý truyền dẫn mạng giao tiếp CAN-BUS, hướng đi tiếp theo của mô hình sẽ là mô phỏng 2ECU cụ thể liên quan đến 2 hệ thống trên oto và có thể thực hiện đầy đủ truyền, nhận và xử lý tín hiệu đưa ra giải pháp. Cuối cùng em chân thành cảm ơn các thầy giáo trong khoa CNKT ôtô Trường ĐHCN Hà Nội, đặc biệt em chân thành cảm ơn thầy giáo TS. Vũ Hải Quân, đã tận tình hướng dẫn giúp đỡ em hoàn thành đồ án này.
TÀI LIỆU THAM KHẢO
[1]. Tài liệu đào tạo TEAM 21 của Toyota.
[2]. Tài liệu đào tạo về hệ thống giao tiếp trên xe hơi của hãng Huyndai và Toyota.
[3]. Tài liệu tham khảo của hãng xe Posch.
[4]. Hoàng Minh Sơn, Mạng truyền thông công nghiệp, NXB Khoa Học Kỹ Thuật, 2007.
[5]. Ngô Diên Tập, Kỹ Thuật Vi Điều Khiển Với AVR, Nhà xuất bản khoa học và kỹ thuật Hà Nội, 2003.
[6].TS.Nguyễn Thanh Quang-TS.Lê Văn Anh,Cơ điện tử ô tô 2,Nhà Xuất Bản Khoa Học Và Kĩ Thuật,2016.
[7]. Mathony, H., Kaiser, K., and Unruh, J., "Network Architecture for CAN," SAE Technical Paper 930004, 1993.
[8]. Alvarenga, C., "Multiplexing in Automobiles - An Application Example of the CAN Protocol," SAE Technical Paper 921504, 1992, Hillyer, M., "Using Motors in Automotive Multiplex Systems," SAE Technical Paper 860394, 1986.
[9]. Mahalek, J., "Multiplex Systems in the BMW 850i," SAE Technical Paper 920225, 1992.
PHỤ LỤC Code bên truyền:
#include <SPI.h> //Library for using SPI Communication #include <mcp2515.h> //Library for using CAN Communication #define potPin A0
#define lm35Pin A1 #define doorsw 6 int potValue=0;
float tempValue; // variable to store celcius
float vout; // temporary variable to hold sensor reading struct can_frame canMsg1; //pot message
struct can_frame canMsg2; // lm35 message struct can_frame canMsg3; // door sw message MCP2515 mcp2515(10); // chip select pin 10 void setup()
{
Serial.begin(9600);
pinMode(doorsw,INPUT);
SPI.begin(); //Begins SPI communication mcp2515.reset();
mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode();
canMsg1.can_id = 0xAA; //CAN id as 0xAA for potentiometer canMsg1.can_dlc = 1; //CAN data length as 2
canMsg2.can_id = 0xBB; //CAN id as 0xBB for LM35 canMsg2.can_dlc = 1; //CAN data length as 1
canMsg3.can_id = 0xCC; //for door switch canMsg3.can_dlc = 1; } void loop() { Serial.print(canMsg1.can_id); potValue = analogRead(potPin); tempValue=analogRead(lm35Pin); potValue=map(potValue,0,1023,0,255); tempValue=(tempValue/1023)*5000; vout=tempValue/10;
int temp =int(vout);
Serial.print("Temp value deg C:"); Serial.println(vout); Serial.print("pot value :"); Serial.println(potValue); int sw = digitalRead(doorsw); Serial.print("door :"); Serial.println(sw);
canMsg1.data[0] = potValue; //Update pot value in [0] canMsg1.data[1]= 0x00;
mcp2515.sendMessage(&canMsg1); //Sends the CAN message delay(200);
canMsg2.data[2]= 0x00;
mcp2515.sendMessage(&canMsg2); //Sends the CAN message delay(200); canMsg3.data[0] = sw; canMsg3.data[1]=0x00; mcp2515.sendMessage(&canMsg3); delay(100); } Code bên nhận:
#include <SPI.h> //Library for using SPI Communication #include <mcp2515.h> //Library for using CAN Communication #include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x3F for a 16 chars and 2 line display
struct can_frame canMsg1; struct can_frame canMsg2; struct can_frame canMsg3;
MCP2515 mcp2515(10); // SPI CS Pin 10 void setup() {
lcd.init(); //initialize i2c LCD lcd.backlight();
delay(1000);
SPI.begin(); //Begins SPI communication
Serial.begin(9600); //Begins Serial Communication at 9600 baudrate
mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz
mcp2515.setNormalMode(); //Sets CAN at normal mode }
void loop() {
if (mcp2515.readMessage(&canMsg1) == MCP2515::ERROR_OK) // To receive data (Poll Read)
{ if(canMsg1.can_id==0xAA) { int x = canMsg1.data[0]; Serial.println(x); lcd.setCursor(1,0); lcd.print("potvalue: "); lcd.print(x); delay(200); } } if (mcp2515.readMessage(&canMsg2) == MCP2515::ERROR_OK) // To receive data (Poll Read)
{ if (canMsg2.can_id==0xBB) { int y = canMsg2.data[0 ]; Serial.println(y);
lcd.setCursor(0,1); lcd.print("lm35_T: "); lcd.print(y); delay(200); } } if (mcp2515.readMessage(&canMsg3) == MCP2515::ERROR_OK) // To receive data (Poll Read)
{ if (canMsg3.can_id==0xCC) { int z = canMsg3.data[1]; Serial.print("Door "); Serial.println(z); lcd.setCursor(12,1); lcd.print("D:"); lcd.print(z); delay(200); } } delay(20); }