Difference between revisions of "LED Matrix Failure"

From eLinux.org
Jump to: navigation, search
(Left->Right Left->Right)
 
(57 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
= Goal =
 
= Goal =
Document the failure and redesign of a LED Matrix display consisting of 30 strips of Adafruit Dotstar LEDs.<br>
+
This article documents the design of an easily portable "roll up" 70 x 30 RGB APA102 LED matrix display banner, driven from a  [http://linuxgizmos.com/enhanced-open-source-minnowboard-makes-a-splash-at-idf/ MinnowBoard Turbot] board.  We'll talk about the issues encountered with its implementation, and the resulting redesign that addressed some unanticipated complications and critical failures.<br>
[[File:LED-matric.jpg|300px]]
+
[[File:LED-matric.jpg|600px]]
 +
[[File:rgb-test.jpg|420px]]
 +
 
 +
<br>
  
 
= Components =
 
= Components =
  
 +
* [http://linuxgizmos.com/enhanced-open-source-minnowboard-makes-a-splash-at-idf/ MinnowBoard Turbot]
 +
* Linux kernel and root file system built using OpenEmbedded - [http://www.yoctoproject.org YoctoProject.org]
 +
* [[Tadpole Lure]]
 +
* [https://www.adafruit.com/products/395 Adafruit TXB0108 Breakout Board]
 
* [http://hancockfabrics.com/citadel-texture-tweed-black-upholstery-fabric-3664380.html 57" x 30" Black Upholstery Fabric]
 
* [http://hancockfabrics.com/citadel-texture-tweed-black-upholstery-fabric-3664380.html 57" x 30" Black Upholstery Fabric]
 
* [http://amzn.com/B00UHFULR0 Metal Grommet Press]
 
* [http://amzn.com/B00UHFULR0 Metal Grommet Press]
 
* [http://www.adafruit.com/products/2239 Adafruit DotStar Digital LED Strip - Black 60 LED - Per Meter - BLACK]  
 
* [http://www.adafruit.com/products/2239 Adafruit DotStar Digital LED Strip - Black 60 LED - Per Meter - BLACK]  
* [http://www.digikey.com/product-detail/en/PMT-5V350W1AM/1145-1081-ND/4386552 Power Supply 5V@60A 350W]  
+
* [http://www.digikey.com/product-detail/en/PMT-5V350W1AM/1145-1081-ND/4386552 2x Power Supply 5V@60A 350W]  
* Connectors
+
* Connectors - each set of DotStar LED strips comes with a pair of 4-pin "male" and "female" connectors these were reused in the design<br>
 +
[[File:4pin-male-dotstar.jpg|150px]]
 +
[[File:4pin-female-dotstar.jpg|150px]]
 +
<br>
  
 
= Layout =
 
= Layout =
  
== Left->Right Left->Right ==
+
== Base ==
The Dotstar LEDs are arranged in a chained sequence. the intention was to cut the strips and align them with on the fabric in a "left to right - left to right" sequence similar to tradition LCD panels. this sequence is typically something like this for an 5x5 pixel example:
+
The background base for the matrix display was made with some black upholstery fabric cut to 57" x 30" and the edges hemmed to prevent fraying. Then, a manual metal grommet press was used to add grommets to each of the four corners. <br>
<pre>
+
[[File:Grommet-1.jpg|300px]]
01 02 03 04 05
+
[[File:Grommet-2.jpg|300px]]
06 07 08 09 10
+
<br>
11 12 13 14 15
 
16 17 18 19 20
 
21 22 23 24 25
 
</pre>
 
  
the issue with this that to implement this with the LED strips, two wires need to connect the end of one LED strip to the beginning of the next, in the 5x5 pixel example above, the SPI clock and data need to connect from the end at 05 to the beginning of the next line at 06. this creates a wiring nightmare on the back side of the design:
+
== Left&rarr;Right Left&rarr;Right ==
 +
The DotStar LEDs were arranged in a chained sequence; each strip cut and aligned on the fabric in a "left to right - left to right", sequence similar to traditional LCD panels, also referred to as "Row Major" sequence. This sequence can be illustrated using a 5x5 pixel example:
 +
 
 +
  01 02 03 04 <span style="color:red">05</span>
 +
  <span style="color:red">06</span> 07 08 09 <span style="color:blue">10</span>
 +
  <span style="color:blue">11</span> 12 13 14 <span style="color:green">15</span>
 +
  <span style="color:green">16</span> 17 18 19 <span style="color:violet">20</span>
 +
  <span style="color:violet">21</span> 22 23 24 25
 +
 
 +
By arranging the LED strips like this, two wires (for the SPI clock and data lines) are needed to connect the end of one LED strip to the beginning of the next. (In the 5x5 pixel example above, two wires connect form the end at 05 to the beginning of the next line at 06). This creates a wiring nightmare on the back side of the design where long wires run the width of the matrix:
 
<br>
 
<br>
[[File:Backside-wiring-led.jpg|300px]]
 
[[File:Backside-closeup-led.jpg|300px]]
 
  
the thought was by design it this way, and working similar to existing display devices, software support would be easy and require little or no effort to implement. while this was true the long wires created both signaling and logistical problems during implementation.
+
[[File:Backside-wiring-led.jpg|600px]]
 +
[[File:Backside-closeup-led.jpg|x230px]]
 +
 
 +
The thought was, by designing it this way and working similar to existing display devices, software support would be easy and require little or no effort to implement. Projects such as FBTFT(https://github.com/notro/fbtft/wiki) could be used without modification. While this was true, the long wires created both signaling and logistical problems during implementation.
 
<br>
 
<br>
  
== Left->Right Right->Left ==
+
== Sewing to Upholstery ==
To remove the need for the long wires it makes more sense hardware wise to implement the strips using the "left to right - right to left" sequence. this is represented again in a 5x5 pixel example:
 
<pre>
 
01 02 03 04 05
 
10 09 08 07 06
 
11 12 13 14 15
 
20 19 18 17 16
 
21 22 23 24 25
 
</pre>
 
  
as you can see the encoding is a little more difficult, but it can be easily handled in software to sequence this. the trade off here between a little more difficult in software, and a LOT easier in hardware, really is the only choice.
+
The LED strips were sewn to the upholstery using a fine needle and thread. Alas, we quickly discovered the thread tension could easily damage the flex pads between each LED on the LED strips (where the strips can be cut). It was also hard to keep the spacing consistent between each row while sewing the strips directly to the upholstery. (Consistent spacing is important to a nice matrix display.)<br>
 +
[[File:Dotstar-spacing.jpg|600px]]
 
<br>
 
<br>
  
 
= Connections =
 
= Connections =
  
* power connections
+
== Power Connections ==
* long wires
+
 
* broken flex pads
+
One of the major time consuming tasks on the project was making the power connections. Each LED strip needed both power and ground, and these connections required even distribution across the LED strips and two power supplies were needed because of the number of LEDs used. Careful consideration had to made to ensure that the two supplies were not connected to each other. In the image below, the black wires are ground and the white wires are +5V. Two red wires are visible which are the separate +5V connections to the two power supplies.<br>
 +
[[File:Power-ledmatrix.jpg|600px]]
 +
<br>
 +
 
 +
== Long Signal Wires ==
 +
 
 +
During initial testing with the MinnowBoard Turbot, we discovered that the SPI clock and data signals wires between the MinnowBoard Turbot and the first LED on the DotStar string had to be less than 24 inches or the signal strength would not work. However, we saw the signals between the end of one LED string and the beginning of the next were about 55 inches long and they did work. After closer inspection with an oscilloscope, it was clear that the APA102 RGB LEDs provided a much higher drive strength for the SPI signals, so as a quick fix, we connected two of the DotStar LEDs only a few inches from the MinnowBoard Turbot and then used a longer connection to the first set of LEDs on the matrix. These initial two LEDs can either be programmed as off (black) or used as status indicators. (For this project we added some code to indicate the status and timing of some of the signals.)<br>
 +
 
 +
[[File:Short-dotstar-connection.jpg|250px]]
 +
[[File:Short-dotstar-connection-part.jpg|210px]]
 +
 
 +
<br>
 +
 
 +
== Broken Flex Pads ==
 +
 
 +
As we mentioned earlier, the long wires on the back side of the matrix display fabric were proving problematic both in length and logistics. The long wires also created tension on the flex pads at the end of each LED strip, and caused many of the pads to rip off and forcing us to repair the display by soldering the wires directly to the LED.
 +
 
 +
[[File:Led-broken-flex.jpg|600px]]
 +
<br>
  
= Signal Issues =
+
= Redesign =
  
* long SPI signals
+
== Left&rarr;Right Right&rarr;Left ==
* quick fix
+
By rewiring the LED strips to use a "left to right - right to left" sequence, we can eliminate the use of the long wires on the back, also referred to as a "zigzag" sequence. In this design, we only need two short wires to connect the end of one row to the beginning of the next.  Using our 5x5 pixel example, it would look like this:
  
= PCB Design =
+
  01 02 03 04 <span style="color:red">05</span>
 +
  <span style="color:blue">10</span> 09 08 07 <span style="color:red">06</span>
 +
  <span style="color:blue">11</span> 12 13 14 <span style="color:green">15</span>
 +
  <span style="color:violet">20</span> 19 18 17 <span style="color:green">16</span>
 +
  <span style="color:violet">21</span> 22 23 24 25
  
* signals
+
This matrix encoding can be easily handled in the software; the trade off here is between a little more difficult in software, and a LOT easier and more reliable in hardware.
* layout
+
<br>
* features
+
 
* eagle files
+
== Layout and Features ==
* soldering
+
 
 +
The new layout uses a custom PCB to connect the ends of the two adjacent rows of LED strips and routes the signals, instead of using individual wires in the previous design.  This creates a solid connection and eliminates the flexing stress on the end flex pads. It also helps keep the row spacing consistent by keeping an even spacing on each side. The PCB has holes added, so it could be sewn to the base upholstery fabric without damaging the LED strips. Two solder points are available at the top and bottom edges of the PCB to provide power and ground and ensures that each strip gets power evenly.
 +
<br>
 +
<br>
 +
[[File:Dotstar-adapter.png|600px]]
 +
[[File:Dotstar-adapter.jpg|x315px]]
 +
 
 +
<br>
 +
 
 +
== Design Files ==
 +
* [[media:dotstar-adapter.pdf|schematic PDF]]
 +
* [[media:dotstar-adapter-eagle.zip|Eagle CAD Files]]
 +
* [[media:dostar-adapter-gerbers.zip|Gerbers]]
 +
 
 +
== Soldering ==
 +
<br>
 +
[[File:Dotstar-adapter-solder1.jpg|600px]]
 +
<br>
 +
<br>
 +
[[File:Dotstar-adapter-solder2.jpg|600px]]
 +
<br>
 +
<br>
 +
[[File:Dotstar-adapter-solder3.jpg|600px]]
 +
<br>
 +
<br>

Latest revision as of 14:25, 3 September 2015

Goal

This article documents the design of an easily portable "roll up" 70 x 30 RGB APA102 LED matrix display banner, driven from a MinnowBoard Turbot board. We'll talk about the issues encountered with its implementation, and the resulting redesign that addressed some unanticipated complications and critical failures.
LED-matric.jpg Rgb-test.jpg


Components

4pin-male-dotstar.jpg 4pin-female-dotstar.jpg

Layout

Base

The background base for the matrix display was made with some black upholstery fabric cut to 57" x 30" and the edges hemmed to prevent fraying. Then, a manual metal grommet press was used to add grommets to each of the four corners.
Grommet-1.jpg Grommet-2.jpg

Left→Right Left→Right

The DotStar LEDs were arranged in a chained sequence; each strip cut and aligned on the fabric in a "left to right - left to right", sequence similar to traditional LCD panels, also referred to as "Row Major" sequence. This sequence can be illustrated using a 5x5 pixel example:

 01 02 03 04 05
 06 07 08 09 10
 11 12 13 14 15
 16 17 18 19 20
 21 22 23 24 25

By arranging the LED strips like this, two wires (for the SPI clock and data lines) are needed to connect the end of one LED strip to the beginning of the next. (In the 5x5 pixel example above, two wires connect form the end at 05 to the beginning of the next line at 06). This creates a wiring nightmare on the back side of the design where long wires run the width of the matrix:

Backside-wiring-led.jpg Backside-closeup-led.jpg

The thought was, by designing it this way and working similar to existing display devices, software support would be easy and require little or no effort to implement. Projects such as FBTFT(https://github.com/notro/fbtft/wiki) could be used without modification. While this was true, the long wires created both signaling and logistical problems during implementation.

Sewing to Upholstery

The LED strips were sewn to the upholstery using a fine needle and thread. Alas, we quickly discovered the thread tension could easily damage the flex pads between each LED on the LED strips (where the strips can be cut). It was also hard to keep the spacing consistent between each row while sewing the strips directly to the upholstery. (Consistent spacing is important to a nice matrix display.)
Dotstar-spacing.jpg

Connections

Power Connections

One of the major time consuming tasks on the project was making the power connections. Each LED strip needed both power and ground, and these connections required even distribution across the LED strips and two power supplies were needed because of the number of LEDs used. Careful consideration had to made to ensure that the two supplies were not connected to each other. In the image below, the black wires are ground and the white wires are +5V. Two red wires are visible which are the separate +5V connections to the two power supplies.
Power-ledmatrix.jpg

Long Signal Wires

During initial testing with the MinnowBoard Turbot, we discovered that the SPI clock and data signals wires between the MinnowBoard Turbot and the first LED on the DotStar string had to be less than 24 inches or the signal strength would not work. However, we saw the signals between the end of one LED string and the beginning of the next were about 55 inches long and they did work. After closer inspection with an oscilloscope, it was clear that the APA102 RGB LEDs provided a much higher drive strength for the SPI signals, so as a quick fix, we connected two of the DotStar LEDs only a few inches from the MinnowBoard Turbot and then used a longer connection to the first set of LEDs on the matrix. These initial two LEDs can either be programmed as off (black) or used as status indicators. (For this project we added some code to indicate the status and timing of some of the signals.)

Short-dotstar-connection.jpg Short-dotstar-connection-part.jpg


Broken Flex Pads

As we mentioned earlier, the long wires on the back side of the matrix display fabric were proving problematic both in length and logistics. The long wires also created tension on the flex pads at the end of each LED strip, and caused many of the pads to rip off and forcing us to repair the display by soldering the wires directly to the LED.

Led-broken-flex.jpg

Redesign

Left→Right Right→Left

By rewiring the LED strips to use a "left to right - right to left" sequence, we can eliminate the use of the long wires on the back, also referred to as a "zigzag" sequence. In this design, we only need two short wires to connect the end of one row to the beginning of the next. Using our 5x5 pixel example, it would look like this:

 01 02 03 04 05
 10 09 08 07 06
 11 12 13 14 15
 20 19 18 17 16
 21 22 23 24 25

This matrix encoding can be easily handled in the software; the trade off here is between a little more difficult in software, and a LOT easier and more reliable in hardware.

Layout and Features

The new layout uses a custom PCB to connect the ends of the two adjacent rows of LED strips and routes the signals, instead of using individual wires in the previous design. This creates a solid connection and eliminates the flexing stress on the end flex pads. It also helps keep the row spacing consistent by keeping an even spacing on each side. The PCB has holes added, so it could be sewn to the base upholstery fabric without damaging the LED strips. Two solder points are available at the top and bottom edges of the PCB to provide power and ground and ensures that each strip gets power evenly.

Dotstar-adapter.png Dotstar-adapter.jpg


Design Files

Soldering


Dotstar-adapter-solder1.jpg

Dotstar-adapter-solder2.jpg

Dotstar-adapter-solder3.jpg