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.