Автор работы: Пользователь скрыл имя, 29 Мая 2012 в 13:16, курсовая работа
Алгебраические и дифференциальные уравнения, описывающие работу фильтра, составляются на основе законов Ома Кирхгофа.
Составим уравнения фильтра по контурам и узлам, показанным на рис. 1. Интегро-дифференциальные уравнения, составленные по контурам 1), 2), 3), выглядят следующим образом
1. Исходные данные 2
2. Частотные характеристики фильтра 3
3. Вывод системы дифференциальных уравнений 5
4. Решение системы средствами Odesolve 7
5. Система разностных уравнений 9
6. Решение системы разностных уравнений 10
7. Сравнение полученных решений 11
8. Разработка программы для микроконтроллера 12
9. Сравнение результатов 17
10. Выводы
s[1].i1 = s[1].i3 = s[1].ee/(R1 + Rn);
s[1].i2 = s[1].i22 = 0.0;
init = 1;
}
else
{
s[0] = s[1];
data = ADCH * 5.0/ 255.0;
s[1].ee = data;
s[1].i2 = s[0].i2 + DT * s[0].i22;
s[1].i3 = s[0].i3 + (1.0/(R1 + Rn)) * (s[1].ee - s[0].ee)
- (DT /((R1 + Rn)*C3))* s[0].i3
- (DT * R1/(R1 + Rn)) * s[0].i22;
s[1].i22 = s[0].i22 + Rn/ (L2 * (R1 + Rn)) * (s[1].ee - s[0].ee)
+ (DT*R1/(L2 *(R1 + Rn)*C3))*s[0].i3
- DT/(C2*L2) * s[0].i2
- (R1*R2 + R1*Rn + R2*Rn)*DT/((R1 + Rn)*L2) * s[0].i22;
s[1].i1 = s[1].i2 + s[1].i3;
}
PORTB = (s[1].i1 + 2.5)*255.0 / 5.0;
PORTC = (s[1].i2 + 2.5)*255.0 / 5.0;
PORTD = (s[1].i3 + 2.5)*255.0 / 5.0;
}
void main(void)
{
// Инициализация периферийных устройств контроллера
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTB=0x00;
DDRB=0xff;
// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTC=0x00;
DDRC=0xff;
// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTD=0x00;
DDRD=0xff;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 15000 Hz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x04;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AREF pin
// ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x8D;
SFIOR&=0xEF;
// Global enable interrupts
#asm("sei")
while (1)
{
//холостой цикл
}
}
Листинг 1 – Программа, реализующая цифровой фильтр
; ------------------------------
.MICRO "ATmega8535"
.TOOLCHAIN "GENERIC"
.TARGET "primer.hex"
.COFF "primer.cof"
.SOURCE "main.c"
.TRACE ; Activate micro trace
; ------------------------------
.POWER VDD=5 VSS=0 ; Питание +5 вольт
; VSS это GND МК - "общий" провод схемы
; Относительно него измеряются напряжения
.CLOCK 4meg ; тактовая частота МК
.STORE 2.5 ; время отображения
; ------------------------------
XMyFunc _IMPULSE101(1 21m) pa0 ; импульсный генератор)
; ------------------------------
XD2A_B D2A8 pb7 pb6 pb5 pb4 pb3 pb2 pb1 pb0 ana_out;описание цифро-аналогового преобразователя порт PB
XD2A_C D2A8 pc7 pc6 pc5 pc4 pc3 pc2 pc1 pc0 ana_out_2 ;описание цифро-аналогового преобразователя порт PC
XD2A_D D2A8 pd7 pd6 pd5 pd4 pd3 pd2 pd1 pd0 ana_out_3;описание цифро-аналогового преобразователя порт PD
.PLOT V(PA0) V(ana_out) V(ana_out_2) V(ana_out_3) ;вывод данных на осциллограф
Листинг 2 – Проект VMLab
Рис. 11 – Процесс эмуляции работы МК в VMLab
На рис. 12 представлены результаты работы программы.
Рис. 12 – Результаты работы программы (График MatLab)
На рис.13 произведено наложение графика тока i3, полученного в VMLab, на тот же ток, рассчитанный ранее, с помощью процедуры MySolve. Как видно из графика, результаты вычислений полностью совпадают, если не брать во внимание ступенчатость сигнала, полученного на 8-битном АЦП.
Рис. 13 – Графики токов i3, рассчитанных MySolve и VMLab
В ходе выполнения данной работы был построен цифровой фильтр. На первом этапе было дано аналитическое представление принципиальной схемы аналогово частотного фильтра, состоящего из R, L, C – элементов, в виде системы дифференциальных уравнения. Затем полученная система была решена двумя способами: с помощью блока MathCad – GIVEN/Odesolve и численно, с помощью процедуры MySolve. После чего, процедура численного интегрирования была реализована программно на языке C.
Результаты работы программы, совпадают с результатами расчетов процедуры MySolve и блока GIVEN/Odesolve, из чего можно сделать вывод, что аппаратные возможности микроконтроллера позволяют реализовать на нем цифровой фильтр.