PWM으로 500 개의 LED 제어


26

각각 500 개의 LED를 개별적으로 처리하고 각각에 대해 PWM을 지원하는 프로젝트를 고려하고 있습니다.

Arduino를 이미 가지고 있기 때문에 Arduino를 사용할 계획이지만 다른 플랫폼이 더 적합하다고 생각하는 사람은 제안을 할 수 있습니다.

시프트 레지스터를 사용해야합니다. 이 상황에서 사용하기에 좋은 시프트 레지스터는 무엇입니까? PWM이이 프로젝트를 훨씬 더 비싸게 만들면 그것없이 할 수 있습니다. 100 달러 미만으로 지출하려고합니다. 이베이에서 500 개의 LED를 대량 구매할 것입니다.

이러한 많은 수의 LED를 제어하는 ​​가장 좋은 방법에 대한 귀하의 의견은 무엇입니까? 또한 어떻게 전원을 공급할 수 있습니까? 도움을 주셔서 감사합니다. 나는 전자 제품에 대해 상당히 경험이 많으며, 그런 대규모로 아무것도 한 적이 없습니다.

답변:


14

저는 ShiftPWM 라이브러리의 작성자이며 일반 LED, LED 스트립 및 고전력 LED에 대한 회로도 및 훨씬 일반적인 정보를 포함하도록 설명서를 업데이트했습니다.

이미 프로젝트를 시작했을 수도 있지만이 페이지는 많은 방문자를 확보하고 있으므로 자세한 답변을 제공하고자합니다.

ShiftPWM으로 500 개의 LED를 제어하려는 경우 60Hz에서 LED 당 약 64 개의 밝기 레벨을 얻을 수 있습니다. 64 개의 시프트 레지스터를 사용합니다. 전용 하드웨어 PWM 드라이버는 더 많은 밝기를 제공하지만 조금 더 비쌉니다. 라이브러리의 주요 장점은 RGB 및 HSV 기능과 많은 예제가 포함되어 있기 때문에 사용 편의성이라고 생각합니다.

나는 정전류 LED 드라이버가 내장되어 있기 때문에 일반 시프트 레지스터 대신 TLC5917의 TLC5916을 개인적으로 사용하려고합니다. 저항이 필요하지 않기 때문에 많은 납땜이 절약됩니다.

내 웹 사이트 ( http://www.elcojacobs.com/shiftpwm )에는 LED를 연결하는 방법과 Arduino로 긴 신호 와이어를 고속으로 구동하는 방법에 대한 자세한 정보가 있습니다.

더 궁금한 점이 있으면 문의하십시오.


아래 답변을 보셨습니까? 내가 설명하는 기술은 추가 하드웨어를 사용하지만 라이브러리의 속도를 크게 향상시키기 위해 동일한 접근 방식을 사용할 수 있습니다. 나는 Arduino를 프로그래밍하지 않았으므로 명령어 타이밍에 익숙하지 않지만 가장 간단한 형식으로 SPI에서 비트를 블라스트하는 데 필요한 것으로 CPU 로딩을 줄일 수 있습니다 (현재 5 사이클 인 경우) 비트 당 및 SPI는 바이트 당 16 사이클이 걸리며 이는 2.5 배 속도 향상입니다. 그 속도로 계속 달리면서 더 정교한 작업을 수행 할 수도 있습니다.
supercat

예를 들어, full-on, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 및 1/128을 나타내는 8 개의 밝기 레벨을 원한다고 가정하십시오. Arduino가 포인터에서 가져온 값에 대해 "AND"또는 "OR"연산을 수행하고 해당주기를 4주기 미만으로 증가시킬 수 있다면 픽셀 당 3 비트를 사용하여 밝기 정보를 저장하고 전송 속도를 달성 할 수 있습니다. LED 8 개당 16 사이클
supercat

PWM 값을 계산하면 라이브러리의 SPI 출력과 겹칩니다. 4MHz에서 SPI를 실행하면 계산이 SPI 출력보다 조금 더 오래 걸립니다. 바이트 당 43 클럭 사이클이 필요하므로 8 개의 출력 당. 이것은 대부분의 설정에 충분히 빠릅니다. 비트 코드 변조를 사용하면 8 개의 업데이트주기가 있으며, 다음주기마다 이전주기의 절반이됩니다. BCM 버전을 작성했지만 밝기 설정을 업데이트하는 순간에 더 민감합니다. 잘못 정렬되면 깜박임이 발생할 수 있습니다. 그래도 매트릭스 버전에서 사용할 것입니다.
ElcoJacobs

BCM은 1 / 2,1 / 4 ... 타이밍을 사용할 수 있지만 LED 당 하나의 핀만 사용한다는 접근 방식의 이점이 있습니다. 컴퓨터 과학 배경이 있다면 SPI 바이트 계산 방법이 흥미로울 것입니다. 메모리 (2 클럭)에서 듀티 사이클을 수신하고 비교 (1 클럭)를 수행합니다. 비교 결과는 캐리에 저장되므로 캐리 오버 회전 (1 클럭)으로 바이트로 옮길 수 있습니다. 8 번 수행하면 모든 비교 결과가 1 바이트가되며 SPI로 보낼 수 있습니다.
ElcoJacobs

13

그냥 복사 :-)

