POV LEDs and LED-Driver
idea here is to have a IR led directly pulsing the raw data out and an receiver converting it back to signal.. so this could be transmitted over the rotation contact-less. challenge here is the bit time - we need some very very fast photo detectors…
Contents
LEDs
- APA102-2020
- digikey overview
package | width | length | height | red | green | blue | white | manufacture | part | digikey |
---|---|---|---|---|---|---|---|---|---|---|
NSSM124D | 3.3mm | 3.0mm | 0.75mm | 750mcd | 2200mcd | 500mcd | 2800mcd | Nichia | NSSM124D | Lumitronix 0,4€ |
PLCC-6 | 2.8mm | 2.8mm | 2.5mm | 1000mcd | 2250mcd | 460mcd | 2340mcd | Cree | CLY6D-FKC-Cnp1st1E1BB7D3D3 | 0,34€ |
3528(1411) | 3.5mm | 2.8mm | 0.6mm | 700mcd | 1200mcd | 400mcd | 1560mcd | Rohm | SMLVN6RGB1U | 1,13€ |
1816(0706) | 1.8mm | 1.6mm | 0.5mm | 400mcd | 550mcd | 180mcd | 1058mcd | Rohm | MSL0402RGB | 0,60€ |
PLCC-6 | 3.4mm | 2.8mm | 1.8mm | 650mcd | 1900mcd | 384mcd | - | Broadcom Limited | ASMT-YTB7-0AA02 | 1,03€ |
PLCC-4 | 3.2mm | 2.8mm | 1.9mm | 540mcd | 1600mcd | 350mcd | - | Broadcom Limited | ASMB-MTB0-0A3A2 | 0,47€ |
LED-Driver
information collection
- TI forum
- pov with avr TLC5940
- arduino TLC5940 lib
- arduino TLC5951 lib
- arduino TLC5955 lib
- arduino TLC5958 lib
comparison
part | data rate | pwm rate | channels | resolution | ch current | oscillator | Package | comment | stars | mouser |
---|---|---|---|---|---|---|---|---|---|---|
APA102 | ~20MHz | 20kHz | 3 | 8Bit | 18mA | internal | custom | no real datasheet values | * | 0,25€ |
TLC5971 | 20MHz | 10MHz/20MHz | 12 | 16Bit | 60mA | int. / ext. | HTSSOP / QFN | available libs | ** | 2,70€ |
TLC5930 | 20MHz | 10MHz/20MHz | 12 | 10Bit | 30mA | int. / ext. | HTSSOP | *** | 5,26€ | |
TLC5943 | 30MHz | 33MHz | 16 | 16Bit | 50mA | ext. GS clock | HTSSOP | schnick-schnack-systems | ? | 2,30€ |
TLC5947 | 15MHz | 4MHz | 24 | 12Bit | 30mA | internal | HTSSOP | - | 2,87€ | |
TLC5949 | 33MHz | 33MHz | 16 | 12Bit | 45mA | ext. GS clock | HTSSOP | ? | 2,23€ | |
TLC5951 | 33MHz | 33MHz | 24 | 8/10/12Bit | 40mA | ext. GS clock | HTSSOP | ***** | 3,56€ | |
TLC5955 | 25MHz | 33MHz | 48 | 16Bit | 30mA | ext. GS clock | HTSSOP-56 / QFN-56 | CC-setting internal | ? | 4,59€ |
TLC5957 | 33MHz | 33MHz | 48 | 9-16Bit | 25mA | ext. GS clock | QFN-56 | ? | 4,82€ | |
TLC5958 | 25MHz | 33MHz | 48 | 16Bit | 25mA | ext. GS clock | QFN-56 | 32-multiplex / 48k GS-memory | - | 5,50€ |
TLC59581 | 25MHz | 33MHz | 48 | 16Bit | 25mA | ext. GS clock | QFN-56 | 32-multiplex / 48k GS-memory | - | 6,31€ |
TLC59582 | 25MHz | 33MHz | 48 | 16Bit | 25mA | ext. GS clock | QFN-56 | 16-multiplex / 48k GS-memory | - | 5,43€ |
driver-update-rates
calculation step | APA102 | TLC5971 | formula |
---|---|---|---|
bytes_per_update | 166 (4 + 40*4 + 2) | 280 (28 * (40 / 4)) | |
bits_per_update | 1328 | 2240 | bytes_per_update * 8 |
bits_per_second | 5418240 | 9139200 | bits_per_update * pixel_updates_per_second |
kbit_per_second | 5418 | 9139 | |
Mbit_per_second | 5,41 | 9,14 | |
bit_time_max | 184ns (= 0,184us) | 109 ns (= 0,109us) | 1s / (5,41*10^6) == |
-
timing calculation
name | test | value | formula |
---|---|---|---|
updates_per_second = revolution_per_second | 30 | ||
rpm (revolution per minute) | 1800 | 1800 | updates_per_second * 60 |
pixel_pitch | 3mm | ||
needle_diameter | 130mm | ||
needle_active_radius | 60mm | 60 | (needle_diameter - 10) / 2 |
pixel_per_line_count | 20 | toFixed(needle_active_radius / pixel_pitch; 0) | |
pixel_per_line_count_total | 40 | pixel_per_line_count * 2 | |
line_circumference | 408mm | toFixed(π * needle_diameter; 1) | |
line_count | 136 | toFixed(line_circumference / pixel_pitch) | |
line_updates_per_revolution | 136 | line_count | |
line_updates_per_second | 4080 | updates_per_second * line_updates_per_revolution | |
line_updates_per_minute | 244800 | rpm * line_updates_per_revolution | |
duration_per_revolution | 33ms | toFixed(1000 / updates_per_second; 1) | |
duration_per_line | 0.242ms | toFixed((duration_per_revolution / line_count); 7) | |
duration_per_line_us | 242us | toFixed(duration_per_line * 1000; 0) | |
duration_per_line_ns | 242000ns | toFixed(duration_per_line_us * 1000; 0) | |
color_per_pixel | 3 | ||
bit_per_color | 8b | ||
levels_per_color | 265 | (2^bit_per_color) | |
bit_per_pixel | 24b | color_per_pixel * bit_per_color | |
line_pwm_duration_for_nbit | 945ns | toFixed(duration_per_line_ns / levels_per_color; 0) | |
line_pwm_rate_for_nbit | 1,06MHz | toFixed(1000 / line_pwm_duration_for_nbit ; 2) | |
bit_per_line | 960b | pixel_per_line_count_total * bit_per_pixel | |
data_rate | 30MHz | ||
data_rate_bit_time | 33ns | toFixed(1000 / data_rate ; 0) | |
duration_per_bit_max | 252ns | toFixed(duration_per_line_ns / bit_per_line; 0) | |
bit_timing_ok___must_be_bigger_0 | 219ns | duration_per_bit_max - data_rate_bit_time | |
duration_for_needed_bits_per_line_us | 31us | toFixed(duration_for_needed_bits_per_line_ns / 1000; 0) | |
duration_for_needed_bits_per_line_ns | 31680ns | toFixed(bit_per_line * data_rate_bit_time; 0) | |
line_bit_duration_ok___must_be_bigger_0 | 210us | duration_per_line_us - duration_for_needed_bits_per_line_us |
1 second == 1.000 ms == 1.000.000 us == 1.000.000.000 ns
10 bit pro second == 1s/10 per bit == 100ms per bit
10kbit pro second == 1s/10k per bit == 100us per bit
10Mbit pro second == 1s/10M per bit == 0,0000001s == 100 ns
10Mbit pro second == 1s/10.000.000 per bit == 0,0000001s == 100 ns