Điều khiển 500 đèn LED với PWM


26

Tôi đang xem xét tham gia vào một dự án liên quan đến việc giải quyết riêng lẻ 500 đèn LED, tối ưu với sự hỗ trợ của PWM cho từng dự án.

Tôi dự định sử dụng Arduino vì tôi đã có, nhưng tôi sẵn sàng đề xuất nếu có ai nghĩ rằng một nền tảng khác sẽ phù hợp hơn.

Đăng ký thay đổi sẽ cần phải được sử dụng. Một đăng ký thay đổi tốt để sử dụng trong tình huống này là gì? Nếu PWM làm cho dự án này đắt hơn rất nhiều, tôi không thể làm gì nếu không có nó. Tôi muốn cố gắng chi dưới 100 đô la. Tôi muốn mua số lượng lớn 500 đèn LED trên ebay.

Ý kiến ​​của bạn về cách tốt nhất để kiểm soát một số lượng lớn đèn LED như vậy là gì? Ngoài ra, làm thế nào tôi sẽ cung cấp năng lượng? Tôi đánh giá cao sự giúp đỡ. Tôi khá có kinh nghiệm với thiết bị điện tử, tôi chưa bao giờ làm bất cứ điều gì trên quy mô lớn như vậy.

Câu trả lời:


14

Tôi là tác giả của thư viện ShiftPWM và tôi vừa cập nhật tài liệu để bao gồm sơ đồ và nhiều thông tin chung hơn cho đèn LED thông thường, dải đèn LED và đèn LED công suất cao.

Có thể bạn đã bắt đầu dự án của mình, nhưng vì trang này có rất nhiều khách truy cập, tôi vẫn muốn cung cấp câu trả lời chi tiết.

Nếu bạn muốn điều khiển 500 đèn LED bằng ShiftPWM, bạn có thể nhận được khoảng 64 mức độ sáng cho mỗi đèn LED ở 60 Hz. Bạn sẽ sử dụng 64 thanh ghi ca. Trình điều khiển PWM phần cứng chuyên dụng sẽ cung cấp cho bạn nhiều mức độ sáng hơn, nhưng sẽ đắt hơn một chút. Tôi nghĩ rằng ưu điểm chính của thư viện của tôi là dễ sử dụng, bởi vì nó bao gồm các chức năng RGB và HSV và rất nhiều ví dụ.

Cá nhân tôi sẽ sử dụng TLC5916 của TLC5917 thay vì các thanh ghi thay đổi thông thường, bởi vì chúng có một trình điều khiển LED hiện tại không đổi. Điều này sẽ giúp bạn tiết kiệm rất nhiều hàn, vì bạn không cần điện trở.

