Под воздействием статьей с хабрахабр, а так же отличной книги "Электроника - теория и практика", я решил так же сделать разбор цепи и сохранить у себя.

Эти все результаты можно получить с помощью любой программы моделирования электрических схем, статья просто образовательного характера, а так же показывает некоторые алгоритмы используемые в программах моделирования. В статье я покажу результаты моделирования в LTSpice.

И так, исходная схема:

Схема в LTSpice

Схема состоит из источника напряжения(Us, V1, 5В), резисторов R1 и R2 по 100Ом и конденсатора 10нФ. Если не рассматривать переходные процессы, то резисторы представляют собой делитель напряжения, конденсатор - разрыв для постоянного тока, а в случае отключения V1(Us) источника, то сам становится источником, заряженным до напряжения 2.5В и разряжающегося через сопротивления R1 и R2. Но, что, если V1(Us) не постоянный источник напряжения, а например источник с нестандартной формой сигнала, не синусоида. Понятно, что сигнал любой формы можно разложить в ряд Фурье (пример ниже):

Вид суммирования функций sin или cos, т.н ряды Фурье

и применить формулы для синусоидальных колебаний и мнимые числа. Но пойдем другим путем.

Источник в схеме - это: нарастание напряжения от 0 до 5В за 1мкс, 9мкс источник поддерживает 5В и за 1мкс падение уровня напряжения до 0В и 9мкс напряжения нет.

Смоделируем результат работы схемы в LTSpice:

  1. Результат моделирования для V1, Ur2, Uc - напряжение источника(зеленый график), падение напряжения на R2(красный) и напряжение на обкладках конденсатора(синий график).

  1. Результат моделирования, но теперь по току V1, Ir2, Ic - напряжение источника(зеленый график), ток на R2(синий) и ток на конденсаторе(красный).

Как видно из графиков, в переходные моменты, при нарастании напряжения от источника, конденсатор представляет собой меньшее сопротивление чем R1, поэтому на R2 ток выше предполагаемого 5В/200Ом=0.025А, но в конечном итоге при завершении переходных процессов он именно таким и устанавливается. И наоборот при понижении уровня напряжения появляется обратный ток, связанный с разрядкой конденсатора.

А теперь рассчитаем схему и смоделируем ее в Octave.

Немного преобразую схему:

Составлю узловые и контурные уравнения. В схеме два контура - левый и правый. И два узла идентичных, т.е можно считать один узел. В схеме есть: U1 - падение напряжения на R1, Uc - падение напряжения на емкости, U2 - падение напряжения на R2 и Us - источник напряжения. I1 - ток на R1, Ic - ток конденсатора, I2 - ток на R2. Итого:

  • $U_1=R_1*I_1 (1)$
  • $U_2=R_2*I_2 (2)$
  • $U_c=\frac{1}{C}*\int I_c \, dt$
  • $I_c=C*\frac{dU}{dt} (6)$

Левый контур:

$U_s-U_1-U_c=0 (3)$

Правый контур:

$U_c-U_2=0 (5)$

Узел:

$I_1-I_c-I_2=0 (4)$

откуда получаем:

  • из (1): $I_1=\frac{U_1}{R_1}$
  • из (2): $I_2=\frac{U_2}{R_2}$
  • из (3): $U_1=U_s-U_c$
  • из (5): $U_2=U_c$
  • из (4): $I_c=I_1-I_2=\frac{U_1}{R_1}-\frac{U_2}{R_2}=\frac{U_s-U_c}{R_1}-\frac{U_c}{R_2}$

из (4) заменив Ic на (6) получаем:

  • $C*\frac{dU}{dt}=\frac{U_s-U_c}{R_1}-\frac{U_c}{R_2}$
  • $\frac{dU}{dt}=\frac{U_s-U_c}{R_1*С}-\frac{U_c}{R_2*С}$

все, теперь все есть, можно вычислить dU/dt методом Эйлера для решения дифференциальных уравнений:

$X_i=X_{i-1}+h*\frac{dX_{i-1}}{dt}$

Вот как будет выглядеть m файл для Octav для моделирования цепи:

1;