http://www.evilmadscientist.com/article.php/peggy2

오늘 우리는“Peggy”오픈 소스 LED Pegboard 프로젝트에 대한 업데이트를 발표하고 있습니다. Peggy 버전 2는 처음부터 새롭게 디자인되었습니다. 그리고 그것은 거의 똑같아 보입니다. 그러나 변경 사항은 상당히 크며 여러 가지면에서 큰 개선이라고 생각합니다.

무엇보다도 Peggy 2.0은 여전히 ​​똑같은 일을합니다. 25 x 25 어레이의 LED 위치에 효율적인 전력을 제공합니다. Peggy는 LED를 사용하는 데 따르는 찌르기, 복잡성 및 혼란을 없애기 위해 설계되었습니다. 다목적이며 강력한 발광 페그 보드로 단일 부하 저항을 계산하지 않고도 원하는 구성으로 수백 개의 LED를 효율적으로 구동 할 수 있습니다. 1에서 625 개의 LED를 어디에나 설치할 수 있으며 Peggy가이를 밝힙니다.


Peggy 2.0은 이제 Arduino 와도 호환됩니다. 널리 사용되는 Arduino 소프트웨어 환경을 사용하여 USB-TTL 케이블을 통한 프로그래밍을 지원합니다.


멋진 링크! 북마크. 나는 그 작은 비디오 :-)보고이 같은 프로젝트에 대한 작업에 계획되지 않은,하지만 난 지금을해야
WOUTER 시몬스

@NicolaeSurdu 부서지지 않았습니다. 지금 막 열었습니다.
Axeman

3
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.

6

어떤 레이아웃으로 LED를 원하십니까? 일부 LED 매트릭스를 구입하면 많은 작업을 절약 할 수 있으며 , 벅 또는 2 개의 단색 8x8 LED 매트릭스 (64 개 LED) 얻을 수 있습니다 .

이 많은 LED에서 AVR과 시프트 레지스터를 사용하면 실제 PWM을 얻지 못할 것이지만 2-4 레벨의 밝기를 짜낼 수 있습니다. 당신은 숫자를 실행하고 가능한 것을 참조해야합니다.

Allegro는 LED 어레이를 제어하기 위해 특별히 설계된 편리한 정전류 싱크 시프트 레지스터를 제공 하므로 추가 저항이 필요하지 않으므로 더욱 간단합니다. 충분한 전력을 공급할 수없는 경우 AVR 출력에서 ​​직접 LED를 구동하지 못할 수 있으므로 트랜지스터를 사용해야합니다. 하나의 IC 에서 배열로 얻을 수 있으므로 일부 작업도 절약됩니다.


모든 아주 좋은 포인트!
Jason S

5

LED에 필요한 PWM 범위는 알지 못했지만 서보 제어 응용 프로그램을 위해 64 채널 PWM 컨트롤러에서 600us ~ 2.4ms의 펄스를 줄 수 있습니다. CD74HCT238E (3-8 라인 디멀티플렉서)를 사용하여 ATMega168의 8 개 I / O 핀에서 64 개 채널을 생성하며 간단한 직렬 명령을 통해 제어 할 수 있습니다. 이 컨트롤러를 직렬 라인에 여러 버전의 체인으로 연결하여 500 개의 LED를 모두 처리 할 수 ​​있다고 생각합니다. 펌웨어 요구 사항이 더 간단하기 때문에 컨트롤러의 ATTiny2313 버전을 사용할 수 있습니다.

