Diễn Đàn Điện Tử Ứng Dụng

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Diễn Đàn Điện Tử Ứng Dụng

Forum trao đổi chia sẽ giải quyết các vấn đề liên quan đến mạch điện tử


    Cơ bản về giao tiếp CAN

    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Cơ bản về giao tiếp CAN

    Bài gửi by Admin 22/08/20, 08:06 am

    Bên cạnh các chuẩn truyền thông vật lý thông thường như RS232, RS485, Ethernet,...hay các giao thức truyền thông như Modbus RTU, Modbus TCP....đang được sử dụng rộng rãi trong mọi ngành nghề. Hôm nay, sẽ cùng các bạn trao đổi về một chuẩn truyền thông từ trước đến bây giờ hay được dùng trong ngành công nghiệp ô tô, ngoài ra hiện nay đang được sử dụng rộng rãi trong các ngành tự động hóa, y tế, máy móc sản xuất, công nghiệp.... đó là giao tiếp CAN. Chúng ta sẽ bắt đầu bằng các khái niệm cơ bản, các bạn nhé!

    CAN - Controller Area Network là một giao thức truyền thông bus nối tiếp phát triển bởi Bosch (một nhà sản xuất thiết bị điện tại Đức) vào đầu những năm 1980. Sau đó, CAN đã được chuẩn hóa theo tiêu chuẩn ISO-11898 và ISO-11519, thiết lập chính nó như là giao thức chuẩn để giao tiếp kết nối mạng trong ngành công nghiệp ôtô. Trong những ngày đầu của ngành công nghiệp ô tô, bộ điều khiển độc lập cục bộ đã được sử dụng để quản lý cơ cấu truyền động khác nhau và các các hệ thống cơ điện phụ. Bởi kết nối mạng các thiết bị điện tử trong xe theo chuẩn CAN,và được được điều khiển từ một điểm trung tâm, bộ điều khiển động cơ (ECU), do đó làm tăng chức năng, thêm mô đun, và làm cho quá trình chẩn đoán hiệu quả hơn.

    Thời gian đầu giao tiếp CAN được phát triển chủ yếu hỗ trợ cho ngành công nghiệp xe, vì vậy nó đã được sử dụng trong xe ô tô chở khách, tàu thuyền, xe tải, và các loại xe khác. Ngày nay giao thức CAN được sử dụng trong nhiều lĩnh vực khác trong các ứng dụng với tên gọi mạng điều khiển nhúng (networked embedded control), bao gồm cả tự động hóa công nghiệp, ứng dụng y tế, xây dựng tự động hóa, máy dệt, máy móc sản xuất. CAN cung cấp một giao thức truyền thông hiệu quả giữa các bộ cảm biến, cơ cấu truyền động, điều khiển, và các nút khác trong các ứng dụng thời gian thực, và được biết đến với sự đơn giản, độ tin cậy và hiệu suất cao.

    Các giao thức CAN được dựa trên một topo bus, và chỉ có hai dây là cần thiết cho thông tin liên lạc trên một bus CAN. Các bus có một cơ cấu đa chủ nơi mỗi thiết bị trên bus có thể gửi hoặc nhận dữ liệu. Chỉ có một thiết bị có thể gửi dữ liệu bất cứ lúc nào trong khi tất cả những thiết bị khác lắng nghe. Nếu hai hoặc nhiều thiết bị cố gắng để gửi dữ liệu cùng một lúc, thiết bị ưu tiên cao nhất được phép gửi dữ liệu của nó trong khi những thiết bị khác trở về chế độ nhận.
    Như thể hiện ở hình bên dưới, trong một ứng dụng xe điển hình thường có nhiều hơn một CAN bus, và các bus này hoạt động ở các tốc độ khác nhau. Các thiết bị chậm, chẳng hạn như kiểm soát cửa, điều hòa nhiệt, và thông tin điều khiển mô-đun, có thể được kết nối với một bus tốc độ chậm. Thiết bị yêu cầu đáp ứng nhanh hơn, chẳng hạn như hệ thống chống bó cứng phanh ABS, module điều khiển truyền dẫn, và các mô-đun ga điện tử, được kết nối với một bus CAN nhanh hơn.

    Các giao thức CAN được dựa trên giao thức CSMA / CD+AMP (Carrier-Sense Multiple Access: Đa truy cập có tránh xung đột / Collision Detection Arbitration on Message Priority: Giám sát phát hiện xung đột dựa trên thông điệp ưu tiên ) , nó tương tự như các giao thức được sử dụng trong mạng Ethernet LAN.
    Khi mạng Ethernet phát hiện một vụ xung đột, các nút đang gửi dữ liệu chỉ đơn giản là dừng truyền và đợi một khoảng thời gian ngẫu nhiên trước khi cố gắng để gửi một lần nữa. Tuy nhiên, đối với giao thức CAN có một chúc khác biệt đó là các vấn đề xung đột được giải quyết bằng cách sử dụng các nguyên tắc của trọng tài, nơi chỉ có các nút ưu tiên cao nhất được trao quyền để gửi dữ liệu của nó.

    Về cơ bản có hai loại giao thức CAN: 2.0a và 2.0b. CAN 2.0a là tiêu chuẩn trước đó với 11 bit của bộ định danh, trong khi CAN 2.0b là tiêu chuẩn mở rộng mới với 29 bit của bộ định danh. Bộ điều khiển 2.0b là hoàn toàn tương thích ngược với bộ điều khiển 2.0A và có thể nhận và truyền tải thông điệp trong hai định dạng.
    Đỗi với bộ điều khiển 2.0 được chia làm hai loại. Loại đầu tiên chỉ có khả năng truyền và nhận những thông điệp 2.0a, và đón nhận thông điệp được gửi từ bộ điều khiển 2.0b bằng cách bật cờ lỗi. Loại thứ hai của loại điều khiển 2.0a (được gọi là thụ động 2.0b) truyền và nhận các thông điệp 2.0b nhưng cũng sẽ xác nhận đã nhận thông điệp 2.0b và sau đó sẽ bỏ qua chúng.

    Một số các tính năng giao thức CAN là:
    CAN bus là đa chủ. Khi bus dữ liệu rỗi, bất kỳ thiết bị gắn vào bus đều có thể bắt đầu gửi một thông điệp.
    CAN giao thức bus là linh hoạt. Các thiết bị kết nối với bus không có địa chỉ, có nghĩa là tin nhắn không được truyền đi từ một nút này đến một nút khác dựa trên các địa chỉ. Thay vào đó, tất cả các nút trong hệ thống nhận mọi tin nhắn truyền đi trên bus, và nó là đến mỗi nút để quyết định xem đã nhận tin nhắn sẽ được lưu giữ hay loại bỏ. Một tin nhắn duy nhất có thể được dành cho một nút cụ thể hoặc cho nhiều nút, tùy thuộc vào cách hệ thống được thiết kế.
    Một lợi thế của việc không có địa chỉ là khi một thiết bị được thêm vào hay lấy đi khỏi bus, không cần phải thay đổi cấu hình dữ liệu (tức là, các bus "có thể gắn nóng (hot pluggable)").
    Bus CAN cung cấp theo yêu cầu truyền tải từ xa (RTR), có nghĩa là từ một nút trên bus có thể yêu cầu thông tin từ các nút khác. Như vậy thay vì chờ đợi cho một nút để liên tục gửi thông tin, yêu cầu thông tin có thể được gửi đến nút. Ví dụ, trong một chiếc xe, nơi nhiệt độ động cơ là một tham số quan trọng, hệ thống có thể được thiết kế để nhiệt độ gửi định kỳ trên bus. Tuy nhiên, một giải pháp thanh lịch hơn là yêu cầu nhiệt độ là cần thiết, vì nó giảm thiểu lưu lượng bus trong khi duy trì tính toàn vẹn của hệ thống. Tốc độ giao tiếp bus CAN là không cố định. Bất kỳ tốc độ truyền thông có thể được thiết lập cho các thiết bị gắn vào một bus. Tất cả các thiết bị trên bus có thể phát hiện một lỗi. Các thiết bị đã phát hiện một lỗi ngay lập tức thông báo cho tất cả các thiết bị khác. Nhiều thiết bị có thể được kết nối với xe buýt tại cùng một thời điểm, và không có được giới hạn hợp lý về số lượng các thiết bị có thể được kết nối. Trong thực tế, số thiết bị có thể được gắn vào một bus bị hạn chế bởi thời gian trễ của bus và tải điện. Các dữ liệu trên bus CAN là vi sai và có thể ở hai trạng thái: dominant and recessive. Hình dưới cho thấy trạng thái của điện áp trên bus. Các xe buýt định nghĩa một chút logic 0 là một bit chi phối và một chút logic 1 là một bit lặn. Khi có trọng tài trên xe buýt, một trạng thái bit chi phối luôn thắng ra trên một trạng thái bit lặn. Trong trạng thái lặn, các CANH điện áp khác biệt và CANL là ít hơn so với ngưỡng tối thiểu (tức là ít hơn 0.5V nhận đầu vào và ít hơn 1.5V đầu ra máy phát). Trong nhà nước chi phối, CANH điện áp khác biệt và CANL là lớn hơn ngưỡng tối thiểu.


    Các tiêu chuẩn ISO-11898 CAN bus chỉ rõ rằng một thiết bị trên xe bus đó phải có khả năng truyền 40 mét tại tốc điiộ 1Mb / s. Nếu truyền xa hơn phải giảm tốc độ Bus. Cho thấy sự thay đổi chiều dài bus so với tốc độ truyền thông. Ví dụ, với chiều dài bus là một nghìn mét, chỉ có thể truyền ở tốc độ tốc độ tối đa 40KB / s.
    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Re: Cơ bản về giao tiếp CAN

    Bài gửi by Admin 22/08/20, 08:16 am

    1. Cấu trúc mạng CAN

    Mạng CAN gồm các thành phần cơ bản sau:
    h1Cơ bản về giao tiếp CAN 4.CAN_bus_structure_and_Node
    Hình 1. Cấu trúc bus và Node của mạng CAN
    Bus CAN là bus vi sai gồm:
    Dây cáp gồm hai dây riêng biệt được gọi là CAN_H (CAN High) và CAN_L (CAN Low). Tùy vào mỗi ứng dụng mà hai dây này có thể là dây xoắn kép hay cáp quang. Ngoài ra, dây cáp còn có vỏ bọc chống nhiễu, vỏ này được nối đến một điện áp tham khảo hoặc GND. CAN_H có điện áp cao, thường là 0V khi bus không truyền, nhận dữ liệu. CAN_L có điện áp thấp, thường là +5V khi bus không truyền, nhận dữ liệu. Như đã nói, bus CAN là bus vi sai, khi dữ liệu được truyền trên bus, điện áp trên CAN_H và CAN_L sẽ thay đổi, mức logic 0/1 sẽ được xác định căn cứ trên sự chênh lệch (sai lệch) điện áp giữa CAN_H và CAN_L.
    Điện trở đầu cuối của đường dây là 120Ω.
    h2
    Cơ bản về giao tiếp CAN 6.CAN_cable
    Hình 2. Dây cáp bus CAN
    Node (Statation): là một thành phần kết nối đến bus CAN thông quan 2 dây CAN_H và CAN_L. Node này là cá bo mạch hoặc module điều khiển.
    h31
    Cơ bản về giao tiếp CAN 5.CAN_bus_example
    Hình 3.1. Minh họa một mạng CAN
    h32
    Cơ bản về giao tiếp CAN Image
    Hình 3.2. Minh họa một mạng CAN trong xe hơi sử dụng các chip Motorola (nguồn: www.mi.fu-berlin.de)

    2. Cấu trúc Node hay Station

    Mỗi một nút CAN yêu cầu phải có một ‘vi điều khiển’ (microcontroller - MCU) kết nối với một ‘bộ điều khiển CAN’ (CAN – Controller). Bộ điều khiển CAN sẽ được kết nối với ‘bộ chuyển đổi CAN’, hay bộ truyền-nhận hoặc bộ thu-phát, (CAN – Transceiver) thông qua một đường ra dữ liệu nối tiếp (Tx) và một đường vào dữ liệu nối tiếp (Rx). Đường Vref là điện áp ra tham khảo cung cấp một mức điện áp danh định bằng 0.5×Vcc = 0.5×5 = 2.5V.

    Microcontroller - MCU thực thi các chức năng chính, điều khiển chính của một Node. Thực hiện cấu hình hoạt động cho CAN controller, phân phối dữ liệu cần truyền đến CAN controller, lấy dữ liệu nhận từ CAN controller để sử dụng cho hoạt động của Node.
    CAN controller thực thi các xử lý về truyền nhận dữ liệu, báo lỗi, tính toán thời gian bit, ... theo chuẩn CAN quy định; phát dữ liệu cần truyền dạng số (theo mức logic 0/1) ra chân TX; nhận dữ liện dạng số qua chân RX. CAN controller có thể là một chip (vi mạch) độc lập, ví dụ như MCP2515 của Microchip, hoặc là một ngoại vi được tích hợp bên trong vi điều khiển, ví dụ như LPC2290 của NXP Semiconductors
    CAN transceiver hoạt động như bộ chuyển đổi từ tín hiệu số (mức logic 0/1) trên đường TX thành tín hiệu tương tự trên bus CAN và ngược lại, chuyển đổi từ tín hiệu tương tự trên bus CAN (CAN_H và CAN_L) thành tín hiệu số trên đường RX

    3. Tín hiệu trên bus CAN

    Như đã trình bày, CAN transceiver chuyển đổi qua lại giữa tín hiệu số (giao tiếp với CAN controller) và tương tự (giao tiếp với bus CAN). Trong giao thức CAN,
    Mức dominant, nghĩa là "mức trội" hay "mức chiếm ưu thế", là mức logic 0
    Mức recessive, nghĩa là "mức lặn" hay "mức ẩn", là mức 1
    Điều này vì bus CAN hoạt động theo cơ chế AND-wire, khi một logic 0 và một logic cùng được truyền từ CAN controller qua CAN transceiver đến bus CAN thì trên bus CAN sẽ thể hiện mức điện áp biểu diễn cho bit 0 (bit trội).

    Mức áp trên bus CAN trong tầm từ -2V trên CAN_L, đến +7V trên CAN_H nhưng được sử dụng phổ biến là 0V trên CAN_L và +5V trên CAN_H khi dùng ở tốc tộ cao 1Mbit/s. Đường CAN_H có mức áp +5V khi ở trạng thái nghỉ và sẽ sụt áp còn +3.5V khi đang hoạt động. Lúc này, mức +3.5V được quy định là mức ‘dominant’ và +2.5V được quy định là mức ‘recessive’.

    Đường CAN_L có mức áp 0V khi ở trạng thái nghỉ và sẽ tăng lên +1.5V khi hoạt động. Lúc này, mức +1.5V được quy định là mức ‘dominant’ và +2.5V được quy định là mức ‘recessive’.
    h5
    Cơ bản về giao tiếp CAN 8.CAN_H_CAN_L
    Hình 5. Mức điện áp trên đường CAN_H và CAN_L khi truyền dữ liệu
    Trạng thái bus dựa vào sự sai lệch áp giữa CAN_H và CAN_L. Cụ thể, nếu sai lệch điện áp thấp hơn điệp áp ngưỡng tối thiểu thì đó là mức recessive (mức 1), thường dưới +0.5V. Nếu sai lệch điện áp cao hơn điện áp ngưỡng tối thiểu thì đó là mức dominant (mức 0), thường trên +0.9V. Nếu sai lệch áp rơi vào khoảng từ 0.5V đến ).9V thì không thể phân biệt được mức logic và gây sai dữ liệu.
    h6
    Cơ bản về giao tiếp CAN 9.CAN_bus_difference
    Hình 6. Xác định mức logic thông qua sai lệch áp giữa CAN_H và CAN_L
    h7
    Cơ bản về giao tiếp CAN Image
    Hình 7. Một phần cấu trúc của chip CAN transceiver gồm bộ lái bus Driver và bộ nhận từ bus Receiver
    h7
    Cơ bản về giao tiếp CAN Image
    Hình 8. Minh họa một dạng sóng đo đạc thực tế trên ngõ vào Driver, ngõ ra Receiver và CAN bus


    Được sửa bởi Admin ngày 22/08/20, 08:40 am; sửa lần 1.
    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Luật truyền chuỗi bit của CAN - Bit Stream Coding

    Bài gửi by Admin 22/08/20, 08:35 am

    1. Loại mã hóa chuỗi bit

    Phương pháp mã hóa được sử dụng trong giao thức CAN là phương pháp NRZ mà cụ thể hơn là NRZ-L (Non-Return-to-Zero Level). Đây là dạng mã hóa theo mức, tức là mỗi trạng thái dominant và recesive sẽ được quy định mang một mức áp khác nhau. Cụ thể, dominant là mức thấp tương ứng với logic 0, recessive là mức cao tương ứng với logic 1. Trong suốt thời gian phát một bit, không xảy ra sự chuyển mức.
    Cơ bản về giao tiếp CAN Image
    Hình 1. Mã hóa NRZ

    2. Luật chèn bit - Bit stuffing

    Vấn đề của loại mã hóa NRZ là có thể dẫn đến mất đồng bộ và nhận sai giá trị bit khi truyền một chuỗi bit cùng mức logic quá dài. Vì vậy, CAN quy định cứ sau 5 bit liên tiếp cùng mức logic thì bộ truyền phải tự động chèn một bit trái mức logic, gọi là bit chèn (STUFF BIT).

    Luật chèn bit này áp dụng cho vùng SOF, vùng phân xử, vùng điều khiển, vùng dữ liệu và cùng CRC SEQUENCE. Các cùng còn lại là CRC DELIMITER, ACK FIELD và EOF không áp dụng luật này.
    Bộ nhận tự động giám sát để loại bỏ bit chèn khi nhận dữ liệu.

    Ví dụ:
    Chuỗi bit gốc:            0100000  00000  1111  10001
    Chuỗi bit được chèn: 010000010000011111010001
    Cơ bản về giao tiếp CAN Image

    Hình 2. (a) chuỗi bit gốc (b) chuỗi bit sau khi áp dụng luật chèn bit với S là vị trị bit được chèn thêm

    Vai trò của các bit chèn là tạo ra sự chuyển mức (cạnh lên hoặc cạnh xuống) để bộ nhận có thể sử dụng tái đồng bộ. Việc đồng bộ khi truyền nhận dữ liệu sẽ được trình bày sau.

    Khung báo lỗi và khung báo quá tải có định dạng cố định và không áp dụng luật chèn bit.

    3. Luật phân xử

    Như đã trình bày trong các phần trước, luật phân xử bit giải quyết vấn đề xung đột khi nhiều Node cùng truyền dữ liệu. Đồng thời, luật phân xử cũng đảm bảo việc truyền thông điệp không bị bất cứ gián đoạn nào khi có xung đột xảy ra.

    Sử phân xử này xảy ra trong vùng IDENTIFIER của thông điệp với bit dominant luôn chiếm ưu thế.

    Cơ bản về giao tiếp CAN Image
    Hình 3. Luật phân xử của CAN bus

    Sự phân xử và chèn bit được thực hiện tự động bởi chip (vi mạch) thực hiện giao thức CAN.

    Minh họa việc truyền nhận thông điệp trên bus CAN
    Cơ bản về giao tiếp CAN Image
    Hình 3x. Hoạt động truyền nhận của các Node trong bus CAN
    Giả sử ta có bốn Node CAN như sau:
    Node 1: muốn truyền dữ liệu với IDENTIFIER 01101000110 (838).
    Node 2: muốn truyền một dữ liệu khác với IDENTIFIER 01101001000 (840) và cho phép chỉ nhận dữ liệu với IDENTIFIER 01101000110 (838).
    Node 3: không truyền dữ liệu nào và có khoảng ID cho phép là 0110100xxxx (‘x’ hiểu là don't care, tức tầm giá trị của khoảng cho phép là [832; 847]).
    Node 4: muốn truyền dữ liệu có IDENTIFIER 01110010010 (914) và cho phép nhận ID là 0111001xxx1 (tức tầm của khoảng ID cho phép là các số lẻ trong đoạn [913; 927])
    Giả sử, Node 1, Node 2, Node 4 cùng truyền dữ liệu của mình trong cùng một thời gian. Như vậy, cả 3 Node sẽ chuyển từ trạng thái Idle thành bộ truyền và sự xung đột sẽ xuất hiện nên trên bus sẽ xảy ra sự phân xử.
    Cơ bản về giao tiếp CAN Image
    Hình 3y. Sự phân xử khi truyền thông điệp trên bus CAN

    Sự phân xử thực hiện như sau, ở ba bit đầu tiên, cả 3 Node đều truyền cùng mức và giá trị bus ở vị trí tương ứng cũng vậy. Đến bit thứ 4, Node 1 và Node 2 truyền dominant nên giá trị bus theo ‘AND-wire’ là dominant. Cùng lúc này, node 4 truyền recessive nhưng khi giám sát bus lại thấy là dominant, nó hiểu là có nút khác cũng đang truyền dữ liệu. Node 4 sẽ ngưng truyền và trở thành bộ nhận. Ta nói rằng nút 4 thua trong sự phân xử. Tương tự như vậy, đến bit thứ 8, Node 2 cũng thua trong sự phân xử và trở thành bộ nhận.

    Kết quả của cuối cùng của trình phân xử trên là chỉ có Node 1 truyền dữ liệu với IDENTIFIER 838 của nó trên bus và nó là bộ truyền cho đến khi bus Idle. Các Node còn lại đều trở thành bộ nhận dữ liệu từ Node 1. Trong 3 Node nhận là Node 2, Node 3, Node 4 thì Node 4 sẽ không nhận dữ liệu này vì 838 không thuộc khoảng ID [913; 927] mà nó được cấu hình. Node 2 và Node 3 sẽ cho phép dữ liệu qua lớp phụ LLC để lên lớp cao hơn.



    Được sửa bởi Admin ngày 23/08/20, 07:30 pm; sửa lần 1.
    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Quy đinh về thời gian Bit - Bit timing

    Bài gửi by Admin 22/08/20, 08:45 am

    1. Tốc độ bit danh định (Nominal Bit Rate)

    Tốc độ bit danh định (fn) là số bit được truyền trong một giây (bps - bit per second) bằng bộ truyền lý tưởng và không có sự tái đồng bộ xảy ra. Sự tái đồng bộ cho phép hiệu chỉnh lại ví trí lấy mẫu bit khi xuất hiện sự lệch bit trên đường truyền.

    Tốc độ bit danh định có thể hiểu là tốc độ bit cao nhất mà đường truyền có thể đạt được trên lý thuyết.

    2. Thời gian bit danh định (Nominal Bit Time)

    Thời gian bit danh định (Nominal Bit Time) được định nghĩa như sau:

    Thời gian bit danh định (Tn) = 1/(Tốc độ bit danh định - fn)

    Thời gian bit danh định được chia thành 4 đoạn riêng biệt (4 khoảng thời gian) không chồng lấn lên nhau là
    Đoạn đồng bộ (Synchronization Segment) ký hiệu là Sync_seg
    Đoạn lan truyền (Propagation Time Segment) ký hiệu là Prop_seg
    Đoạn đệm pha thứ nhất (Phase Buffer Segment 1) ký hiệu là Phase_seg1
    Đoạn đệm pha thứ hai (Phase Buffer Segment 2) ký hiệu là Phase_seg2.
    Cơ bản về giao tiếp CAN Image
    Hình 1. Các phân đoạn thời gian của 1 bit

    Sync_seg: Đoạn này dành cho việc đồng bộ giữa các Node trong 1 bus CAN. Một cạnh bit xuất hiện trên bus sẽ được mong chờ nằm trong đoạn này. Một Node luôn giám sát và tính toán thời gian bit. Trong khi truyền dữ liệu, bất cứ khi nào xuất hiện sự chuyển mức logic (cạnh bit) thì Node phải đồng bộ lại hoặc hiệu chỉnh cách tính toán thời gian bit để việc lấy mẫu bit được chính xác. Khi một cạnh bit xuất hiện mà Node gimas sát thấy nằm đúng trong đoạn Sync_seq thì đường truyền đang ổn định và các Node đang có sự đồng bộ tốt.

    Prop_seg: Đoạn này được dùng để bù cho các thời gian trễ vật lý trong mạng. Nó gấp hai lần khoảng thời gian lan truyền tín hiệu trên bus, độ trễ mạch so sánh (comparator) ngõ vào và độ trễ mạch lái (driver) ngõ ra.

    Phase_seq1 và Phase_seq2: Hai đoạn này dành cho việc bù lỗi pha của cạnh bit. Thời gian các đoạn này có thể được kéo dài hoặc rút ngắn khi thực thi tái đồng bộ.

    Vị trí lấy mẫu (Sample point) là thời điểm tại đó mức trạng thái của bus CAN được đọc để xác định giá trị logic của bit. Ví trí lấy mẫu là ở cuối đoạn Phase_seg1. Trong quá trình truyền nhận dữ liệu, đoạn Phase_seg1 và Phase_seg2 được điều chỉnh để tái đồng bộ nhưng vị trí lấy mẫu này luôn ở cuối Phase_seg1.

    Thời gian xử lý thông tin Tifp (Information processing time) là thời gian dự trữ tính từ vị trí lấy mẫu dành cho việc tính toán mức bit tiếp theo trong chuỗi. Độ dài của nó được xác định tùy vào phần cứng (chip) CAN controller.

    3. Tính toán thời gian bit

    Đơn vị thời gian sử dụng trong chuẩn CAN là TQ (Time Quantum) được tính từ chu kỳ bộ dao động Tos (chu kỳ xung clock) của CAN controller, datasheet hoặc user manual của CAN controller sẽ quy định rõ nguồn clock này. Bộ dao động ở đây có thể là thạch anh hay bộ tạo dao động bên trong chip cấp cho CAN controller.

    TQ là đơn vị thời gian cố định trong suốt quá trình hoạt động của Node nhưng có thể lập trình được. Một TQ sẽ bằng m lần TQmin. TQmin (MINIMUM TIME QUANTUM) là đơn vị thời gian tối thiểu được tính từ Tos, n không có giới hạn cụ thể.

    TQ = m x TQmin = m x n x Tos

    Trong đó m là giá trị nguyên trong khoảng từ 1 đến 32.
    Cơ bản về giao tiếp CAN Image
    Hình 2. Thời gian của 1 bit với n = 4, m = 3

    Thời gian từng đoạn chia của 1 bit được quy định cụ thể như sau:
    Sync_seg:  1 TQ
    Prop_seg:  từ 1 đến 8 TQ
    Phase_seg1: từ 1 đến 8 TQ
    Phase_seg2 = max(Phase_seg1, Tifp) .Nghĩa là, Phase_seg1 và Tifp cái nào lớn hơn thì sử dụng giá trị đó cho Phase_seg2.
    Trong đó, thời gian xử lý thông tin Tifp nhỏ hơn hoặc bằng 2 TQ
    Tổng thời gian một bit ít nhất là 8 TQ và tối đa là 25 TQ
    Thông thường việc lập trình thời gian bit là cần thiết để tất cả các Node trong mạng có tốc độ bit và thời gian bit giống nhau. Giống nhau ở đây nghĩ là có sự sai lệch ít nhất. Thường các Node này sẽ đi kèm với một vi xử lý hoặc vi điều khiển. Tuy nhiên, CAN có thể được thiết kế mà không cần cấu hình thời gian bit, nghĩa là nó có thể tự điều chỉnh đến tốc độ bit thích hợp chỉ cần cung cấp nguồn xung clock phù hợp. Đối với Node loại này thì vị trí điểm lấy mẫu phải tương thích cho tất cả các Node và thời gian bit theo định nghĩa sau đây:
    Sync_seg: 1 TQ
    Prop_seg: 1 TQ
    Phase_seg1: 4 TQ
    Phase_seg2: 4 TQ
    Cơ bản về giao tiếp CAN Image
    Hình 3. Thời gian bit cho các linh kiện CAN không lập trình được thời gian bit

    4. Độ sai số cho phép của bộ dao động

    Độ sai số cho phép tối đa của bộ dao động là 1.58% và sử dụng một bộ cộng hưởng gốm (ceramic resonator) ở tốc độ bus lên đến 125 Kbits/s như nguyên tắc cơ bản. Tham khảo bài báo sau để có thông tin chính xác hơn:

    Dais, S; Chapman, M;
    “Impact of Bit Representation on Transport Capacity and Clock
    Accuracy in Serial Data Streams”,
    SAE Technical Paper Series 890532, Multiplexing in Automobiles SP-773 March 1989

    Một Node muốn sử dụng được đầy đủ các tốc độ bus của giao thức CAN (full speed) thì cần sử dụng bộ dao động thạch anh. Chip CAN yêu cầu cao nhất về độ chính xác của bộ tạo dao động. Việc xác định độ chính xác của các bộ tạo dao động sử dụng trong các Node của mạng CAN phải được thực hiện.

    5. Tính toán thời gian trễ lan truyền và Prop_seg

    Như đã trình bày ở trên, đoạn Prop_seg gấp hai lần khoảng thời gian lan truyền tín hiệu trên bus, độ trễ mạch so sánh (comparator) ngõ vào và độ trễ mạch lái (driver) ngõ ra. Độ trễ mạch lái ngõ ra và độ trễ mạch so sánh ngõ vào thuộc chip CAN transceiver.
    Cơ bản về giao tiếp CAN Image
    Hình 4. Giải thích độ trễ giữa 2 Node trong bus CAN

    Theo hình minh họa trên, các độ trễ được tính như sau:

    Độ trễ từ Node A đến Node B:
    Độ trễ mạch lái ngõ ra tại Node A: Txa
    Độ trễ trên bus: Tbus
    Độ trễ mạch so sánh ngõ vào tại Node B: Trb
    Độ trễ lan truyền từ A đến B:
    Tprop(A->B) = Txa + Tbus + Txb
    Độ trễ từ Node B đến Node A:
    Độ trễ mạch lái ngõ ra tại Node B: Txb
    Độ trễ trên bus: Tbus
    Độ trễ mạch so sánh ngõ vào tại Node A: Tra
    Độ trễ lan truyền từ B đến A:
    Tprop(B->A) = Txb + Tbus + Txa

    Thời gian đoạn Prop_seg:
    Tprop_seg = Tprop(A->B) + Tprop(B->A)

    Nếu CAN transceiver ở cả 2 Node là cùng loại thì Txa = Txb và Tra = Trb. Vì vậy, thời gian lan truyền từ A đến B và từ B đến A là như nhau.
    Tprop_seg = 2 x (Tx + Tbus + Tr)

    Số TQ cấu hình cho Prop_seg được tính như sau:

    Prop_seg = Tprop_seg/Ttq

    Nếu không phải là một số nguyên thì giá trị này được làm tròn lên đến số nguyên gần nhất. Chú ý, thông số cấu hình này được tính trên trường hợp xấu nhất là 2 Node nằm cách xa nhau nhất (nằm ở hai đầu cuối) trong bus CAN.
    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Quỵ định lỗi của CAN Node Và Tính hợp lệ của Thông điệp

    Bài gửi by Admin 22/08/20, 08:50 am

    1. Các trạng thái lỗi của CAN Node

    Để giám sát và kiểm soát lỗi, mỗi Node đều tự động xác định trạng thái của chính nó dựa trên số lượng lỗi mà nó phát hiện được. Tại một thời điểm, một Node có thể thuộc một trong ba trạng thái sau:
    Error active - Trạng thái chủ động với lỗi (gọi tắt là trạng thái lỗi chủ động). Đây là trạng thái hoạt động thông thường và tốt nhất của một Node. Node có thể tham gia truyền nhận dữ liệu trên bus một cách bình thường, nếu phát hiện lỗi thì sẽ phát khung báo lỗi với cờ báo lỗi chủ động (ACTIVE ERROR FLAG). Khi cờ báo lỗi chủ động được phát thì đường truyền bị ngắt ngay và các Node đều nhận biết được sự báo lỗi này vì cờ báo lỗi chủ động gồm 6 bit dominant sẽ phá vỡ cấu trúc thông thường của khung dữ liệu hoặc khung yêu cầu và không tuân theo luật chèn bit.
    Error warning - Trạng thái cảnh báo lỗi là trạng thái lỗi chủ động nhưng Node CAN lúc này giám sát thấy số lượng lỗi phát hiện được quá nhiều đến ngưỡng cần phải báo động để Node có cơ chế xử lý thích hợp. Node trong trạng thái này hoạt động như trong trạng thái lỗi chủ động. Đây là trạng thái không được quy định trong chuẩn CAN Specification 2.0 nhưng hều hết các CAN controller hiện tại đều có.
    Error Passive - Trạng thái bị động với lỗi (gọi tắt là trạng thái lỗi bị động). Một Node ở trạng thái này sẽ có một vài hoạt động bị giới hạn và kém ưu tiên hơn các Node ở trạng thái lỗi chủ động. Cụ thể, trong khi truyền nhận, nếu phát hiện một lỗi bus thì Node sẽ truyền khung báo lỗi bị động với cờ báo lỗi bị động (PASSIVE ERROR FLAG) toàn là bit recessive nên kém ưu tiên và thông điệp đang truyền có thể vẫn truyền tiếp. Mặt khác nó có thẻ bị ghi đè bởi các Node phát cờ báo lỗi chủ động. Một hạn chế nữa là, Node trong trạng thái lỗi bị động, sau khi vừa truyền xong một thông điệp thì phải chờ thêm một khỏng thời gian của vùng SUSPEND TRANSMISSION trước khi được phép truyền tiếp. Trong khoảng thời gian chờ này, nếu có Node khác truyền dữ liệu thì nó trở thành bộ nhận.
    Bus-off - Trạng thái ngắt khỏi bus CAN (gọi tắt là trạng thái ngắt bus) là trạng thái Node không được phép có bất cứ táng động nào trên bus. Bộ lái ngõ ra bus, nằm trong chip CAN transceiver, bị ngắt.
    2. Cách xác định trạng thái lỗi

    Mỗi Node sẽ có 2 bộ đếm được dùng để xác định trạng thái lỗi của Node là:
    Bộ đếm lỗi truyền (TRANSMIT ERROR COUNT)
    Bộ đếm lỗi nhận (RECEIVE EROR COUNT)
    Hai bộ đếm lỗi này được tích hợp trong phần cứng CAN controller và chạy tự động khi Node CAN hoạt động.

    Giá trị của hai bộ đếm lỗi là bộ đếm lỗi truyền (Tx_count) và bộ đếm lỗi nhận (Rx_count) sẽ quyết định Node đang trong trạng thái nào. Các khoảng giá trị của chúng được quy định như sau:
    Trạng thái lỗi chủ động ‘Error active’ nếu Tx_count ≤ 127 và Rx_count ≤ 127.
    Trạng thái lỗi bị động ‘Error passive’ nếu Tx_count > 127 hoặc Rx_count > 127 nhưng Tx_count ≤ 255.
    Trạng thái ngắt bus ‘Bus off’ nếu Tx_count > 255.
    Trạng thái cảnh báo lỗi 'Error Warning' nếu Tx_count >= 96 hoặc Rx_count >= 96. Đây là trạng thái không được quy định trong CAN Specification 2.0 nhưng được tách ra dựa trên một chú ý (Note) trong chuẩn này. Cụ thể, giá trị của một bộ đếm lỗi lớn hơn "khoảng" 96 sẽ chỉ ra việc bus bị nhiễu nặng và có thể cần kiểm tra điều kiện này.
    Cơ bản về giao tiếp CAN Image
    Hình 1. Các trạng thái của một CAN NODE

    3. Các loại lỗi mà một Node CAN có thể phát hiện

    Có 5 loại lỗi khác nhau và chúng không loại trừ lẫn nhau, nghĩa là một lỗi xảy ra có thể thuộc hơn 2 loại.
    Lỗi bit (BIT ERROR) Một Node khi gửi một bit lên bus thì phải giám sát bit đó. Một lỗi bit được phát hiện ngay trong khoảng thời gian truyền bit đó nếu giá trị được lấy mẫu khi giám sát khác với giá trị bit được truyền ra. Nghĩa là truyền bit dominant nhưng giám sát thấy recessive và ngược lại. Ngoại trừ một số trường hợp dù giá trị gửi ra và giá trị bit giám sát khác nhau nhưng không được xem là lỗi bit, cụ thể như sau:
    Gửi một bit recessive trong vùng ACK SLOT nhưng giám sát thấy một bit dominant.
    Node gửi cờ báo lỗi bị động nhưng giám sát thấy có bit dominant xuất hiện
    Lỗi chèn bit (STUFF ERROR) Một Node giám sát thấy chuỗi 5 bit liên tiếp giống nhau thì sẽ kiểm tra bit thứ 6 có khác cực với 5 bit trước hay không. Nếu không khác thì đây là lỗi chèn bit vì sau 5 bit dominant liên tiếp phải được chèn 1 bit recessive, sau 5 bit recessive liên tiếp phải được chèn 1 bit dominant.
    Lỗi CRC (CRC ERROR) CRC SEQUENCE đi kèm theo thông điệp được tính bởi bộ truyền. Các bộ nhận phải tính lại chuỗi CRC giống với cách tính của bộ truyền. Kết quả tính toán này sẽ được dùng để so sánh với chuỗi CRC từ bộ truyền. Nếu hai chuỗi khác nhau thì đó là lỗi CRC.
    Lỗi định dạng (FORM ERROR) Một Node giám sát thấy các vùng có định dạng bit cố định (các vùng quy định rõ mức logic cố định của bit là 1 hoặc 0) nhưng chứa 1 hoặc nhiều bit vi phạm quy định thì đó là lỗi định dạng. Ngoại trừ:
    Một bộ nhận phát hiện thấy một bit dominant ở bit cuối cùng vùng EOF (bit thứ 7 của EOF) thì không xem đây là lỗi định dạng
    Lỗi ACK (ACKNOWLEDGMENT ERROR) là lỗi được phát hiện bởi bộ truyền khi nó không thấy một bit dominant xuất hiện tròng vùng ACK SLOT.
    Cơ bản về giao tiếp CAN Image
    Hình 2. Các vùng được giám sát lỗi

    Một Node phát hiện thấy một trong các lỗi trên thì phải phát cờ báo lỗi chủ động hoặc bị động tùy vào trạng thái hiện tại của Node.

    Đối với loại lỗi BIT, lỗi chèn bit, lỗi định dạng và lỗi ACK thì việc truyền cờ báo lỗi bắt đầu ngay ở bit kế tiếp ngay sau khi phát hiện lỗi.

    Đối với loại lỗi CRC thì cờ báo lỗi chỉ được truyền sau vùng ACK DELIMITER trừ khi có một cờ báo lỗi sinh ra bởi điều kiện khác đang được truyền. Ví dụ, giả sử Node A và Node B đều ở trạng thái lỗi chủ động. Node A là transmitter phát hiện lỗi bit tại bit cuối của CRC Sequence bị lỗi (lỗi Bit). Node A phát cờ báo lỗi bắt đầu từ vùng đáng lẽ là CRC Delimiter và làm vi phạm định dạng bit của vùng CRC Delimiter. Node B không phát hiện ra lỗi ở bit cuối CRC Seuqence nhưng sau khi nhận bit cuối cùng của CRC Sequence thì Node B kiểm tra thấy lỗi CRC. Tuy nhiên, Node B giám sát thấy vùng CRC Delimiter bị lỗi (lỗi định dạng - FORM ERROR) nên Node B phát cờ báo lỗi của nó bắt đầu từ vùng đáng lẽ là ACK SLOT chứ không chờ sau vùng ACK DELIMITER mới phát cờ báo lỗi để đáp ứng cho lỗi CRC.
    Cơ bản về giao tiếp CAN Image
    Hình 3. Ví dụ về việc phát hiện lỗi và báo lỗi

    4. Quy định về việc tăng/giảm giá trị các bộ đếm lỗi

    Hai bộ đếm lỗi Tx_count và Rx_count khi nào tăng? khi nào giảm? giá trị tăng hoặc giảm là bao nhiêu? được quy định rõ ràng bởi chuẩn. Trong suốt quá trình truyền một thông điệp, các quy tắc tăng giảm bộ đếm lỗi sau đây sẽ được áp dụng:
    Node là bộ nhận phát hiện một lỗi thì Rx_count tăng 1, ngoại trừ phát hiện lỗi bit khi phát cờ báo lỗi chủ động và cờ báo quá tải
    Node là bộ nhận phát hiện một bit dominant ở bit đầu tiên sau khi phát một cờ báo lỗi thì Rx_count tăng 1
    Node là bộ truyền phát một cờ báo lỗi thì Tx_count tăng 8. Tuy nhiên, Tx_count không thay đổi trong hai trường hợp ngoại lệ sau:
    Ngoại lệ 1: Bộ truyền trong trạng thái lỗi bị động phát hiện lỗi ACK và không phát hiện một bit dominant nào trong khi gửi cờ báo lỗi bị động của nó.
    Ngoại lệ 2: Nếu bộ truyền gửi một cờ báo lỗi sinh ra bởi lỗi chèn bit xuất hiện trong vùng phân xử mà bit chèn này đáng lẽ là recessive và bộ truyền đã truyền đi bit recessive nhưng lại được giám sát thấy là dominant
    Node là bộ truyển phát hiện lỗi bit khi đang truyền cờ báo lỗi chủ động hoặc cờ báo quá tải thì Tx_count tăng 8
    Node là bộ nhận phát hiện một lỗi bit trong khi gửi một cờ báo lỗi chủ động hoặc cờ báo quá tải thì Rx_count tăng 8
    Sau khi gửi một cờ báo lỗi chủ động, cờ báo lỗi bị động hoặc cờ báo quá tải, nếu một Node phát hiện thêm 7 bit dominant liên tiếp thì:
    Trong trường hợp của cờ báo lỗi chủ động và cờ báo quá tải, sau khi phát hiện bit dominant thứ 14 liên tiếp và sau mỗi chuỗi 8 bit dominant tiếp theo thì Tx_count và Rx_count tăng lên 8.
    Trong trường hợp của cờ báo lỗi bị động, sau khi phát hiện bit dominant thứ 8 liên tiếp và sau mỗi chuỗi 8 bit dominant tiếp theo thì Tx_count và Rx_count tăng lên 8.
    Sau khi truyền thành công một thông điệp (phát hiện được ACK và không có lỗi cho đến khi EOF kết thúc), Tx_count giảm 1 trừ khi Tx_count đang là 0 thì không giảm.
    Sau khi nhận thành công một thông điệp (nhận không lỗi đến ACK SLOT và gửi thành công bit ACK) thì:
    Rx_count giảm 1 nếu giá trị 1 ≤ Rx_count ≤ 127.
    Rx_count giữa giá trị 0 nếu nó đang bằng 0
    Rx_count được gán một giá trị giữa 119 và 127 nếu Rx_count ≥ 127
    Chú ý, trong quá trình khởi động (Start-up), chỉ có một Node được phép hoạt động. Nếu Node này truyền một số thông điệp, nó sẽ không nhận được ACK nên phát hiện ra lỗi và lặp lại việc truyền thông điệp. Node này có thể rơi vào trạng thái lỗi bị động nhưng không được phép bị bus-off vì lý do này.

    5. Tính hợp lệ của thông điệp

    Thời điểm xác nhận sự hợp lệ của thông điệp của bộ truyền và bộ nhận là khác nhau.

    Với bộ truyền, thông điệp gọi là hợp lệ khi không có bất kỳ lỗi nào cho đến khi EOF kết thúc. nếu thông điệp bị lỗi thì thông điệp sẽ được tự động truyền lại dựa trên sự ưu tiên. Để có thể cạnh trang với sự truy cập bus từ các thông điệp khác thì việc truyền lại phải được bắt đầu sớm nhất có thể khi bus rảnh (BUS IDLE).

    Với bộ nhận, thông điệp gọi là hợp lệ nếu nó không lỗi cho đến bit cuối của EOF. Giá trị bit cuối EOF, được bộ nhận xem như don't care. Bộ nhận phát hiện bit cuối này là dominant cũng không xem là một lỗi định dạng (FORM ERROR) mà đáp ứng lại bằng một khung báo quá tải.
    avatar
    Admin
    Admin


    Tổng số bài gửi : 78
    Điểm tích lũy : 157
    Đã được thích : 21
    Join date : 12/03/2015
    Age : 33
    Đến từ : Thanh Hóa - TP.HCM

    Cơ bản về giao tiếp CAN Empty Re: Cơ bản về giao tiếp CAN

    Bài gửi by Admin 22/08/20, 09:06 am

    Nội dung bài này tham khảo từ một kết quả đo đạc của TI nhằm cho bạn đọc có cái nhìn cụ thể về sự truyền nhận dữ liệu trên 1 bus CAN và quan sát hoạt động 1 bus CAN trên thực tế.

    Chuẩn CAN định nghĩa một giao thức mạng thông tin cho phép tất cả các Node trong mạng có thể thông tin được với nhau. Mạng có thể có hoặc không có Node điều khiển trung tâm. Các Node có thể được thêm vào mạng bất kỳ lúc nào kể cả lúc mạng đang hoạt động (hot-plugging).

    Việc quan sát được thực hiện trên:
    Bus CAN ở Ch 1 sử dụng đầu đo vi sai
    Đường TX của Node A, nối từ vi xử lý DSP có tích hợp CAN controller đến CAN transceiver, ở Ch 2
    Đường TX của Node B, nối từ vi xử lý DSP có tích hợp CAN controller đến CAN transceiver, ở Ch 3
    Đường TX của Node C, nối từ vi xử lý DSP có tích hợp CAN controller đến CAN transceiver, ở Ch 4
    Cơ bản về giao tiếp CAN Image
    Hình 1. Minh họa bus CAN được kết nối và đo đạc bằng dao động ký

    Đầu tiên Node A truyền một thông điệp hợp lệ và được Node B và C xác nhận bằng 1 bit dominant ở vùng ACK slot. Sau đó, Node B và Node C cùng phát thông điệp. Sự xung đột xảy ra và Node C thắng phân xử nên truyền tiếp cho đến khi kết thúc thông điệp của nó. Node B ngừng truyền ngay khi thua phân xử và trở thành bộ nhận. Sau đó, cả Node A và Node B đều phát ACK báo hiệu Node C truyền một thông điệp hợp lệ. Cuối cùng, Node B phát lại thông điệp của nó khi bus rảnh và được Node A và Node C báo ACK.

    Chú ý, cực của dạng sóng trên bus đo bằng đầu dò vi sai ở hình sau ngược với dạng sóng đo trên các đường TX, đồng thời cũng là ngõ vào bộ lái bus CAN của CAN transceiver.
    Cơ bản về giao tiếp CAN Image
    Hình 2. Dạng sóng thể hiện trên dao động ký của bus CAN

    Sponsored content


    Cơ bản về giao tiếp CAN Empty Re: Cơ bản về giao tiếp CAN

    Bài gửi by Sponsored content


      Hôm nay: 26/04/24, 02:54 pm