Перейти к содержанию
    

Вопрос по эмуляции вынужденных колебаний переменного тока

Здравствуйте!

Вопрос по эмуляции вынужденных колебаний.

До сих пор читал этот форум наравне с другими источниками инф. по ПЛИС и т.п.

Но вот назрел вопрос который показалось уместно задать здесь.

Разрабатываю программу на Verilog (т.е. схему для ПЛИС) по управлению генератором переменного тока. Частота и ШИМ будут регулироваться обратной связью по току. Для тестирования нужна функция эмуляции вынужденных колебаний эл.тока.

В окончательном варианте будет примерно такое на Verilog:

module benchmark();

    эмулятор #(.собств_частота(100 тактов)) inst1 (
        .clk(clk),
        .pos // вынуждающее напряжение положительный полупериод 1 бит
        .neg // отрицательный полупериод 1 бит
        .ток // это собственно и есть сигнал обратной связи
    );

    инвертор #(мин и макс частоты) uut (
        сигналы управления ключами
        .обратная_связь(ток)
    );
endmodule

Но для начала хотелось бы смоделировать ситуацию на хорошо знакомом мне языке программирования perl. Это поможет уяснить какие параметры нужны. И может пригодиться для генерации табличных функций на Verilog.

И так, скрипт просто выводящий синусоиду в стандартный вывод:

#!perl
use Modern::Perl;

my $PI = 3.1415926535;
sin $PI/2 == 1.0 or die "assert pi";

my $lvl0 = 40; # середина строки шириной 80 символов
my $ampl = 30;
my $cur = 0;   # начальный ток - 0
my $freq = 50;

say 'x' x ($lvl0 + $ampl * sin($PI * 2 / $freq * $_)) for 1..100;

как говорится, нет ни чего проще. Это у нас будут типа вынуждающие колебания ) Хотя это совершенно не наш случай. У нас вынуждающие колебания будут прямоугольной формы но это наверное потом.

Собственно, мне нужна сама математика. Ну и физика для правильных названий параметров и пр.

Для начала затухающие колебания рассмотрим. В принципе объяснение которое я могу понять - нашёл: https://pnu.edu.ru/media/filer_public/2013/04/03/lab59.pdf

Но там формула для напряжения а не для тока, если я правильно понял. При затухающих колебаниях... Вот в орфографии perl:

q(t) = q0 * e ** (-z * t) * cos(f * t + s0)

где

  • q(t) - заряд на конденсаторе в момент времени t
  • q0 - --- в момент времени 0
  • z - коэффициент затухания = R/2L
  • f - частота колебаний = (f0 ** 2 + z ** 2) ** 0.5   [т.е. корень квадратный]
  • f0 - собственная частота контура = 1 / (L / C) ** 0.5
  • s0 - начальная фаза (как бы shift)

Нужна формула для тока.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Вадим Н. сказал:

нашёл: https://pnu.edu.ru/media/filer_public/2013/04/03/lab59.pdf

Но там формула для напряжения а не для тока, если я правильно понял.

Там q это заряд, а выражения для напряжения и тока двумя строчками выше формулы (1).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, SSerge сказал:

Там q это заряд, а выражения для напряжения и тока двумя строчками выше формулы (1).

Ну да, мне даже эту формулу вывели (см. скан) Так же всё оказывается есть в учебнике

Электромагнетизм. Основные законы / И. Е. Иродов - 5-е изд. 2006. Глава Электрические колебания.

кто бы мог подумать ))

формула затухающих колебаний.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в подтверждение концепции...

#!perl

use Modern::Perl;

use constant {
	R => 0.1,
	L => 1.0,
	C => 4.0,
	PI => 3.1415926535,
};
sin PI/2 == 1.0 or die "assert pi";

my $lvl0 = 40;                  # середина строки шириной 80 символов
my $ampl_max = 300;             # макс. амплитуда (макс. амплитудный заряд)
my $phaz0 = PI / 2;             # начальная фаза
my $freq0 = 1/L/C;              # собств. частота
my $attn = R/2/L;               # attenuation factor - коэф-т затухания
my $freq = ($freq0**2 - $attn**2)**0.5; # частота затухающих колебаний

for my $t (1..100) {
	my $i = $ampl_max * exp(1) ** (-$attn * $t);
	$i *= -$attn * cos($freq * $t - $phaz0) - $freq * sin($freq * $t + $phaz0);
	# !!!todo                     ^ на счёт знаков не уверен         ^
	say 'x' x ($lvl0 - $i);
}

ладно, будем считать что в самом поверхностном виде в тему въехал )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думал, возникнут серьёзные проблемы именно с теорией. А она на удивление просто проверилась практикой.

Закину ещё один concept proof вынужденных колебаний 

тут, как бы мы можем наблюдать появление резонанса на расчётной частоте

Скрытый текст

#!perl

=pod

Выводит в текстовом режиме график вынужденных колебаний (forced oscillations)

=cut

use Modern::Perl;

use constant {
	R => 0.05,
	L => 10.0**-6,
	C => 10.0**-5,,
	PI => 3.14159265358979,
	CLK => 10**-6, # это у нас делитель для времени чтобы обеспечить небольшое число тактов на период
};
sin PI/2 == 1.0 or die "assert pi";

my $freq0 = 1/(L*C)**0.5;       # собственная частота 
say "freq res: $freq0";

my $lvl0 = 40;                  # середина строки шириной 80 символов
my $ampl_max = 1.0;             # макс. амплитуда вынуждающего тока? внешняя ЭДС?

# несколько вариантов вынуждающей частоты
for (my $freq = 96_000; $freq <= 600_000; $freq += 20000) {
	my $rr = $freq * L - 1 / C / $freq;
	say "\nfreq: $freq\n";
	for my $t (1..100) {
		my $i = $ampl_max / (R**2 + $rr**2)**0.5;
		$i *= cos($freq * $t * CLK - atan2($rr, R));
		say 'x' x ($lvl0 + $i);
	}
}

 

из командной строки лучше в файл а не на консоль выводить C:\tmp>perl oscfor.pl > l.txt

Изменено пользователем Вадим Н.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...