Trên trang web của tôi ( http://www.elcojacobs.com/shiftpwm ) Tôi có thêm thông tin về cách kết nối đèn LED và cách đối phó với việc điều khiển dây tín hiệu dài với Arduino ở tốc độ cao.

Nếu bạn có bất kỳ câu hỏi, xin vui lòng hỏi.


Bạn đã xem câu trả lời của tôi dưới đây? Mặc dù kỹ thuật tôi mô tả sử dụng phần cứng bổ sung, cách tiếp cận tương tự có thể được sử dụng để cải thiện đáng kể tốc độ của thư viện của bạn. Tôi đã không lập trình Arduino, vì vậy tôi không quen với thời gian chỉ dẫn của nó, nhưng ở dạng đơn giản nhất, bạn có thể giảm tải CPU xuống bất cứ thứ gì được yêu cầu để đơn giản làm nổ tung SPI (nếu bạn hiện đang ở 5 chu kỳ mỗi bit và SPI của bạn mất 16 chu kỳ trên mỗi byte, đó sẽ là tốc độ tăng gấp 2,5 lần). Bạn thậm chí có thể làm một số điều phức tạp hơn trong khi vẫn chạy ở tốc độ đó.
supercat

Ví dụ: giả sử bạn muốn có tám mức độ sáng đại diện cho chế độ đầy đủ, 1/2, 1/4, 1/8, 1/16, 1/32, 1/64 và 1/128. Nếu Arduino có thể thực hiện thao tác "VÀ" hoặc "HOẶC" trên giá trị được tìm nạp từ một con trỏ và tăng con trỏ đó trong ít hơn bốn chu kỳ, bạn có thể sử dụng ba bit trên mỗi pixel để lưu trữ thông tin độ sáng của mình và vẫn đạt được tốc độ truyền 16 chu kỳ trên 8 đèn LED.
supercat

Tính toán các giá trị PWM chồng lấp đầu ra SPI trong thư viện của tôi. Tôi chạy SPI ở tốc độ 4 MHz và các tính toán chỉ mất một chút thời gian so với đầu ra SPI. Phải mất 43 chu kỳ xung nhịp cho mỗi byte, do đó, mỗi 8 đầu ra. Điều này là đủ nhanh cho hầu hết các thiết lập. Bạn có thể nhận được nhiều tốc độ hơn bằng cách sử dụng điều chế mã bit, trong đó bạn có 8 giai đoạn cập nhật, mỗi giai đoạn tiếp theo bằng một nửa thời lượng trước đó. Tôi đã viết một phiên bản BCM, nhưng nó nhạy hơn với thời điểm bạn cập nhật cài đặt độ sáng. Nó có thể gây ra nhấp nháy khi nó bị sai lệch. Tôi có thể sẽ sử dụng nó trong phiên bản ma trận.
ElcoJacobs

BCM có lợi thế trong cách tiếp cận của bạn là bạn có thể sử dụng thời gian 1 / 2.1 / 4 ..., nhưng vẫn chỉ mất một pin cho mỗi đèn LED. Nếu bạn có nền tảng khoa học máy tính, bạn có thể thấy thú vị về cách tính các byte SPI. Tôi nhận được chu kỳ nhiệm vụ từ bộ nhớ (2 đồng hồ) và so sánh (1 đồng hồ). Kết quả so sánh được lưu trữ trong carry, vì vậy tôi có thể chuyển nó sang byte bằng cách xoay qua carry (1 clock). Làm điều đó 8 lần sẽ đặt tất cả các kết quả so sánh trong một byte sẵn sàng gửi đến SPI.
ElcoJacobs

13

Chỉ cần sao chép :-)

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

Hôm nay chúng tôi sẽ phát hành bản cập nhật cho dự án Bảng điều khiển LED mã nguồn mở của chúng tôi. Phiên bản 2 của Peggy đã được thiết kế lại từ đầu. Và nó trông giống như chính xác. Tuy nhiên, những thay đổi dưới mui xe là đáng kể và chúng tôi nghĩ rằng đó là một cải tiến lớn theo nhiều cách.

Đầu tiên và quan trọng nhất, Peggy 2.0 vẫn làm điều tương tự: nó cung cấp năng lượng hiệu quả cho một mảng 25 x 25 vị trí đèn LED. Peggy được thiết kế để có được một số sting, phức tạp và lộn xộn khi chơi với đèn LED. Đây là một bảng điều khiển phát sáng mạnh mẽ và linh hoạt cho phép bạn điều khiển hiệu quả hàng trăm đèn LED trong bất kỳ cấu hình nào bạn thích, mà không cần tính toán một điện trở tải đơn lẻ. Bạn có thể cài đặt bất cứ nơi nào từ một đến 625 đèn LED và Peggy sẽ thắp sáng chúng cho bạn.


Giờ đây, Peggy 2.0 cũng tương thích với Arduino: nó hỗ trợ lập trình thông qua cáp USB-TTL, sử dụng môi trường phần mềm Arduino phổ biến.


Liên kết tuyệt vời! Đánh dấu trang. Tôi đã không dự định thực hiện một dự án như thế này, nhưng tôi phải thực hiện ngay bây giờ tôi đã xem đoạn video nhỏ đó :-)
Wouter Simons

@NicolaeSurdu Không bị hỏng. Tôi vừa mở nó.
Axeman

3
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.

6

