«Разработка учебной лабораторной установки для исследования сигналов различной формы »
Заказать уникальную курсовую работу- 41 41 страница
- 8 + 8 источников
- Добавлена 28.02.2019
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
1.1 Генерация аналоговых сигналов с помощью ШИМ 6
1.2 Генерация аналоговых сигналов с помощью R2R матрицы 8
2. ВЫБОР И ОБОСНОВАНИЕ СТРУКТУРНОЙ СХЕМЫ 10
3. ВЫБОР ЭЛЕМЕНТОВ СХЕМЫ 13
3.1 Выбор микроконтроллера 13
3.2 Выбор дисплея 17
3.3 Выбор источника опорного напряжения 20
3.4 Выбор операционного усилителя 21
3.5 Разработка схемы электрической принципиальной 22
4. РАЗРАБОТКА АЛГОРИТМА И ПРОГРАММЫ РАБОТЫ МК 24
4.1 Разработка алгоритма работы 24
4.2 Разработка программы работы МК 25
ЗАКЛЮЧЕНИЕ 40
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 41
mode)], 0, 0 );
LCDGotoXY(0, 1);
if (SG.mode==6)
{
CopyStringtoLCD(CLR, 0, 1 );
LCDGotoXY(0, 1);
printf(" %5uHz", (uint16_t)SG.deltafreq);
}
if (SG.mode==7)
{
CopyStringtoLCD(CLR, 0, 1 );
CopyStringtoLCD(RND, 0, 1 );
}
if (SG.mode==8)
{
CopyStringtoLCD(CLR, 0, 1 );
LCDGotoXY(0, 1);
printf(" %5uMHz", SG.HSfreq);
}
if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
{
CopyStringtoLCD(CLR, 0, 1 );
LCDGotoXY(0, 1);
printf(" %5uHz", (uint16_t)SG.freq);
}
if (SG.mode!=6)
{
if(on==1)
CopyStringtoLCD(MNON, 13, 1 );
else
CopyStringtoLCD(MNOFF, 13, 1 );
}
}
//обновить частоту вывода данных на жк
void Freq_Update(void)
{
if (SG.mode==6)
{
LCDGotoXY(0, 1);
printf(" %5uHz", (uint16_t)SG.deltafreq);
}
if (SG.mode==8)
{
//if HS signal
LCDGotoXY(0, 1);
printf(" %5uMHz", SG.HSfreq);
}
if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
{
LCDGotoXY(0, 1);
printf(" %5uHz", (uint16_t)SG.freq);
}
}
//CPHA bit in SPCR register
ISR(INT0_vect)
{
SG.flag=0;//установить флаг для остановки генератора
SPCR|=(1<
SG.ON=0;//остановить вывод ЖК
loop_until_bit_is_set(BPIN, START);//ожидать нажатие клавиш
}
ISR(TIMER2_OVF_vect)
{
if (bit_is_clear(BPIN, UP))
{
if (SG.mode==0)
{
SG.mode=MN_No-1;
}
else
{
SG.mode--;
}
//Управление меню ЖК
Menu_Update(SG.ON);
loop_until_bit_is_set(BPIN, UP);
}
if (bit_is_clear(BPIN, DOWN))
// Кнопка Вниз уменьшает значение, которое выбирает режим следующего сигнала
//если последний режим будет достигнут - переход к первому
{
if (SG.mode<(MN_No-1))
{
SG.mode++;
}
else
{
SG.mode=0;
}
//Управление меню ЖК
Menu_Update(SG.ON);
loop_until_bit_is_set(BPIN, DOWN);
}
if (bit_is_clear(BPIN, RIGHT))
//увеличение частоты
{
if(SG.mode==6)
{
if(SG.deltafreq==10000)
SG.deltafreq=1;
else
SG.deltafreq=(SG.deltafreq*10);
Freq_Update();
loop_until_bit_is_set(BPIN, RIGHT);
}
if (SG.mode==8)
{
if(SG.HSfreq==8)
SG.HSfreq=1;
else
SG.HSfreq=(SG.HSfreq<<1);
Freq_Update();
loop_until_bit_is_set(BPIN, RIGHT);
}
if((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
{
if ((0xFFFF-SG.freq)>=SG.deltafreq)
SG.freq+=SG.deltafreq;
Freq_Update();
uint8_t ii=0;
//нажать кнопку и ждать (~0.5s)
do{
_delay_ms(2);
ii++;
}while((bit_is_clear(BPIN, RIGHT))&&(ii<=250));//wait for button release
if(ii>=250)
{
do{
if ((0xFFFF-SG.freq)>=SG.deltafreq)
SG.freq+=SG.deltafreq;
Freq_Update();
}while(bit_is_clear(BPIN, RIGHT));//wait for button release
}
}
}
if (bit_is_clear(BPIN, LEFT))
//уменьшение частоты
{
if(SG.mode==6)
{
if(SG.deltafreq==1)
SG.deltafreq=10000;
else
SG.deltafreq=(SG.deltafreq/10);
Freq_Update();
loop_until_bit_is_set(BPIN, LEFT);
}
if (SG.mode==8)
{
if(SG.HSfreq==1)
SG.HSfreq=8;
else
SG.HSfreq=(SG.HSfreq>>1);
Freq_Update();
loop_until_bit_is_set(BPIN, LEFT);
}
if ((SG.mode==0)||(SG.mode==1)||(SG.mode==2)||(SG.mode==3)||(SG.mode==4)||(SG.mode==5))
{
if (SG.freq>=SG.deltafreq)
SG.freq-=SG.deltafreq;
Freq_Update();
uint8_t ii=0;
//press button and wait for long press (~0.5s)
do{
_delay_ms(2);
ii++;
}while((bit_is_clear(BPIN, LEFT))&&(ii<=250));//ожидать нажатие клавиш
if(ii>=250)
{
do{
if (SG.freq>=SG.deltafreq)
SG.freq-=SG.deltafreq;
Freq_Update();
}while(bit_is_clear(BPIN, LEFT));// ожидать нажатие клавиш }
}
}
if (bit_is_clear(BPIN, START))
{
if(SG.mode!=6)
{
//saving last configuration
SG.fr1=(uint8_t)(SG.freq);
SG.fr2=(uint8_t)(SG.freq>>8);
SG.fr3=(uint8_t)(SG.freq>>16);
if (eeprom_read_byte((uint8_t*)EEMODE)!=SG.mode) eeprom_write_byte((uint8_t*)EEMODE,SG.mode);
if (eeprom_read_byte((uint8_t*)EEFREQ1)!=SG.fr1) eeprom_write_byte((uint8_t*)EEFREQ1,SG.fr1);
if (eeprom_read_byte((uint8_t*)EEFREQ2)!=SG.fr2) eeprom_write_byte((uint8_t*)EEFREQ2,SG.fr2);
if (eeprom_read_byte((uint8_t*)EEFREQ3)!=SG.fr3) eeprom_write_byte((uint8_t*)EEFREQ3,SG.fr3);
//Calculate частоты value from restored EEPROM values
SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1)));
//посчитать значение калькулятора
SG.acc=SG.freq/RESOLUTION;
SG.flag=1;//установить флаг для запуска генератора
SG.ON=1;//
SPCR&=~(1<
Timer2_Stop();
Menu_Update(SG.ON);
}
loop_until_bit_is_set(BPIN, START);//wait for button release
}
}
void static inline Signal_OUT(const uint8_t *signal, uint8_t ad2, uint8_t ad1, uint8_t ad0)
{
asm volatile( "eor r18, r18 ;r18<-0" "\n\t"
"eor r19, r19 ;r19<-0" "\n\t"
"1:" "\n\t"
"add r18, %0 ;1 cycle" "\n\t"
"adc r19, %1 ;1 cycle" "\n\t"
"adc %A3, %2 ;1 cycle" "\n\t"
"lpm ;3 cycles" "\n\t"
"out %4, __tmp_reg__ ;1 cycle" "\n\t"
"sbis %5, 2 ;1 cycle if no skip" "\n\t"
"rjmp 1b ;2 cycles. Total 10 cycles" "\n\t"
:
:"r" (ad0),"r" (ad1),"r" (ad2),"e" (signal),"I" (_SFR_IO_ADDR(PORTA)), "I" (_SFR_IO_ADDR(SPCR))
:"r18", "r19"
);
}
void Timer1_Start(uint8_t FMHz)
{
switch(FMHz){
case 1:
//start high speed (1MHz) signal
OCR1A=7;
break;
case 2:
OCR1A=3;//2MHz
break;
case 4:
OCR1A=1;//4MHz
break;
case 8:
OCR1A=0;//8MHz
break;
default:
OCR1A=7;//defauls 1MHz
break;}
TCCR1A=0x40;
//старт таймера без множителя частоты
TCCR1B=0b00001001;
}
void Timer1_Stop(void)
{
TCCR1B=0x00;//timer off
}
//инициализация маин функции
void Main_Init(void)
{
//stderr = &lcd_str;
stdout = &lcd_str;
//--------init LCD----------
LCDinit();
LCDclr();
LCDcursorOFF();
//-------EEPROM установка values----------
if (eeprom_read_byte((uint8_t*)EEINIT)!='T')
{
eeprom_write_byte((uint8_t*)EEMODE,0x00);//установка режима 0 – OUT~~~~;
eeprom_write_byte((uint8_t*)EEFREQ1,0xE8);//установка частоты 1kHz
eeprom_write_byte((uint8_t*)EEFREQ2,0x03);
eeprom_write_byte((uint8_t*)EEFREQ3,0x00);
eeprom_write_byte((uint8_t*)EEINIT,'T');//
}
//------востановить последние результаты из EEPROM------
SG.mode=eeprom_read_byte((uint8_t*)EEMODE);
SG.fr1=eeprom_read_byte((uint8_t*)EEFREQ1);
SG.fr2=eeprom_read_byte((uint8_t*)EEFREQ2);
SG.fr3=eeprom_read_byte((uint8_t*)EEFREQ3);
SG.freq=(((uint32_t)(SG.fr3)<<16)|((uint32_t)(SG.fr2)<<8)|((uint32_t)(SG.fr1)));
SG.acc=SG.freq/RESOLUTION;
SG.flag=0;
//default 1MHz HS signal freq
SG.HSfreq=1;
SG.deltafreq=100;
//------------установка выхода генератора-----------
R2RPORT=0x00;// установка нулевого уровня
R2RDDR=0xFF;//
//-------------установить порт кнопок----------
BDDR&=~(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT));
BPORT|=(_BV(START)|_BV(UP)|_BV(DOWN)|_BV(RIGHT)|_BV(LEFT));
//---------установить выход для ВЧ сигнала---------
HSDDR|=_BV(HS);//
//-----------Menu init--------------
SG.ON=0;//сигнал по умолчанию отключаем
Menu_Update(SG.ON);
//-----------Timer Init-------------
Timer2_Init();
//старт таймера с прерываниями по переполнению
Timer2_Start();
}
int main(void)
{
//Установка
Main_Init();
while(1)//
{
if (SG.flag==1)
{
GICR|=(1<
{
//Шум
do
{
R2RPORT=rand();
}while(SG.flag==1);
//set signal level to 0
R2RPORT=0x00;
Menu_Update(SG.ON);
// остановить внешние прерывания
GICR&=~(1<
Timer2_Start();
}
/* else if (SG.mode==6)
{
//шаг частот
while((SG.flag==1))
{
CopyStringtoLCD(NA, 0, 1 );
}
//set signal level to 0
R2RPORT=0x00;
Menu_Update(SG.ON);
GICR&=~(1<
Timer2_Start();
}*/
else if (SG.mode==8)
{
//высокочастотный сигнал
Timer1_Start(SG.HSfreq);
while((SG.flag==1))
{
CopyStringtoLCD(MNON, 13, 1 );
}
Timer1_Stop();//timer off
//set HS pin to LOW
HSPORT&=~(1<
GICR&=~(1<
//
Timer2_Start();
}
else
{
//старт генератора
Signal_OUT(SIGNALS[SG.mode],
(uint8_t)((uint32_t)SG.acc>>16),
(uint8_t)((uint32_t)SG.acc>>8),
(uint8_t)SG.acc);
//установит уровень сигнала на 0
R2RPORT=0x00;
//
Menu_Update(SG.ON);
GICR&=~(1<
Timer2_Start();
}
}
}
return 0;
}
Заключение
В рамках аналитического и проектного разделов было проведено знакомство с объектом разработки, систематизация сведений по рассматриваемой тематике.
Результатом курсового проекта является устройство управления работой ЦАП. При необходимости устройство может быть легко модернизировано в систему контроля и управления различными параметрами в соответствии с типом подключаемых датчиков.
В ходе выполнения курсового проекта были проанализированы существующие системы управления, выявлены их достоинства и недостатки.
Разработана структурная и принципиальная схемы устройства, а также произведена разработка программного обеспечения.
Список использованных источников
Трамперт В. Измерение, управление и регулирование с помощью AVR–микроконтроллеров.: Пер. с нем.– Киев.: «МК-Пресс», 2006. – 208с.; ил.
Кравченко А.В. 10 устройств на AVR микроконтроллерах Книга 1 – М.: Издательский дом «Додэка-XXI», Киев «МК-Пресс», 2008.–224с.; Ил.
Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. – М.: Издательский дом «Додека-XXI», 2007.– 592 с.: ил.
Волович Г.И. Схемотехника аналоговых и аналогово-цифровых электронных устройств.– М.: Издательский дом «Додэка-XXI», 2001.–528 с.
Предко М. Справочник по PIC-микроконтроллерам: Пер. с англ.–М.: ДМК Пресс, 2004.–512 с.
В.В. Скороделов "Проектирование устройств на однокристальных микроконтроллерах с RISC-архитектурой". Ч1,Ч2, Учебное пособие.
Компания Atmel: Микроконтроллеры megaAVR. – URL: http://www.atmel.com/ru/ru/products/microcontrollers/avr/megaavr.aspx микроконтроллеры megaAVR Дата обращения: 10.01.2019
Сайт ПАЯЛЬНИК. Всё для радиолюбителя: CooCox CoIDE. – URL: http://cxem.net/software/coide.php Дата обращения: 03.01.2019
1
1. Трамперт В. Измерение, управление и регулирование с помощью AVR–микроконтроллеров.: Пер. с нем.– Киев.: «МК-Пресс», 2006. – 208с.; ил.
2. Кравченко А.В. 10 устройств на AVR микроконтроллерах Книга 1 – М.: Издательский дом «Додэка-XXI», Киев «МК-Пресс», 2008.–224с.; Ил.
3. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. – М.: Издательский дом «Додека-XXI», 2007.– 592 с.: ил.
4. Волович Г.И. Схемотехника аналоговых и аналогово-цифровых электронных устройств.– М.: Издательский дом «Додэка-XXI», 2001.–528 с.
5. Предко М. Справочник по PIC-микроконтроллерам: Пер. с англ.–М.: ДМК Пресс, 2004.–512 с.
6. В.В. Скороделов "Проектирование устройств на однокристальных микроконтроллерах с RISC-архитектурой". Ч1,Ч2, Учебное пособие.
7. Компания Atmel: Микроконтроллеры megaAVR. – URL: http://www.atmel.com/ru/ru/products/microcontrollers/avr/megaavr.aspx микроконтроллеры megaAVR Дата обращения: 10.01.2019
8. Сайт ПАЯЛЬНИК. Всё для радиолюбителя: CooCox CoIDE. – URL: http://cxem.net/software/coide.php Дата обращения: 03.01.2019
Вопрос-ответ:
Какую лабораторную установку разрабатывали?
Мы разрабатывали учебную лабораторную установку для исследования сигналов различной формы.
Какими методами можно генерировать аналоговые сигналы?
Аналоговые сигналы можно генерировать с помощью ШИМ (Широтно-импульсной модуляции) и R2R матрицы (резистивный делитель).
Как была выбрана структурная схема установки?
Структурная схема установки была выбрана на основе анализа требований и целей разработки.
Каким образом был выбран микроконтроллер для установки?
Выбор микроконтроллера был основан на анализе требований проекта, его характеристик и доступности на рынке.
Какие элементы схемы использовались для источника опорного напряжения?
Для источника опорного напряжения были использованы операционные усилители и резисторы.
Для чего предназначена учебная лабораторная установка?
Учебная лабораторная установка предназначена для исследования сигналов различной формы.
Какими методами можно генерировать аналоговые сигналы?
Аналоговые сигналы можно генерировать с помощью ШИМ и R2R матрицы.
Какой метод генерации сигналов был выбран для учебной лабораторной установки и почему?
Для учебной лабораторной установки был выбран метод генерации сигналов с помощью R2R матрицы, так как он обеспечивает более высокую точность и стабильность сигнала.