1 Giới thiệu
Truyền thông thiết bị công nghiệp thường bao gồm nhiều loại sản phẩm phần cứng và phần mềm, cũng như các giao thức được sử dụng để kết nối các nền tảng máy tính tiêu chuẩn (máy tính cá nhân hoặc máy trạm) với các thiết bị tự động hóa công nghiệp. Do đó, hầu hết các thiết bị tự động hóa đều được thiết kế để thực thi các lệnh nối tiếp đơn giản tương thích với các cổng nối tiếp tiêu chuẩn có trên máy tính cá nhân hoặc trên-thẻ cổng nối tiếp bổ sung. RS{6}}232 hiện là giao diện nối tiếp được sử dụng rộng rãi nhất trong lĩnh vực truyền thông công nghiệp và PC. RS-232 được định nghĩa là một tiêu chuẩn{10}kết thúc duy nhất được thiết kế để mở rộng khoảng cách liên lạc trong giao tiếp nối tiếp tốc độ thấp. Vì RS-232 chia sẻ tín hiệu chung giữa máy phát và máy thu nên nó không thể sử dụng tín hiệu vi sai; nếu không, nhiễu ở chế độ chung sẽ kết hợp với hệ thống tín hiệu. Tiêu chuẩn RS-232 chỉ định khoảng cách tối đa chỉ 15 m và tốc độ truyền tín hiệu tối đa là 20 kbit/s.
CAN, viết tắt của "Mạng khu vực điều khiển", là một trong những bus trường được sử dụng rộng rãi nhất trên toàn thế giới. Một mạng duy nhất bao gồm các bus CAN bị giới hạn bởi các đặc tính điện của phần cứng mạng. Là một bus truyền thông nối tiếp đa{2}}chính, các thông số thiết kế cơ bản của CAN yêu cầu tốc độ bit cao và khả năng chống nhiễu điện từ mạnh, cũng như khả năng phát hiện bất kỳ lỗi nào xảy ra trên bus truyền thông. Ngay cả khi khoảng cách truyền tín hiệu đạt tới 10 km, CAN vẫn có thể cung cấp tốc độ truyền dữ liệu lên tới 50 kbit/s. Bảng 1 cho thấy mối quan hệ giữa khoảng cách truyền tối đa giữa hai nút bất kỳ trên bus CAN và tốc độ bit của chúng.
Khoảng cách tối đa giữa hai nút bất kỳ trong cấu hình tam giác trong hệ thống CAN Bus
Tốc độ bit/kbps 1000 500 250 125 100
Khoảng cách tối đa/m 40 130 270 530 620
Tốc độ bit (kbps) 50 20 10 5
Khoảng cách tối đa (m) 1300 3300 6700 10000
Có thể thấy, bus CAN là bus nối tiếp vượt trội so với RS{1}}232 về hiệu suất thời gian thực, khả năng thích ứng, tính linh hoạt và độ tin cậy. Khi hai thiết bị nối tiếp được đặt cách xa nhau và không thể kết nối trực tiếp qua RS-232, RS-232 có thể được chuyển đổi sang CAN để đạt được kết nối mạng của các thiết bị nối tiếp qua bus CAN.
Tuy nhiên, RS-232 và CAN khác nhau đáng kể về mức điện áp và định dạng khung. Cụ thể:
Tiêu chuẩn RS-232 sử dụng logic âm, xác định mọi mức điện áp giữa +3V và +15V là logic "0" và mọi mức điện áp trong khoảng -3V đến -15V là logic "1". Mặt khác, tín hiệu CAN được truyền bằng điện áp vi sai. Hai đường tín hiệu được gọi là "CAN_H" và "CAN_L." Ở trạng thái tĩnh, cả hai đều xấp xỉ 2,5V; trạng thái này được biểu diễn dưới dạng logic "1" và còn được gọi là "lặn". Khi CAN_H cao hơn CAN_L, nó đại diện cho giá trị logic "0", được gọi là "chiếm ưu thế". Ở trạng thái chiếm ưu thế, các giá trị điện áp điển hình là: CAN_H=3.5V, CAN_L=1.5V;
Định dạng khung cho cổng nối tiếp RS-232 là: một bit bắt đầu, tám bit dữ liệu, bit thứ chín có thể lập trình (đóng vai trò là bit địa chỉ/dữ liệu cho cả truyền và nhận) và một bit dừng. Định dạng khung dữ liệu CAN bao gồm: tiêu đề khung + ID + dữ liệu (có thể chia thành hai định dạng: khung tiêu chuẩn và khung mở rộng).
Do đó, thiết kế yêu cầu một bộ vi điều khiển thực hiện các chuyển đổi như chuyển đổi định dạng mức và khung. Quá trình chuyển đổi được thể hiện trong Hình 1.
2 Thiết kế phần cứng để chuyển đổi RS-232 sang CAN
Khi thiết kế thiết bị chuyển đổi RS{1}}232-sang{15}}CAN, bộ vi điều khiển AT89C52 được sử dụng làm bộ vi xử lý; SJA1000 được sử dụng làm vi điều khiển CAN. SJA1000 tích hợp các chức năng lớp vật lý và lớp liên kết dữ liệu của giao thức CAN và có thể xử lý một cách thụ động việc định khung dữ liệu truyền thông; AT82C250 đóng vai trò là giao diện giữa bộ điều khiển CAN và bus vật lý, cung cấp khả năng truyền vi sai cho bus và khả năng thu vi sai cho bộ điều khiển CAN. Có thể chọn ba chế độ hoạt động khác nhau (tốc độ{16}}cao, điều khiển độ dốc và chế độ chờ) thông qua chân 3 của AT82C250. Khi chân 3 được nối đất, thiết bị hoạt động ở chế độ tốc độ cao; cách ly quang tốc độ cao được triển khai bằng cách sử dụng 6N137, giúp ngăn chặn nhiễu từ tín hiệu bên ngoài; MAX232 được sử dụng để chuyển đổi tín hiệu 232 cấp thành mức TTL cho chip giao diện vi điều khiển. Để biết chi tiết về mạch giao diện phần cứng cụ thể, vui lòng tham khảo các tài nguyên liên quan cho SJA1000; giải thích thêm không được cung cấp ở đây. Tuy nhiên, cần lưu ý những điểm sau.
(1) Một điện trở 120Ω được kết nối ở cả hai đầu của bus CAN để phù hợp với trở kháng của bus, từ đó cải thiện khả năng chống nhiễu và độ tin cậy của truyền dữ liệu. Tuy nhiên, trên thực tế, chỉ cần đảm bảo rằng điện trở shunt giữa "CAN_H" và "CAN_L" trong mạng CAN là 60Ω là đủ.
(2) Chân 20 (RX1) của SJA1000 có thể được nối đất khi không sử dụng (xem thiết kế phần mềm để biết lý do cụ thể); khi kết hợp với bit cài đặt CDR.6, điều này có thể làm tăng đáng kể chiều dài bus.
(3) Phương thức kết nối của chân TX0 và TX1 xác định mức đầu ra nối tiếp. Tham khảo các cài đặt trong Thanh ghi điều khiển đầu ra (OCR) để biết chi tiết cụ thể.
(4) Một điện trở dốc được nối giữa chân RS của AT82C250 và đất. Giá trị điện trở có thể được điều chỉnh phù hợp dựa trên tốc độ truyền thông của bus, thường nằm trong khoảng từ 16 kΩ đến 140 kΩ.
(5) MAX232 yêu cầu bốn tụ điện điện phân-C1, C2, C3 và C4-cũng được sử dụng để chuyển đổi nguồn điện bên trong. Tất cả đều có định mức 1 μF/25 V; Nên sử dụng tụ điện tantalum và chúng phải được đặt càng gần chip càng tốt. Một tụ điện tách rời 0,1 μF phải được kết nối giữa nguồn điện VCC và mặt đất.
3 Thiết kế phần mềm chuyển đổi RS-232 sang CAN
Dưới sự điều khiển của bộ vi xử lý, việc sử dụng tính năng thu cổng nối tiếp và ngắt CAN trong quá trình trao đổi dữ liệu giữa RS-232 và CAN có thể cải thiện hiệu quả hoạt động. Sơ đồ chương trình chính được hiển thị trong Hình 2. SJA1000 chỉ có thể được khởi tạo ở chế độ đặt lại; điều này chủ yếu bao gồm việc thiết lập chế độ vận hành, phân chia đồng hồ và các thanh ghi bộ lọc chấp nhận, định cấu hình các tham số tốc độ truyền và thiết lập thanh ghi cho phép ngắt.
Việc dữ liệu có thể được truyền đi chính xác hay không còn phụ thuộc vào tốc độ truyền và kiểm soát luồng, đây là những khía cạnh không thể bỏ qua trong quá trình thiết kế phần mềm. Do đó, các phần sau sẽ tập trung vào cấu hình tốc độ truyền CAN, tự động phát hiện tốc độ truyền của cổng nối tiếp và điều khiển luồng dữ liệu của cổng nối tiếp.