블로그 에는 어셈블리 소스와 설계 프로세스의 회로도 및 세부 정보가 포함되어 있습니다.


5

mouser / digikey의 "LED driver"IC를 확인하십시오. 예를 들어 TI는 다양한 인터페이스 (I2C, SPI)를 사용하여 사용자의 요구를 확실히 충족시킬 수있는 여러 드라이버를 만듭니다. 이러한 드라이버의 대부분은 데이지 체인 방식으로 설계되어 하나의 직렬 출력이 다른 직렬의 직렬 입력으로 공급됩니다.

예를 들어, TLC5940과 같은 장치는 16 채널 PWM 제어를 제공합니다. 따라서 기본적으로 12 비트 회색조 PWM 제어 기능이있는 정전류 16 비트 시프트 레지스터입니다. 80x16 디스플레이를 설계 할 때 특정 IC를 추천 할 수 있습니다.


4

Mondomatrix는 일부 직렬 (rs-485) 주소 지정 가능 LED 드라이버 보드를 만들고 Arduino 플랫폼을 기반으로합니다. http://www.displayduino.com/ 해당 하드웨어를 사용하여 시스템을 상당히 쉽게 구성 할 수 있습니다.


4

각 LED에 대해 너무 많은 비트의 PWM 제어를 원하지 않고 PWM주기마다 500 개의 LED로 프로세서가 충돌하지 않도록하려면 N 74HC595 또는 동등한 칩을 사용하여 N 비트의 밝기로 8 개의 LED를 제어 할 수 있습니다 . 모든 N 칩의 출력을 함께 연결하고, 적절한 타이밍으로 한 번에 하나씩 만 활성화 할 수있는 회로에 인 에이블을 연결하십시오. 첫 번째 칩은 절반으로 활성화되고 두 번째 칩은 나머지 절반으로 활성화됩니다.

시프트 레지스터의 재로드는 앨리어싱 효과를 최소화하기 위해 PWM 속도와 동기화되어야합니다. ).

각 LED에 대해 여러 개의 74HC595 출력을 사용해야하는 경우,이 방법은 CPU 개입 없이도 다른 밝기 레벨을 유지할 수있는 가장 간단한 방법 일 것입니다.


3

이것은 질문에 직접 대답하지는 않지만 고려해야 할 또 다른 측면은 500 배치의 LED 사이에 가능한 강성 변동성 입니다. 이러한 LED가 매트릭스 또는 7 세그먼트 디스플레이와 같이 서로 가까이 장착되어있는 경우 특히 중요합니다. 참조 이 답변으로 LED 밝기의 변화를 보상하기 위해 도트 보정을 사용하여, 특히,이 문제를 해결하는 방법에 대한 자세한 내용을.

내가 구축하고있는 대형 7- 세그먼트 디스플레이에 200 개의 1mm 빨간색 LED가있을 때이 문제가 발생했습니다. 문제를 해결하기위한 저렴한 솔루션은 다음과 같습니다.

  1. 브레드 보드에 LED 테스터를 구축하여 다양한 강모 범주의 LED 세트를 분류했습니다.
  2. 같은 범주의 LED를 사용하여 각 세그먼트를 장착했습니다 (제 설계에서 각 세그먼트는 직렬로 장착 된 5 개의 LED로 구성됨)
  3. 다른 전류 제한 저항을 사용하여 각 세그먼트 밝기의 차이를 보상했습니다. 예를 들어, 더 밝은 LED가있는 세그먼트의 경우 100 옴 저항을 사용하고, 조광기 LED가있는 다른 세그먼트의 경우 120 옴 저항을 사용합니다.

1
유효하지만 질문에 대답하지 않습니다.
Matt Young

1
@MattYoung 동의합니다. 질문은 다른 모든 답변에 의해 크게 대답됩니다. 방금 OP의 디자인에 영향을 줄 수있는 부수적 인 문제를 해결하면서 이러한 답변을 보완하고 싶었습니다.
Ricardo


1