Bố trí nào bạn muốn đèn LED trong? Bạn có thể tiết kiệm rất nhiều công việc nếu bạn mua một số ma trận LED, bạn có thể nhận được các ma trận LED 8 màu một màu (64 đèn LED) cho một hoặc hai .

Bạn sẽ không nhận được tín hiệu PWM thực sự với một bộ đăng ký AVR và shift trên nhiều đèn LED này, nhưng bạn có thể giảm được 2-4 mức độ sáng. Bạn sẽ phải chạy các số và xem những gì có thể.

Allegro tạo ra một số thanh ghi dịch chuyển dòng chìm liên tục tiện dụng được thiết kế đặc biệt để kiểm soát các dãy đèn LED, do đó bạn không cần thêm điện trở, điều đó cũng sẽ giúp mọi việc đơn giản hơn. Bạn có thể không thể điều khiển đèn LED trực tiếp từ đầu ra AVR nếu nó không thể cung cấp đủ năng lượng, vì vậy bạn sẽ cần sử dụng bóng bán dẫn. Bạn có thể lấy chúng trong các mảng trong một IC , điều này cũng giúp tiết kiệm một số công việc.


tất cả những điểm rất tốt
Jason S

5

Tôi không biết phạm vi của PWM mà bạn cần cho một đèn LED nhưng tôi đã làm việc trên bộ điều khiển PWM 64 kênh cho một ứng dụng điều khiển servo có thể cho tôi các xung trong khoảng từ 600us đến 2,4ms. Điều này sử dụng CD74HCT238E (bộ phân kênh 3-8) để tạo 64 kênh từ 8 chân I / O trên ATMega168 và có thể điều khiển thông qua các lệnh nối tiếp đơn giản. Tôi đoán bạn có thể xâu chuỗi nhiều phiên bản của một phiên bản sửa đổi bộ điều khiển này với nhau trên một dòng nối tiếp và giải quyết tất cả 500 đèn LED ... Bạn có thể sử dụng phiên bản ATTiny2313 của bộ điều khiển vì yêu cầu phần sụn của bạn sẽ đơn giản hơn.

Blog của tôi chứa nguồn lắp ráp và sơ đồ và chi tiết của quá trình thiết kế.


5

Kiểm tra IC "trình điều khiển LED" trên mouser / digikey. TI, ví dụ, tạo ra một loạt các trình điều khiển với nhiều giao diện (I2C, SPI) chắc chắn sẽ đáp ứng nhu cầu của bạn. Hầu hết các trình điều khiển này được thiết kế để được xâu chuỗi để chuỗi nối tiếp từ một được nối vào nối tiếp trong một trình điều khiển khác.

Ví dụ, một cái gì đó như TLC5940 cung cấp điều khiển PWM 16 kênh. Vì vậy, về cơ bản, nó là một thanh ghi dịch chuyển 16 bit hiện tại không đổi với điều khiển PWM thang độ xám 12 bit. Tôi có thể đề nghị IC cụ thể đó vì tôi đã giúp thiết kế màn hình 80x16 với nó.


4

Mondomatrix tạo ra một số bảng điều khiển LED nối tiếp (rs-485) và dựa trên nền tảng Arduino: http://www.displayduino.com/ Bạn có thể kết hợp một hệ thống sử dụng phần cứng đó khá dễ dàng


4

Nếu bạn không muốn có quá nhiều bit điều khiển PWM cho mỗi đèn LED và bạn muốn tránh phải xử lý bộ xử lý với 500 đèn LED mỗi chu kỳ PWM, bạn có thể điều khiển 8 đèn LED với độ sáng N bit bằng N 74HC595 hoặc chip tương đương . Nối các đầu ra của tất cả các chip N lại với nhau và nối dây cho phép một số mạch sẽ chỉ bật một lúc với thời gian phù hợp. Sắp xếp sao cho con chip đầu tiên sẽ được kích hoạt một nửa thời gian, con chip thứ hai sẽ được kích hoạt trong một nửa phần còn lại, v.v.

