简单到复杂电气计算的类集合
eecalp的Python项目详细描述
#eecalpy python模块
[![PYPI包](https://badge.fury.io/py/eecalpy.svg)](https://badge.fury.io/py/eecalpy) [![生成状态](https://travis-ci.org/wese3112/eecalpy.svg?branch=master)](https://travis-ci.org/wese3112/eecalpy)
python模块的电气工程计算是 用于简单到复杂电气计算的类集合,其中 特别注重处理公差。
##安装
python包索引(pypi)中提供了eecalpy包。该软件包需要Python3+,您可以使用以下命令安装它:
$ pip install eecalpy
##简介
检查下面的分压器。对于两个电阻器,其公差和 给出了温度系数α(百万分之α)。
啊![简单分压器](img/vdiv.png?raw=真“分压器”)
让我们为它们创建两个变量。
>>> r1 = R(resistance=1000, tolerance=0.05, alpha_ppm=250) >>> r2 = R(2e3, 0.01, 100) >>> r1; r2 1.0kΩ ± 5.0% (± 50.0Ω) [0.9500 .. 1.0500]kΩ @ 20°C α=250ppm 2.0kΩ ± 1.0% (± 20.0Ω) [1.9800 .. 2.0200]kΩ @ 20°C α=100ppm
分压系数的公式为r1/(r1+r2)。要计算它,请使用r.分压器(其他电阻器):
>>> r1.voltage_divider(r2) 0.33 ± 4.0% [0.3199 .. 0.3465]
您也可以使用速记符号:
>>> r1 // r2 0.33 ± 4.0% [0.3199 .. 0.3465]
注意:此处不要使用r1/(r1+r2)语句,因为它将使用公差限制 两次(加和除),因此产生错误的结果。
上面的结果是factor类的一个实例。现在只缺少电压。 使用U(电压,公差=0.0)创建。
假设输入电压为24伏,公差为1%,输出电压为 分压器为:
>>> vin = U(24, 0.01) >>> vout = r1 // r2 * vin >>> vout 8.0V ± 5.0% (± 400.0mV) [7.6000 .. 8.4000]V
注意:语句vout=vin*r1//r2不起作用。它是从左到右计算的,因此python首先尝试vin*r1这是未实现的(电压乘以电阻),但您始终可以使用括号:
>>> vin * (r1 // r2) 8.0V ± 5.0% (± 400.0mV) [7.6000 .. 8.4000]V
为了演示,让我们计算一些分压器参数。
电流通过r1和r2(至GND):
>>> vin / (r1 + r2) 8.01mA ± 3.33% (± 266.81µA) [7.7394 .. 8.2730]mA
电阻器的功耗:
>>> vout**2 / r1 65.46mW ± 21.35% (± 13.97mW) [51.4842 .. 79.4301]mW >>> (vin - vout)**2 / r2 128.26mW ± 12.3% (± 15.78mW) [112.4776 .. 144.0351]mW
让我们看看当环境温度为200°C时,vout如何变化:
>>> r1.at_T(200) // r2.at_T(200) * vin 8.14V ± 4.97% (± 404.16mV) [7.7359 .. 8.5443]V
r.at(温度)与r.at(温度)相同。 它返回给定温度(单位为°C)下的新电阻对象。
当然,你也可以使用完美的价值观,所以没有宽容和 温度系数:
>>> r1 = R(1e3) >>> r2 = R(2e3) >>> vin = U(24) >>> r1; r2; vin 1.0kΩ @ 20°C 2.0kΩ @ 20°C 24.0V >>> vout = r1 / (r1 + r2) * vin >>> vout 8.0V
顺便说一下,您可以使用+和 使用的阻力:
>>> r1 + r2 3.0kΩ @ 20°C >>> r1 | r2 666.67Ω @ 20°C >>> r1 | (R(5e3) + R(3e3)) | r2 # complex statements allowed! 615.38Ω @ 20°C
##课程
可用的课程有:
- 电压u(电压,公差=0.0)
- 电阻r(电阻,公差=0.0,αppm=无)
- 电流i(电流,公差=0.0)
- 功率p(功率,公差=0.0)
- 因子因子(因子,公差)(无单位因子,如下示例)
- 平方电压(V 2)usq(电压,公差=0.0)
- 平方电流(A 2)isq(电压,公差=0.0)
所有类都有以下成员(使用电压时的示例):
>>> v1 = U(24, 0.04) >>> v1 24.0V ± 4.0% (± 960.0mV) [23.0400 .. 24.9600]V >>> v1.value 24 >>> v1.min 23.04 >>> v1.max 24.96 >>> v1.unit 'V'
当 已知下限和上限(最小/最大):
>>> P.from_min_max(3, 4) 3.5W ± 14.29% (± 500.0mW) [3.0000 .. 4.0000]W
所有单位都有加、减、乘和除运算符。计算 仅当结果的类型是上述类之一时才有效:
这是因为结果类型是已知类之一:
>>> U(10) + U(20) 30.0V >>> I(2e-3) - I(10e-3) -8.0mA >>> U(10) * I(2e-3) 20.0mW >>> U(10) / I(2e-3) 5.0kΩ @ 20°C >>> U(10) * Factor(2) 20.0V >>> I(10e-3) * R(150) 1.5V >>> P(200) / U(5) 40.0A >>> U(3) * U(3) 9.0V² >>> U(3)**2 # U squared 9.0V² >>> U(3)**2 / R(1e3) 9.0mW
这不起作用,因为电压除以功率不是已知的类别:
>>> U / P Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for /: 'type' and 'type'