พื้นหลัง
ฉันกำลังพัฒนาโครงการที่ต้องการรายละเอียดของไมโครคอนโทรลเลอร์ขนาดเล็กของ:
- 8 ADCs 12 บิต, 10kHz
- RAM ขนาด 1kB
- 48-QFN หรือมีขนาดเล็กกว่า
- โปรโตคอลการสื่อสารที่ป้องกันเสียงรบกวนและแก้ไขข้อผิดพลาด 20kbps
ข้อกำหนดการประมวลผลสัญญาณค่อนข้างต่ำและส่วนใหญ่สามารถส่งออกไปยังตัวประมวลผลหลักในระบบ สามคุณสมบัติแรกนั้นง่ายต่อการตอบสนองและสามารถทำได้ในปริมาณที่น้อยกว่า $ 2 อย่างไรก็ตามการสื่อสารจะเกิดขึ้นในสภาพแวดล้อมที่มีเสียงดังมากดังนั้นเครือข่ายที่มีเสียงดังเช่น LIN และ I2C จึงไม่ทำงาน ข้อโต้แย้งเพิ่มเติมต่อ LIN คือฉันต้องการเรียกใช้ทั้งหมดที่ 5V หรือ 3.3V และตัวรับส่งสัญญาณ LIN ต้องการ 12V และต้องมีตัวควบคุมเพิ่มเติมหรือสายต่อบอร์ดเซ็นเซอร์ ตอนแรกฉันเลือก CAN สำหรับงานนี้ อย่างไรก็ตามคอนโทรลเลอร์สามารถเพิ่มค่าใช้จ่ายได้เป็นอย่างมากและฉันอยากรู้ว่าซอฟต์แวร์นี้สามารถทำได้หรือไม่
CAN Physical Layer
ข้อมูลจำเพาะของ CAN จะกำหนด Data Link และ Physical Layer ของโมเดลอ้างอิงเครือข่าย OSI 8-pin ICs ราคาไม่แพงจำนวนมากเช่นNXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551และTI SN65HVD1050มีอยู่เพื่อใช้เลเยอร์ทางกายภาพ การนำเลเยอร์ทางกายภาพมาใช้กับตัวแปลง D / A หรือ op-amps อาจทำได้ยากหากไม่สามารถทำได้ดังนั้นไอซีเหล่านี้จึงมีมูลค่า $ 1 หรือมากกว่านั้น
CAN Data Link / เลเยอร์โปรโตคอล
สำหรับเลเยอร์ดาต้าลิงค์ไมโครคอนโทรลเลอร์บางตัวเพิ่มโมดูลโปรโตคอล CAN ลงบนเลเยอร์การสื่อสาร UART, I2C และ SPI พื้นฐาน อย่างไรก็ตามสิ่งเหล่านี้มีราคาแพงกว่าชิปพื้นฐานอย่างมาก
การตรวจสอบต้นทุนของโมดูลโปรโตคอล CAN
หากต้องการยืนยันการอ้างสิทธิ์ต่อไปนี้เป็นไมโครไซต์ยอดนิยมในรุ่น CAN และรุ่นที่ไม่ใช่ CAN จาก:
- ATmega16 - ATMEGA16M1 (พร้อม CAN): $ 3.87, ATMEGA168A (ไม่สามารถ): $ 3.23
- dsPIC - DSPIC33FJ64MC802 (พร้อม CAN): $ 6.14, DSPIC33FJ64GP202 (ไม่สามารถ): $ 5.48
- PIC18 - PIC18F2480 (พร้อม CAN): $ 6.80, PIC18F24J10 (ไม่สามารถ): $ 2.10
- Cortex-M3 - STM32F103C4T6A (พร้อม CAN): $ 6.50, STM32F100C4T6B (ไม่มี CAN): $ 2.73
เพื่อความเป็นธรรมฉันจะเปรียบเทียบไมโครคอนโทรลเลอร์กับขนาดหน่วยความจำเท่ากันเท่านั้นอย่างไรก็ตามรุ่นที่ไม่สามารถใช้งานได้หลายรุ่นนั้นมีขนาดหน่วยความจำขนาดเล็กให้น้อยลง คอนโทรลเลอร์ CAN ภายนอกเช่นMicrochip MCP2515มีราคาเกือบ 2 ดอลลาร์ดังนั้นจึงเห็นได้ชัดว่าคุ้มค่ากว่าที่จะรวม CAN เข้ากับไมโครคอนโทรลเลอร์ถ้าคุณมีตัวเลือก
ที่น่าสนใจคือส่วน ATmega นั้นเป็นส่วนที่ติดตั้ง CAN ที่ถูกที่สุดในสินค้าคงคลังของ Digikey
หน้าที่ของชั้นโปรโตคอล CAN
โมดูล CAN ที่พบในไมโครคอนโทรลเลอร์ dsPIC ทำสิ่งต่อไปนี้:
โมดูล CAN บัสประกอบด้วยเอ็นจินโปรโตคอลและการบัฟเฟอร์ / ควบคุมข้อความ เอ็นจินโปรโตคอล CAN สามารถจัดการฟังก์ชั่นทั้งหมดสำหรับการรับและส่งข้อความบนบัส CAN ข้อความจะถูกส่งโดยการโหลดการลงทะเบียนข้อมูลที่เหมาะสมก่อน สถานะและข้อผิดพลาดสามารถตรวจสอบได้โดยการอ่านการลงทะเบียนที่เหมาะสม ข้อความใด ๆ ที่ตรวจพบบน CAN บัสจะตรวจสอบข้อผิดพลาดจากนั้นจับคู่กับตัวกรองเพื่อดูว่าควรได้รับและเก็บไว้ในการลงทะเบียนการรับอย่างใดอย่างหนึ่งหรือไม่
ดูเหมือนว่าจะทำได้ในซอฟต์แวร์
คำถาม
เลเยอร์โปรโตคอลซอฟต์แวร์สามารถใช้กับข้อกำหนดของ CAN กับไมโครคอนโทรลเลอร์ที่ติดตั้ง UART ราคาไม่แพงและตัวรับส่งสัญญาณ CAN ได้หรือไม่ ถ้าเป็นเช่นนั้นมีการใช้งานโอเพนซอร์ซอยู่หรือไม่?
อีกวิธีหนึ่งสามารถใช้ตัวรับส่งสัญญาณกับ UART เพื่อใช้โปรโตคอลที่กำหนดเองได้หรือไม่? ฉันตกลงกับโทโพโลยีหลักเดียว ฉันเข้าใจว่าการตัดสินโดยอนุญาโตตุลาการอาจทำได้ยากในโปรโตคอลที่กำหนดเอง