การรับสัญญาณเอาต์พุตดิจิตอลจำนวนมาก (~ 100) จาก Arduino


19

ฉันต้องการที่จะสามารถควบคุมประมาณ 100 ไฟ LED ที่เป็นอิสระโดยใช้ Arduino ปัญหาคือว่า Arduino ไม่มีพินที่เกือบพอที่สามารถกำหนดค่าสำหรับสิ่งนี้ อะไรจะเป็นวิธีในการแก้ปัญหานี้? มีชิปที่สามารถ demux สัญญาณที่ซับซ้อนกว่าจาก Arduino ที่สามารถควบคุมไฟ LED ได้หรือไม่? หรือมีวิธีแก้ไขปัญหาอื่น


ข้อกำหนดอัตราการรีเฟรชของคุณคืออะไร? เท่าไหร่ปัจจุบันดึงต่อ LED?
vicatcu

อัตราการรีเฟรชประมาณ 1 วินาที คิดประมาณ 8ma ต่อ LED จะใช้พลังงานจากอะแดปเตอร์ภายนอกไม่ใช่ Arduino
Alexis K

มีวิธีแก้ปัญหาแบบหลายวิธี แต่พิจารณาความซับซ้อนของงานของคุณ อัลกอริทึมที่คุณต้องการสร้างข้อมูลให้เหมาะสมภายในข้อ จำกัด ของ mcu ของ Arduino หรือไม่ งานบางอย่างจะทำบางงานจะไม่หรือจะผ่านการออกแบบสร้างที่สามารถสร้างความพึงพอใจให้กับการสร้าง แต่อาจทำให้การบำรุงรักษารหัสมีความท้าทาย
Chris Stratton

คำตอบ:


22

ก่อนอื่น Arduino ไม่สามารถขับ 100 LED ได้โดยตรงเนื่องจากกระแสรวมที่อุปกรณ์ต้องมาหรือจมจะเกินไมโครคอนโทรลเลอร์และตัวควบคุมแรงดันไฟฟ้าบนบอร์ด Arduino Arduino Shield ที่กำหนดเองพร้อมแหล่งพลังงานและกฎข้อบังคับของตัวเองอาจเหมาะสมกับค่าใช้จ่าย

มีวิธีง่าย ๆ หลายวิธีที่ง่ายที่สุดมีรายละเอียดด้านล่าง:


  • TLC5940ไดรเวอร์ LED คงที่ในการกำหนดค่าแบบเรียงซ้อน:

TLC5940 ขับ 16 LEDs ต่อ IC ควบคุมโดยอินพุตแบบอนุกรมผ่านอินเตอร์เฟส SPI เล็กน้อย สามารถเชื่อมต่ออุปกรณ์ TLC5940 ได้สูงสุด 40 เครื่อง แต่อุปกรณ์ 7 ตัวนั้นเพียงพอสำหรับการขับเคลื่อน LED 100 ดวงในคำถาม

มีอย่างน้อยสองไลบรารี Arduino ( 1 , 2 )สำหรับ TLC5940

อัตรานาฬิกาที่แนะนำให้ส่งจาก Arduino และอัตราการรีเฟรชที่สอดคล้องกัน:

  • 1 MHz GSClk โดยใช้รหัสในหัวข้อนี้
  • 330 KHz SCLK (นาฬิกาข้อมูลอนุกรม)
  • ดังนั้นอัตราการรีเฟรชข้อมูล LED 244 Hz

สิ่งนี้ขึ้นอยู่กับสูตรจากแผ่นข้อมูล:

f (GSCLK) = 4096 * f (อัปเดต)
f (SCLK) = 193 * f (อัปเดต) * n
โดยที่:
f (GSCLK): ความถี่ขั้นต่ำที่จำเป็นสำหรับ GSCLK
f (SCLK): ความถี่ขั้นต่ำที่จำเป็นสำหรับ SCLK และ SIN
f ( อัปเดต): อัตราการอัปเดตของระบบเรียงซ้อนทั้งหมด
n: หมายเลขเรียงซ้อนของอุปกรณ์ TLC5940

TLC5940 เป็นsinkกระแสคงที่ดังนั้น anodes ของไฟ LED จะถูกผูกไว้กับแรงดันไฟฟ้าสองโวลต์ที่สูงกว่า LED Vf หรือประมาณ 7 โวลต์แล้วแต่จำนวนใดจะต่ำกว่าขับเคลื่อนด้วยหมุดพลังงานของ Arduino แหล่งจ่ายแรงดันนี้ต้องสามารถจ่ายได้ 100 * (ไม่ว่าคุณจะเรียกใช้ LED ที่กระแสใดก็ตาม) แต่สามารถเป็นแหล่งที่ไม่มีการควบคุม

แคโทด LED ไปที่เส้นทางขับของไอซี TLC5940 ที่เกี่ยวข้อง

TLC5940 กินไฟสูงสุดถึง Icc = 60 mA ต่ออุปกรณ์ในระหว่างการเขียนข้อมูลดังนั้นการเปิดใช้งาน 7 ตัวจาก Arduino ไม่ทำงานนั้นจะต้องใช้ Vcc แบบควบคุม 3.3 ถึง 5 โวลท์ซึ่งเป็นค่าเดียวกับ การใช้ Vcc ของ Arduino และร่องรอยภาคพื้นดินจำเป็นต้องเชื่อมต่อกลับไปที่พื้นดินของ Arduino แน่นอน การใช้งานชิ้นส่วน TLC ที่แรงดันไฟฟ้าที่แตกต่างจาก Arduino จะทำให้ความต้องการการแปลงระดับของสัญญาณอนุกรมจึงหลีกเลี่ยงได้ดีที่สุด

