Arduino에서 많은 (~ 100) 디지털 출력 신호 받기


19

Arduino를 사용하여 약 100 개의 독립적 인 LED를 제어하고 싶습니다. 문제는 Arduino에이를 구성 할 수있는 핀이 거의 없다는 것입니다. 이 문제를 해결하는 방법은 무엇입니까? Arduino의 복잡한 신호를 디 먹싱하여 LED를 제어 할 수있는 칩이 있습니까? 아니면 다른 해결책이 있습니까?


새로 고침 빈도 요구 사항은 무엇입니까? LED 당 얼마나 많은 전류가 소비됩니까?
vicatcu

약 1 초의 재생 빈도. LED 당 8ma 주위에 생각. Arduino가 아닌 외부 어댑터에 의해 구동 될 것
Alexis K

많은 디 멀티플렉싱 솔루션이 있습니다. 그러나 작업의 복잡성을 고려하십시오. Arduino의 MCU의 제약 조건 내에서 데이터를 생성하는 데 필요한 알고리즘이 있습니까? 일부 작업은 다른 작업은 만들기에 만족할 수 있지만 코드 유지 관리에 어려움을 줄 수있는 디자인 만들기를 통해 적합하지 않거나 적합하지 않습니다.
Chris Stratton

답변:


22

우선, Arduino는 100 개의 LED를 직접 구동 할 수 없습니다. 장치가 소싱 또는 싱크해야하는 결합 된 전류는 마이크로 컨트롤러와 Arduino 보드의 전압 조정기를 훨씬 초과하기 때문입니다. 그러나 자체 전원과 규정을 갖춘 맞춤형 Arduino Shield 가이 법안에 적합 할 수 있습니다.

몇 가지 쉬운 방법이 있으며 가장 간단한 방법은 다음과 같습니다.


  • 계단식 구성의 TLC5940 정전류 LED 드라이버 :

TLC5940은 IC 당 16 개의 LED를 구동하며 약간의 변형 된 SPI 인터페이스를 통해 직렬 입력으로 제어됩니다. 최대 40 개의 TLC5940 장치를 캐스케이드 연결할 수 있지만 그 중 7 개는 문제가되는 100 개의 LED를 구동하기에 충분합니다.

TLC5940 에는 최소한 두 개의 Arduino 라이브러리 ( 1 , 2 ) 가 있습니다.

Arduino에서 보낼 권장 클럭 속도 및 해당 재생 빈도 :

  • 이 스레드 에서 코드를 사용하는 1MHz GSClk .
  • 330KHz SCLK (직렬 데이터 클록)
  • 이에 의해, LED 데이터 재생률 244Hz

이는 데이터 시트의 공식을 기반으로합니다.

f (GSCLK) = 4096 * f (업데이트)
f (SCLK) = 193 * f (업데이트) * n
여기서 :
f (GSCLK) : GSCLK에 필요한 최소 주파수
f (SCLK) : SCLK 및 SIN에 필요한 최소 주파수
f ( 업데이트) : 전체 캐스케이드 시스템의 업데이트 속도
n : TLC5940 장치의 캐스케이드 수

TLC5940은 정전류 싱크 이므로 LED의 양극은 LED Vf보다 몇 볼트 큰 전압 또는 약 7V 중 더 낮은 전압에 연결되며 Arduino의 전원 핀과 독립적으로 전원이 공급됩니다. 이 전압 소스는 100 * (LED를 구동하는 전류에 관계없이)를 공급할 수 있어야하지만 조정되지 않은 소스 일 수 있습니다.

LED 캐소드는 각각의 TLC5940 IC의 구동 라인으로 간다.

TLC5940 자체는 데이터 쓰기 중 장치 당 최대 Icc = 60mA를 소비하므로 Arduino에서 7 개 전원을 공급할 수 없으며 독립적으로 3.3V에서 5V로 조정 된 Vcc를 제공해야합니다. Arduino의 Vcc가 사용 중이며,지면 흔적은 물론 Arduino의지면으로 다시 연결되어야합니다. Arduino와 다른 전압에서 TLC 부품을 작동하면 직렬 신호의 레벨 변환이 필요하므로 피하는 것이 가장 좋습니다.

여러 YouTube 동영상 은 계단식 TLC5940 IC와 함께 Arduino를 사용하는 방법을 보여줍니다.


