Mendapatkan banyak sinyal keluaran digital (~ 100) dari Arduino


19

Saya ingin dapat mengontrol sekitar 100 LED independen menggunakan Arduino. Masalahnya adalah bahwa Arduino hampir tidak memiliki pin yang cukup yang dapat dikonfigurasi untuk ini. Apa yang akan menjadi cara untuk mengatasi masalah ini? Apakah ada chip yang dapat melakukan demux sinyal yang lebih kompleks dari Arduino yang kemudian dapat mengontrol LED? Atau ada solusi lain?


apa persyaratan refresh rate Anda? berapa banyak arus per LED?
vicatcu

kecepatan refresh sekitar 1 detik. berpikir sekitar 8mA per LED. Akan didukung oleh adaptor eksternal - bukan Arduino
Alexis K

Ada banyak solusi demultiplexing. Tetapi pertimbangkan kompleksitas tugas Anda; apakah algoritma yang Anda perlukan untuk menghasilkan data sesuai dengan batasan MCU Arduino? Beberapa tugas akan, yang lain tidak akan atau hanya akan cocok melalui membuat desain yang cukup memuaskan untuk dibuat tetapi mungkin membuat pemeliharaan kode menantang.
Chris Stratton

Jawaban:


22

Pertama-tama, sebuah Arduino tidak dapat secara langsung menggerakkan 100 LED, karena arus gabungan yang harus ditampung atau tenggelam oleh perangkat jauh melebihi mikrokontroler, dan pengatur tegangan pada papan Arduino. Namun, Arduino Shield khusus dengan sumber daya dan peraturannya sendiri mungkin sesuai dengan tagihan tersebut.

Ada beberapa pendekatan yang mudah, pendekatan yang paling sederhana dijelaskan di bawah ini:


  • Driver LED arus konstan TLC5940 dalam konfigurasi bertingkat:

TLC5940 menggerakkan 16 LED per IC, dikendalikan oleh input serial melalui sedikit varian antarmuka SPI. Hingga 40 perangkat TLC5940 dapat di-cascade, tetapi 7 di antaranya akan cukup untuk menggerakkan 100 LED dalam pertanyaan.

Setidaknya ada beberapa perpustakaan Arduino ( 1 , 2 ) untuk TLC5940.

Tarif jam yang disarankan untuk dikirim dari Arduino, dan kecepatan refresh yang sesuai:

  • 1 MHz GSClk menggunakan kode di utas ini .
  • 330 KHz SCLK (jam data serial)
  • Dengan demikian, refresh rate data LED 244 Hz

Ini didasarkan pada rumus dari lembar data:

f (GSCLK) = 4096 * f (pembaruan)
f (SCLK) = 193 * f (pembaruan) * n di
mana:
f (GSCLK): frekuensi minimum yang diperlukan untuk GSCLK
f (SCLK): frekuensi minimum yang diperlukan untuk SCLK dan SIN
f ( pembaruan): tingkat pembaruan seluruh sistem kaskade
n: angka yang mengalir dari perangkat TLC5940

TLC5940 adalah sink arus konstan , sehingga anoda LED akan dikaitkan dengan tegangan beberapa volt lebih besar dari Vf LED, atau sekitar 7 volt, mana yang lebih rendah, yang ditenagai secara independen dari pin daya Arduino. Sumber tegangan ini harus mampu memasok 100 * (apa pun arus Anda menjalankan LED), tetapi dapat menjadi sumber yang tidak diatur.

Katoda LED mengarah ke garis drive masing-masing IC TLC5940.

TLC5940 itu sendiri mengkonsumsi hingga Icc = 60 mA per perangkat selama penulisan data, sehingga memberi daya 7 di antaranya dari Arduino tidak akan berfungsi, itu akan membutuhkan Vcc yang diatur 3,3 hingga 5 volt yang independen untuk disediakan, idealnya nilai yang sama dengan Vcc dari Arduino yang digunakan, dan jejak tanah perlu terhubung kembali ke tanah Arduino, tentu saja. Mengoperasikan bagian-bagian TLC pada tegangan yang berbeda dari Arduino akan membutuhkan konversi tingkat sinyal serial, oleh karena itu sebaiknya dihindari.

