Построение цифрового фильтра

Автор работы: Пользователь скрыл имя, 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. Выводы

Файлы: 1 файл

курсовик.docx

— 201.96 Кб (Скачать файл)

        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)

 

  1. Сравнение результатов

 

На рис.13 произведено наложение графика тока i3, полученного в VMLab, на тот же ток, рассчитанный ранее, с помощью процедуры MySolve. Как видно из графика, результаты вычислений полностью совпадают, если не брать во внимание ступенчатость сигнала, полученного на 8-битном АЦП.

Рис. 13 – Графики токов i3, рассчитанных MySolve и VMLab

  1. Выводы

 

В ходе выполнения данной работы был  построен цифровой фильтр. На первом этапе  было дано аналитическое представление  принципиальной схемы аналогово частотного фильтра, состоящего из R, L, C – элементов, в виде системы дифференциальных уравнения. Затем полученная система была решена двумя способами: с помощью блока MathCad – GIVEN/Odesolve и численно, с помощью процедуры MySolve. После чего, процедура численного интегрирования была реализована программно на языке C.

Результаты  работы программы, совпадают с результатами расчетов процедуры MySolve и блока GIVEN/Odesolve, из чего можно сделать вывод, что аппаратные возможности микроконтроллера позволяют реализовать на нем цифровой фильтр.

 

Информация о работе Построение цифрового фильтра