XMOS는 Macroblock MBI5026을 LED 타일 키트와 함께 사용합니다. 나는 그것들이 대부분의 다른 전문 시스템에서 사용된다고 생각합니다.

레온


1

직렬 인터페이스가있는 전용 드라이버 칩이 실제로 가장 좋은 경로 일 것입니다. 개별 시프트 레지스터를 다루는 것은 아마도 매우 복잡한 회로를 의미 할 것입니다. 적어도 Maxim과 TI는 일부를 만듭니다. 그 중 하나에 특히 적합한 모델이 있는지 기억이 나지 않습니다.

여전히 많은 하드웨어가 필요합니다.

전원, 프로그래밍 및 버스와 관련하여 각 드라이버의 데이터 시트에 필요한 정보가 대부분있을 것입니다.


1

소프트웨어 영역 내에서 필요한 고유 한 밝기 설정의 수가 너무 많지 않으면 데이터를 "비트 평면"형식으로 저장하고 다른 하드웨어 기반 답변에 설명 된대로 데이터를 저장하는 것이 도움이 될 수 있습니다 출력 루틴은 부울 연산자를 사용하여 한 번에 8 픽셀을 처리합니다. 효율성을 극대화하려면 PWM 사이클의 다른 부분에 사용되는 여러 개의 개별 출력 루틴이 필요합니다. 예를 들어, 4 비트 밝기 값을 사용하려면 다음과 같은 8 가지 루틴을 사용합니다.

  movf bit0Comp, w; 비교의 비트 0에 따라 00 또는 FF 여야합니다 (클리어 인 경우 FF).
  iorwf POSTINCF, w; 데이터의 비트 0; 항상 IORWF를 사용하십시오
  andwf POSTINCF, w; 데이터의 비트 1; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
  andwf POSTINCF, w; 데이터의 비트 2; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
  andwf POSTINCF, w; 데이터의 비트 2; 비교의 비트 1이 설정된 경우 IORWF를 사용하십시오. 명확한 경우 ANDWF
  movwf SPIREG; 결과 바이트 저장 (> = 비교 인 경우 비트 세트)

비교 값에 따라 IORWF와 ANDWF의 다른 조합을 사용합니다. 도시 된 바와 같이이 접근법을 사용하면, 4 개의 비트 모두가 디스플레이-시프트 루틴에 대한 호출들 사이에 기록되거나 픽셀-업데이트 루틴이 픽셀-업데이트 루틴을 결정하도록함으로써 플리커없이 PWM 사이클의 임의의 지점에서 픽셀 밝기 값을 업데이트 할 수 있음에 유의한다. 다음 시프트는 픽셀에 대해 "1"또는 "0"을 출력하고 픽셀의 모든 비트를 설정하거나 지우고 (어쨌든 어떤 작업을 하든지간에) 값이 반대 야 또한 디스플레이 업데이트의 타이밍을 변경하거나 PWM 사이클에서 두 개 이상의 비교 값을 사용하여 임의의 비선형 밝기 스케일을 달성 할 수 있습니다.


1

FPGA 또는 CPLD는 많은 I / O 핀을 제공하므로 이러한 작업에 유용 할 수 있습니다. 가장 간단하고 저렴하게 이동하십시오. 충분하지 않으면 커플을 사용하십시오.


이것이 왜 좋은 옵션인지에 대해 좀 더 자세히 설명해 주시겠습니까? 지금 당장 알고 있습니다. 옵션이 무엇인지, 제안 된 기술이 무엇인지 알고 있습니다 .Origial Poster (OP)는 아마도 배경.
Kortuk

나는 그것이 최선의 선택인지 확실하지 않지만 완전성을 위해 언급되기를 원했습니다. 어떤 방식 으로든 PWM을 사용하여 500 개의 LED를 제어하는 ​​경우 결국 500 개의 개별적으로 제어 가능한 와이어가 필요합니다. 출력 핀이 많은 마이크로 컨트롤러를 찾기는 어렵습니다. 여전히 마이크로 컨트롤러를 사용하는 방법에는 여러 가지가 있지만, 저렴한 CPLD / FPGA 중 하나 또는 두 개가 이러한 출력 핀을 쉽게 제공 할 수 있습니다.
Carl

1

PSoC3 또는 PSoC5를 사용하면 거의 확실하게이 작업을 수행 할 수 있습니다 .