Beberapa video YouTube menunjukkan penggunaan Arduino dengan IC TLC5940 yang bertingkat.


Meskipun IC ini dirancang untuk menggerakkan tampilan LED numerik 7-segmen, mereka memberikan kontrol LED individual, sehingga dapat digunakan hingga 64 LED per IC. Dua dari mereka dapat mengalir untuk mendorong 100 LED yang dibutuhkan. Halaman 13 pada datasheet menunjukkan konfigurasi cascade.

LED harus dihubungkan secara elektrik sebagai kelompok hingga 8 LED yang masing-masing berbagi satu garis katoda (katoda umum), untuk desain ini.

MAX7219 / 7221 adalah driver LED multiplexing, karenanya kecerahan maksimum LED akan lebih rendah daripada driver LED statis seperti bagian sebelumnya.

Berikut ini adalah perpustakaan dan panduan matriks LED yang berguna menggunakan MAX7219.

Beberapa video YouTube yang relevan ( 1 , 2 ) mungkin menarik.


Sekali lagi, IC ini dirancang untuk menggerakkan tampilan LED numerik 7-segmen, mereka menyediakan kontrol LED individual, sehingga dapat digunakan hingga 40/64 LED per IC. Dua / tiga di antaranya dapat dihubungkan dengan bus Arduino SPI untuk menggerakkan 100 LED yang dibutuhkan.

Catatan desain tetap sama dengan bagian sebelumnya. Juga, kecerahan maksimum LED individu akan lebih rendah daripada untuk desain multipleks lurus dari MAX7219.

Ada beberapa video YouTube yang mungkin menarik.


  • Desain komponen diskrit, register geser, IO expander, strip LED yang dapat dipotong dengan pengontrol terpisah, dan banyak lagi ...

Ini semua adalah pendekatan yang telah digunakan dengan berbagai tingkat kesederhanaan dan kesuksesan. Mereka adalah implementasi yang lebih kompleks daripada 3 pendekatan di atas, karenanya tidak dirinci lebih lanjut. Pencarian web akan menghasilkan panduan yang bermanfaat untuk pendekatan ini, jika diperlukan.

Salah satu kunci iritasi dengan desain seperti itu adalah perlunya resistor kontrol saat ini pada setiap LED atau string LED. Perangkat yang dirancang khusus untuk mengemudi LED biasanya tidak memerlukan ini.

Saya tidak punya pengalaman pribadi dengan set opsi terakhir ini, jadi tidak banyak membantu.


Catatan Kaki: Setelah menanggapi pertanyaan ini, saya menemukan pertanyaan yang lebih tua , yang memiliki jawaban yang merinci dan membahas beberapa pendekatan di bagian terakhir saya. Utas itu menarik "bacaan lebih lanjut sebagai pekerjaan rumah".



1
Register shift murah seperti 74HC595?
Thomas E

Juga bagaimana Max5951 menyediakan "kontrol LED individual" - sepertinya hanya memiliki kontrol 7-segmen (8 pin untuk 8 digit), bukan?
Thomas E

Yup, itu juga. Perlu banyak resistor untuk melindungi LED, dan kemudian kompleks kabel dibandingkan dengan IC yang dibuat khusus.
Anindo Ghosh

@ThomasE No: "MAX6950 mendorong hingga lima digit 7-segmen atau 40 LED diskrit. MAX6951 mendorong hingga delapan digit 7-segmen atau 64 LED diskrit.". Satu hanya menghubungkan kelompok masing-masing 8 LED untuk satu garis katoda, seperti yang dijelaskan dalam bagian MAX7219 dari jawaban saya.
Anindo Ghosh

2
@ starblue Overkill v / s kemudahan penerapan DIY : Untuk upaya satu kali atau hobi, apakah TLC5940 ($ 3,78 dalam jumlah tunggal di DigiKey) tidak akan tetap menjadi solusi paling sederhana , karena perpustakaan Arduino dan dukungan aktif dalam komunitas Arduino? Kecuali ada bagian lain yang sama-sama didukung dengan baik seperti yang Anda tunjukkan, bahwa forum Arduino suka.
Anindo Ghosh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.