3.1 Đặt tốc độ lọc CAN
Một trong những yếu tố chính của giao thức CAN là tốc độ truyền. Người dùng có thể đặt vị trí của các điểm lấy mẫu bit trong khoảng thời gian bit và số lượng mẫu, cho phép họ tự do tối ưu hóa hiệu suất mạng cho các ứng dụng của mình. Tuy nhiên, trong quá trình tối ưu hóa này, phải chú ý đến mối quan hệ giữa dung sai của bộ dao động tham chiếu được sử dụng cho các tham số định thời bit và độ trễ truyền của các tín hiệu khác nhau trong hệ thống.
Tốc độ bit của hệ thống, fBil, biểu thị số bit dữ liệu được truyền trên một đơn vị thời gian, tức là tốc độ truyền fBit=1/tBit. Thời gian bit danh nghĩa bao gồm ba phân đoạn không-chồng chéo: SYNC_SEG, TSEG1 và TSEG2. Ba phân đoạn thời gian này được ký hiệu lần lượt là tSYNC_SEG, tTSEG1 và tTSEG2. Do đó, chu kỳ bit danh nghĩa tBit là tổng của ba đoạn thời gian này.
tBit=tSYNC_SEG + tTSEG1 + tTSEG2
Trong khoảng thời gian bit, các phân đoạn này được biểu thị dưới dạng bội số nguyên của một đơn vị thời gian cơ bản. Đơn vị thời gian này được gọi là hạn ngạch thời gian (TQ) và khoảng thời gian của hạn ngạch thời gian là một chu kỳ của đồng hồ hệ thống CAN (tSCL), được lấy từ khoảng thời gian xung nhịp của bộ dao động (tCLK). Đồng hồ hệ thống CAN có thể được điều chỉnh bằng cách lập trình hệ số đếm trước (giá trị đặt trước tốc độ baud, BRP). Cụ thể:
tSCL=BRP × 2tCLK=2BPR/fCLK
Một khoảng thời gian rất quan trọng khác để tính toán thời gian bit CAN là độ rộng bước nhảy đồng bộ hóa (SJW), có khoảng thời gian tSJW. Đoạn SJW không phải là một phần của chu kỳ bit; đúng hơn, nó xác định số lượng TQ tối đa mà chu kỳ bit được kéo dài hoặc rút ngắn trong sự kiện tái đồng bộ hóa. Ngoài ra, giao thức CAN cho phép người dùng chỉ định chế độ lấy mẫu bit (SAM), có thể là chế độ mẫu đơn hoặc chế độ ba mẫu (chọn một kết quả từ ba mẫu). Ở chế độ-mẫu đơn, điểm lấy mẫu nằm ở cuối phân đoạn TSEG1. Ở chế độ ba-mẫu, hai điểm lấy mẫu bổ sung sẽ được lấy so với chế độ-mẫu đơn; chúng nằm ở phía trước phần cuối của phân đoạn TSEG1, cách nhau bởi một TQ.