PSoC 칩은 재구성 가능한 디지털 하드웨어 (FPGA 또는 CPLD와 같은 비트)를 포함하는 마이크로 컨트롤러입니다. 즉, PWM으로 500 개의 LED를 구동하는 것과 같은 비정상적인 작업을 수행하기 위해 복잡한 회로를 만들 수 있습니다. 또한 재구성 가능한 디지털 블록을 사용하여 모든 것을 구현할 수 있습니다. 즉, 칩의 CPU 부분은 원하는 LED 밝기를 어레이에 쓰기 만하면됩니다.

504 개의 LED가 직사각형 21 x 24에 적합합니다. 24 개의 PWM 채널과 21 개의 GPIO가 있다면이 작업을 수행 할 수 있습니다. 맞춰봐? PSoC는 그 이상을 가지고 있습니다.

PSoC에서 24 개의 PWM 채널을 쉽게 설정하고 21 개의 다른 핀을 시프트 레지스터의 일부로 구성 할 수 있습니다. 다음으로 메모리에서 PWM 출력으로 바이트를 펌핑하도록 일부 DMA 채널을 구성하면 웃고 있습니다. 이제 CPU가 그래픽을 생성하기 만하면됩니다. PSoC3에는 8 비트 8051 코어가 있고 PSoC5에는 32 비트 ARM이 있습니다. 골라보세요. 필요한 유일한 외부 IC는 행에 높은 구동 전류를 제공하기 위해 일부 ULN2803입니다. PWM 출력에는 단일 LED를위한 충분한 전류 드라이브가 있어야합니다.


이것은 LED를 운전하는 데있어 과잉입니다. 거대한 디스플레이에 항상 사용되는 것과 같이 많은 양을 연결하기 위해 만들어진 저렴하고 사전 설계된 전용 LED 드라이버가 있습니다. 모든 것을 재창조 할 필요가 없으며 비용이 더 듭니다.
nemik

@nemik-실제로, 칩의 총 비용 (고가의 Farnell)은 £ 6.80에 불과합니다.
Rocketmagnet

0

규모의 경제를 활용하십시오. Aliexpress와 같은 중국 사이트는 WS2811 기반 LED 스트랜드를 50 개 LED 당 ~ $ 15에 판매합니다. 개별적으로 주소 지정 가능하고 밝으며 일반적으로 방수 처리되며 밝기를위한 PWM이 있습니다. 납땜이나 시프트 레지스터가 없습니다. 이 모든 것을 직접하는 것은 더 많은 비용이 들며 시간이 더 많이 걸리고 매우 좌절됩니다. 게다가 당신은 오즈에있어 중국에서 배송하는 것이 너무 비싸지 않을 것입니다.

이것들은 거대한 LED 디스플레이를 만들기 위해 만들어 지므로 꽤 저렴합니다. 최상의 성능을 위해 약 50 개의 LED마다 전원을 다시 주입하십시오.

Arduino 라이브러리도있어 사용하기 쉽습니다.


1
50 개 LED 당 15 달러? 500 개의 LED가 150 달러라고 생각하십니까? 그리고 당신은 나의 해결책이 비싸다는 것을 신경을 가지고 있습니까? -1
Rocketmagnet

또한이 링크를 제공 할 수 있습니다. WS801은 구글을 ​​잘하지 않으며 Aliexpress
Rocketmagnet

죄송합니다. 다음 aliexpress.com/store/product/… 와 같은 WS2811을 의미했거나 PWM 디밍없이 이러한 aliexpress.com/store/product/…
nemik

PWM 디밍으로 50 개의 LED를 구동하기위한 하나의 직렬 신호. 고마워, 이것은 내가 추구하는 것입니다. 그러나 표준 시프트 레지스터는 "래치"핀을 제공하여 전체 프레임이 전송 된 후 버퍼 된 데이터를 출력에 복사합니다. 여기에는 래치가 없으므로 높은 새로 고침 빈도로 눈에 띄는 노이즈가 예상됩니다. 이 칩은 픽셀 당 15 비트의 400Kbps 데이터를 지원하므로 프레임이 업데이트되는 동안 화면이 1.9 밀리 초 동안 넌센스를 표시합니다.
nialsh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.