วิดีโอ YouTubeจำนวนมากแสดงให้เห็นถึงการใช้ Arduino ด้วยไอซี TLC5940 แบบเรียงซ้อน


แม้ว่า IC เหล่านี้ได้รับการออกแบบมาสำหรับการขับเคลื่อนจอแสดงผล LED ตัวเลข 7 เซ็กเมนต์ แต่ก็มีการควบคุม LED แต่ละตัวดังนั้นจึงสามารถใช้งานได้ถึง 64 LED ต่อ IC สามารถต่อกันสองหลอดเพื่อขับเคลื่อน LED ที่ต้องการ 100 ดวง หน้า 13 ของแผ่นข้อมูลแสดงการกำหนดค่าแบบเรียงซ้อน

ไฟ LED จะต้องมีการเชื่อมต่อทางไฟฟ้าเป็นกลุ่มสูงถึง 8 LEDs แต่ละการแบ่งปันหนึ่งบรรทัดแคโทด (แคโทดทั่วไป) สำหรับการออกแบบนี้

MAX7219 / 7221 เป็นไดรเวอร์ LED แบบมัลติเพล็กซิ่งดังนั้นความสว่างสูงสุดของ LED จะต่ำกว่าไดรเวอร์ LED แบบคงที่เช่นส่วนก่อนหน้า

นี่คือไลบรารีเมทริกซ์ LED ที่มีประโยชน์และคำแนะนำการใช้ MAX7219

วิดีโอ YouTube ที่เกี่ยวข้องบางรายการ ( 1 , 2 ) อาจเป็นที่สนใจ


อีกครั้งที่ไอซีเหล่านี้ถูกออกแบบมาเพื่อขับเคลื่อนจอแสดงผล LED ตัวเลข 7 เซกเมนต์พวกเขาให้การควบคุม LED แต่ละตัวดังนั้นจึงสามารถใช้งานได้ถึง 40/64 ไฟ LED ต่อ IC สองในสามของพวกเขาสามารถเชื่อมต่อกับ Arduino SPI บัสเพื่อขับเคลื่อน 100 LED ที่จำเป็น

บันทึกการออกแบบยังคงเหมือนเดิมในส่วนก่อนหน้า นอกจากนี้ความสว่างสูงสุดของ LED แต่ละตัวจะต่ำกว่าสำหรับการออกแบบมัลติเพล็กซ์แบบตรงของ MAX7219

มีวิดีโอ YouTubeบางรายการที่อาจเป็นที่สนใจ


  • การออกแบบส่วนประกอบแบบแยก, รีจิสเตอร์ shift, ตัวขยาย IO, แถบ LED แบบ cuttable พร้อมคอนโทรลเลอร์แต่ละตัวและอีกมากมาย ...

นี่คือวิธีการทั้งหมดที่ใช้กับระดับความเรียบง่ายและความสำเร็จที่แตกต่างกัน มันมีการใช้งานที่ซับซ้อนกว่า 3 แนวทางข้างต้นดังนั้นจึงไม่มีรายละเอียดเพิ่มเติม การค้นหาเว็บจะให้คำแนะนำที่เป็นประโยชน์สำหรับแนวทางเหล่านี้หากจำเป็น

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

ฉันไม่ได้มีประสบการณ์ส่วนตัวกับตัวเลือกชุดล่าสุดดังนั้นจึงไม่สามารถช่วยอะไรได้มาก


เชิงอรรถ:หลังจากตอบคำถามนี้ฉันพบคำถามที่เก่ากว่าซึ่งมีคำตอบโดยละเอียดและอภิปรายหลายแนวทางในหัวข้อสุดท้ายของฉัน หัวข้อนั้นทำให้ "การอ่านเพิ่มเติมเป็นการบ้าน" ที่น่าสนใจ



1
การลงทะเบียนการเปลี่ยนแปลงที่ไม่แพงเช่น 74HC595?
โทมัสอี

Max5951 มี "การควบคุม LED แบบแยกส่วน" อย่างไร - ดูเหมือนว่าจะมีการควบคุม 7 ส่วนเท่านั้น (8 พินสำหรับ 8 หลัก) ไม่ใช่?
โทมัสอี

ใช่เหล่านั้นด้วย ต้องการตัวต้านทานจำนวนมากเพื่อปกป้อง LED และจากนั้นสายไฟที่ซับซ้อนเมื่อเทียบกับ IC ที่สร้างขึ้นตามวัตถุประสงค์
Anindo Ghosh

@ThomasE ไม่: "MAX6950 ไดรฟ์ถึง 7 หลักห้าส่วนหรือ 40 LED ที่แยกจากกัน MAX6951 ไดรฟ์สูงสุด 7 หลัก 7 ส่วนหรือ 64 LED ที่ไม่ต่อเนื่อง" มีเพียงแค่ขอกลุ่ม LED 8 ดวงแต่ละกลุ่มเข้ากับหนึ่งบรรทัด Cathode ดังที่อธิบายไว้ในส่วน MAX7219 ของคำตอบของฉัน
Anindo Ghosh

2
@ starblue Overkill v / s ใช้งาน DIY ได้ง่าย : สำหรับความพยายามครั้งเดียวหรืองานอดิเรก TLC5940 ($ 3.78 ในปริมาณเดียวที่ DigiKey) จะไม่แก้ปัญหาที่ง่ายที่สุดเพราะห้องสมุด Arduino และการสนับสนุนที่ใช้งานอยู่ในชุมชน Arduino หรือไม่? เว้นแต่จะมีชิ้นส่วนที่ได้รับการสนับสนุนอย่างเท่าเทียมกันเช่นคุณชี้ให้เห็นว่าบอร์ด Arduino นั้นชอบ
Anindo Ghosh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.