Проектирование процедуры работы интегратора
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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!