def calcLowSallenKey(self): nom = self.tf[0] den = self.tf[1] R1 = None R2 = None Ra = None Rb = None C1 = None C2 = None k = nom[2] / den[2] a = den[0] / den[2] b = den[1] / den[2] C1 = 10 * 10**-9 C2 = C1 Wo = 1 / (a**(1 / 2)) R = 1 / (Wo * C1) Rb = 10 * 10**3 Ra = (k - 1) * Rb if self.roun == True: R = find_nearest(E12, R) C1 = find_nearest(E12, C1) C2 = find_nearest(E12, C2) Ra = find_nearest(E12, Ra) Rb = find_nearest(E12, Rb) temp = {'R1': R, 'R2': R, 'C1': C1, 'C2': C2, 'Ra': Ra, 'Rb': Rb} return temp
def FTBand(k,wo,Q,R8,R3,R7,C1,C2): R2 = R8 / (wo**2 * R3*R7*C1*C2) R2 = find_nearest(E24,R2) R1 = Q/(C1*wo) R1 = find_nearest(E24,R1) R4 = R1*R8/(k*R7) R4 = find_nearest(E24,R4) temp = {'R1':R1,'R2':R2, 'R3':R3, 'R4':R4, 'R7':R7, 'R8':R8, 'C1':C1, 'C2':C2} return temp
def FTLow(k,wo,Q,R8,R3,R7,C1,C2): R2 = R8 / (wo**2 * R3*R7*C1*C2) R2 = find_nearest(E24,R2) R1 = Q/(C1*wo) R1 = find_nearest(E24,R1) R5 = R2/k#-R2/k R5 = find_nearest(E24,R5) temp = {'R1':R1,'R2':R2, 'R3':R3,'R5':R5, 'R7':R7, 'R8':R8, 'C1':C1, 'C2':C2} return temp
def FTHigh(k,wo,Q,R8,R3,R7,C1,C2): R2 = R8 / (wo**2 * R3*R7*C1*C2) R2 = find_nearest(E24,R2) R1 = Q/(C1*wo) R1 = find_nearest(E24,R1) R6 = R8/k#-R8/k R6 = find_nearest(E24,R6) R4 = R1 * R6/R7 R4 = find_nearest(E24,R4) temp = {'R1':R1,'R2':R2, 'R3':R3, 'R4':R4, 'R6':R6, 'R7':R7, 'R8':R8, 'C1':C1, 'C2':C2} return temp
def roundValues(self, NormRes, NormCap): roundingNorm = NormRes roundingNormCap = NormCap self.values['C21'] = find_nearest(roundingNormCap, self.values['C21']) self.values['C22'] = find_nearest(roundingNormCap, self.values['C22']) self.values['C3'] = find_nearest(roundingNormCap, self.values['C3']) self.values['Ra1'] = find_nearest(roundingNorm, self.values['Ra1']) self.values['Ra2'] = find_nearest(roundingNorm, self.values['Ra2']) self.values['R41'] = find_nearest(roundingNorm, self.values['R41']) self.values['R42'] = find_nearest(roundingNorm, self.values['R42']) self.values['R1'] = find_nearest(roundingNorm, self.values['R1']) self.values['Rb'] = find_nearest(roundingNorm, self.values['Rb'])
def solar_current_gain(): V_a_plus = (V_op - (I_solar_min * R1)) * (R4 / (R4 + R5)) - I_solar_min * R1 R9 = R6 * (V_adc_max / V_a_plus - 1) R9 = find_nearest(E24, R9) print("R9 = " + str(R9)) return R9
def battery_current_gain(): V_b_plus = (V_op - (I_battery_min * R2)) * (R3 / (R3 + R7)) - I_battery_min * R2 #print("v_b+ = " + str(V_b_plus)) R10 = R8 * (V_adc_max / V_b_plus - 1) R10 = find_nearest(E24, R10) print("R10 = " + str(R10)) return R10
def trickle_current(): V_b_plus = (V_op + (I_trickle_current * R2)) * ( R3 / (R3 + R7)) + I_trickle_current * R2 print("v_b+ = " + str(V_b_plus)) V_b_out = (R10 / R8 + 1) * V_b_plus print("V_b_out = " + str(V_b_out)) R17 = (V_b_out * R18 * R19) / ((V_op - V_b_out) * R19 - V_b_out * R18) R17 = find_nearest(E24, R17) print("R17 = " + str(R17)) return R17
def over_current(): V_b_plus = (V_op + (I_over_current * R2)) * (R3 / (R3 + R7)) + I_over_current * R2 print("v_b+ = " + str(V_b_plus)) V_b_out = (R10 / R8 + 1) * V_b_plus print("V_b_out = " + str(V_b_out)) R18 = R19 * V_op / V_b_out - R19 R18 = find_nearest(E24, R18) print("R18 = " + str(R18)) return R18
def calcFirstOrderLowPass(self): nom = self.tf[0] den = self.tf[1] R = None Ra = None Rb = None C = None k = nom[2] / den[2] a = den[1] / den[2] C = 10 * 10**-9 ##Fijo constantes Rb = 10 * 10**3 R = a * (1 / C) Ra = (k - 1) * Rb if self.roun == True: R = find_nearest(E12, R) Ra = find_nearest(E12, Ra) Rb = find_nearest(E12, Rb) C = find_nearest(E12, C) temp = {'R': R, 'Ra': Ra, 'Rb': Rb, 'C': C} return temp
def calcFirstOrderHighPass(self): nom = self.tf[0] den = self.tf[1] a = den[1] / den[2] B = nom[1] / den[2] k = B / a Wo = 1 / a Rb = 10 * 10**3 Ra = (k - 1) * Rb C = 10 * 10**-9 R = 1 / (Wo * C) if self.roun == True: C = find_nearest(E12, C) R = find_nearest(E12, R) Ra = find_nearest(E12, Ra) Rb = find_nearest(E12, Rb) temp = {'C': C, 'Ra': Ra, 'Rb': Rb, 'R': R} return temp
def calcHighSallenKey(self): nom = self.tf[0] den = self.tf[1] a = den[0] / den[2] B = nom[0] / den[2] k = B / a b = den[1] / den[2] Wo = 1 / (a**(1 / 2)) Rb = 10 * 10**3 Ra = (k - 1) * Rb C = 10 * 10**-9 R = 1 / (Wo * C) if self.roun == True: R = find_nearest(E12, R) C = find_nearest(E12, C) Ra = find_nearest(E12, Ra) Rb = find_nearest(E12, Rb) temp = {'R1': R, 'R2': R, 'C1': C, 'C2': C, 'Ra': Ra, 'Rb': Rb} return temp
def solar_voltage_divider(): R13 = R14 * ((V_solar_max / V_adc_max) - 1.0) R13 = find_nearest(E24, R13) print("R13 = " + str(R13)) return R13
def ldo_divider(): R27 = R28 * Vref_ldo / (Vout - Vref_ldo) R27 = find_nearest(E24, R27) print("R27 = " + str(R27)) return R27
def mppt_pwm_resistor(): Vset = V_sol * (R14 / (R13 + R14)) R20 = (V_pwm - Vset) * (R22 * R23) / ((Vset * (R22 + R23) - V_op * R23)) R20 = find_nearest(E24, R20) print("R20 = " + str(R20)) return R20
def mppt_resistor_divider(): R22 = R23 * ((R14 + R13) * V_op / (R14 * V_solar_mppt) - 1) R22 = find_nearest(E24, R22) print("R22 = " + str(R22)) return R22
def boost_resistor_divider(): R26 = R25 * V_ref_boost / (V_boost - V_ref_boost) R26 = find_nearest(E24, R26) print("R26 = " + str(R26)) return R26
def battery_current_bias(): R7 = (V_op * R3) / (I_solar_max * R2) - 2 * R3 R7 = find_nearest(E24, R7) print("R7 = " + str(R7)) return R7
def test_nearest_returns_value_from_series(data): series_key = data.draw(sampled_from(ESeries)) value = data.draw(sampled_from(series(series_key))) assert find_nearest(series_key, value) == value
def solar_current_bias(): R5 = (V_op * R4) / (I_solar_max * R1) - 2 * R4 R5 = find_nearest(E24, R5) print("R5 = " + str(R5)) return R5
def test_find_nearest_in_range(series_key, value): nearest = find_nearest(series_key, value) assert find_less_than_or_equal( series_key, value) <= nearest <= find_greater_than_or_equal( series_key, value)
def battery_voltage_divider(): R11 = R12 * ((V_battery_max / V_adc_max) - 1.0) R11 = find_nearest(E24, R11) print("R11 = " + str(R11)) return R11
def test_find_nearest_is_nearest(series_key, value): nearest = find_nearest(series_key, value) lower = find_less_than_or_equal(series_key, value) upper = find_greater_than_or_equal(series_key, value) assert (((nearest == lower) and (nearest - lower <= upper - nearest)) or ((nearest == upper) and (upper - nearest <= nearest - lower)))