Coverage for /media/ldata/code/tendril/tendril/conventions/motifs/LREGS1.py: 0%

# Coverage for /media/ldata/code/tendril/tendril/conventions/motifs/LREGS1.py : 0%

## 71 statements 0 run 71 missing 0 excluded

Hot-keys on this page

r m x p toggle line displays

j k next/prev highlighted chunk

0 (zero) top of page

1 (one) first highlighted chunk

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # Copyright (C) 2015 Chintalagiri Shashank # # This file is part of Tendril. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ This file is part of tendril See the COPYING, README, and INSTALL files for more information """ from math import fabs from tendril.utils import log logger = log.get_logger(__name__, log.DEFAULT) import iec60063 from tendril.conventions.motifs.motifbase import MotifBase from tendril.conventions import electronics from tendril.gedaif import gsymlib class MotifLREGS1(MotifBase): def __init__(self, identifier): super(MotifLREGS1, self).__init__(identifier) self._configdict = None def get_configdict_stub(self): stub = {'desc': 'Positive LDO Output Voltage Setter', 'regulator': '', 'Vref': '1.225V', 'Imin': '1mA', 'Rseries': 'E12', 'Rmin': '10E', 'Rmax': '10M'} return stub def configure(self, configdict): self._configdict = configdict self._autoset_r2() self.Vout = configdict['Vout'] self.validate() def _autoset_r2(self): r2_dev = self.get_elem_by_idx('R2').data['device'] r2_fp = self.get_elem_by_idx('R2').data['footprint'] if r2_fp[0:3] == "MY-": r2_fp = r2_fp[3:] allowed_res_vals = iec60063.gen_vals(self._configdict['Rseries'], iec60063.res_ostrs, self._configdict['Rmin'], self._configdict['Rmax']) required_res_val = fabs(self.Vref * 1000 / self.Imin) rval = None lastval = None for val in allowed_res_vals: lastval = rval rval = electronics.parse_resistance(val) if rval >= required_res_val: self.get_elem_by_idx('R2').data['value'] = gsymlib.find_resistor(lastval, r2_fp, r2_dev) # noqa break def validate(self): logger.debug("Validating Motif : " + self.refdes) logger.debug(" Vout: " + str(self.Vout) + " R2:" + str(self.R2) + " R1:" + str(self.R1)) @property def Vout(self): return self.Vref * (1 + (self.R1 / self.R2)) @Vout.setter def Vout(self, value): r1_dev = self.get_elem_by_idx('R1').data['device'] r1_fp = self.get_elem_by_idx('R1').data['footprint'] if r1_fp[0:3] == "MY-": r1_fp = r1_fp[3:] allowed_res_vals = iec60063.gen_vals(self._configdict['Rseries'], iec60063.res_ostrs, self._configdict['Rmin'], self._configdict['Rmax']) required_res_val = ((electronics.parse_voltage(value) / self.Vref) - 1) * self.R2 # noqa rval = None lastval = None for val in allowed_res_vals: lastval = rval rval = electronics.parse_resistance(val) if rval >= required_res_val: self.get_elem_by_idx('R1').data['value'] = gsymlib.find_resistor(lastval, r1_fp, r1_dev) # noqa break @property def R1(self): elem = self.get_elem_by_idx('R1') assert elem.data['device'] in ['RES SMD', 'RES THRU'] return electronics.parse_resistance(electronics.parse_resistor(elem.data['value'])[0]) # noqa @property def R2(self): elem = self.get_elem_by_idx('R2') assert elem.data['device'] in ['RES SMD', 'RES THRU'] return electronics.parse_resistance(electronics.parse_resistor(elem.data['value'])[0]) # noqa @property def Vref(self): return electronics.parse_voltage(self._configdict['Vref']) @property def Imin(self): return electronics.parse_current(self._configdict['Imin']) @property def Il(self): return self.Vref / self.R2 @property def listing(self): return [('Vout', self.Vout)]