Arduino'dan çok sayıda (~ 100) dijital çıkış sinyali alma


19

Bir Arduino kullanarak yaklaşık 100 bağımsız LED'i kontrol edebilmek istiyorum. Sorun, Arduino'nun bunun için yapılandırılabilecek neredeyse yeterli pime sahip olmamasıdır. Bu sorunu çözmenin bir yolu ne olabilir? Arduino'dan LED'leri kontrol edebilecek daha karmaşık bir sinyali çıkarabilecek bir çip var mı? Yoksa başka bir çözüm var mı?


yenileme hızı gereksinimleriniz nelerdir? LED başına ne kadar akım çekiyor?
vicatcu

yenileme hızı yaklaşık 1 saniyedir. LED başına 8ma düşünüyor. Harici adaptör ile güçlendirilecek - Arduino değil
Alexis K

Çok sayıda çoğullama çözme çözümü vardır. Ancak görevinizin karmaşıklığını düşünün; Verileri oluşturmak için ihtiyaç duyduğunuz algoritma Arduino'nun mcu kısıtlamaları dahilinde olacak mı? Bazı görevler olacaktır, diğerleri sadece oluşturmayı oldukça tatmin edici olabilecek ancak kod bakımını zorlaştırabilecek tasarımlar yaratmaya uygun olmayacaktır.
Chris Stratton

Yanıtlar:


22

İlk önce, bir Arduino doğrudan 100 LED'i çalıştıramaz, çünkü cihazın kaynaklanması veya batması gereken kombine akım hem mikro denetleyiciyi hem de Arduino kartındaki voltaj regülatörünü aşacaktır. Yine de, kendi güç kaynağı ve düzenlemesi olan özel bir Arduino Shield , faturaya uyabilir.

Birkaç kolay yaklaşım vardır, en basit yaklaşım aşağıda detaylandırılmıştır:


  • Kademeli konfigürasyonda TLC5940 sabit akım LED sürücüsü:

TLC5940, bir SPI arabiriminin hafif bir varyantı aracılığıyla seri giriş tarafından kontrol edilen IC başına 16 LED kullanır. En fazla 40 TLC5940 cihazı basamaklandırılabilir, ancak bunlardan 7'si söz konusu 100 LED'i çalıştırmak için yeterli olacaktır.

TLC5940 için en az birkaç Arduino kütüphanesi ( 1 , 2 ) vardır .

Arduino'dan göndermek için önerilen saat hızları ve karşılık gelen yenileme hızı:

  • Bu iş parçacığında kod kullanarak 1 MHz GSClk .
  • 330 KHz SCLK (seri veri saati)
  • Böylece, LED veri yenileme hızı 244 Hz

Bu, veri sayfasındaki formüllere dayanmaktadır:

f (GSCLK) = 4096 * f (güncelleme)
f (SCLK) = 193 * f (güncelleme) * n
burada:
f (GSCLK): GSCLK için gereken minimum frekans
f (SCLK): SCLK ve SIN
f için gereken minimum frekans ( güncelleme): tüm basamaklı sistemin güncelleme oranı
n: TLC5940 cihazlarının basamaklı sayısı

TLC5940 sabit bir akım lavabosudur , bu nedenle LED'lerin anotları, Arduino'nun güç pimlerinden bağımsız olarak çalıştırılan LED Vf'den birkaç volt daha büyük veya yaklaşık 7 voltluk bir voltaja bağlanacaktır. Bu voltaj kaynağının 100 * (LED'leri çalıştırdığınız akım ne olursa olsun) sağlayabilmesi gerekir, ancak düzensiz bir kaynak olabilir.

LED katotları ilgili TLC5940 IC'lerin tahrik hatlarına gider.

TLC5940'ın kendisi veri yazma sırasında cihaz başına Icc = 60 mA tüketir, bu yüzden 7'sini Arduino'dan çalıştırmak işe yaramaz, bağımsız olarak 3,3 ila 5 voltluk düzenlenmiş Vcc sağlanmasını gerektirir, ideal olarak aynı değer Arduino'nun Vcc'si kullanılıyor ve zemin izlerinin elbette Arduino'nun zeminine geri bağlanması gerekiyor. TLC parçalarının Arduino'dan farklı bir voltajda çalıştırılması, seri sinyalin seviye dönüşümü ihtiyacını getirecektir, bu nedenle en iyi şekilde kaçınılmalıdır.

