Free Trials

Download a free trial to find out which Altium software best suits your needs

How to Buy

Contact your local sales office to get started on improving your design environment

Downloads

Download the latest in PCB design and EDA software

  • PCB DESIGN SOFTWARE
  • Altium Designer

    Complete Environment for Schematic + Layout

  • CircuitStudio

    Entry Level, Professional PCB Design Tool

  • CircuitMaker

    Community Based PCB Design Tool

  • NEXUS

    Agile PCB Design For Teams

  • CLOUD PLATFORM
  • Altium 365

    Connecting PCB Design to the Manufacturing Floor

  • COMPONENT MANAGEMENT
  • Altium Concord Pro

    Complete Solution for Library Management

  • Octopart

    Extensive, Easy-to-Use Component Database

  • PRODUCT EXTENSIONS
  • PDN Analyzer

    Natural and Effortless Power Distribution Network Analysis

  • See All Extensions
  • EMBEDDED
  • TASKING

    World-Renowned Technology for Embedded Systems Development

  • TRAININGS
  • Live Courses

    Learn best practices with instructional training available worldwide

  • On-Demand Courses

    Gain comprehensive knowledge without leaving your home or office

  • ONLINE VIEWER
  • Altium 365 Viewer

    View & Share electronic designs in your browser

  • Altium Designer 20

    The most powerful, modern and easy-to-use PCB design tool for professional use

    ALTIUMLIVE

    Annual PCB Design Summit

    • Forum

      Where Altium users and enthusiasts can interact with each other

    • Blog

      Our blog about things that interest us and hopefully you too

    • Ideas

      Submit ideas and vote for new features you want in Altium tools

    • Bug Crunch

      Help make the software better by submitting bugs and voting on what's important

    • Wall

      A stream of events on AltiumLive you follow by participating in or subscribing to

    • Beta Program

      Information about participating in our Beta program and getting early access to Altium tools

    All Resources

    Explore the latest content from blog posts to social media and technical white papers gathered together for your convenience

    Downloads

    Take a look at what download options are available to best suit your needs

    How to Buy

    Contact your local sales office to get started improving your design environment

    • Documentation

      The documentation area is where you can find extensive, versioned information about our software online, for free.

    • Training & Events

      View the schedule and register for training events all around the world and online

    • Design Content

      Browse our vast library of free design content including components, templates and reference designs

    • Webinars

      Attend a live webinar online or get instant access to our on demand series of webinars

    • Support

      Get your questions answered with our variety of direct support and self-service options

    • Technical Papers

      Stay up to date with the latest technology and industry trends with our complete collection of technical white papers.

    • Video Library

      Quick and to-the-point video tutorials to get you started with Altium Designer

    RGB + White LED Strip Controller

    Mark Harris
    |  August 4, 2020
    RGB + White LED Strip Controller

    I’ve been playing around with RGB LED strips recently for lighting up my test equipment rack as well as some display shelves. On the display shelves, I have the RGB LED strips behind the shelves, which gives a great definition to the objects on the shelf. But I also want to have a high CRI white LED strip on each shelf to light up the objects. Typical RGBW LED strips available through online marketplaces do not have very good white LEDs, and I’m not looking for an integrated LED strip. I can’t find a low cost LED strip controller that would drive RGBW strips, nevermind a separate white LED strip.

    I’ve built a few LED drivers as projects in the past, but that’s not what we need here. We don’t need to provide a constant current to an LED strip, as they have current limiting resistors on each diode. All we need to do is provide power and a PWM signal to each coloured diode to get the desired blend. I want this to be relatively simple and cheap, and the infrared remote controls that can be purchased incredibly cheaply through online marketplaces such as Amazon and eBay are great for LED strips. These are much more convenient than having to write a mobile app to use Bluetooth or WiFi to control the LED strips.

    A full roll of the very low-cost strip I purchased only consumes about 0.5A per colour at full power. I know that a better RGB LED strip would need higher current—so I want this controller to be capable of at least a couple of amps per channel. My high CRI white strip certainly pulls far more current than the RGB! Every RGB strip I’ve ever purchased has been a common anode configuration, which is fantastic as it allows us to use a low resistance N-Channel MOSFET for switching the colours. 

    As we need four identical drivers, this is a fantastic chance to demonstrate one of my favorite time-saving features in Altium: multi-channel design.

    As always, you can find this project with all my others on GitHub, released under the permissive MIT open source license. You can find the components used for this project in my free open source Celestial Altium Library.

    Schematic Overview

    To use multi-channel functionality, we’ll need a hierarchical schematic. My top sheet has my connectors, and since its such a simple project, it also has my voltage regulator and the IR receiver.

    Top Schematic


    Microcontroller

    Despite being a 4-channel LED controller, we only have two other schematic sheets. Firstly, we have the microcontroller. I’m using an NXP LPC11Uxx series microcontroller. I’ve used these in past projects because they are quick and easy to develop code for using MBED or LPCOpen, and I have a well-proven schematic for utilising the MCU. 

    MCU


    The part of the microcontroller schematic of most interest to us is the LED bus.

    MCU Bus

    It’s a simple bus with Bus Entries to each net on the microcontroller. Note that we start our channel numbers at 1, rather than 0 as you might typically see. Multi-channel buses must start with 1. As this is a multi-sheet schematic, we could name the nets in each sheet whatever we want, but I like to try to keep the same net names across sheets where they will connect, just to preserve my sanity when looking through different sheets.

    LED Channel

    We only have one schematic sheet with just a single driver and MOSFET for all the LED channels. 

    LED Channel

    With the multi-channel capabilities, we could use one schematic sheet with the single driver/MOSFET on it for any number of channels, all of which would be identical, and any changes made applied to all channels.

    I have a very simple gate driver in the schematic to ensure the MOSFET reaches its minimum switched on resistance, the 3.3V from the microcontroller isn’t going to make that happen. Additionally, my test equipment rack is in the background of video shots, so I want to ensure the PWM frequency I use for it will be quite high, so there is no banding or flicker in the video. The gate charge on the MOSFET is not very high. Still, the drive current available from the microcontroller is fairly limited, so having a driver ensures that both the on-resistance is minimised and that I don’t burn out the microcontroller pin.

    Multi-Channel Configuration

    Firstly, we need to create a sheet symbol from the LED channel schematic sheet. We could do this by placing a sheet symbol on the top-level schematic and then linking it to the LED channel sheet, then add the ports… or we can take the easy route by right-clicking on the top-level sheet and selecting Sheet Actions → Create Sheet Symbol From Sheet.

    Create Sheet Symbol

    This gives us a basic sheet symbol, which is a single LED channel.

    New Sheet Symbol

    Instead, I need 4 channels to program this symbol by renaming it REPEAT(LED,1,4). LED is the name each channel will start with. The 1 is my starting channel number, and 4 is the end channel number. This matches up with my bus pin naming. 

    We also need to add REPEAT to the ports' names on the symbol, so each channel will get its own connection on the bus for those ports. If you had something like an SPI bus, you would only REPEAT the chip select (CS) pin, with the other ports (MOSI/MISO/SCLK) being common between the channels. This offers a lot of flexibility to multichannel design.

    Top Driver

    Because these are ports for a single net per channel and not a bus, we need to use a regular net wire to connect them. This should have a netlabel with the same name as the bus, just without the pin information. 

    MCU Led

    This allows us to connect the bus of pins with the same numbers as each channel into the channels from the microcontroller. The microcontroller port is labelled as a bus, and needs to have a bus connection coming from it and into the wire for the channel. It can take a little bit of time to wrap your head around the idea of the busses and nets for these repeated ports/channels. I find the best way to think of it is to consider the port function for each repeated channel rather than the multi-channel block itself.

    Board Layout

    You can verify your multi-channel design has been configured correctly when you go to update your PCB document. The engineering change order will have multiples of each net that is in the channel, as you can see below with the GATE_LED, LED_CTL, LED_OUT nets, and bus entries. You’ll also see multiple components for each net in the change order and, most importantly, multiple rooms.

    Change Order

    We can now layout a single channel of the LED within its room and minimise the room size to just larger than the components. For an application like this, where the channels are going to be very tightly spaced, keeping the room size as small as possible is important. By default, Altium will assign components, vias, and tracks to a room based on if they are within the room boundaries or not. To avoid frustration when rearranging rooms as you work on your layout, you want to minimise the room size so Altium won’t drag tracks or vias from an adjacent channel because those objects are within the room you are dragging.

    Single Channel PCB

    To apply this same layout and routing to all the other channels, we can go to Design → Rooms → Copy Room Formats.

    Copy Room Format


    Then select the room that was laid out and routed as the template, followed by another room in the channel.

    Apply Selected Channel


    If you select the Apply to Specified Channels box, it will automatically apply the template to every room within the template, allowing you to layout and route potentially hundreds of channels in a single click. If you were building a device with a lot of identical input or output channels, this is an incredible time-saver, especially with critical routing such as analog instrumentation signals.

    Channel Room Layout

    With just a little more work, our multiple LED channels are aligned with the connector.

    Finished Board

    To finish off the channel routings, I added polygons between the MOSFET and the connector. The rest of the board is pretty typical routing. I connected several of the unused microcontroller pins to ground to facilitate ground pour continuity across the board. 

    Even with my low cost LED strip, we would still have 1.5A of current draw from the 12V input to the RGB channels, so there does need to be some consideration for current paths. Adding in the high brightness, high CRI LED strip we increase that draw further - and with some better quality LED strip, the total draw of the board is more than enough to have some consideration for the layout.

    I have a large bulk capacitor at the 12V pin for the RGB strip, and a smaller capacitor for the white channel to reduce switching noise from the channels getting dimmed or colour mixed.

    Top Routed


    The finished board is a great size for me to hide away somewhere yet still have the IR receiver able to receive a signal from the remote. With no components on the bottom and no clearance issues with connectors, I can simply add some sticky-backed velcro to the bottom of the board for mounting.

    Completed PCB

    Finally

    As mentioned at the beginning of the article, you can find this project on GitHub. The design and all of its files are released under the MIT license for you to do with as you wish.

    Check more of Mark Harris’s projects using Altium Designer. Would you like to find out more about how Altium can help you with your next PCB design? Talk to an expert at Altium and learn more about making design decisions with ease and confidence.

    About Author

    About Author

    Mark Harris is an engineer's engineer, with over 12 years of diverse experience within the electronics industry, varying from aerospace and defense contracts to small product startups, hobbies and everything in between. Before moving to the United Kingdom, Mark was employed by one of the largest research organizations in Canada; every day brought a different project or challenge involving electronics, mechanics, and software. He also publishes the most extensive open source database library of components for Altium Designer called the Celestial Database Library. Mark has an affinity for open-source hardware and software and the innovative problem-solving required for the day-to-day challenges such projects offer. Electronics are passion; watching a product go from an idea to reality and start interacting with the world is a never-ending source of enjoyment. 

    You can contact Mark directly at: mark@originalcircuit.com

    most recent articles

    Back to Home