ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. Н. Э. БАУМАНА

advertisement
Московский ордена Ленина, ордена Октябрьской Революции
и ордена Трудового Красного Знамени.
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. Н. Э. БАУМАНА
Факультет: Информатики и систем управления
Кафедра: Проектирование и технология производства электронной аппаратуры (ИУ4)
______________________________________________________________________________
Моделирование переходного процесса
в заданной схеме методом конечных
разностей
По курсу:
Студент:
Руководитель:
Математическое моделированию
Тючков А.А.
(фамилия, инициалы)
Назаров А.В.
(фамилия, инициалы)
Москва
2010
ИУ4-63
(индекс группы)
2
Содержание
Введение
Исходные данные
Расчеты
Внешний вид программы
Листинг программы
Литература
3
4
4
6
7
12
3
Введение
Целью работы является освоение математического моделирования
методом конечных разностей. Для расчета дана электрическая схема
состоящая из резисторов, емкости и индуктивности. Необходимо создать
программу для её моделирования с возможностью вывода графиков.
4
Исходные данные
E=1В
С1=0.01 мкФ
R1=1 кОм R2=2кОм
L1=1 мкГн
R3=5 кОм
Расчеты
Заменим конденсаторы R2 и R3, как параллельно соединенные:
Составим систему дифференциальных уравнений:
Перейдем к одному уравнению второго порядка:
Для упрощения введем коэффициенты:
Получаем уравнение:
Переходим к конечно-разностному представлению системы:
5
Через можно вычислить остальные составляющие переходного
процесса:
6
Внешний вид программы
7
Листинг программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit6: TEdit;
Label11: TLabel;
Label12: TLabel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
n=200;
var
Form1: TForm1;
E,C1,L1,R1,R2,R3:real;//значения ЭДС, эмкости, индуктивности и рзеисторов
delta:real;
//шаг дискретизации
a,b,c,d,R0:real;
//коэффициенты уравнения
ResCurrentL: array [1..n] of real; //массив значений тока на индуктивности
ResVoltageL: array [1..n] of real; //массив значений напряжения на индук-сти
8
ResCurrentC: array [1..n] of real; //массив значений тока на емкости
ResVoltageC: array [1..n] of real; //массив значений напряжения на емкости
implementation
{$R *.dfm}
procedure GrafikImage2; //график зависимотси тока на инд-сти от времени
var
ymin,ymax,y,my,mx:real;
i,x0,y0:integer;
begin
i:=1;
ymin:=ResCurrentL[i+2];
ymax:=ResCurrentL[i+2];
repeat
y:=ResCurrentL[i];
if y<ymin then ymin:=y;
if y>ymax then ymax:=y;
inc(i);
until i=n;
my:=105/abs(ymax-ymin);
mx:=705/n;
x0:=0;
y0:=105-abs(Round(ymin*my));
i:=1;
with Form1.Image2.Canvas do
begin
MoveTo(x0,y0);
repeat
y:=ResCurrentL[i+2];
LineTo(x0+Round(i*mx),y0-Round(y*my));
inc(i);
until i+2=n;
end;
end;
procedure GrafikImage3; //график зависимотси наряжения на инд-сти от времени
var
ymin,ymax,y,my,mx:real;
i,x0,y0:integer;
begin
i:=1;
ymin:=ResVoltageL[i+2];
ymax:=ResVoltageL[i+2];
repeat
y:=ResVoltageL[i];
if y<ymin then ymin:=y;
if y>ymax then ymax:=y;
inc(i);
until i=n;
my:=105/abs(ymax-ymin);
mx:=705/n;
x0:=0;
y0:=105-abs(Round(ymin*my));
i:=1;
with Form1.Image3.Canvas do
begin
9
MoveTo(x0,y0);
repeat
y:=ResVoltageL[i+2];
LineTo(x0+Round(i*mx),y0-Round(y*my));
inc(i);
until i+2=n;
end;
end;
procedure GrafikImage4; //график зависимотси тока на емкости от времени
var
ymin,ymax,y,my,mx:real;
i,x0,y0:integer;
begin
i:=1;
ymin:=ResCurrentC[i+2];
ymax:=ResCurrentC[i+2];
repeat
y:=ResCurrentC[i];
if y<ymin then ymin:=y;
if y>ymax then ymax:=y;
inc(i);
until i=n;
my:=105/abs(ymax-ymin);
mx:=705/n;
x0:=0;
y0:=105-abs(Round(ymin*my));
i:=1;
with Form1.Image4.Canvas do
begin
MoveTo(x0,y0);
repeat
y:=ResCurrentC[i+2];
LineTo(x0+Round(i*mx),y0-Round(y*my));
inc(i);
until i+2=n;
end;
end;
procedure GrafikImage5; //график зависимотси напряжения на емкости от времени
var
ymin,ymax,y,my,mx:real;
i,x0,y0:integer;
begin
i:=1;
ymin:=ResVoltageC[i+2];
ymax:=ResVoltageC[i+2];
repeat
y:=ResVoltageC[i];
if y<ymin then ymin:=y;
if y>ymax then ymax:=y;
inc(i);
until i=n;
my:=105/abs(ymax-ymin);
mx:=705/n;
x0:=0;
y0:=105-abs(Round(ymin*my));
i:=1;
with Form1.Image5.Canvas do
10
begin
MoveTo(x0,y0);
repeat
y:=ResVoltageC[i+2];
LineTo(x0+Round(i*mx),y0-Round(y*my));
inc(i);
until i+2=n;
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //кнопка "Считать!"
var
i,j:integer;
begin
E:=StrToFloat(Edit6.Text);
//получение значений из полей Edit
C1:=StrToFloat(Edit5.Text)/1000000000; //
L1:=StrToFloat(Edit2.Text)/1000000; //
R1:=StrToFloat(Edit1.Text)*1000;
//
R2:=StrToFloat(Edit3.Text)*1000;
//
R3:=StrToFloat(Edit4.Text)*1000;
//
delta:=0.0000000005; // вычисление шага дискретизации
R0:=(R1*R3)/(R1+R3);// вычисление коэффициентов
a:=L1/C1/R2;
//
b:=L1*(1+R0/R2); //
Form1.Image2.Canvas.FillRect(Rect(0,0,750,105)); //стирание графиков
Form1.Image3.Canvas.FillRect(Rect(0,0,750,105)); //
Form1.Image4.Canvas.FillRect(Rect(0,0,750,105)); //
Form1.Image5.Canvas.FillRect(Rect(0,0,750,105)); //
for i:=1 to n do
begin
ResCurrentL[i]:= 0;
ResVoltageC[i]:=0;
end;
j:=3;//расчет тока на инд-сти
for i:=2 to n-1 do
begin
ResCurrentL[i+1]:=(E-ResVoltageC[i]-ResCurrentL[i]*R0)*delta/b+ResCurrentL[i];
ResVoltageC[i+1]:=ResCurrentL[i]*delta/C1+a*(ResCurrentL[i+1]-ResCurrentL[i])+ResVoltageC[i];
ResCurrentC[i+1]:=C1*(ResVoltageC[i+1]-ResVoltageC[i])/delta;
ResVoltageL[i+1]:=L1*(ResCurrentL[i+1]-ResCurrentL[i])/delta;
end;
repeat
//вывод значений в таблицу
StringGrid1.Cells[0,j-2]:=FloatToStrF(ResCurrentL[j],ffGeneral,5,5);
StringGrid1.Cells[1,j-2]:=FloatToStrF(ResVoltageL[j],ffGeneral,5,5);
StringGrid1.Cells[2,j-2]:=FloatToStrF(ResCurrentC[j],ffGeneral,5,5);
StringGrid1.Cells[3,j-2]:=FloatToStrF(ResVoltageC[j],ffGeneral,5,5);
inc(j);
until j=n;
GrafikImage2;// запуск процедур прорисовки графиков
GrafikImage3;//
GrafikImage4;//
GrafikImage5;//
11
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='CurrentL';
StringGrid1.Cells[1,0]:='VoltageL';
StringGrid1.Cells[2,0]:='CurrentC';
StringGrid1.Cells[3,0]:='VoltageC';
Form1.Image1.Picture.LoadFromFile('Shema.bmp');
end;
END.
program Project2;
uses
Forms,
Unit1 in 'C:\Documents and Settings\Student\Рабочий стол\Tuchkov\Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
12
Литература
1. Конспект лекций по математическому моделированию. Назаров А.В.
2. Основы программирования в Delphi 7. - Культин Н.Б., ”БХВ-Петербург”,2005
3. Программирование в Delphi 7. – Архангельский А.Я.,”Бином”, 2003
Download