BPR, SJW, SAM, TESG1 và TESG2 được đề cập ở trên đều có thể được người dùng xác định thông qua các thanh ghi nội bộ BTR0 và BTR1 của bộ điều khiển CAN. Chi tiết được hiển thị trong Hình 3. Sau khi BTR0 và BTR1 được đặt, phạm vi tốc độ truyền thực tế là:
Tối đa=1/(tBit - tSJW), Tối thiểu=1/(tBit + tSJW)
3.2 Phát hiện tốc độ truyền cổng nối tiếp
Khi một thiết bị nối tiếp đóng vai trò là máy chủ, nếu bạn cần phát hiện tốc độ truyền cổng nối tiếp của thiết bị chuyển đổi tại thời điểm đó, trước tiên bạn có thể đặt tốc độ truyền nhận của máy chủ (ví dụ: 9600 baud) và gửi một ký tự cụ thể (ví dụ: trả về vận chuyển) từ thiết bị đầu cuối. Bằng cách này, máy chủ có thể xác định tốc độ truyền thông của thiết bị chuyển đổi dựa trên thông tin ký tự nhận được. Giá trị ASCII của ký tự trả về đầu dòng là 0DH; các giá trị nhận được ở các tốc độ truyền khác nhau được liệt kê trong Bảng 2.
Byte nhận được ở tốc độ truyền khác nhau
Tốc độ truyền (bit/s) Số byte nhận được (Thập lục phân) Tốc độ truyền (bit/s) Số byte nhận được (Thập lục phân)
1200 80 4800 E6
1800 F0 9600 0D
2400 78 19200 F*
3.3 Kiểm soát luồng cổng nối tiếp
Thuật ngữ "luồng" được sử dụng ở đây đề cập đến luồng dữ liệu. Mất dữ liệu thường xảy ra trong quá trình truyền giữa hai cổng nối tiếp. Vì bộ đệm của bộ vi điều khiển có dung lượng hạn chế nên nếu bộ đệm đầy khi nhận dữ liệu, mọi dữ liệu tiếp tục được gửi vào thời điểm đó sẽ bị mất. Điều khiển luồng giải quyết vấn đề này một cách hiệu quả: khi đầu nhận không thể xử lý dữ liệu kịp thời, hệ thống điều khiển luồng sẽ gửi tín hiệu "không nhận", khiến đầu gửi ngừng truyền cho đến khi nhận được tín hiệu "tiếp tục truyền". Do đó, điều khiển luồng quản lý quá trình truyền dữ liệu và ngăn ngừa mất dữ liệu. Hai loại điều khiển luồng thường được sử dụng là điều khiển luồng phần cứng (bao gồm RTS/CTS, DTR/CTS, v.v.) và điều khiển luồng phần mềm (XON/XOFF-tiếp tục/dừng). Phần giải thích sau đây chỉ tập trung vào phương pháp điều khiển luồng phần cứng sử dụng RTS/CTS.
Khi sử dụng phần cứng để điều khiển luồng, các chân RTS và CTS của thiết bị đầu cuối nối tiếp được kết nối với các cổng I/O của bộ vi điều khiển và tín hiệu bắt đầu/dừng được nhận và truyền bằng cách đặt các cổng I/O thành 1 hoặc 0. Thiết bị đầu cuối dữ liệu (chẳng hạn như máy tính) sử dụng RTS để khởi tạo luồng dữ liệu được gửi bởi bộ vi điều khiển, trong khi bộ vi điều khiển sử dụng CTS để bắt đầu và tạm dừng luồng dữ liệu từ máy tính. Để triển khai phương thức bắt tay phần cứng này, cờ cấp-cao và cờ cấp-thấp được đặt trong quá trình lập trình dựa trên kích thước của bộ đệm nhận. Khi lượng dữ liệu trong bộ đệm đạt đến ngưỡng cấp-cao, dòng CTS ở đầu nhận được đặt ở mức thấp (logic 0). Khi chương trình ở đầu truyền phát hiện thấy CTS ở mức thấp, chương trình sẽ dừng truyền dữ liệu cho đến khi lượng dữ liệu trong bộ đệm nhận giảm xuống dưới ngưỡng mức-thấp và CTS được đặt ở mức cao. RTS được sử dụng để cho biết thiết bị nhận đã sẵn sàng nhận dữ liệu hay chưa.
3.4 CÓ THỂ Nhận chương trình con
Định dạng PeliCAN hỗ trợ cả khung tiêu chuẩn và khung mở rộng. Chế độ CAN có thể được cấu hình bằng CDR.7 trong thanh ghi bộ chia xung nhịp (0 cho BasicCAN, 1 cho PeliCAN). Khi nhận dữ liệu CAN, bit FF trong thông tin khung được sử dụng để xác định xem đó là khung tiêu chuẩn hay khung mở rộng và bit RTR được sử dụng để phân biệt giữa khung từ xa và khung dữ liệu. Sau đây là chương trình con CAN nhận:
;//////////////////////////////////////////////////////////////////
;//Nhận dữ liệu CÓ THỂ/Hợp nhất thành định dạng khung với ID 2 byte//
;///////////////////////////////////////////////////////////////////////
QUÉT:
MOV R0, #C_RE ; Địa chỉ bắt đầu của bộ đệm bên trong của vi điều khiển
MOV DPTR, #RXBUF ; Đọc và lưu nội dung của bộ đệm nhận
MOVX A, @DPTR ; Đọc byte thứ hai của bộ đệm CAN
MOV @R0, A ; Cứu
JB ACC.7, EFF_RE ; Bit FF: 0=SFF, 1=EFF
MOV R2, #0
SJMP SFF_RE ; Tùy thuộc vào số ID, vị trí ghi "byte dữ liệu" sẽ khác nhau
EFF_RE: MOV R2, #2
SFF_RE: MOV R2, #2
SFF_RE:
JB ACC.6, EXIT_RECAN ; Kiểm tra bit RTR; nếu 1 (khung từ xa), nhảy ra ngoài
ANL A, #0FH
MOV R3, A ; Tại thời điểm này, 4 bit ở giữa biểu thị độ dài dữ liệu
MOV C_NUM, A ; Lưu trữ độ dài của khung nhận được trong R3 và R5
RDATA0:
INC DPTR ; ID 2 byte
INC R0
MOVX A, @DPTR
MOV @R0, A
INC DPTR
MOVX A, @R0, A
INC DPTR
MOVX A, @DPTR
MOV @R0, A
MOV A, R2 ; Nếu là EFF, hãy bỏ qua ID hai{1}}byte
JZ DRATA1
INC DPTR
INC DPTR
DỮ LIỆU1: ; Byte dữ liệu
INC DPTR
INC R0
MOVX A, @DPTR
MOV @R0, A
DJNZ R3, RDATA1
EXIT_RECAN:
RET
4 Kết luận
Việc thu nhỏ máy tính đã cung cấp các điều kiện cần thiết cho sự phát triển thông minh của các công cụ đo lường và điều khiển, cho phép các thiết bị đầu cuối dựa trên bộ vi xử lý{0}}có khả năng giao tiếp kỹ thuật số vượt trội. Với sự xuất hiện ngày càng nhiều của thiết bị đầu cuối thông minh, nhu cầu ngày càng cao hơn về kiến trúc mạng, giao thức, hiệu suất-thời gian thực cũng như khả năng ứng dụng, tính linh hoạt, độ tin cậy và thậm chí cả chi phí. Do đó, công nghệ fieldbus hứa hẹn sự phát triển lớn trong tương lai. Cấu trúc khung của bus CAN bao gồm mã nhận dạng (ID), cho phép có nhiều máy chủ mạng trong mạng thiết bị; nghĩa là, thông qua các máy chủ mạng này, trạng thái hoạt động của toàn bộ mạng thiết bị có thể được giám sát và có thể đưa ra các quyết định kiểm soát tương ứng. Thiết bị này hiện đã được phát triển hoàn chỉnh và đạt được kết quả xuất sắc trong ứng dụng thực tế.




