การแปลง I2C 3.3 เป็น 5.0 V


35

ฉันพยายามเชื่อมต่ออุปกรณ์ 3.3VI 2 C กับ 5V Arduino

ฉันไม่มีปัญหากับสาย SCL ฉันสามารถใช้ตัวแบ่งแรงดันไฟฟ้าแบบง่าย ๆ แต่ฉันมีปัญหากับสาย SDA เนื่องจากนี่เป็นแบบสองทิศทาง

ฉันไม่แน่ใจว่าจะจัดการเรื่องนี้อย่างไร แม้ว่าฉันจะมีการเพิ่มไดโอดคู่หนึ่งโดยมีตัวแบ่งแรงดันไฟฟ้าที่ด้านอินพุตของทาสและไม่มีอะไรเพิ่มเติมในอินพุตหลัก

มีวิธีแก้ไขปัญหาอื่น ๆ อีกไหม?


ผู้อ่านในอนาคตควรทราบว่าแม้ว่า OP อาจใช้ SCL ในทิศทางเดียวเท่านั้น แต่ I2C โดยทั่วไปจะอนุญาตให้ SCL เป็นแบบสองทิศทาง
โฟตอน

คำตอบ:


25

เอกสารที่ดีเกี่ยวกับเรื่องนี้คือตัวเปลี่ยนระดับแบบสองทิศทางสำหรับ I2C บัสและระบบอื่น ๆซึ่งใช้มอสเฟตตัวเดียวเป็นตัวเปลี่ยนระดับแบบสองทิศทาง


ฉันชอบวงจรฟิลิปส์ ฉลาด. มันอาจจะดีกว่าถ้าเอาท์พุท I2C ไม่ต้องจมกระแสทั้งหมดจาก pull-ups ทั้งหมด แต่การออกแบบ I2C repeater ที่ใช้งานยาก ฉันไม่คิดว่ามันจะสามารถทำได้ด้วยตรรกะปกติเนื่องจากตัว repeater จะต้องสามารถตรวจจับขอบที่เพิ่มขึ้นและตอบสนองต่อมันก่อนที่อุปกรณ์ I2C ใด ๆ จะสามารถทำได้
supercat

2
ลิงค์ตาย!
Zimano

14

เพื่อขยายคำตอบของ sivu นี่คือการใช้งานทั่วไปสำหรับสิ่งที่เรียกว่า "บัสสวิตช์" ซึ่งเป็นมอสเฟตที่ควบคุมโดยตรรกะ การใช้ MOSFET แบบแยกนั้นมีข้อเสียบางประการ (ความสามารถในการกาฝาก / การมีเพศสัมพันธ์แบบคาปาซิทีฟ) และมันอาจเป็นเรื่องยากที่จะเลือก MOSFET ที่ดี สวิตช์บัสถูกปรับให้เหมาะสมสำหรับใช้ในวงจรตรรกะความเร็วสูง

ผู้ผลิตหลายรายทำให้พวกเขารวมถึง Fairchild, TI, IDT และ Pericom ลองดูที่ที่NC7SZ384

ดูคำอธิบายประกอบต่อไปนี้และอื่น ๆ :


8

