Проектирование процедуры работы интегратора



 

unsigned int Integrator(unsigned int in)

{

static unsigned int KH=8;

static unsigned int KL=10; //K=0.8 for economy memory pri uveli4enii to4nosti

static unsigned int x_in, x1, x2[2], x3[2], x4, y_out;

x_in=0;

x2[0]=0; x2[1]=0; //init old state

x3[0]=0; x3[1]=0; //init old state

y_out=0;

//your start variable here

x_in=in;

x1=x_in;

x2[1]=x1+x3[0];

x3[1]=x1+x2[0];

x4=x2[1]*KH/KL;

//save old state

x3[0]=x3[1];

x2[0]=x2[1];

//==============

return x4;

}

Процедур а передачи данных ЦАП

 

Так как ЦАП имеет последовательный вход, то данные необходимо передавать посылками. Для этого используется интерфейс SPI (Serial Peripheral Interface) - полнодуплексный скоростной синхронный трёхпроводной интерфейс.

 

Рис.3.2- Конфигурация SPI

 

SPI в реализации Atmel имеет четыре задаваемые программно скорости передачи, может передавать байты от старшего к младшему биту и наоборот, обнаруживает ошибки пакета.

За работу интерфейса отвечают 3 регистра:

· Регистр SPCR - регистр управления

 

SPIE SPE DORD   MSTR   CPOL    CPHA   SPR1 SPR0

 

SPIE - разрешение прерывания по окончанию передачи.

SPE - SPI включен. Если установлен этот бит, то выводы #SS, MISO, MOSI и SCK работают как выводы SPI, иначе - как простые выводы порта.

DORD - направление передачи данных. Если установлен, то передача идёт с младшего бита, если сброшен - со старшего.

MSTR - если установлен, контроллер работает как Master, если сброшен - как Slave. Управляется также выводом #SS, если он настроен на ввод - при подаче "0" на #SS бит MSTR сбрасывается.

CPOL - определяет уровень на выходе SCK в режиме ожидания - SCK = CPOL

CPHA - если установлен, передача и приём бита производится по обратному фронту, если сброшен - по прямому.

SPR1, SPR0 - делитель тактовой частоты (F - частота генератора контроллера).

 

SPR1 SPR0 Частота

0  0  F/4   

0  1  F/16 

1  0  F/64 

1  1  F/128

 

· Регистр SPSR - регистр состояния

· Регистр SPDR - регистр данных

void Init_SPI(void)

{

// ÌÀÑÒÅÐ

DDR_SPI=(1<<MOSI)|(1<<SCK); // Â: è ÑLK

SPCR |= (1 << SPIE); // SPI

SPCR |= (1 << SPE); //

SPCR |= (1 << MSTR); //

SPCR |= (1 << SPR0); // /16

}

void SendSPI(unsigned int x)

{

SPDR = x; // SPI

while(!SendDataReady); // ֏

SendDataReady = FALSE; //è â 0

}

interrupt [SPI_STC] void SPI_interrupt(void)

{

SendDataReady = TRUE;

}

Процедура main( )

 

void main(void)

{

unsigned int ADC_conv;

unsigned int y_out;

PORTC = 0x01;

GlobalInitialize();

Init_ADC();

Init_SPI();

while(1)

{

PORTC = 0x00;

ADC_conv=ReadADC();

y_out=Integrator(ADC_conv);

SendSPI(y_out); //ïåðåäà÷à äàííûõ ÀÖÏ

delay_us(6); //for ADC

}

}


Заключение

 

В курсовой работе разработано устройство цифровой фильтрации на основе микроконтроллера фирмы AVR ATmega16. Разработанный фильтр пропускает сигнал в диапазоне от 0 до 200 Гц. Данное устройство обладает высокой точностью преобразования. Также имеет малые габариты, вес, и обладает низким энергопотреблением.

Одним из главных достоинств цифровых фильтров, является высокая точность преобразования, так же они не имеют дрейфа вследствие изменения параметров компонентов. Но они имеют ограничения при работе в реальном режиме времени, т.к. вычисление должно быть завершено в период дискретизации. Аналоговые ж фильтры необходимо использовать для устранения эффекта наложения спектров и на высоких частотах.


Дата добавления: 2019-07-15; просмотров: 194; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!