MCP2551 เป็นตัวแปลง UART-to-CAN หรือไม่


12

ฉันต้องการสร้าง CAN บัสดมกลิ่น 250 kbit / s โดยใช้คอมพิวเตอร์ของฉัน หลังจากการวิจัยบางอย่างฉันพบว่าMCP2551เป็นตัวปรับแรงดันไฟฟ้าระดับหนึ่งสำหรับเลเยอร์ทางกายภาพของ CAN โปรดระลึกไว้เสมอว่าฉันสงสัยว่าการตั้งค่านี้สามารถใช้งานได้หรือไม่ ฉันแค่ต้องการบันทึกข้อความที่แลกเปลี่ยนเพื่อการทดสอบอัตโนมัติไม่ใช่ส่วนหนึ่งของการสื่อสาร:

PC <-> USB-UART (อาจเป็น CP2102 เพราะฉันมีอยู่แล้ว) <-> MCP2551 <-> CAN บัส

หากไม่มีสัญญาณประเภทใดที่จะต้องเข้าสู่ MCP2551 เพื่อให้ฉันเป็นส่วนหนึ่งของรถบัส

คำตอบ:


14

คุณสามารถทำได้ แต่สิ่งที่คุณจะได้รับจาก CAN บัสของคุณคือ UART โดยใช้ระดับแรงดันไฟฟ้าของ CAN คุณต้องระบุ MCP2551 ด้วยข้อความโปรโตคอล CAN หากคุณต้องการสื่อสารกับอุปกรณ์ CAN บนบัสของคุณ ฟังเหมือนกัน: ข้อความ CAN แตกต่างจากรูปแบบ UART ซึ่ง UART จะไม่รู้ว่าต้องทำอย่างไรกับข้อความเหล่านั้น คุณจะมีข้อผิดพลาดเฟรมอย่างน้อยตลอดเวลาและคุณจะไม่ได้รับเนื้อหาของข้อความ
ภาพนี้แสดงโครงสร้างของข้อความ CAN:

ป้อนคำอธิบายรูปภาพที่นี่

มีไมโครคอนโทรลเลอร์มากมายรอบ ๆ ที่มีอินเตอร์เฟซที่สามารถของซองส่งสัญญาณ สำหรับสิ่งเหล่านี้ที่ MCP2551 ได้รับการออกแบบ ในอดีตเราเคยใช้ NXP LPC2294 ซึ่งมีอินเตอร์เฟส 4 CAN แต่ละคนต้องการ MCP2551 เพื่อเชื่อมต่อกับ CAN บัส ตัวควบคุมล่าสุดจาก NXP รวมถึงตระกูลLPC1800ซึ่งสมาชิกทั้งหมดสนับสนุน CAN


ฉันลืมเกี่ยวกับ UART เริ่ม / หยุดบิตทั้งหมดและบางสถานการณ์อาจ "เริ่มต้น / หยุดบิตสูงสุด" ฉันอาจจะพยายามหาวิธีแก้ปัญหาโดยใช้ CAN stack บนพีซีโดยใช้ FTDI เป็น gpio ที่จะส่งสัญญาณไปยัง MCP2551
rnunes

3
@rnunes - ไม่ใช่เพียงแค่บิตเริ่มต้น / หยุด หากไม่มีการส่งสัญญาณ UART เพียง 8 บิต ข้อความ CAN มีความซับซ้อนมากยิ่งขึ้นด้วยการตรวจสอบที่อยู่ลำดับความสำคัญและการตรวจสอบข้อผิดพลาด คุณไม่สามารถเปรียบเทียบทั้งสอง
stevenvh

แต่การใช้ FTDI ฉันจะทำงานทีละนิด (โดยทั่วไปมันเป็น USB ที่เร็วมาก <-> GPIO) ไม่ใช่ไบต์ต่อไบต์เหมือนกับ UART ฉันกำลังมองหา CAN MCU เหล่านั้นอยู่แล้ว แต่ฉันต้องการใช้เงินตอนนี้ (เป็นโครงการงานอดิเรกของนักเรียน) และฉันมี FTDI แล้ว ถ้าฉันสรุปกับงานวิจัยของฉันว่า FTDI ไม่สามารถทำได้ฉันจะลองใช้ CAN MCU
rnunes

สแต็กจะรับผิดชอบการจัดการทุกอย่าง (เช่นการบรรจุบิต) และส่งแบบทีละนิดถึง MCP2551 ปัญหาเดียวที่ฉันมีตอนนี้คือเวลาแฝง FTDI เพราะฉันต้องการให้มันเร็วและเป็นปกติ แต่ฉันจะวัดในภายหลัง
rnunes

1
@rnunes - แต่สิ่งที่มาจาก CP2102 (SiLabs ไม่ใช่ FTDI) คือไบต์ไม่ใช่บิต คุณไม่สามารถหยุดมันได้หลังจากหนึ่งบิต คุณจะต้องมีทั้ง CP2102 เพื่อเชื่อมต่อไมโครคอนโทรลเลอร์กับ USB และไมโครคอนโทรลเลอร์ที่รองรับ CAN + the MCP2551 หรือไมโครคอนโทรลเลอร์ซึ่งยังสามารถทำหน้าที่เป็นอุปกรณ์ USB จากนั้นคุณไม่จำเป็นต้องใช้ CP2102
stevenvh