Arduino หลายตัวมีออนบอร์ดรองรับที่ 3.3 โวลต์ที่จริงแล้วทุกตัวสามารถรันที่ 3.3 V และวงจรชิพ FTDI อธิบายวิธีในตัวอย่าง Paul ผู้สร้างTeensy USB Arduinoแนะนำว่าฉันสามารถต่อสาย USB เปิดและจ่ายแรงดันไฟฟ้า 3.3 V แทนสายCC CCได้ คุณสามารถลองสิ่งนี้ แต่ยังมีตัวเลือกอื่น ๆ

  1. ตรวจสอบระดับตรรกะสำหรับ Arduino ฉันเชื่อว่าพวกเขารองรับ 3.3 V เป็นลอจิก HIGH แม้ใน Atmel 5 V ที่มา บทความ SparkFunระบุว่า: "* การเชื่อมต่อพินเอาต์พุตแบบดิจิตอล 3.3 โวลต์เข้ากับพินอินพุต 5 โวลต์มักจะตรงไปตรงมาอุปกรณ์ส่วนใหญ่ค่อนข้างทนต่อแรงดันไฟฟ้าขั้นต่ำที่พวกเขาจะยอมรับว่าเป็นค่าดิจิตอลสูงตัวอย่างไมโครคอนโทรลเลอร์ Atmel ยอมรับอะไรก็ตามที่สูงกว่า 0.6 * V CCสูงดังนั้นอุปกรณ์ 3.3 V จะต้องส่งออกในระดับที่สูงกว่า 3 V (0.6 * 5 V) * "
  2. ซื้อโคลน Arduino หนึ่งอันที่มีตัวเลือกจัมเปอร์ 3.3 V และ 5 V ฉันใช้Cloan RBBBซึ่งฉันได้ตั้งค่าสายอุปทาน FTDI ชิเป็น 3.3 V แต่มีอีกหลายตัวที่มีตัวเลือกการกำหนดค่าจริง 3.3 V รวมถึงหนึ่งใน Arduinos อย่างเป็นทางการเมื่อฉันจำได้ถูกต้อง นอกจากนี้คุณยังสามารถใช้ teensy USB ที่มีปลั๊กอิน Arduino ของเขาและทำตามคำแนะนำในเว็บไซต์ของเขาในการติดตั้งใช้งาน 3.3 V ควบคุม
  3. ต่อสาย USB และให้คุณภาพแหล่งจ่ายไฟในห้องปฏิบัติการ 3.3 แหล่งจ่าย V แทนสาย V CCของสาย USB มันควรจะเป็นกระแสต่ำตามที่เปาโลแนะนำ ดังนั้นแหล่งกำเนิดแรงดันไฟฟ้าคุณภาพดี คุณสามารถใส่แบตเตอรีสองก้อนในซีรีย์เพื่อรับแรงดันไฟฟ้าที่ต้องการ
  4. หากคุณสนใจฉันสามารถลองตรวจสอบแผนผังของ Arduino ของคุณและบางทีอาจเป็นไปได้ที่จะทำการเปลี่ยนแปลงการกำหนดค่า FTDI ที่จะอนุญาตสำหรับ 3.3 V.

สุดท้ายเรามีการสนทนาที่คุณอาจสนใจเกี่ยวกับเรื่องนี้ที่นี่ใน Chiphacker เกี่ยวกับการแก้ปัญหาทิศทางเดียวและสองทิศทางสำหรับการลดแรงดันไฟฟ้า บทความเกี่ยวกับ SparkFun ที่กล่าวถึงโดย todbot นี้มีประโยชน์เช่นเดียวกับการอภิปรายเกี่ยวกับบทความMOSFET ที่แก้ไขได้ซึ่งเชื่อมโยงจาก SparkFun ในการสรุปบทความ SparkFun:

  • ตัวต้านทานแบบอินไลน์ ทิศทางเดียว ลดขั้นตอนเท่านั้น - ลดกระแส, ไอซี / ไดโอดของไอซีโอแคลมป์สามารถ จำกัด อินพุตสูงสุด
  • ตัวต้านทานแบบอนุกรม ทิศทางเดียว ขั้นตอนลงเท่านั้น แต่ละเอียด
  • ไดโอด. ทิศทางเดียว หลีกทาง. ปลอดภัยมากขึ้น สูงจาก 5 V บล็อกไดโอด; 3.3 โวลต์ด้านแล้วผูกให้สูง แต่ถ้าคุณย้อนกลับการกำหนดค่าไดโอด
  • MOSFET สองทิศทาง ลดขั้นตอนหรือลดขั้นตอน
  • ในความคิดเห็น: ตัวอย่างการแยกด้วยแสง: 4N25 กระแสสูง
  • ในความคิดเห็น: ตัวอย่างไดโอดซีเนอร์: 1N4728A
  • ในความคิดเห็น: 74HC244 / 125 ทิศทางเดียว

6

มีไอซีสำหรับการเลื่อนระดับ I2C เป็นพิเศษ:

ฉันไม่ทราบว่าคุณมีข้อ จำกัด อะไรบ้างในการออกแบบของคุณ แต่ฉันคิดว่าการใช้ IC เฉพาะจะง่ายขึ้นแล้วมาหาคำตอบของคุณเอง

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