이 IC는 7 세그먼트 숫자 LED 디스플레이를 구동하도록 설계되었지만 개별 LED 제어 기능을 제공하므로 IC 당 최대 64 개의 LED에 사용할 수 있습니다. 이들 중 2 개를 캐스케이드 연결하여 필요한 100 개의 LED를 구동 할 수 있습니다. 데이터 시트 13 페이지에 캐스케이드 구성이 나와 있습니다.

이 설계를 위해 LED는 각각 하나의 음극선 (공통 음극)을 공유하는 최대 8 개의 LED 그룹으로 전기적으로 연결되어야합니다.

MAX7219 / 7221은 멀티플렉싱 LED 드라이버이므로 LED의 최대 밝기는 이전 섹션과 같은 정적 LED 드라이버보다 낮습니다.

다음은 MAX7219를 사용 하는 유용한 LED 매트릭스 라이브러리 및 가이드입니다.

일부 관련 YouTube 동영상 ( 1 , 2 )이 관심이있을 수 있습니다.


이 IC는 7 세그먼트 숫자 LED 디스플레이를 구동하도록 설계되었으며 개별 LED 제어 기능을 제공하므로 IC 당 최대 40/64 개의 LED에 사용할 수 있습니다. 그중 2/3 개를 Arduino SPI 버스에 연결하여 필요한 100 개의 LED를 구동 할 수 있습니다.

디자인 노트는 이전 섹션과 동일하게 유지됩니다. 또한 개별 LED 최대 밝기는 MAX7219의 스트레이트 멀티 플렉스 설계보다 낮다.

몇 가지가 있습니다 YouTube 동영상 관심이있을 수 있습니다.


  • 개별 부품 설계, 시프트 레지스터, IO 확장기, 개별 컨트롤러가있는 절단 가능한 LED 스트립 등

이들은 다양한 수준의 단순성과 성공으로 사용 된 모든 접근 방식입니다. 그것들은 위의 3 가지 접근법보다 더 복잡한 구현이므로 더 이상 자세히 설명하지 않습니다. 필요한 경우 웹을 검색하면 이러한 접근 방식에 대한 유용한 안내서가 제공됩니다.

이러한 설계에 대한 한 가지 주요 자극은 모든 LED 또는 LED 스트링에 전류 제어 저항이 필요하다는 것입니다. LED 구동을 위해 특별히 설계된 장치는 일반적으로 이것을 필요로하지 않습니다.

이 마지막 옵션에 대한 개인적인 경험이 없으므로 많은 도움이 될 수 없습니다.


각주 : 이 질문에 답한 후, 나는 이전 질문 에서 몇 가지 접근 방식을 자세하게 설명하고 논의한 더 오래된 질문을 발견했습니다 . 그 스레드는 "숙제처럼 더 읽기"를 흥미롭게 만듭니다.



1
74HC595와 같은 저렴한 시프트 레지스터?
Thomas E

또한 Max5951은 어떻게 "개별 LED 제어"를 제공합니까? 그것은 단지 7- 세그먼트 제어 (8 자리 8 핀) 인 것 같습니다.
Thomas E

그렇습니다. LED를 보호하기 위해 많은 저항이 필요하며, 그런 다음 특수 목적의 IC에 비해 배선이 복잡합니다.
Anindo Ghosh

@ThomasE 아니요 : "MAX6950은 최대 5 개의 7 세그먼트 숫자 또는 40 개의 개별 LED를 구동합니다. MAX6951은 최대 8 개의 7 세그먼트 숫자 또는 64 개의 개별 LED를 구동합니다." 내 대답의 MAX7219 섹션에 설명 된 것처럼 하나는 8 개의 LED 그룹을 각각 하나의 음극 라인에 연결합니다.
Anindo Ghosh

2
@starblue Overkill v / s 손쉬운 DIY 구현 : 일회성 또는 취미적인 노력으로 Arduino 라이브러리와 Arduino 커뮤니티의 적극적인 지원으로 인해 TLC5940 (DigiKey의 단일 수량으로 $ 3.78)이 가장 간단한 솔루션으로 남아 있지 않습니까? Arduino 포럼이 좋아하는 다른 지원이 동일하게 지원되지 않는 한.
Anindo Ghosh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.