align="justify">. 1 Рішення системи по різницевої схемою
Програма (для середовища CodeVision AVR), відповідна системі різницевих рівнянь, написана на мові С ++, представлена ??нижче.
Інтервал між перериваннями відповідає кроку інтегрування Дt рівному 0,0252 секунди.
# include lt; mega8535.h gt;
# define ADC_VREF_TYPE 0x60Y1; EE_n, EE_n_1, EE_n_2, _n, X1_n_1, X1_n_2, _n, X2_n_1, X2_n_2, _n, X3_n_1, X3_n_2, _n, X11_n_1, X11_n_2, _n, X22_n_1, X22_n_2, _n , X33_n_1, X33_n_2,=0.5, C1=0.2,=0.2, C2=0.6,=0.4, Rn=0.1,=0, dt=0.0252; char adc_input=0; char adc_data;
//Налаштування переривань таймера T0 [TIM0_OVF] void timer0_ovf_isr (void)
{= 255-197;// встановити частоту дискретизації=adc_input | ADC_VREF_TYPE; |=0x40;// Запуск АЦП
} [ADC_INT] void adc_isr (void)
{(cnt gt; 100) {cnt=100;} _ data=ADCH; 1=ADCH;//читання даних
Y1=Y1/51;//масштабування
//введення початкових умов
PORTA.1=1; PORTA.1=0;
//завдання початкових умов для вирішення діф.ур.
//початкові умови в момент часу 0
if (cnt == 0) {_ n_2=Y1; _n_2=Y1/(R1 + R2); _n_2=Y1/(R1 + R2); _n_2=0; _n_2=(R2/L3) * (Y1/(R1 + R2)); _ n_2=0;
//обнулення змінних, що використовуються на наступних кроках
X1_n_1=0; X2_n_1=0; X3_n_1=0; _n_1=0; X22_n_1=0; X33_n_1=0; _n=0; X2_n=0; X3_n=0; _n=0; X22_n=0; X33_n=0;
}//біт індикації початкових умов
//початкові умови в момент часу 1
if (cnt == 1) {_ n_1=Y1; _n_1=X1_n_2 + X11_n_2 * dt; _n_1=X2_n_2 + X22_n_2 * dt; 3_n_1=X3_n_2 + X33_n_2 * dt;
//перший крок рішення діф.ур.
X11_n_1=(1/R1)*((EE_n_1-EE_n_2)/dt)-(1/(R1*C1))*X1_n_2-(R2/R1)*X22_n_2-(1/(R1*C2))*X2_n_2;_n_1=X33_n_2+(R2/L3)*X22_n_2*dt+(1/(C2*L3))*X2_n_2*dt-Rn/L3*X33_n_2*dt;22_n_1=X11_n_1-X33_n_1;
//обнулення змінних, що використовуються на наступних кроках
X1_n=0; X2_n=0; X3_n=0; _n=0; X22_n=0; X33_n=0;
}
//рішення діф.ур. методом Ейлера
if (1 lt; cnt lt; 100) {
EE_n=Y1;
//рішення задачі
X1_n=X1_n_1 + X11_n_1 * dt;
X2_n=X2_n_1+X22_n_1*dt;_n=X3_n_1+X33_n_1*dt;_n=(1/R1)*((EE_n-EE_n_1)/dt)-(1/(R1*C1))*X1_n_1-(R2/R1)*X22_n_1-(1/(R1*C2))*X2_n_1;_n=X33_n_1+(R2/L3)*X22_n_1*dt+(1/(C2*L3))*X2_n_1*dt-Rn/L3*X33_n_1*dt;22_n=X11_n-X33_n;
//рекурсія (присвоювання старим значенням нові, щоб їх використовувати на слід. кроці)
EE_n_2=EE_n_1; EE_n_1=EE_n; _n_2=X3_n_1; X3_n_1=X3_n; _n_2=X2_n_1; X2_n_1=X2_n; _n_2=X1_n_1; X1_n_1=X1_n; _n_2=X33_n_1; X33_n_1=X33_n; _n_2=X22_n_1; X22_n_1=X22_n; _n_2=X11_n_1; X11_n_1=X11_n;
}=X3_n * 60 + 255/2;// висновок струму I3=X2_n * 60 + 255/2;// висновок струму I2=X1_n * 60 + 255/2;// висновок струму I1
//контроль часу інтегрування
cnt=cnt + 1;
//контроль cnt від переповнення
if (cnt gt; 100) {cnt=0;}
}
void main (void)
{
//ініціалізація мікроконтролера
//конфігурування порту A на введення
PORTA=0x00;
DDRA=0xfe;
//конфігурування порту B на виведення
PORTB=0x00;
DDRB=0xff;
//конфігурування порту C на висновок
PORTC=0x00;
DDRC=0xff;
//конфігурування порту D на висновок
PORTD=0x00;
DDRD=0xff;
//ініціалізація таймера тимчасових інтервалів
TCCR0=0x05;// Установка режиму таймера
TCNT0=0x00;// Установка початкових значень
OCR0=0x00;A=0x00;B=0x00;H=0x00;L=0x00;AH=0x00;AL=0x00;BH=0x00;BL=0x00;=0x00;=0x00;=0x00;=0x00;=0x00;=0x00;
//дозвіл переривань про т таймера
TIMSK=0x01;// Установка режиму таймера T0
//ініціалізація АЦП
//установка розрядності АЦП
//установка напруги АЦП
//установка способу запуску АЦП
ADMUX=ADC_VR...