Lý lịch
Tôi đang phát triển một dự án sẽ yêu cầu thông số kỹ thuật vi điều khiển khiêm tốn của:
- 8 ADC 12 bit, 10kHz
- 1kB RAM
- Dấu chân 48-QFN hoặc nhỏ hơn
- Giao thức truyền thông sửa lỗi và chống nhiễu 20kbps
Yêu cầu xử lý tín hiệu khá thấp và hầu hết có thể được xuất sang bộ xử lý chính trong hệ thống. Ba thông số kỹ thuật đầu tiên rất dễ gặp và có thể được thực hiện với số lượng ít hơn 2 đô la. Tuy nhiên, giao tiếp sẽ diễn ra trong một môi trường rất ồn, do đó, các mạng dễ bị nhiễu như LIN và I2C bị loại bỏ. Một lập luận bổ sung chống lại LIN là tôi muốn chạy toàn bộ ở mức 5V hoặc 3.3V, và các bộ thu phát LIN yêu cầu 12V, và do đó sẽ cần thêm bộ điều chỉnh hoặc dây trên mỗi bảng cảm biến. Ban đầu tôi chọn CAN cho nhiệm vụ này. Tuy nhiên, bộ điều khiển CAN thêm chi phí đáng kể và tôi tò mò liệu điều này có thể được thực hiện trong phần mềm hay không.
Lớp vật lý CAN
Đặc tả CAN xác định các lớp Liên kết dữ liệu và Vật lý của mô hình tham chiếu mạng OSI. Nhiều IC 8 chân rẻ tiền, chẳng hạn như NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 và TI SN65HVD1050 tồn tại để thực hiện lớp vật lý. Việc thực hiện lớp vật lý với bộ chuyển đổi D / A hoặc op-amps sẽ rất khó, nếu không nói là không thể, vì vậy những IC này rất đáng giá $ 1 hoặc do đó chúng có giá.
Lớp liên kết / giao thức dữ liệu CAN
Đối với lớp Liên kết dữ liệu, một số bộ vi điều khiển thêm các mô đun giao thức CAN vào các lớp truyền thông UART, I2C và SPI cơ bản. Tuy nhiên, những thứ này đắt hơn đáng kể so với các chip cơ bản.
Điều tra chi phí của các mô-đun giao thức CAN
Để chứng minh cho tuyên bố này, đây là một vài micros phổ biến trong các phiên bản CAN và không CAN, từ:
- ATmega16 - ATMEGA16M1 (có CAN): 3,87 đô la, ATMEGA168A (không CÓ THỂ): 3,23 đô la
- DSPIC - DSPIC33FJ64MC802 (có CAN): 6,14 đô la, DSPIC33FJ64GP202 (không thể CAN): 5,48 đô la
- PIC18 - PIC18F2480 (có CAN): 6,80 đô la, PIC18F24J10 (không thể CAN): 2,10 đô la
- Cortex-M3 - STM32F103C4T6A (có CAN): 6,50 đô la, STM32F100C4T6B (không thể CAN): 2,73 đô la
Công bằng mà nói, tôi chỉ so sánh các bộ vi điều khiển với kích thước bộ nhớ tương đương, tuy nhiên, nhiều phiên bản không thể CAN có sẵn với kích thước bộ nhớ nhỏ hơn với giá rẻ hơn. Các bộ điều khiển CAN bên ngoài, như Microchip MCP2515 , có giá gần 2 đô la, vì vậy rõ ràng sẽ hiệu quả hơn về mặt chi phí khi tích hợp CAN vào vi điều khiển nếu bạn có tùy chọn.
Thật thú vị, phần ATmega cho đến nay là phần được trang bị CAN rẻ nhất trong kho của Digikey.
Chức năng của lớp giao thức CAN
Mô-đun CAN được tìm thấy trong các bộ vi điều khiển DSPIC thực hiện như sau:
Mô-đun bus CAN bao gồm một công cụ giao thức và bộ đệm / điều khiển thông báo. Công cụ giao thức CAN xử lý tất cả các chức năng để nhận và truyền tin nhắn trên bus CAN. Tin nhắn được truyền bằng cách tải đầu tiên các thanh ghi dữ liệu thích hợp. Tình trạng và lỗi có thể được kiểm tra bằng cách đọc các thanh ghi thích hợp. Bất kỳ thông báo nào được phát hiện trên bus CAN đều được kiểm tra lỗi và sau đó khớp với các bộ lọc để xem liệu nó có nên được nhận và lưu trữ trong một trong các thanh ghi nhận không.
Điều này có vẻ khá khả thi trong phần mềm.
Câu hỏi
Một lớp giao thức phần mềm có thể được sử dụng để thực hiện đặc tả CAN chỉ với một bộ vi điều khiển được trang bị UART rẻ tiền và bộ thu phát CAN không? Nếu vậy, có bất kỳ triển khai nguồn mở nào tồn tại không?
Ngoài ra, bộ thu phát CAN có thể được sử dụng với UART để thực hiện giao thức tùy chỉnh không? Tôi ổn với cấu trúc liên kết đơn chủ; Tôi hiểu rằng trọng tài có thể khó có được ngay trong một giao thức tùy chỉnh.