Спасибо.
...
В процессе написания программы, обнаружил в статье две незначительные опечатки.
1. В начале статьи:
- напечатано: "...который, в свою очередь, много больше
диаметра провода b."
- следует читать: "...который, в свою очередь, много больше
радиуса провода b."
На вывод формул это не влияет, но при вычислении индуктивности подставлять значение радиуса "b".
2. В конце статьи:
- напечатано: "...что при
x > 1 и увеличении x функция ln(x)/x монотонно убывает.."
- следует читать: "...что при
x > e и увеличении x функция ln(x)/x монотонно убывает.."
Указывает на то, что при x = e фукция ln(x)/x имеет максимум.
Теперь о вычислении индуктивностей.
Замечу сразу, что ни левая, ни правая топология не удовлетворяют
условиям применимости формул, полученным в статье.
Первая, т.к. не выполняется условие: a>>b или 1.0[мм]>>0.25[мм].
Вторая, т.к. не выполняется условие: l>>a или 4.0[мм]>>6.0[мм].
Далее, т.к. теперь нам известно, что инуктивностью боковых сторон
змейки пренебрегать нельзя, учтем их влияние, добавив к индуктивности из (12)
слагаемое из (3): L = 2*(N-1)*a*(µ/4π)*(ln(2a/b)-3/4), учитывающее
коэффициенты самоиндукции (N-1)-го бокового отрезка длины "a".
Т.о. вместо (12) используем выражение:
L = N*2*l*(µ/4π)*[ln(a/b)+1/4-delta(N)]+2*(N-1)*a*(µ/4π)*(ln(2a/b)-3/4).
Результаты рассчета.
Код
1. Рисунок слева:
total segments: N = 6
meander step: a = 1.00 [mm]
segment length: l = 4.00 [mm]
radius of wire: b = 0.25 [mm]
inductance: L = 8.16 [nH]
2. Рисунок справа:
total segments: N = 2
meander step: a = 6.00 [mm]
segment length: l = 4.00 [mm]
radius of wire: b = 0.25 [mm]
inductance: L = 9.23 [nH]
Возможные источники ошибок:
1. отличие от круглого сечения проводника,
2. для топологии слева нельзя считать, что N=6, скорее, N=5+1/2+1/2.
3. не учтены короткие отрезки на обоих концах змейки в точках подключения.
Но в целом, IMHO, ошибку 10%-20% можно считать удовлетворительной.
Текст программы:
Код
// MeanderInductor.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
int N; // total segments
double l = 4.0; // segment length [mm]
double b = 0.25; // radius of wire [mm]
double L; // inductance [nH]
double a; // meander step [mm]
double delta;
N = 6;
a = 1.0;
printf("total segments:\tN = %d\n",N);
printf("meander step:\ta = %4.2f [mm]\n",a);
printf("segment length:\tl = %4.2f [mm]\n",l);
printf("radius of wire:\tb = %4.2f [mm]\n\n",b);
delta = 0.0;
for (int k = 1; k < N; k++)
delta += 2*(1.0-(double)k/N)*(1-2*(k&1))*log((double)k);
L = 0.2*l*N*(log(a/b)+0.25-delta)+0.2*(N-1)*a*(log(2*a/b)-0.75);
printf("inductance:\tL = %4.2f [nH]\n\n",L);
N = 2;
a = 6.0;
printf("total segments:\tN = %d\n",N);
printf("meander step:\ta = %4.2f [mm]\n",a);
printf("segment length:\tl = %4.2f [mm]\n",l);
printf("radius of wire:\tb = %4.2f [mm]\n\n",b);
delta = 0.0;
for (int k = 1; k < N; k++)
delta += 2*(1.0-(double)k/N)*(1-2*(k&1))*log((double)k);
L = 0.2*l*N*(log(a/b)+0.25-delta)+0.2*(N-1)*a*(log(2*a/b)-0.75);
printf("inductance:\tL = %4.2f [nH]\n\n",L);
return 0;
}
Сообщение отредактировал blackfin - Jul 30 2007, 05:36