Module CAN-BUS dùng chip CAN Controller MCP2515 và CAN Transceiver TJA1040 là module mở rộng ngoại vi CAN cho vi điều khiển không tích hợp chuẩn giao tiếp hiện đại. MCP2515 sử dụng giao tiếp SPI nên bất kỳ một loại vi điều khiển nào cũng có thể giao tiếp với nó thông qua ngoại vi SPI có sẵn hoặc thậm chí là dùng các chân IO thông thường cũng được.CAN- BUS là một trong số những chuẩn giao tiếp trên các thiết bị hiện đại ngày nay như hệ thống điện trên ô tô OBD II hay hệ thống điện trong nhà máy công nghiệp, máy phát điện, tàu thủy. Các vi điều khiển đời mới gần như tích hợp ngoại vi giao tiếp CAN là bắt buộc, như STM32, LPC, PIC32, thậm chí đến ESP32 cũng hỗ trợ CAN.Tuy nhiên, cũng chính vì thế mà các dòng vi điều khiển cũ như 8051 hay PIC, AVR không được tích hợp sẵn ( PIC thì các dòng từ PIC18F trở lên mới hỗ trợ, giá thành cũng khá cao).
Hình 3.3 Module MCP 2512
Module MCP2515 là CAN controller do MicroChip sản xuất nhằm mục đích bổ sung tính năng này cho bất cứ vi điều khiển nào. Chỉ cần dùng 3 đến 5 chân IO hoặc ngoại vi SPI có sẵn trên chip là chúng ta có thể biết những dòng chip này có khả năng làm việc với mạng CAN-BUS một cách trơn tru [5].
Hình 3.4 Sơ đồ các chân kết nối trên Module MCP 2515
Giữa Arduino giao tiếp với module CAN sử dụng giao thức SPI. Trong đó chân phục cho giao thức SPI trên Arduino là:
Bảng 3.2 Chân kết nối giữa Arduino và Module MCP 2515
Chân trên Arduino Chức năng kết nối với Module MCP 2515 D10 SPI SS D13 SPI SCK D12 SPI MISO D11 SPI MOSI 3.3 Xây dựng mô hình thực tế
3.3.1 Hướng đi của mô hình
Mô hình sẽ sử dụng 2 Arduino Uno R3 để thay cho 2 ECU trên ô tô.Sau đó sẽ sử dụng 2 module MCP 2512 để giao tiếp với 2 ECU sau đó cho chúng giao tiếp với nhau qua 2 chân Can H và Can L của module MCP 2515 .Cụ thể
thông tin giao tiếp sẽ là trên ECU 1 sẽ nhận tín hiệu từ cảm biến dạng biến trở và cảm biến nhiệt độ ,sau đó sẽ truyền thông tin nhận được từ cảm biến qua module MCP 2512 đến ECU 2 và hiển thị thông tin lên màn hình LCD.
3.3.2 Các linh kiện sử dụng trong mô hình
Ngoài Arduino Uno R3 và Module MCP 2515 như giới thiệu ở trên thì còn một số linh kiện sẽ được sử dụng.
Cảm biến nhiệt độ LM 35
Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự rất hay được ứng dụng trong các ứng dụng đo nhiệt độ thời gian thực ( nhưng vẫn còn sai số lớn) . Với kích thước nhỏ và giá thành rẻ là một trong những ưu điểm của nó. Vì đây là cảm biến tương tự (analog sensor) nên ta có thể dễ dàng đọc được giá trị của nó bằng hàm analogRead().
Hình 3.5 Cấu tạo của cảm biến nhiệt độ LM35
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35. → Đơn vị nhiệt độ: °C.
→ Nhiệt độ thay đổi tuyến tính: 10mV/°C
Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C công suất tiêu thụ là 60uA. Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi mức nhiệt độ.
Như vậy, bằng cách đưa vào chân bên trái của cảm biến LM35 hiệu điện thế 5V, chân phải nối đất, đo hiệu điện thế ở chân giữa bằng các pin A0 trên arduino (giống hệt cách đọc giá trị biến trở), bạn sẽ có được nhiệt độ (0 -100ºC) bằng công thức:float temperature = (5.0*analogRead(A0)*100.0/1024.).
Với LM35, bạn có thể tự tạo cho mình mạch cảm biến nhiệt độ sử dụng LM35 và tự động ngắt điện khi nhiệt độ vượt ngưỡng tối đa, đóng điện khi nhiệt độ thấp hơn ngưỡng tối thiểu thông qua module rơ le...
Biến trở
Hình 3.6 Cảm biến trên xe sử dụng nguyên lí biến trở
Biến trở là các thiết bị có điện trở thuần có thể biến đổi được theo ý muốn. Chúng có thể được sử dụng trong các mạch điện để điều chỉnh hoạt động của mạch điện. Đúng như tên gọi của nó là làm thay đổi điện trở, nguyên lý hoạt động chủ yếu của biến trở là các dây dẫn được tách rời dài ngắn khác nhau. Trên các thiết bị sẽ có vi mạch điều khiển hay các núm vặn. Khi thực hiện điều khiển các núm vặn các mạch kín sẽ thay đổi chiều dài dây dẫn khiến điện trở trong mạch thay đổi. Thực tế việc thiết kế mạch điện tử luôn có một khoảng sai số, nên khi thực hiện điều chỉnh mạch điện người ta phải dùng biến trở, lúc này biến trở có vai trò phân áp, phân dòng trong mạch. Qua tính chất của biến trở
thì biến trở được ứng dụng rất nhiều trên xe để thức hiện các chức năng của cảm biến như cảm biến vị trí bàn đạp ga , cảm biến vị trí bướm ga ...[6]. Module LCD 1602
Hiện giờ, thiết bị hiển thị LCD 1602 (Liquid Crystal Display) được dùng trong rất nhiều các ứng dụng của VĐK. LCD 1602 có rất nhiều ưu điểm so với các dạng hiển thị khác như: khả năng hiển thị kí tự đa dạng (kí tự đồ họa, chữ, số, ); đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau dễ dàng , tiêu tốn rất ít tài nguyên hệ thống, giá thành rẻ,…
Hình 3.7 Sơ đồ các chân của LCD 1602
Thông số kĩ thuật của mà hình LCD 1602: - Điện áp MAX : 7V
- Điện áp MIN : - 0,3V
- Điện áp ra mức thấp : <0.4V - Điện áp ra mức cao : > 2.4 - Hoạt động ổn định : 2.7-5.5V
- Nhiệt độ hoạt động : - 30 - 75 độ C Chức năng của từng chân LCD 1602:
- Chân số 1 - VSS : chân nối đất cho LCD được nối với GND của mạch điều khiển
- Chân số 2 - VDD : chân cấp nguồn cho LCD, được nối với VCC=5V của mạch điều khiển
- Chân số 3 - VE : điều chỉnh độ tương phản của LCD
- Chân số 4 - RS : chân chọn thanh ghi, được nối với logic "0" hoặc logic "1":
+ Logic “0”: Bus DB0 - DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
- Chân số 5 - R/W : chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0” để ghi hoặc nối với logic “1” đọc
- Chân số 6 - E : chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân này như sau:
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi bên trong khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
- Chân số 7 đến 14 - D0 đến D7: 8 đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này là: Chế độ 8 bit (dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7) và Chế độ 4 bit (dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7)
- Chân số 15 - A : nguồn dương cho đèn nền - Chân số 16 - K : nguồn âm cho đèn nền Module I2C
Như ở trên ta thấy LCD có quá nhiều chân gây khó khăn trong quá trình kết nối và chiếm dụng nhiều chân của vi điều khiển. Module chuyển đổi I2C cho LCD sẽ giải quyết vấn đề này cho bạn, thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD (RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi bạn chỉ cần sử dụng 2 chân (SCL, SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 1602, LCD 2004, … ), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay [8].
Ưu điểm
Tiết kiệm chân cho vi điều khiển Dễ dàng kết nối với LCD
Thông số kĩ thuật
Điện áp hoạt động: 2.5-6V DC
Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780) Giao tiếp: I2C
Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H) Trọng lượng: 5g
Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD
Hình 3.8 Cấu trúc chân của Module I2C
3.3.3 Tiến hành xây dựng mô hình
Sơ đồ kết nối của mô hình :
Dùng phần mềm Fritzing là phần mềm mã nguồn mở, giúp ta dễ dàng thiết kế mạch điện tử. Đặc biệt hỗ trợ tốt cho các dự án Arduino. Từ 3.3.2, ta vào thư viện phần mềm fritzing tìm kiếm các linh kiện và xây dựng sơ đồ kết nối các chân trong linh kiện mà ta sử dụng trong bài.
Hình 3.9 Sơ đồ kết nối của mô hình
Hình 3.10 Sơ đồ kết nối bên truyền
Từ sơ đồ kết nối chân ta tiến hành viết code trên phần mềm Arduino IDE cho bên truyền và bên nhận.Bên truyền sẽ là biến trở và cảm biến nhiệt độ LM 35. Bên nhận sẽ là LCD hiển thị thông tin cảm biến. Ta có mô hình thực tế:
Hình 3.11 Mô hình mạng giao tiếp Can-Bus ứng dụng Arduino
Trong mô hình, ở bên truyền của mạng Can, ta sẽ lập trình cho Arduino lấy tín hiệu từ cảm biến. Sau đó đóng gói tín hiệu và gửi sang bên nhận qua module MCP 2512. Có hai loại cảm biến sử dụng trong bài, đó là cảm biến
dạng tín hiệu điện trở và tín hiệu từ cảm biến nhiệt độ. Ở bên nhận, ta sẽ lập trình code nhận tín hiệu.
Hình 3.12 Kết quả mô hình chạy thực tế
Khi bên nhận xác định đúng ID và sau đó hiển thị thông tin vừa nhận được trên màn hình LCD. Khi ta thay đổi tín hiệu bên truyền thì bên nhận cũng thay đổi theo, và mô hình hoạt động một cách ổn đinh [7].
3.4 Kết Luận Chương 3
Mô hình được xây dựng dựa trên Module MCP 2512, kết hợp với các cảm biến và màn hình LCD. Từ mô hình đã làm nổi bật lên được nguyên lý truyền dẫn mạng Can. Thông tin cảm biến dạng biến trở và cảm biến nhiệt độ được ECU bên truyền nhận và xử lý sau đó đóng gói gửi sang ECU bên nhận đọc và xuất lên màn hình LCD. Mô hình hoạt động ổn đinh, tốc độ đường truyền tốt. Ở trạng thái hoạt động 1 khi bên truyền xử lý tín hiệu đóng gói gửi đi bên nhận xác định đúng ID thì thông tin sẽ lập tức được đưa lên màn hình LCD . ở trạng thái hoạt động 2 ta sẽ rút cấp nguồn cho ECU 1 ( Ardunio 1 ) nhưng vẫn thực hiện thay đổi tín hiệu cảm biến nhưng không có hoạt động truyền nhận tín hiệu
nên màn hình LCD sẽ không hiện thị giá trị thay đổi và đèn báo TX ( Trans ) RX (Receive) của 2 bên cũng tắt
CHƯƠNG 4. HƯ HỎNG VÀ LỖI THƯỜNG GẶP TRONG HỆ THỐNG MẠNG CAN-BUS TRÊN Ô TÔ
4.1 Những hư hỏng của mạng Can
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à bạn 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.
Một trong những tính năng của CAN là mô-đun có thể gửi và nhận được tín hiệu “ok” để báo cho các mô-đun điều khiển chính biết chúng có đang làm việc hay không. Về lý thuyết, điều này làm cho việc chẩn đoán dễ dàng hơn. Mặt khác, nếu một mô-đun hư hỏng có thể khiến cả mạng lưới các mô-đun bị tê liệt và không hoạt động.
Khi một vấn đề về truyền tải dữ liệu xảy ra, hệ thống sẽ thiết lập một mã lỗi (DTC) và kích hoạt đèn báo. Tùy thuộc vào mã lỗi, chiếc xe có thể có hoặc không thể khởi động, hoặc nó chỉ có thể hoạt động và bị tắt máy ngay khi lên ga. Mất liên lạc giữa bộ điều khiển động cơ và bộ điều khiển hộp số (ví dụ mã lỗi U1026 trên GM) có thể khiến hộp số chỉ chạy được ở 1, 2 số.
Mất mã liên kết có thể chỉ ra vấn đề ở hệ thống dây điện của CAN, hoặc mô-đun bị lỗi. Tất cả các mô-đun trong CAN cần ba yếu tố để hoạt động chính xác: nguồn điện, nối mát và kết nối dữ liệu liên tục. Khi chẩn đoán các vấn đề của CAN, bạn thường bắt đầu bằng cách kiểm tra điện áp tại các mô-đun, sau đó là kiểm tra nối mát, và cuối cùng là kiểm tra dòng dữ liệu. Nếu cả ba đều tốt, nhưng các mô-đun không hoạt động, thì mô-đun cần phải được thay thế.
Để bảo vệ bình ắc quy khi xe tắt, một tín hiệu “ngủ” sẽ được gửi đến các mô-đun trong CAN. Một số có thể vẫn còn hoạt động trong một khoảng thời gian ngắn sau khi xe tắt (mô-đun túi khí), và một số không bao giờ tắt (mô-đun hệ thống chống trộm và mô-đun chìa khóa thông minh), nhưng hầu hết các mô- đun sẽ đi “ngủ” để tiết kiệm pin. Nếu tín hiệu “ngủ” không được gửi đi, hoặc các mô-đun không nhận dạng được tín hiệu “ngủ” thì bình ắc quy sẽ nhanh hết điện và bạn sẽ sớm phải sạc bình hoặc thay thế bình ắc quy mới.
Để xác định nguyên nhân của lỗi, phải sử dụng các chương trình tìm lỗi định trước trong các thiết bị chuẩn đoán.
Hình 4.1 Hư hỏng dây mạng Can
Nếu không có trương trình kiểm lỗi, máy đo đa năng và dao động kí có thể được dùng để tìm những nguyên nhân lỗi vật lý( dây điện bị ngắt, kết nối cắm hỏng, …).
Lỗi phần mềm không để xác định được bằng những phương tiện đo có trong xưởng. Có thể kiểm tra lại phiên bản của phần mềm đã được cài đặt ở nút mạng. Số phiên bản được được ghi trong danh tính của nút mạng hiển thị trên thiết bị chuẩn đoán. Cần So sánh số phiên bản này với số phiên bản của nhà sản xuất [4].
Nếu sai phần mềm có thể cập nhật phần mềm cho nút mạng hay thay hẳn nút mạng. Một trong những tính năng của CAN là mô-đun có thể gửi và nhận được tín hiệu “ok” để báo cho các mô-đun điều khiển chính biết chúng có đang làm việc hay không. Về lý thuyết, điều này làm cho việc chẩn đoán dễ dàng hơn. Mặt khác, nếu một mô-đun hư hỏng có thể khiến cả mạng lưới các mô- đun bị tê liệt và không hoạt động. Khi một vấn đề về truyền tải dữ liệu xảy ra, hệ thống sẽ thiết lập một mã lỗi (DTC) và kích hoạt đèn báo. Tùy thuộc vào mã lỗi, chiếc xe có thể có hoặc không thể khởi động, hoặc nó chỉ có thể hoạt động và bị tắt máy ngay khi lên ga. Mất liên lạc giữa bộ điều khiển động cơ và bộ điều khiển hộp số (ví dụ mã lỗi U1026 trên GM) có thể khiến hộp số chỉ chạy được ở 1, 2 số [4].
Hình 4.2 Dùng máy chuẩn đoán để phát hiện các mã lỗi mạng Can
Mất mã liên kết có thể chỉ ra vấn đề ở hệ thống dây điện của CAN, hoặc