Bất kỳ tải lại nào của các thanh ghi thay đổi phải được đồng bộ hóa với tốc độ PWM, để giảm thiểu hiệu ứng răng cưa (ví dụ: nếu mức độ sáng chuyển nhanh giữa 0111 và 1000, điểm trong chu kỳ PWM khi chuyển đổi xảy ra có thể thay đổi độ sáng rõ ràng trong giây lát ).

Mặc dù phải sử dụng nhiều đầu ra 74HC595 cho mỗi đèn LED có thể gây khó chịu, nhưng cách tiếp cận này có lẽ là cách đơn giản nhất có thể duy trì các mức độ sáng khác nhau mà không cần sự can thiệp của CPU.


3

Điều này không trực tiếp trả lời câu hỏi, nhưng một khía cạnh khác bạn có thể cần xem xét là sự thay đổi độ lớn có thể có giữa các đèn LED trong 500 lô của bạn. Điều đó đặc biệt quan trọng nếu các đèn LED này được gắn gần nhau, như trong ma trận hoặc trong màn hình 7 đoạn. Xem câu trả lời này để biết thêm chi tiết về cách giải quyết vấn đề này, đặc biệt là sử dụng hiệu chỉnh điểm để bù cho sự thay đổi độ sáng của đèn LED.

Tôi đã gặp vấn đề này khi tôi nhận được 200 đèn LED đỏ 1mm cho một bộ màn hình 7 đoạn lớn tôi đang chế tạo. Giải pháp giá rẻ của tôi để giải quyết vấn đề đòi hỏi như sau:

  1. Tôi đã xây dựng một bộ kiểm tra đèn LED trong một bảng mạch để phân loại các bộ đèn led trong các loại độ cao khác nhau
  2. Tôi gắn từng phân đoạn bằng đèn LED trong cùng một danh mục (trong thiết kế của tôi, mỗi phân đoạn bao gồm 5 đèn LED được gắn nối tiếp)
  3. Tôi đã bù cho sự khác biệt về độ sáng của từng đoạn bằng các điện trở giới hạn dòng khác nhau. Ví dụ, đối với một phân đoạn có đèn LED sáng hơn, tôi sẽ sử dụng điện trở 100 ohm, trong khi, đối với phân khúc khác có đèn LED mờ hơn, tôi sẽ sử dụng điện trở 120 ohm.

1
Điểm hợp lệ, nhưng không trả lời câu hỏi.
Matt Young

1
@MattYoung Đồng ý. Câu hỏi phần lớn được trả lời bởi tất cả các câu trả lời khác. Tôi chỉ muốn bổ sung cho những câu trả lời đó, giải quyết một vấn đề phụ có thể ảnh hưởng đến thiết kế của OP.
Ricardo


1

XMOS sử dụng Macroblock MBI5026 với bộ dụng cụ gạch LED. Tôi nghĩ rằng chúng được sử dụng trong hầu hết các hệ thống chuyên nghiệp khác.

Leon


1

Chip điều khiển chuyên dụng với giao diện nối tiếp thực sự có thể sẽ là con đường tốt nhất. Đối phó với các thanh ghi dịch chuyển riêng lẻ có thể có nghĩa là một mạch rất phức tạp. Ít nhất Maxim và TI làm cho một số. Tôi không nhớ nếu một trong hai có một mô hình đặc biệt phù hợp với điều đó.

Nó vẫn sẽ mất rất nhiều phần cứng.

Đối với sức mạnh, lập trình và xe buýt, bảng dữ liệu cho mỗi trình điều khiển có thể sẽ có hầu hết thông tin bạn cần.


1

