Ver 2.5 Manual
High Power RGB LED Shield – Ver 2.5
The High Power RGB LED (HPRGB) Shield is a 3-Channel LED shield designed for High Power LEDs with constant current dynamically programmable from 100mA – 700mA per channel. While it is designed to function as an Arduino shield it can be driven from any micro controller platform that features an I2C bus interface such as Teensy3.1, Raspberry Pi, Beaglebone etc. The I2C bus interface allows multiple HPRGB shields to be controlled by one micro controller using only three pins (SDA, SCL, GND). Up to 8 HPRGB Shields can be controlled simultaneously when concurrent Analog and PWM dimming are required. Up to 64 HPRGB Shields can be controlled simultaneously when only PWM dimming is required.
- This board cannot be used with common-cathode or common-anode LEDs.
- This board is not designed to drive LED strips.
- LED driver with 3 independent channels in buck configuration.
- Dynamically adjustable constant current 100mA – 700mA per channel allowing for analog dimming.
- 12-bit per-channel PWM dimming allowing for smooth Gamma or CIElab brightness corrected dimming.
- Programmable PWM frequency from 40Hz – 1000Hz.
- Programmable constant current switching frequency from 330KHz – 1MHz.
- Max 42V input, max 36V output. Can drive up to 40W of LEDs.
- On-board temperature sensor for remote sensing of LED temp.
- On-board 5V switched power supply allows for stand-alone operation. An Arduino or other micro controller e.g. can be powered directly from the shield.
- Shield requires only 3 pins (I2C) from Arduino or other micro controller for operation.
- On-board I2C pull-up resistors can be disabled by means of solder jumpers
- Shield can be stacked directly onto an Arduino Uno and Arduino Leonardo and others.
- Solder jumpers allow to re-configure the shield for the different I2C pins on the Arduino Leonardo.
- All functions of the shield are accessible through an Arduino library using the I2C bus.
- All components on the shield are FM+ compatible allowing for I2C bus speeds of 1MHz (works great on a Teensy3.1)
- Only lead free ROhS compliant solder is used to build these shields
While reading through the documentation please keep the Quick Reference handy:
The yellow marked items on the Quick reference indicate the default configuration and minimum connections needed to operate the shield.
Like any other Arduino shield the High Power RGB LED Shield is designed to be stacked onto an Arduino and functions with a variety of Arduino Boards. The only connections needed to operate the shield are SCL, SDA and GND. If only a single shield will be stacked onto the Arduino then normal headers with 0.1″ spacing can be used. If several HPRGB Shields will be stacked, the use of the Stackable Headers is recommended. These are available from a variety of sources such as Sparkfun or Adafruit.
Configuring the HPRGB Shield
I2C pins (Default – A4/A5 – for Arduino Uno)
As shipped, the HPRGB Shield is configured to be operated on an Arduino Uno with the Analog Pins A4 and A5 serving as the I2C connections. Should the shield be used with an Arduino Leonardo, or Arduino Yún the shields configuration needs to be changed as explained on the quick reference by means of toggling the solder jumpers on the underside of the board.
Pull-Up resistor enable/disable (Default – enabled)
The shield has 1.8k Ohm pull-up resistors – one each on SCL and SDA – that are required for I2C bus operation and are by default enabled for use with a single HPRGB Shield. When multiple HPRGB Shields are stacked onto an Arduino all pull-up resistors except on one HPRGB Shield will have to be disabled by removing the respective solder jumpers on the top side of the HPRGB Shield. If not removed the pull-up resistors on all shields would be connected in parallel and the resulting resistance would be too low to operate the I2C bus within the specified limits.
If multiple HPRGB Shields will be used, before starting to disable pull-up resistors, please read the section below on configuring the LDAC (MCP4782) I2C Address.
PCA9685 I2C address (Default – Jumpers A0-A5 floating/not connected)
If only one HPRGB Shield will be used the default configuration of the I2C address does not need to be changed. When more than one HPRGB shield will be stacked or otherwise connected to the same I2C bus, the I2C addresses for the PCA9685 on al shields are required be configured with solder jumpers labeled A0 – A5 in the of the shield. The quick reference shows the configuration of the solder jumper for the first 8 shields.
LDAC (MCP4728) I2C Address, Constant Current and Switching Frequency.
The MCP4728 is a Digital Analog Converter with four independent channels. Three of these channels are used to set the constant current for each of the three LED channels. The fourth channel is used to set the switching frequency of the for the LT3496 LED driver. There are three different use cases that determine whether the default configuration needs to be changed.
Only one HPRGB Shield with, or without Analog Dimming
No change to the default configuration will be required. The constant current and switching frequency for the LT3496 LED driver chip can be programmed dynamically through the Arduino Library allowing Analog Dimming.
Two or more HPRGB Shields will be used but no Analog Dimming
No change to the default configuration of each HPRGB Shield will be required. However, the constant current setting and switching frequency of the LT3496 LED driver need to be programmed and stored in the MCP4728 builtin EEPROM. In order to do so each single shield will need to be connected to an Arduino. Then the desired/required constant current and switching frequency can be programmed and stored for each single shield. This can easily accomplished with the HPLEDShield.ino sketch.
Please refer to the documentation and spec sheet for the LED used for the application. Using incorrect values, e.g. too high current, can easily destroy an LED. Up to 64 shields can be used in this case. This is a theoretical limit as electrical limitations exist e.g. I2C bus capacitance etc. Additional hardware in form of I2C bus extenders and other hardware might be required.
Two or more HPRGB Shields will be used with Analog Dimming or frequent reconfiguring of constant current settings.
For this use case, the I2C Address for each HPRGB Shield has to be changed. The MCP4728 only allows 8 different I2C addresses, which means that a maximum of 8 shields can be used for this use case. To change the I2C address for each HPRGB Shield the LDAC jumper has to be move according to the instructions on the Quick Reference. Once a single HPRGB Shield is connected to an Arduino, the provided changeDeviceID.ino sketch can be used to re-program the I2C address of the MCP4728. The sketch uses an also provided SoftI2CMaster library that has to be employed as the Arduino I2C (Wire) library is not able to accommodate the critical latch timing needed on pin 8 for the LDAC I2C address programming. It is recommended to use an Arduino Uno for this. While it may work with other micro controllers it has not been tested.
Setting the LED Constant Currents and switching frequency for the LT3496 LED driver chip
The circuitry of the LT3496 is a DC/DC step down (Buck) switching power supply. That switching power supply is turned on/off by the PWM signals from the PCA9685. The switching frequency – not the PWM frequency – can be programmed through the MCP4728. For high dimming ratio applications and for best efficiency and best duty cycle range it is recommended to set this to 330 kHz using the setFreq library function. The constant current needed for the LEDs will depend on what LEDs are used in a given application. LED spec sheets commonly provide information on best values. The HPRGB Shield hardware in combination with the setCurrent function of the Arduino library will allow settings from 100mA to 700mA per chanel.
VIN jumper (Default open/NC)
The HPRGB Shield has a 5V, 300mA on-board power supply mainly to supply 5V to the two (or three if the board is populated with a TMP421 temperate sensor) main chips on the HPRGB Shield. When the HPRGB Shield is stacked to an Arduino and the Arduino is not powered through it’s barrel jack, the on-board power supply of the HPRGB Shield will also supply 5V to the Arduino. The protection (Schottky) diode on the HPRGB Shield will protect the Arduino from (VIN)over voltage. The HPRGB Shields VIN voltage will not be available to the Arduino in this case.
If you have stacked one, or more HPRGB Shields to an Arduino and the voltage required to power the LEDs is ≤12V it is also possible that all the HPRGB Shields are powered through the Arduino. In this case a VIN jumper connection is required on all shields. This disables the protection Diode on the HPRGB Shield.
If two or more HPRGB Shields are stacked onto an Arduino and the voltage required to operate the LEDs exceeds 12V it is still possible to connect power only to one HPRGB Shield and provide power to all other HPRB Shields through the VIN pin. The VIN Jumpers on all shields have to be connected. However, the VIN pin on the HPRGB Shield staged first to the Arduino must either be cut, or bent to the side so no VIN connection is possible to the Arduino. In this case the HPRGB Shields and he Arduino must be powered separately by their own power supplies.
I2C Address of Temperature Sensor TMP421 – No! Sorry!
In the current design of the Shield the I2C address of the temperature Sensor is not configurable. This will change should the design of the Shield undergo another revision. As a consequence, when temperature measurements are required only one Shield with a TMP421 can be on the same I2C bus. When two or more HPRGB Shields on the I2C bus are populated with a Temperature Sensor the other Shield functions will work normally. Only the temperature sensor functions will not work.