Recalculate values for LP8867 and modify schematic and layout accordingly.

This commit is contained in:
Mario Hüttel 2021-03-29 20:10:02 +02:00
parent 7227febbfa
commit ca9ea3c9e8
3 changed files with 4177 additions and 3604 deletions

View File

@ -132,29 +132,29 @@ Wire Wire Line
Wire Wire Line
2900 3500 1850 3500
Wire Wire Line
1850 3500 1850 3700
1850 3500 1850 4500
$Comp
L Device:R R12
U 1 1 6060F6AC
P 1850 3850
F 0 "R12" H 1920 3896 50 0000 L CNN
F 1 "33k" H 1920 3805 50 0000 L CNN
F 2 "Resistor_SMD:R_0603_1608Metric" V 1780 3850 50 0001 C CNN
F 3 "~" H 1850 3850 50 0001 C CNN
1 1850 3850
P 1850 4650
F 0 "R12" H 1920 4696 50 0000 L CNN
F 1 "39k" H 1920 4605 50 0000 L CNN
F 2 "Resistor_SMD:R_0603_1608Metric" V 1780 4650 50 0001 C CNN
F 3 "~" H 1850 4650 50 0001 C CNN
1 1850 4650
1 0 0 -1
$EndComp
Wire Wire Line
1850 4000 1850 4150
1850 4800 1850 4950
$Comp
L power:GND #PWR0143
U 1 1 60610BC6
P 1850 4150
F 0 "#PWR0143" H 1850 3900 50 0001 C CNN
F 1 "GND" H 1855 3977 50 0000 C CNN
F 2 "" H 1850 4150 50 0001 C CNN
F 3 "" H 1850 4150 50 0001 C CNN
1 1850 4150
P 1850 4950
F 0 "#PWR0143" H 1850 4700 50 0001 C CNN
F 1 "GND" H 1855 4777 50 0000 C CNN
F 2 "" H 1850 4950 50 0001 C CNN
F 3 "" H 1850 4950 50 0001 C CNN
1 1850 4950
1 0 0 -1
$EndComp
Wire Wire Line
@ -194,7 +194,7 @@ L Device:R R11
U 1 1 6061C45B
P 1500 3850
F 0 "R11" H 1430 3804 50 0000 R CNN
F 1 "147k" H 1430 3895 50 0000 R CNN
F 1 "56k" H 1430 3895 50 0000 R CNN
F 2 "Resistor_SMD:R_0603_1608Metric" V 1430 3850 50 0001 C CNN
F 3 "~" H 1500 3850 50 0001 C CNN
1 1500 3850
@ -223,8 +223,8 @@ L Device:L_Core_Ferrite L2
U 1 1 60625C92
P 3350 2400
F 0 "L2" V 3575 2400 50 0000 C CNN
F 1 "DE1205-33" V 3484 2400 50 0000 C CNN
F 2 "shimatta_inductor:FerroCore_DE1205" H 3350 2400 50 0001 C CNN
F 1 "DE0704-22" V 3484 2400 50 0000 C CNN
F 2 "shimatta_inductor:FerroCore_DE0704" H 3350 2400 50 0001 C CNN
F 3 "https://www.tme.eu/Document/d1f8b47d020ebf11f3b92c6891638dfa/de.pdf" H 3350 2400 50 0001 C CNN
1 3350 2400
0 -1 -1 0
@ -345,7 +345,7 @@ L Device:R R10
U 1 1 6064ADF7
P 5800 3000
F 0 "R10" V 5593 3000 50 0000 C CNN
F 1 "130k" V 5684 3000 50 0000 C CNN
F 1 "100k" V 5684 3000 50 0000 C CNN
F 2 "Resistor_SMD:R_0603_1608Metric" V 5730 3000 50 0001 C CNN
F 3 "~" H 5800 3000 50 0001 C CNN
1 5800 3000
@ -356,7 +356,7 @@ L Device:R R9
U 1 1 6064B526
P 5800 2600
F 0 "R9" V 5593 2600 50 0000 C CNN
F 1 "680k" V 5684 2600 50 0000 C CNN
F 1 "560k" V 5684 2600 50 0000 C CNN
F 2 "Resistor_SMD:R_0603_1608Metric" V 5730 2600 50 0001 C CNN
F 3 "~" H 5800 2600 50 0001 C CNN
1 5800 2600
@ -389,7 +389,7 @@ L Device:C C57
U 1 1 60654433
P 6000 2600
F 0 "C57" H 6115 2646 50 0000 L CNN
F 1 "10p" H 6115 2555 50 0000 L CNN
F 1 "14p" H 6115 2555 50 0000 L CNN
F 2 "Capacitor_SMD:C_0603_1608Metric" H 6038 2450 50 0001 C CNN
F 3 "~" H 6000 2600 50 0001 C CNN
1 6000 2600
@ -875,7 +875,7 @@ Wire Wire Line
Wire Wire Line
4300 5650 7350 5650
Text Notes 7700 2650 0 50 ~ 0
LEDs: L128-4095HA3500001\nVf: 3V\nIf: ~~70 mA
LEDs: L128-4095HA3500001\nVf: 3V\nIf: ~~60 mA
Text Notes 5550 2250 0 50 ~ 0
V = ~~ 24V
Text Notes 5550 2350 0 50 ~ 0
@ -926,4 +926,12 @@ F 3 "~" H 6650 2000 50 0001 C CNN
$EndComp
Wire Wire Line
6450 2000 6450 2400
Text Notes 3250 2100 0 50 ~ 0
22 uH
Text Notes 2150 4650 0 50 ~ 0
Max Current = 60 mA
Text Notes 850 3900 0 50 ~ 0
f = 1.08 MHz
Text Notes 1650 1850 0 50 ~ 0
For the calculation of the component values see 'lp8867-calc.py'
$EndSCHEMATC

