Гармоническое электрическое поле · Плоскопараллельная
Диэлектрические потери: действующее напряжение и комплексный ток
Рассчитайте малые активные потери конденсатора на фоне большого ёмкостного тока. Отдельно проверьте переход от действующего напряжения к амплитуде, которую использует гармонический решатель FEMM 5.
Самостоятельная учебная модель FEMM 5: от физических соотношений к полевому решению и проверке результата.
Допущения и устройство учебной модели
| Учебная модель FEMM 5 | Причина |
|---|---|
| Прямоугольная область с идеальными электродами на торцах | Боковые естественные условия создают одномерный аналитический эталон без краевого поля. |
| Потери заданы только эквивалентной проводимостью | Проверяется одна однозначная модель диэлектрических потерь. |
| Напряжение на выводах равно амплитуде, а не действующему значению | Фактор 1/2 в мощности согласован с фазорной нормировкой FEMM. |
Все размеры, свойства материалов и условия возбуждения заданы ниже. Численные результаты относятся к опубликованной версии модели FEMM 5.
Физическая и математическая постановка
Потери через эквивалентную проводимость
Для линейного диэлектрика с известным tanδ активную составляющую тока можно задать эквивалентной проводимостью σ=ωε₀εᵣtanδ. Одновременно сохраняется вещественная εᵣ, создающая ток смещения. Угол потерь в материале повторно не задаётся, иначе потери будут учтены дважды.
Амплитуда, ток и мощность
Заданные 220 В — действующее значение. В FEMM вводится амплитуда √2·220≈311,127 В. Амплитуда тока равна Ũ(σ+jωε)A/d; средняя активная мощность равна половине Re(ŨÎ*). Нормировка проверена сравнением интеграла потерь с током электрода.
Для данных размеров ожидаются C≈2,036 пФ, σ≈0,09597 мкСм/м и P≈0,4645 мВт. Объём диэлектрика составляет 100 мм³. Гармонический интеграл co_blockintegral(0) даёт средние активные потери; проверенный здесь co_blockintegral(2) даёт модуль полной мощности в ВА.
Исходные данные
Плоскопараллельная
| Параметр | Значение | Единица | Происхождение |
|---|---|---|---|
| Расстояние между электродами d | 1 | мм | Условие учебной задачи |
| Высота электродов | 10 | мм | Условие учебной задачи |
| Глубина | 10 | мм | Условие учебной задачи |
| Относительная проницаемость | 2,3 | 1 | Условие учебной задачи |
| Тангенс угла потерь | 0,0075 | 1 | Условие учебной задачи |
| Частота | 100 | кГц | Условие учебной задачи |
| Действующее напряжение | 220 | В | Условие учебной задачи |
Порядок воспроизведения
- Изучите размеры, материалы, возбуждение и выбранную двумерную постановку. Сначала вычислите аналитический ориентир в единицах СИ.
- Скачайте файлы по отдельным ссылкам в отдельную рабочую папку. Откройте reproduce.py во встроенном редакторе Python FEMM 5 и выполните сохранённый файл.
- Программа строит русифицированные модели, сохраняет их, закрывает и открывает заново. Затем выполняет расчёт и читает свойства проводников по точному русскому имени.
- Сравните три уровня пространственной сетки. В таблицах сохранены число узлов и элементов, интегральные величины и независимые критерии. Дополнительные режимы указаны в постановке.
- Откройте самый подробный сохранённый вход и соответствующее решение. Проверьте смысл единиц, знаков и объёмного множителя; новый запуск сохранит результаты в новой папке calculated-NN.
Скачайте нужные файлы по отдельным ссылкам ниже в одну рабочую папку, затем откройте reproduce.py во встроенном Python FEMM 5 и выполните его. Сохраните имена файлов и структуру подпапок. Условия конкретного запуска и путь новых результатов указаны в комментариях программы.
Программа встроенного Python FEMM 5
"""Диэлектрические потери плоского конденсатора.
Среда: встроенный MicroPython FEMM 5; команды FEMM доступны глобально.
Геометрические размеры: миллиметры; поля и интегралы возвращаются в СИ.
Все материалы и проводники имеют русские имена. Каждая модель сохраняется,
закрывается и повторно открывается до нового расчёта, включая кириллицу.
Запуск создаёт новую папку calculated-NN рядом с программой; опубликованные
модели и предыдущие расчёты не перезаписываются. Все необходимые
исходные данные включены. Условия задачи и ограничения описаны в README.md.
"""
import os
import sys
import math
import json
saved = globals().get('__file__', '') or (sys.argv[0] if sys.argv else '')
base = os.path.dirname(os.path.abspath(saved)) if saved else os.getcwd()
index = 1
while os.path.exists(base + '/calculated-%02d' % index):
index += 1
directory = base + '/calculated-%02d' % index
os.mkdir(directory)
records = []
checks = []
EPS0 = 8.85418781762e-12
def real(value):
if isinstance(value, (list, tuple)):
return real(value[0])
return complex(value).real
def check(name, value, limit):
checks.append({'name': name, 'value': value, 'limit': limit,
'passed': math.isfinite(value) and value <= limit})
def label(x, y, material, mesh, group=1):
ei_addblocklabel(x, y)
ei_selectlabel(x, y)
ei_setblockprop(material, 0, mesh, group)
ei_clearselected()
def circle(x, radius, conductor, angle):
ei_addnode(x - radius, 0)
ei_addnode(x + radius, 0)
ei_addarc(x - radius, 0, x + radius, 0, 180, angle)
ei_addarc(x + radius, 0, x - radius, 0, 180, angle)
ei_selectarcsegment(x, radius)
ei_selectarcsegment(x, -radius)
ei_setarcsegmentprop(angle, '<None>', 0, 0, conductor)
ei_clearselected()
def solve(model):
ei_saveas(model)
ei_close()
opendocument(model)
ei_analyze(1)
ei_loadsolution()
eo_smooth('off')
def electric_result(mesh, model, input_name, output_name, exact_C):
voltage_in, charge_in = eo_getconductorproperties(input_name)
voltage_out, charge_out = eo_getconductorproperties(output_name)
voltage = real(voltage_in) - real(voltage_out)
charge = real(charge_in)
eo_groupselectblock(1)
energy = real(eo_blockintegral(0))
eo_clearblock()
capacitance = charge / voltage
energy_C = 2 * energy / voltage ** 2
row = {'mesh_mm': mesh, 'model': os.path.basename(model),
'nodes': eo_numnodes(), 'elements': eo_numelements(),
'voltage_V': voltage, 'charge_C': charge, 'energy_J': energy,
'capacitance_F': capacitance, 'energy_capacitance_F': energy_C,
'analytic_capacitance_F': exact_C,
'analytic_C_relative_error': abs(capacitance / exact_C - 1),
'energy_charge_relative_error': abs(energy_C / capacitance - 1)}
records.append(row)
check('Энергия и заряд: ' + os.path.basename(model),
row['energy_charge_relative_error'], 1e-5)
return row
U_RMS = 220
U = U_RMS * math.sqrt(2)
F = 100000
EPSR = 2.3
TAN_DELTA = 0.0075
SIGMA = 2 * math.pi * F * EPS0 * EPSR * TAN_DELTA
AREA = 10e-3 * 10e-3
DISTANCE = 1e-3
exact_C = EPS0 * EPSR * AREA / DISTANCE
exact_I = U * AREA / DISTANCE * complex(SIGMA, 2 * math.pi * F * EPS0 * EPSR)
exact_P = U_RMS ** 2 * SIGMA * AREA / DISTANCE
for level, mesh in enumerate((0.4, 0.2, 0.1)):
newdocument(3)
ci_probdef('millimeters', 'planar', F, 1e-10, 10, 30)
ci_addmaterial('Диэлектрик с эквивалентной проводимостью', SIGMA, SIGMA, EPSR, EPSR, 0, 0)
ci_addconductorprop('Электрод с амплитудой 220 корень 2 В', U, 0, 1)
ci_addconductorprop('Заземлённый электрод', 0, 0, 1)
points = ((0, 0), (1, 0), (1, 10), (0, 10))
for x, y in points:
ci_addnode(x, y)
for k, (x, y) in enumerate(points):
x2, y2 = points[(k + 1) % 4]
ci_addsegment(x, y, x2, y2)
for x, name in ((0, 'Электрод с амплитудой 220 корень 2 В'), (1, 'Заземлённый электрод')):
ci_selectsegment(x, 5)
ci_setsegmentprop('<None>', mesh, 0, 0, 0, name)
ci_clearselected()
ci_addblocklabel(0.5, 5)
ci_selectlabel(0.5, 5)
ci_setblockprop('Диэлектрик с эквивалентной проводимостью', 0, mesh, 1)
ci_clearselected()
model = directory + '/losses-%02d.fec' % (level + 1)
ci_saveas(model)
ci_close()
opendocument(model)
ci_analyze(1)
ci_loadsolution()
potential, current = co_getconductorproperties('Электрод с амплитудой 220 корень 2 В')
current = complex(current)
_, return_current = co_getconductorproperties('Заземлённый электрод')
co_groupselectblock(1)
power = real(co_blockintegral(0))
apparent_power = real(co_blockintegral(2))
co_clearblock()
row = {'mesh_mm': mesh, 'model': os.path.basename(model), 'nodes': co_numnodes(),
'elements': co_numelements(), 'conductivity_S_m': SIGMA,
'capacitance_F': current.imag / (2 * math.pi * F * U),
'I_real_A': current.real, 'I_imag_A': current.imag,
'analytic_I_real_A': exact_I.real, 'analytic_I_imag_A': exact_I.imag,
'losses_W': power, 'analytic_losses_W': exact_P,
'terminal_power_W': 0.5 * U * current.real,
'apparent_power_VA': apparent_power,
'U_RMS_V': U_RMS, 'U_amplitude_V': U}
records.append(row)
check('Активные потери по объёмному интегралу', abs(power / exact_P - 1), 1e-5)
check('Потери по средней мощности электрода', abs(0.5 * U * current.real / exact_P - 1), 1e-5)
check('Полная мощность по объёму и току',
abs(apparent_power / (0.5 * U * abs(current)) - 1), 1e-5)
check('Комплексный ток диэлектрика', abs(current - exact_I) / abs(exact_I), 1e-5)
check('Баланс комплексных токов', abs(current + complex(return_current)) / abs(current), 1e-5)
check('Ёмкость по реактивному току', abs(row['capacitance_F'] / exact_C - 1), 1e-5)
co_close()
ci_close()
check('Сходимость активных потерь', abs(records[-1]['losses_W'] /
records[-2]['losses_W'] - 1), 1e-5)
columns = {
'mesh_mm': 'Размер сетки, мм', 'model': 'Файл модели',
'nodes': 'Узлов', 'elements': 'Элементов',
'voltage_V': 'Разность потенциалов, В', 'charge_C': 'Заряд, Кл',
'energy_J': 'Энергия, Дж', 'capacitance_F': 'Ёмкость по заряду, Ф',
'energy_capacitance_F': 'Ёмкость по энергии, Ф',
'analytic_capacitance_F': 'Аналитическая ёмкость, Ф',
'analytic_C_relative_error': 'Относительная ошибка ёмкости',
'energy_charge_relative_error': 'Невязка энергии и заряда',
'E_7p5mm_V_m': 'Поле при r=7,5 мм, В/м',
'analytic_E_7p5mm_V_m': 'Аналитическое поле при r=7,5 мм, В/м',
'E_150mm_V_m': 'Поле при r=150 мм, В/м',
'analytic_E_150mm_V_m': 'Аналитическое поле при r=150 мм, В/м',
'outer_radius_mm': 'Радиус внешней границы, мм',
'insulation': 'Изоляция', 'analytic_Emax_kV_mm': 'Аналитический максимум поля, кВ/мм',
'Emax_from_charge_kV_mm': 'Максимум поля по заряду, кВ/мм',
'E_10mm_kV_mm': 'Поле при r=10 мм, кВ/мм',
'E_25mm_kV_mm': 'Поле при r=25 мм, кВ/мм',
'conductivity_S_m': 'Эквивалентная проводимость, См/м',
'I_real_A': 'Активная компонента амплитуды тока, А',
'I_imag_A': 'Квадратурная компонента амплитуды тока, А',
'analytic_I_real_A': 'Аналитическая активная компонента, А',
'analytic_I_imag_A': 'Аналитическая квадратурная компонента, А',
'losses_W': 'Диэлектрические потери, Вт',
'analytic_losses_W': 'Аналитические потери, Вт',
'terminal_power_W': 'Средняя мощность электрода, Вт',
'apparent_power_VA': 'Полная мощность, ВА',
'U_RMS_V': 'Действующее напряжение, В', 'U_amplitude_V': 'Амплитуда напряжения, В'
}
result = {'runtime': 'FEMM 5.0; встроенный MicroPython', 'records': records,
'checks': checks, 'columns': columns,
'passed': all(item['passed'] for item in checks)}
with open(directory + '/result.json', 'w') as output:
json.dump(result, output)
print(json.dumps(result))
assert result['passed'], 'Не выполнен численный критерий'
Картина рассчитанного поля
Окна FEMM 5
Снимки интерфейса FEMM показывают геометрию, настройки и работу с результатами в FEMM 5. Откройте изображение, чтобы рассмотреть подписи и значения в полном размере.
Результаты и численные проверки
Сохранено решений FEMM: 3. Выполнено проверок: 19. Полная точность чисел и условия сравнения доступны в таблицах результатов JSON.
| Полная мощность, ВА | Действующее напряжение, В | Аналитические потери, Вт | Амплитуда напряжения, В | Эквивалентная проводимость, См/м | Аналитическая квадратурная компонента, А | Узлов | Активная компонента амплитуды тока, А | Элементов | Размер сетки, мм | Файл модели | Ёмкость по заряду, Ф | Диэлектрические потери, Вт | Аналитическая активная компонента, А | Средняя мощность электрода, Вт | Квадратурная компонента амплитуды тока, А |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0,06193 | 220 | 464,5 × 10⁻⁶ | 311,1 | 95,97 × 10⁻⁹ | 398,1 × 10⁻⁶ | 1041 | 2,986 × 10⁻⁶ | 1883 | 0,4 | losses-01.fec | 2,036 × 10⁻¹² | 464,5 × 10⁻⁶ | 2,986 × 10⁻⁶ | 464,5 × 10⁻⁶ | 398,1 × 10⁻⁶ |
| 0,06193 | 220 | 464,5 × 10⁻⁶ | 311,1 | 95,97 × 10⁻⁹ | 398,1 × 10⁻⁶ | 1041 | 2,986 × 10⁻⁶ | 1883 | 0,2 | losses-02.fec | 2,036 × 10⁻¹² | 464,5 × 10⁻⁶ | 2,986 × 10⁻⁶ | 464,5 × 10⁻⁶ | 398,1 × 10⁻⁶ |
| 0,06193 | 220 | 464,5 × 10⁻⁶ | 311,1 | 95,97 × 10⁻⁹ | 398,1 × 10⁻⁶ | 1524 | 2,986 × 10⁻⁶ | 2757 | 0,1 | losses-03.fec | 2,036 × 10⁻¹² | 464,5 × 10⁻⁶ | 2,986 × 10⁻⁶ | 464,5 × 10⁻⁶ | 398,1 × 10⁻⁶ |
| Критерий | Получено | Допуск или ожидаемое значение | Итог |
|---|---|---|---|
| Активные потери по объёмному интегралу | 81,35 × 10⁻¹² | 1e-05 | Выполнен |
| Потери по средней мощности электрода | 1,14 × 10⁻⁹ | 1e-05 | Выполнен |
| Полная мощность по объёму и току | 1,222 × 10⁻⁹ | 1e-05 | Выполнен |
| Комплексный ток диэлектрика | 1,273 × 10⁻⁹ | 1e-05 | Выполнен |
| Баланс комплексных токов | 2,096 × 10⁻⁹ | 1e-05 | Выполнен |
| Ёмкость по реактивному току | 1,273 × 10⁻⁹ | 1e-05 | Выполнен |
| Активные потери по объёмному интегралу | 81,35 × 10⁻¹² | 1e-05 | Выполнен |
| Потери по средней мощности электрода | 1,14 × 10⁻⁹ | 1e-05 | Выполнен |
| Полная мощность по объёму и току | 1,222 × 10⁻⁹ | 1e-05 | Выполнен |
| Комплексный ток диэлектрика | 1,273 × 10⁻⁹ | 1e-05 | Выполнен |
| Баланс комплексных токов | 2,096 × 10⁻⁹ | 1e-05 | Выполнен |
| Ёмкость по реактивному току | 1,273 × 10⁻⁹ | 1e-05 | Выполнен |
| Активные потери по объёмному интегралу | 1,361 × 10⁻¹² | 1e-05 | Выполнен |
| Потери по средней мощности электрода | 31,48 × 10⁻¹² | 1e-05 | Выполнен |
| Полная мощность по объёму и току | 30,11 × 10⁻¹² | 1e-05 | Выполнен |
| Комплексный ток диэлектрика | 164,7 × 10⁻¹² | 1e-05 | Выполнен |
| Баланс комплексных токов | 81,68 × 10⁻¹² | 1e-05 | Выполнен |
| Ёмкость по реактивному току | 164,7 × 10⁻¹² | 1e-05 | Выполнен |
| Сходимость активных потерь | 82,71 × 10⁻¹² | 1e-05 | Выполнен |
Допуски относятся к указанной учебной задаче и способу сравнения. Число показанных цифр не означает такой же физической точности.
Модели, решения и программа
Для нового расчёта сохраните программу, модели и необходимые данные в одну рабочую папку, сохраняя структуру подпапок.
- Файл результатов: README.md1436 байт
- Решение электрического тока: losses-01.anc107934 байт
- Модель электрического тока: losses-01.fec1328 байт
- Решение электрического тока: losses-02.anc107934 байт
- Модель электрического тока: losses-02.fec1328 байт
- Решение электрического тока: losses-03.anc160179 байт
- Модель электрического тока: losses-03.fec1328 байт
- Программа встроенного Python: reproduce.py9553 байт
Границы применимости
- Проницаемость и tanδ считаются постоянными на одной частоте и при заданной температуре.
- Краевые поля, нагрев и частотная дисперсия не рассчитываются.
- Эквивалентная проводимость воспроизводит потери только на выбранной частоте; переносить её в стационарную задачу как истинную DC-проводимость нельзя.