ortogere

ortogere - 'magical' device - similar to a compass

View project on GitHub

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…

pov concept overview


Contents


LEDs

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

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