Trong lĩnh vực phần mềm, nếu số lượng cài đặt độ sáng riêng biệt mà một nhu cầu không quá lớn, có thể hữu ích để lưu trữ dữ liệu ở định dạng "bit-phẳng" (như được mô tả trong câu trả lời dựa trên phần cứng khác của tôi) và sau đó có các thói quen đầu ra sử dụng các toán tử Boolean để hành động trên 8 pixel cùng một lúc. Để đạt hiệu quả tối đa, điều này sẽ yêu cầu có nhiều thói quen đầu ra riêng biệt, được sử dụng cho các phần khác nhau của chu kỳ PWM; ví dụ: nếu một người muốn sử dụng các giá trị độ sáng 4 bit, thì người ta sẽ sử dụng tám thói quen của biểu mẫu:

  Movf bit0Comp, w; Phải là 00 hoặc FF tùy thuộc vào bit 0 so sánh (FF nếu rõ)
  iorwf POSTINCF, w; Bit 0 của dữ liệu; luôn luôn sử dụng IORWF
  andwf POSTINCF, w; Bit 1 của dữ liệu; sử dụng IORWF nếu bit 1 so sánh được đặt; ANDWF nếu rõ ràng
  andwf POSTINCF, w; Bit 2 của dữ liệu; Sử dụng IORWF nếu bit 1 so sánh được đặt; ANDWF nếu rõ ràng
  andwf POSTINCF, w; Bit 2 của dữ liệu; Sử dụng IORWF nếu bit 1 so sánh được đặt; ANDWF nếu rõ ràng
  Movwf SPIREG; Lưu trữ byte kết quả (bit được đặt nếu> = so sánh)

Người ta sẽ sử dụng các kết hợp khác nhau của IORWF và ANDWF, tùy thuộc vào giá trị của phép so sánh. Lưu ý rằng sử dụng phương pháp này như được minh họa, người ta có thể cập nhật giá trị độ sáng pixel tại bất kỳ điểm nào trong chu kỳ PWM mà không nhấp nháy với điều kiện là tất cả bốn bit được ghi giữa các lệnh gọi đến thói quen thay đổi hiển thị hoặc bằng cách có thói quen cập nhật pixel xác định xem ca tiếp theo sẽ tạo ra "1" hoặc "0" cho pixel và cài đặt hoặc xóa tất cả các bit của pixel (bất kỳ thao tác nào sẽ làm cho nó làm bất cứ điều gì nó sẽ làm) và sau đó viết bất kỳ bit nào có giá trị ngược lại Cũng lưu ý rằng người ta có thể đạt được các thang độ sáng phi tuyến tùy ý bằng cách thay đổi thời gian của các cập nhật hiển thị hoặc bằng cách sử dụng một số giá trị so sánh nhiều lần trong một chu kỳ PWM.


1

Các GPU hoặc CPLD có thể tốt cho các tác vụ như vậy vì chúng cung cấp nhiều chân I / O. Đi cho đơn giản nhất và rẻ nhất. Nếu một là không đủ, sử dụng một vài.


Bạn có thể cho chúng tôi biết thêm một vài chi tiết về lý do tại sao đây là một lựa chọn tốt không, ngay bây giờ tôi biết về nó, nhưng tôi biết các tùy chọn đó là gì và các công nghệ được đề xuất mà bạn liệt kê là gì, Poster gốc (OP) có thể không có như vậy một hình nền.
Kortuk

Tôi không chắc đó là lựa chọn tốt nhất nhưng muốn nó được đề cập đến cho đầy đủ. Nếu điều khiển 500 đèn LED bằng PWM, bằng cách này hay cách khác, cuối cùng cần 500 dây điều khiển riêng lẻ. Thật khó để tìm thấy một vi điều khiển có rất nhiều chân đầu ra. Có rất nhiều cách xung quanh việc này vẫn sử dụng vi điều khiển, nhưng một hoặc một vài CPLD / FPGA giá rẻ có thể dễ dàng cung cấp cho các chân đầu ra đó.
Carl

1

Bạn gần như chắc chắn có thể làm điều này một cách dễ dàng bằng cách sử dụng PSoC3 hoặc PSoC5 .

Các chip PSoC là các bộ vi điều khiển có chứa phần cứng kỹ thuật số có thể cấu hình lại, hơi giống với một GPU hoặc CPLD. Điều này có nghĩa là bạn có thể tạo ra các mạch phức tạp để làm những việc khác thường như lái 500 đèn LED với PWM. Hơn nữa, bạn có thể có thể thực hiện toàn bộ bằng cách sử dụng các khối kỹ thuật số có thể định cấu hình lại, có nghĩa là phần CPU của chip chỉ cần ghi độ sáng LED mong muốn vào một mảng.