7

ฉันสร้างอินเตอร์เฟส USB / CAN โดยใช้ FT2232H ในโหมด MPSSE (ลืม UART), MCP2515และ MCP2551 MCP2515 เป็นส่วนสำคัญที่คุณพลาดไม่ได้ที่นี่ ศึกษาให้ดีว่ามันทำอะไร มันเป็นคอนโทรลเลอร์ CAN ที่แท้จริงที่ทำเฟรม ACKs การตรวจสอบการสร้างและการตรวจสอบการกรองข้อความและสิ่งอื่น ๆ ที่ไม่ชัดเจนที่โหนด CAN จำเป็นต้องทำตามมาตรฐาน หากคุณต้องการดมกลิ่น MCP2515 มีโหมดฟังอย่างเดียวซึ่งรับประกันว่าจะไม่มีการส่งสัญญาณบนรถบัส MCP2551 เป็นเพียงอะแดปเตอร์เลเยอร์ที่โง่เง่าคล้ายกับ MAX232 สำหรับ RS-232 หรือ ADM485 สำหรับ RS-485

ตอนนี้สถาปัตยกรรมนี้ยังไม่สมบูรณ์แบบเนื่องจากเทคโนโลยี FTDI MPSSE ไม่สนับสนุนการขัดจังหวะ (ฉันเชื่อว่ามันใช้การถ่ายโอน USB จำนวนมากเบื้องหลังเท่านั้น) ดังนั้นฉันต้องสำรวจตัวควบคุมบ่อยๆสำหรับข้อความใหม่ มีการโหลดจำนวนมากบนคอนโทรลเลอร์โฮสต์ USB แต่ยังไม่รับประกันว่าจะไม่มีข้อความใดหายไป (MCP2515 สามารถจัดเก็บข้อความที่ได้รับมากถึง 2 ข้อความภายในหากคุณเปิดใช้งาน "โหมดโอเวอร์โฟลว์" เพียงครั้งเดียวหากคุณไม่ทำ) ทางออกที่ดีกว่านั้นคือไมโครคอนโทรลเลอร์ที่เหมาะสมซึ่งมี builtin CAN และอุปกรณ์ต่อพ่วง USB เช่น STM32F105 (103 ไม่สามารถใช้ USB และ CAN ได้ในเวลาเดียวกัน) ดูโครงการนี้สำหรับการนำความคิดนี้ไปใช้งานจริง LPC18xx ตามที่ stevenh แนะนำก็จะใช้ได้เช่นกัน แต่ LPC17xx อาจถูกกว่าและหาง่ายกว่า


ในกรณีนี้การรวมกันไม่ใช่ปัญหา แต่ใช่ทางออกที่ดีที่สุดคือการใช้ MCU พร้อมคอนโทรลเลอร์ CAN ที่ทำงานเป็นบัฟเฟอร์ข้อความ CAN จากนี้ไปฉันจะลองใช้การตั้งค่าแรกที่คุณเขียน ขอบคุณ
rnunes

+1 การใช้ชิป FTDI เพื่อพูดคุยกับคอนโทรลเลอร์ CAN โดยตรงโดยไม่ต้องใช้ uC นั้นเป็นระเบียบ FTDI ออกมาอย่างชัดเจน FT221X ซึ่งเป็น USB เฉพาะสำหรับสะพาน SPI (มีรูปแบบที่แตกต่างกันสำหรับ USB ไปยัง I2C ด้วย)
Nick Alexeev

2

เนื่องจากคุณต้องการฟังใน CAN บัสที่มีอยู่ในขณะที่ฉันเข้าใจคำถามคุณไม่สามารถใช้ UART ได้เลย CAN และ UART siganlling นั้นแตกต่างกันโดยสิ้นเชิง

ในทางทฤษฎีคุณสามารถดูที่บรรทัดรับ CAN ที่ออกมาจาก MCP2551 และถอดรหัสการรับส่งข้อมูล CAN นั่นไม่ใช่เรื่องง่าย แต่เป็นไปได้ในทางทฤษฎี หากไม่มีฮาร์ดแวร์ CAN เฉพาะคุณต้องสุ่มตัวอย่างเร็วกว่าอัตราบิต CAN และถอดรหัสบิตสตรีมในซอฟต์แวร์ในภายหลัง คุณอาจต้องบันทึกที่ประมาณ 1 Mbit / s เพื่อถอดรหัส 250 kbit / s CAN

การใช้ไมโครคอนโทรลเลอร์จะง่ายกว่ามาก PIC 18F2580 และโปรเซสเซอร์อื่น ๆ ที่คล้ายคลึงกันมีอุปกรณ์ต่อพ่วงแบบ CAN ในตัวฮาร์ดแวร์ทำการถอดรหัสระดับบิตทั้งหมดและรับเฟรม CAN ทั้งหมด โปรเซสเซอร์สามารถส่งเฟรม CAN ที่ได้รับผ่าน UART ไปยังพีซีของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.