function result = Volt1(t)
  VOLTAGE=5.0;
  PERIOD=1*10^-6+9*10^-6+1*10^-6+9*10^-6;
  PPERIOD=t-floor(t/PERIOD)*PERIOD;
  RES = 0.0;
  if (PPERIOD<(1*10^-6))
    RES=VOLTAGE/(1*10^-6)*PPERIOD;
  elseif (PPERIOD>=(1*10^-6) && PPERIOD<=(10*10^-6))
    RES=VOLTAGE;
  elseif (PPERIOD>(10*10^-6) && PPERIOD<(11*10^-6))
    RES=VOLTAGE-VOLTAGE/(1*10^-6)*(PPERIOD-10*10^-6);
  else
    RES=0.0;
  end

  result = RES;
endfunction

function result = dUc_dt(c, r1, r2, Ui, Uc, iter)
  result = (Ui(iter)-Uc(iter))/(r1*c)-(Uc(iter)/(r2*c));
endfunction

r1 = 100;
r2 = 100;
c = 10*10^-9;
delta=0.00000003;

steps=0.00006/delta;
E_y=[Volt1(0)];
E_c=[0.0];
I_c=[0.0];
I_r1=[0.0];
I_r2=[0.0];
U_r1=[0.0];
for entry = [2:1:steps],
  E_y=[E_y; Volt1(entry*delta)];
  E_c=[E_c, E_c(entry-1)+delta*dUc_dt(c, r1, r2, E_y, E_c, entry-1)];
  I_c=[I_c, c*dUc_dt(c, r1, r2, E_y, E_c, entry)];
  I_r1=[I_r1, (E_y(entry)-E_c(entry))/r1];
  I_r2=[I_r2, (E_c(entry))/r2];
  U_r1=[U_r1, I_r1(entry)*r1];
endfor

times=[];
for entry = [1:1:steps],
  times=[times; entry*delta];
endfor

subplot (2, 1, 1);
plot(times, E_c, "-;Uc;", times, E_y, "-;Us;", times, U_r1, "-;Ur1;");
grid minor;
subplot (2, 1, 2);
plot(times, I_c, "-;Ic;", times, I_r1, "-;Ir1;", times, I_r2, "-;Ir2;");
grid minor;
  • Volt1 - функция для описания поведения источника напряжения в зависимости от времени.
  • dUc_dt - функция вычисления части $\frac{dX_{i-1}}{dt}$ в уравнении Эйлера.
  • эта строка E_c(entry-1)+delta*dUc_dt(c, r1, r2, E_y, E_c, entry-1) непосредствеено само уравнение. Вычилсив его, мы можем вычислить и остальные величины.
    I_c=[I_c, c*dUc_dt(c, r1, r2, E_y, E_c, entry)];
    I_r1=[I_r1, (E_y(entry)-E_c(entry))/r1];
    I_r2=[I_r2, (E_c(entry))/r2];
    U_r1=[U_r1, I_r1(entry)*r1];

    Все данные собираются в векторах и отрисовываются на графиках. Вот что получилось в результате(верхний график напряжений, нижний - токов):

Изменив функцию Volt1 на такой алгоритм:

function result = Volt1(t)
  VOLTAGE=5.0;
  PERIOD=20*10^-6;
  PPERIOD=t-floor(t/PERIOD)*PERIOD;
  RES = 0.0;
  if (PPERIOD<=(5*10^-6))
    RES=VOLTAGE/(5*10^-6)*PPERIOD;
  elseif (PPERIOD>(5*10^-6) && PPERIOD<=(10*10^-6))
    RES=VOLTAGE/(5*10^-6)*(PPERIOD-5*10^-6);
  elseif (PPERIOD>(10*10^-6) && PPERIOD<=(15*10^-6))
    RES=VOLTAGE/(5*10^-6)*(PPERIOD-10*10^-6);
  else
    RES=VOLTAGE/(5*10^-6)*(PPERIOD-15*10^-6);
  end

  result = RES;
endfunction

можем промоделировать поведение при пилообразном напряжении:

Графики от LtSpice похожи на графики от Octave.

Добавить комментарий

Blog Comments powered by Disqus.

Следующая запись Предыдущая запись