- Giao thức CAN cho phép các nút khác nhau đưa dữ liệu cùng lúc, và cơ chế arbitration sẽ xác định xem nút nào được phát đầu tiên - Trong mạng CAN, phần ID của mỗi message gồm 11 bits để
Trang 1Controller Area
Network
Trang 2CHUẨN TRUYỀN CAN
TRONG GIAO TIẾP MÁY TÍNH VÀ VĐK
Bài tập lớn
Trang 3TS LÊ THANH HẢI
Trang 4Mục lục
1 Giới thiệu về chuẩn truyền CAN
2 Mạch điện
3 Lập trình CCS và Mô phỏng
Trang 5I Chuẩn truyền CAN
1 Giới thiệu
Controller Area Network (CAN) là giao thức giao
tiếp nối tiếp hỗ trợ mạnh cho những hệ thống điều khiển thời gian thực phân bố (distributed realtime
control system) với độ ổn định, bảo mật và đặc biệt
chống nhiễu cực kỳ tốt
Trang 6I Chuẩn truyền CAN
1 Giới thiệu
- CAN được phát triển bởi Bosch
- Ngày nay, CAN được chuẩn hóa thành tiêu chuẩn ISO11898
- CAN ổn định và an toàn,
nhờ cơ chế phát hiện và xử
lý lỗi cực mạnh
Trang 7I Chuẩn truyền CAN
Trang 8I Chuẩn truyền CAN
2 CAN protocol
Một ví dụ về mạng CAN
Trang 9I Chuẩn truyền CAN
Trang 10I Chuẩn truyền CAN
3 Tính chất vi sai trên đường truyền
Sự kháng nhiễu bởi tính hiệu điện từ
Trang 11I Chuẩn truyền CAN
4 Giải quyết tranh chấp trên bus
- Phương thức giao tiếp của bus CAN là sự phát tán
thông tin
- Giao thức CAN cho phép các nút khác nhau đưa
dữ liệu cùng lúc, và cơ chế arbitration sẽ xác định xem nút nào được phát đầu tiên
- Trong mạng CAN, phần ID của mỗi message
(gồm 11 bits) để xác định mức ưu tiên
Trang 12I Chuẩn truyền CAN
4 Giải quyết tranh chấp trên bus
- Nút nào mức ưu tiên thấp hơn sẽ mất sự cạnh tranh
với nút có mức ưu tiên cao hơn
Trang 13I Chuẩn truyền CAN
5 CAN frame
Có 4 loại frame:
- Data frame dùng khi node muốn truyền dữ liệu
tới các node khác
- Remote frame dùng để yêu cầu truyền data frame
- Error frame và overload frame để xử lý lỗi
Trang 14I Chuẩn truyền CAN
5 CAN frame
Extended frame gần giống Standard frame nhưng
có 29 bit ID
Trang 15I Chuẩn truyền CAN
Mỗi bit được cấu tạo bởi 4 Segment
6 Nominal Bit Time
Nominal Bit Time là độ dài của một bit trên bus Mỗi nút trên bus phải điều chỉnh nhịp cùng với Nominal Bit Time để có thể phát và nhận chính xác dữ liệu trên bus
Trang 16I Chuẩn truyền CAN
7 CAN MODULE trên PIC
- Thực hiện các giao thức CAN 1.2, CAN 2.0A và
CAN 2.0 B
- Hỗ trợ các loại Frame chuẩn và mở rộng
- Độ dài dữ liệu từ 0-8 byte
- Lập trình tốc độ tới 1Mbit/s
- 2 buffer nhận/ 3 buffer truyền
- Các ngắt do lỗi truyền nhận
- Lập trình xung clock
Trang 17I Chuẩn truyền CAN
7 CAN MODULE trên PIC
Module CAN sử dụng chân RB2/CANTX và RB3/CANRX để giao tiếp với bus CAN Trình tự thiết lập CAN module:
- Đảm bảo module trong chế độ thiết lập
- Thiết lập chế độ baud
- Thiết lập các thanh ghi lọc và mặt nạ
- Đưa module CAN về chế độ hoạt động bình
thường hay chế độ khác
Trang 18I Chuẩn truyền CAN
7 CAN MODULE trên PIC
Trang 19I Chuẩn truyền CAN
TXB0, TXB1, TXB2
- Thanh ghi điều
Trang 20I Chuẩn truyền CAN
Thiết lập truyền
- Bit TXREQ phải được xóa
- SIDH, SIDL, DLC và thanh ghi dữ liệu được nạp
Sử dụng frame mở rộng: EIDH:EIDL phải được ghi và bit EXIDE được set
- Set bit TXREQ cho mỗi buffer truyền
- Sự truyền chỉ bắt đầu khi bus rảnh
- Khi truyền thành công, bit TXREQ sẽ xóa
- Nếu truyền không thành công, bit TXREG vẫn
Trang 21I Chuẩn truyền CAN
Ưu tiên truyền
- Không liên quan tới sự ưu tiên của message trên
bus theo giao thức CAN
- Buffer nào có mức ưu tiên cao nhất sẽ được truyền
trước
- Nếu 2 buffer có cùng mức ưu tiên, thì buffer nào
có số ký kiệu cao hơn sẽ được truyền trước
- Có 4 mức ưu tiên: bit TXP là ’11’ thì ưu tiên cao
nhất
Trang 22I Chuẩn truyền CAN
Nhận message
- Có 2 buffer nhận: RXB0 và RXB1
- Mỗi buffer chiếm 14 byte SRAM:
• Một thanh ghi điều khiển (RXBnCON)
• 4 thanh ghi ID (RXBnSIDL, RXBnSIDH,
RXBnEIDL, RXBnEIDH)
• Một thanh ghi đếm độ dài dữ liệu (RXBnDLC)
• 8 thanh ghi dữ liệu (RXBnDm)
Trang 23I Chuẩn truyền CAN
Nhận một message
- Một message chuyển tới buffer nhận nào bit
RXFUL được set
- Bit này phải được xóa bởi MCU khi nó đã xử lý
xong message trong buffer để cho phép message mới có thể nhận
- Nếu một ngắt nhận cho phép, thì ngắt sẽ xảy ra
báo hiệu một message đã được nhận thành công
Trang 24I Chuẩn truyền CAN
Ưu tiên nhận
- RXB0 là buffer có mức ưu tiên cao nhất
- RXB0CON thiết lập khi RXB0 chứa một message
và một message khác được nhận sẽ được đưa vào RXB1
Trang 25I Chuẩn truyền CAN
- void can_set_mode(CAN_OP_MODE mode);
Cho phép module CAN thay đổi các chế độ hoạt động
Trang 26I Chuẩn truyền CAN
8 CAN trong trình dịch CCS
- void can_set_id(int* addr, int32 id, int1 ext);
Thiết lập các thanh ghi xxxxEIDL, xxxxEIDH, xxxxSIDL và xxxxSIDH để định nghĩa một ID
- int32 can_get_id(int* addr, int1 ext);
Trả về giá trị ID (ngược với hàm can_set_id())
- int1 can_getd(int32 & id, int* data, int & len,
struct rx_stat & stat);
Hàm đặt dữ liệu vào bộ đệm truyền
Trang 27I Chuẩn truyền CAN
CAN trong trình dịch CCS
- int can_putd(int32 id, int* data, int len, int
priority, int1 ext, int1 rtr);
Lấy dữ liệu từ một bộ đệm nhận
- can_kbhit() trả về TRUE nếu có data trong một
trong những buffer nhận
- can_tbe() TRUE nếu buffer truyền sẵn sàng
- can_abort() bỏ tất cả những cuộc chưa truyền
Trang 28II Mạch điện
1 Giao tiếp máy tính và pic18f4680
CAN bus
Trang 294 2
R 7 330
C 15 0.1uF
4.5V
H 12V
C 3 10nF
0
C 5 0.1uF
R 5 2K 7
1 2
R 6 1K
Trang 308 7 5
40 39 38 36 35 33 31 30 28 27 25 23 22
1 2
4
4 3
U 5
MC P 2551
1 2 3
8 7 6
C 5 22pF
5 2
V C C
7 TXD2
20 M H z
C 6 22pF
2
R 3 10k
40 39 37 36 34 33 31 29 28 26 25 23 21
Trang 31TXD
C 7 10u
C 1 0 1n
U 7
MA X232
11 12 10 9
14 13 7 8 2 6
T1IN
R 1O U T T2IN
R 2O U T
T1O U T
R 1IN T2O U T
C 10 1n
D C D
C 8 10u
14 13 7 8 2 6
T1 IN
R 1O U T T2 IN
R 2O U T
T1O U T
R 1 IN T2O U T
Trang 32C D
U 14
7SEG
A B C D E F G
D B
A
F
B B
E H
D
H
Trang 33III Lập trình CCS và mô phỏng
Trang 34Tài liệu tham khảo
- Bài giảng thầy Võ Tường Quân
- Datasheet pic16f887