Estou pensando em assumir um projeto que envolveria o endereçamento individual de 500 LEDs, de maneira ideal com suporte a PWM para cada um.
Estou planejando usar um Arduino já que já tenho um, mas estou aberto a sugestões se alguém achar que uma plataforma diferente seria uma combinação melhor.
Registros de turnos precisariam ser empregados. O que é um bom registro de turno para usar nessa situação? Se o PWM tornar esse projeto muito mais caro, eu posso ficar sem ele. Quero tentar gastar menos de US $ 100. Eu compraria em massa 500 LEDs no ebay.
Qual a sua opinião sobre a melhor maneira de controlar um número tão grande de LEDs? Além disso, como eu iria fornecer o poder? Eu apreciaria qualquer ajuda. Sou bastante experiente em eletrônica, nunca fiz nada em larga escala.
fonte
Basta copiar :-)
http://www.evilmadscientist.com/article.php/peggy2
fonte
Em que layout você deseja os LEDs? Você pode economizar muito trabalho se comprar algumas matrizes de LED. Você pode obter matrizes de 8x8 LED de cor única (64 LEDs) por um ou dois dólares .
Você não terá um PWM real com um AVR e registros de deslocamento nesses muitos LEDs, mas poderá espremer de 2 a 4 níveis de brilho. Você teria que executar os números e ver o que é possível.
A Allegro cria alguns registradores de troca de coletor de corrente constante, projetados especificamente para controlar matrizes de LEDs, para que você não precise de resistores extras, que também tornarão as coisas mais simples. Talvez você não consiga acionar os LEDs diretamente da saída do AVR se ele não fornecer energia suficiente, portanto, você precisará usar transistores. Você pode colocá-los em matrizes em um único IC , o que economiza algum trabalho também.
fonte
Não tenho idéia da faixa de PWM necessária para um LED, mas estou trabalhando em um controlador PWM de 64 canais para um aplicativo de servocontrole que pode me fornecer pulsos entre 600us e 2,4ms. Ele usa o CD74HCT238E (desmultiplexadores de 3-8 linhas) para gerar 64 canais a partir de 8 pinos de E / S em um ATMega168 e é controlável através de simples comandos seriais. Eu acho que você pode encadear várias versões de uma versão modificada deste controlador em uma linha serial e endereçar todos os 500 LEDs ... Você provavelmente poderia usar a versão ATTiny2313 do controlador, pois seus requisitos de firmware seriam mais simples.
Meu blog contém a origem da montagem, esquemas e detalhes do processo de design.
fonte
Confira os CIs "driver de LED" na mouser / digikey. A TI, por exemplo, fabrica vários drivers com uma variedade de interfaces (I2C, SPI) que certamente atenderiam às suas necessidades. A maioria desses drivers é projetada para ser encadeada, para que a saída serial de um seja alimentada na entrada serial de outro.
Por exemplo, algo como o TLC5940 oferece controle PWM de 16 canais. Portanto, basicamente é um registro de deslocamento atual de 16 bits constante com controle PWM de escala de cinza de 12 bits. Posso recomendar esse IC em particular quando ajudei a projetar um monitor de 80x16 com ele.
fonte
A Mondomatrix fabrica algumas placas de driver LED endereçáveis seriais (rs-485) e baseia-se na plataforma Arduino: http://www.displayduino.com/ Você pode montar um sistema usando esse hardware com bastante facilidade
fonte
Se você não deseja muitos bits de controle PWM para cada LED e deseja evitar ter que um processador se atrapalhar com 500 LEDs a cada ciclo PWM, pode controlar 8 LEDs com N bits de brilho usando N 74HC595 ou chips equivalentes . Conecte as saídas de todos os chips N e conecte os capacitadores a alguns circuitos que permitirão apenas um de cada vez no tempo adequado. Organize para que o primeiro chip seja ativado na metade do tempo, o segundo será ativado na metade do restante, etc.
Qualquer recarga dos registros de turno deve ser sincronizada com a taxa de PWM, de modo a minimizar os efeitos de serrilhado (por exemplo, se um nível de brilho alternar rapidamente entre 0111 e 1000, o ponto no ciclo de PWM em que o comutador ocorreu pode alterar momentaneamente o brilho aparente )
Embora o uso de várias saídas 74HC595 para cada LED possa ser irritante, essa abordagem é provavelmente a mais simples que pode manter diferentes níveis de brilho sem a intervenção contínua da CPU.
fonte
Isso não responde diretamente à pergunta, mas outro aspecto que você deve considerar é a possível variabilidade de brilho entre os LEDs no seu lote de 500. Isso é particularmente importante se esses LEDs forem montados próximos um do outro, como em uma matriz ou em displays de 7 segmentos. Consulte esta resposta para obter mais detalhes sobre como resolver esse problema, em particular, usando a correção de pontos para compensar as variações no brilho do LED.
Eu experimentei esse problema quando obtive 200 LEDs vermelhos de 1 mm para um conjunto de displays grandes de 7 segmentos que eu estava construindo. Minha solução barata para resolver o problema envolvia o seguinte:
fonte
Sugiro usar a técnica de modulação de ângulo binário descrita neste artigo http://www.artisticlicence.com/WebSiteMaster/App%20Notes/appnote011.pdf
Ou consulte a biblioteca ShiftPWM http://www.elcojacobs.com/shiftpwm/
fonte
O XMOS usa o Macroblock MBI5026 com seus kits de LEDs. Eu acho que eles são usados na maioria dos outros sistemas profissionais.
Leon
fonte
Chips de driver dedicados com interfaces seriais provavelmente serão a melhor rota. Lidar com registros de turno individuais provavelmente significará um circuito muito complexo. Pelo menos Maxim e TI fazem alguns. Não me lembro se um deles tem um modelo particularmente adequado para isso.
Ainda será preciso muito hardware.
Quanto à energia, programação e barramentos, a folha de dados de cada driver provavelmente terá mais informações necessárias.
fonte
Dentro da área de software, se o número de configurações distintas de brilho necessárias não for muito grande, pode ser útil armazenar os dados no formato "bit-planar" (conforme descrito em minha outra resposta baseada em hardware) e, em seguida, ter o As rotinas de saída usam operadores booleanos para atuar em 8 pixels de uma vez. Para máxima eficiência, isso exigirá ter várias rotinas de saída separadas, usadas para diferentes partes do ciclo do PWM; por exemplo, se desejar usar valores de brilho de 4 bits, use oito rotinas do formulário:
Um poderia usar combinações diferentes de IORWF e ANDWF, dependendo do valor do comparando. Observe que, usando essa abordagem como ilustrado, é possível atualizar os valores de brilho do pixel em qualquer ponto do ciclo do PWM sem tremulação, desde que todos os quatro bits sejam gravados entre as chamadas para a rotina de troca de exibição ou fazendo com que a rotina de atualização de pixel determine se o o próximo turno produzirá um "1" ou um "0" para o pixel, e definir ou limpar todos os bits do pixel (qualquer operação que faça o que for necessário de qualquer maneira) e, em seguida, escrever os bits cujo valor deve seja oposto. Observe também que é possível atingir escalas de brilho não lineares arbitrárias variando o tempo das atualizações do monitor ou usando alguns valores de comparação e mais de uma vez em um ciclo PWM.
fonte
FPGAs ou CPLDs podem ser bons para essas tarefas, pois oferecem muitos pinos de E / S. Vá para o mais simples e mais barato. Se um não for suficiente, use um casal.
fonte
Você quase certamente pode fazer isso facilmente usando um PSoC3 ou PSoC5 .
Os chips PSoC são microcontroladores que contêm hardware digital reconfigurável, um pouco como um FPGA ou CPLD. Isso significa que você pode fazer circuitos complexos para fazer coisas incomuns, como acionar 500 LEDs com PWM. Além disso, você provavelmente pode implementar tudo usando os blocos digitais reconfiguráveis, o que significa que a parte da CPU do chip precisa apenas gravar os brilhos de LED desejados em uma matriz.
504 LEDs se encaixam em um retângulo 21 x 24. Se você tivesse 24 canais PWM e 21 GPIO, poderia fazer isso funcionar. Adivinha? O PSoC tem mais do que isso.
Você pode configurar facilmente 24 canais PWM em um PSoC e configurar 21 outros pinos para fazer parte de um registro de turno. Em seguida, configure alguns canais DMA para bombear bytes da memória para as saídas PWM e você estará rindo. Tudo o que a CPU precisa fazer agora é gerar os gráficos. O PSoC3 possui um núcleo 8051 de 8 bits, enquanto o PSoC5 possui um ARM de 32 bits. Faça sua escolha. Os únicos ICs externos de que você precisará são alguns ULN2803s para fornecer a alta corrente do inversor para as linhas. As saídas PWM devem ter unidade de corrente suficiente para LEDs únicos.
fonte
Faça uso de economias de escala. Sites chineses como Aliexpress vendem fitas de LED baseadas em WS2811 por ~ $ 15 por 50 LEDs. Eles são endereçáveis individualmente, brilhantes, geralmente à prova d'água e possuem PWM para brilho. Não há registros de solda ou turno para mexer com eles. Fazendo tudo isso sozinho, aposto que vai custar mais, levar muito mais tempo e ser muito frustrante. Além disso, você está em Oz, portanto, o transporte da China não será muito caro.
Eles são feitos para a fabricação de displays de LED gigantes, por isso tendem a ser bem baratos. Apenas certifique-se de injetar energia a cada 50 LEDs para obter o melhor desempenho.
Também existem bibliotecas do Arduino para torná-las fáceis de usar.
fonte