504 Đèn LED vừa vặn trong một hình chữ nhật 21 x 24. Nếu bạn có 24 kênh PWM và 21 GPIO, thì bạn có thể làm việc này. Đoán xem cái gì? PSoC có nhiều hơn thế.

Bạn có thể dễ dàng thiết lập 24 kênh PWM trên PSoC và định cấu hình 21 chân khác để trở thành một phần của thanh ghi thay đổi. Tiếp theo, định cấu hình một số kênh DMA để bơm byte từ bộ nhớ vào đầu ra PWM và bạn đang cười. Tất cả các CPU cần làm bây giờ là tạo đồ họa. PSoC3 có lõi 8051 8 bit, trong khi PSoC5 có ARM 32 bit. Bạn chọn đi. Các IC bên ngoài duy nhất bạn sẽ cần là một số ULN2804 để cung cấp dòng ổ cao cho các hàng. Các đầu ra PWM nên có đủ ổ đĩa hiện tại cho các đèn LED đơn.


Đây là tổng số quá mức cần thiết để lái xe LED. Có các trình điều khiển LED chuyên dụng, giá rẻ, được thiết kế sẵn được tạo ra để tạo ra số lượng lớn như thế này được sử dụng cho màn hình khổng lồ mọi lúc. Không cần phải phát minh lại tất cả và cho chi phí lớn hơn.
nemik

@nemik - Trên thực tế, tổng chi phí của các con chip (từ Farnell đắt tiền) chỉ 6,80 bảng.
Rocketmagnet

0

Tận dụng quy mô kinh tế. Các trang web của Trung Quốc như Aliexpress bán các dải đèn LED dựa trên WS2811 với giá ~ 15 đô la cho mỗi 50 đèn LED. Chúng có địa chỉ riêng, sáng, thường không thấm nước và có độ sáng PWM. Không có đăng ký hàn hoặc thay đổi để gây rối với một trong hai. Tự mình làm tất cả những điều này tôi đặt cược sẽ khiến bạn tốn nhiều tiền hơn, mất nhiều thời gian hơn và rất bực bội. Thêm vào đó, bạn đang ở Oz nên việc vận chuyển từ Trung Quốc sẽ không quá đắt.

Chúng được tạo ra để làm màn hình LED khổng lồ để chúng có xu hướng khá rẻ. Chỉ cần đảm bảo bơm lại khoảng 50 đèn LED để có hiệu suất tốt nhất.

Ngoài ra còn có thư viện Arduino để làm cho chúng dễ sử dụng.


1
$ 15 mỗi 50 đèn LED? Vậy đối với 500 đèn LED, con số này lên tới 150 đô la? Và bạn có đủ can đảm để nói với tôi giải pháp của tôi là đắt tiền? -1
Rocketmagnet

Ngoài ra, xin vui lòng bạn có thể cung cấp một liên kết đến này. WS801 không tốt cho Google và cũng không bật lên tìm kiếm trên Aliexpress
Rocketmagnet

Xin lỗi, ý tôi là WS2811, giống như những thứ này trên AliExpress.com/store/product/ , hoặc, không có sự làm mờ của PWM, những thứ này là AliExpress.com/store/product/ trộm
nemik

Một tín hiệu nối tiếp để điều khiển 50 đèn LED với độ mờ PWM. Cảm ơn, đây chính xác là những gì tôi đang theo đuổi. Nhưng một thanh ghi dịch chuyển tiêu chuẩn cung cấp chân "chốt" để sao chép dữ liệu được đệm vào đầu ra sau khi truyền toàn khung. Không có chốt ở đây vì vậy tôi mong đợi tiếng ồn đáng chú ý ở tốc độ làm mới cao. Các chip hỗ trợ dữ liệu 400 Kb / giây với 15 bit mỗi pixel, vì vậy màn hình sẽ hiển thị vô nghĩa trong 1,9 mili giây trong khi khung hình cập nhật.
nialsh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.