98
pcb/lp8867-calc.py Normal file
View File

@ -0,0 +1,98 @@
#!/bin/python
import numpy as np
import eseries as es
def calc_fsw_from_r_fset(r_fset):
fsw = 67600 / (r_fset / 1e3 + 6.4)
fsw = fsw * 1e3
return fsw
def calc_r_fset_from_fsw(fsw):
fsw = fsw / 1e3
r = 67600 / (fsw) - 6.4
r = r * 1e3
return r
def calc_r_iset_from_i(i):
i = i * 1e3
r = 2000 * 1.2 / i
r = r * 1e3
return r
def calc_i_from_r_iset(r):
r = r * 1e-3
i = 2000 * 1.2 / r
i = i * 1e-3
return i
def calc_vout(r1, r2, k):
r1 = r1 / 1000
r2 = r2 / 1000
v = (1.2 / r2 + k * 0.0387) * r1 + 1.2
return v
switching_freq = 1.1e6
output_voltage_nom = 24 + 0.9
inductor_value = 22e-6
input_voltage = 12
output_current_per_lane = 60e-3
desired_e_series = es.E12
r1 = 560e3
r2 = 100e3
# Calculate the parameters
print('Calculating for the given parameters:')
print(f'{switching_freq = }')
print(f'{output_voltage_nom = } and {input_voltage = }')
print(f'{inductor_value =}')
print(f'{desired_e_series = }')
print('')
rfset = calc_r_fset_from_fsw(switching_freq)
print(f'{rfset = }')
# Find the nearest value in the e series
rfset = es.find_nearest(desired_e_series, rfset)
f_sw = calc_fsw_from_r_fset(rfset)
print(f'The nearest value from the E series is: {rfset = }')
freq_error = (f_sw - switching_freq) / switching_freq * 100
print(f'Resulting switching frequency is {f_sw} (Error: {freq_error:.1f} %)')
print(f"Desired output current per lane is {output_current_per_lane} A")
r_iset = calc_r_iset_from_i(output_current_per_lane)
print(f'Resulting in {r_iset = }')
r_iset = es.find_nearest(desired_e_series, r_iset)
output_current_per_lane = calc_i_from_r_iset(r_iset)
print(f'Nearest e series value {r_iset = } resulting in an LED current of {output_current_per_lane} A')
d = (output_voltage_nom - input_voltage) / output_voltage_nom
d_inv = 1-d
print(f"Expected duty cycle: {d}")
i_ripple = (output_voltage_nom- input_voltage) / (2 * inductor_value * f_sw) * (input_voltage / output_voltage_nom)
print(f'Ripple current: {i_ripple} A')
i_sat_min = output_current_per_lane * 4 / d_inv + i_ripple
print(f'Minimum saturation current of inductor: {i_sat_min:.3f} A')
print(f'Voltage divider {r1 = } | {r2 = }')
print(f'Output voltage initial: {calc_vout(r1, r2, 0.88)} V')
print(f'Output voltage maximum: {calc_vout(r1, r2, 1)} V')
print(f'Output voltage minimum: {calc_vout(r1, r2, 0)} V')
ovp = output_voltage_nom + (r1/r2 + 1)*(2.3 - 1.2)
print(f'Over voltage protection: {ovp} V')
ratio = r1/r2
print(f'Resistance ratio is {ratio}')
if f_sw <= 1150e3:
ratio_range = (5, 10)
else:
ratio_range = (10, 20)
if ratio < ratio_range[0] or ratio > ratio_range[1]:
print('Ratio is outside recommended limits!')
# Loop stability
cfb = 1 / (2 * np.pi * 20e3 * r1 )
print(f'Loop stability capacitor value: {cfb} F')

File diff suppressed because it is too large Load Diff