Bazı YouTube videoları Arduino'nun basamaklı TLC5940 IC'lerle kullanıldığını gösteriyor.


Bu IC'ler 7 segmentli sayısal LED ekranları çalıştırmak için tasarlanmış olsa da, bireysel LED kontrolü sağlarlar, bu nedenle IC başına 64 LED'e kadar kullanılabilir. Bunlardan ikisi gerekli 100 LED'i çalıştırmak için basamaklandırılabilir. Veri sayfasının Sayfa 13'ünde basamaklı bir yapılandırma gösterilmektedir.

Bu tasarım için LED'lerin her biri bir katot hattını (ortak katot) paylaşan 8 LED'e kadar gruplar halinde elektriksel olarak bağlanmalıdır.

MAX7219 / 7221 çoklayıcı LED sürücüleridir, bu nedenle LED'lerin maksimum parlaklığı, önceki bölümdeki gibi statik bir LED sürücüsünden daha düşük olacaktır.

İşte MAX7219'u kullanan kullanışlı bir LED matris kütüphanesi ve kılavuzu.

Bazı alakalı YouTube videoları ( 1 , 2 ) ilgi çekici olabilir.


Yine, bu IC'ler 7 segmentli sayısal LED ekranları sürmek için tasarlanmıştır, bireysel LED kontrolü sağlarlar, bu nedenle IC başına 40/64 LED'e kadar kullanılabilir. Bunlardan ikisi / üçü, gerekli 100 LED'i çalıştırmak için bir Arduino SPI veriyoluna bağlanabilir.

Tasarım notları önceki bölümle aynı kalır. Ayrıca, bireysel LED maksimum parlaklığı MAX7219'un düz multipleks tasarımından daha düşük olacaktır.

İlginizi çekebilecek bazı YouTube videoları var.


  • Ayrık bileşen tasarımları, vardiya kayıtları, IO genişleticiler, ayrı kontrolörlere sahip kesilebilir LED şeritler ve daha fazlası ...

Bunların hepsi, değişen basitlik ve başarı düzeylerinde kullanılan yaklaşımlardır. Bunlar, yukarıdaki 3 yaklaşımdan daha karmaşık uygulamalardır, dolayısıyla daha ayrıntılı değildir. Web'de arama yapılması, gerekirse bu yaklaşımlar için yararlı kılavuzlar sağlayacaktır.

Bu tür tasarımlarda önemli bir tahriş edici, her LED veya LED dizgideki akım kontrol dirençlerine duyulan ihtiyaçtır. LED sürüşü için özel olarak tasarlanmış cihazlar genellikle buna ihtiyaç duymaz.

Bu son seçeneklerle kişisel deneyimim yok, bu yüzden fazla yardımcı olamaz.


Dipnot: Bu soruya cevap verdikten sonra , son bölümümdeki bazı yaklaşımları detaylandıran ve tartışan cevapları olan daha eski bir soru buldum . Bu konu ilginç "ödev olarak daha fazla okuma" yapar.



1
74HC595 gibi ucuz vardiya kayıtları?
Thomas E

Ayrıca Max5951 nasıl "bağımsız LED kontrolü" sağlıyor - sadece 7 segmentli kontrol var (8 basamaklı 8 pim), değil mi?
Thomas E

Evet, onlar da. LED'leri korumak için çok sayıda dirence ve daha sonra amaca uygun IC'lere kıyasla kablolama kompleksine ihtiyacınız var.
Anindo Ghosh

@ThomasE No: "MAX6950 beş adede kadar 7 basamaklı veya 40 ayrı LED'i çalıştırır. MAX6951 sekiz adede kadar 7 basamaklı veya 64 ayrı LED'i çalıştırır.". Biri, cevabımın MAX7219 bölümünde açıklandığı gibi, her biri bir katot hattına 8 LED'li grupları bağlar.
Anindo Ghosh

2
@starblue Overkill v / s DIY uygulama kolaylığı : Bir kerelik veya hobi çalışması için, TLC5940 (DigiKey'de tek miktarlarda 3.78 $) , Arduino kütüphaneleri ve Arduino topluluğundaki aktif destek nedeniyle en basit çözüm olmayacak mı? Arduino forumlarının sevdiği gibi, eşit derecede iyi desteklenen başka parçalar olmadığı sürece.
Anindo Ghosh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.