
Связь компьютера с МК посредством RS-232 не может происходить напрямую; логическая единица (3-5 В) и логический ноль (0-1 В) отличается от соответствующих значений для RS-232. Для решения этой проблемы используют преобразующие микросхемы, такие как MAX232 [9]. Типовая схема включения данной микросхемы приведена на рисунке 9.

SPI осуществляет высокоскоростную синхронизированную передачу данных между МК и периферией в режиме полного дуплекса [10]. Шина SPI организована по принципу «ведущий-ведомый». Передача данных синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством.
В SPI используются 4 цифровых сигнала:
SCK – последовательный тактовый сигнал (Serial Clock) S̅S̅ – выбор ведомого (Slave Select) MOSI – выход ведущего, вход ведомого (Master Out Slave In) MISO – вход ведущего, выход ведомого (Master In Slave Out)Конкретные имена портов интерфейса могут различаться в зависимости от производителя аппаратных средств.
Блок-схема работы интерфейса представлена на рисунке 10. Слева изображено ведущее устройство, справа – ведомое. Прием и передача данных осуществляются по определенным фронтам источника тактового сигнала в ведущем устройстве (SPI CLOCK GENERATOR). Ведомое устройство соединено с синхронизирующим сигналом посредством вывода SCK. Принятые и передаваемые данные записываются в 8-битных сдвиговых регистрах (SHIFT REGISTER). Ведомое устройство начинает прием сигнала при наличии низкого уровня на выводе S̅S̅ и заканчивает при наличии высокого. По окончании приема соответствующий вывод в ведущем устройстве возвращается на высокий логический уровень. Данные передаются посылками с размером, кратным 8 бит. В случае необходимости передачи более, чем 8 бит информации, на выводе S̅S̅ должен оставаться низкий логический уровень до тех пор, пока не будет передан последний бит информации.

SPI может работать в 4-х режимах:
Режим 0: данные передаются по переднему фронту CLK; Режим 1: данные передаются по заднему фронту CLK; Режим 2: данные передаются по переднему фронту CLK, сигнал CLK инвертирован; Режим 3: данные передаются по заднему фронту CLK, сигнал CLK инвертирован.Заключение
В результате выполнения курсовой работы был разработан синтезатор частоты и все входящие в него узлы. Произведены испытания и натурные исследования. Выводы курсовой работы следующие:
Изучены принципы работы аналоговых систем ФАПЧ; Изучены принципы работы цифровых систем ФАПЧ на основе ДПКД; Изучены принципы работы цифровых вычислительных синтезаторов (DDS); Изучены принципы стабилизации частоты ЖИГ-генераторов на основе многопетлевых систем ФАПЧ и принципы построения цифровых синтезаторов частот; Изучено устройство синтезатора частоты с ФАПЧ типа Stellex и изучен принцип его программирования; Разработана управляющая система для синтезатора типа Stellex на основе микроконтроллера.В ходе выполнения курсовой работы были выполнены поставленные задачи разработки блок-схемы СЧ, разработки узлов устройства, создан макет и проведены его экспериментальные исследования. На основании этого цель курсовой работы – разработка синтезатора частоты на диапазон 8-10 ГГц – успешно выполнена.
Список использованной литературы
Шапиро теории синтеза частот / , . – М.: Радио и связь, 1981. – 264 с. интезаторы частот (Теория и проектирование): Пер. с англ./Под ред. . М.: Связь, 1979. – 384 с. Белов синтезаторы стабильных частот и сигналов / // Радиотехника. – 2007. – № 3. – С. 21-25. Белов частот и сигналов: Учебное пособие / . – М.: САЙНС-ПРЕСС, 2002. – 80 с. Atmel. Microcontroller ATmega8 Datasheet // (Engl.). – URL: http://www. /Images/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet. pdf [26 April 2015]. нтегральные радиочастотные синтезаторы частоты с ФАПЧ National Semiconductor / Г. Штрапенин // Компоненты и технологии. – 2006. – № 54. – С. 50-54. Texas Instruments. LMX2326 2.8 GHz PLLatinum Low Power Frequency Synthesizer for RF Personal Communications Datasheet // (Engl.). – URL: www. /lit/gpn/lmx2326 [26 April 2015]. Последовательный интерфейс RS-232 // Информативный портал по микроэлектронике, описания микросхем, микроконтроллеров. – (Рус.). – URL: http://www. gaw. ru/html. cgi/txt/interface/rs232/index. htm [26 апреля 2015]. Texas Instruments. Dual Drivers/Receivers MAX232 Datasheet. // (Engl.). – URL; http://www. /lit/gpn/max232 [26 April 2015]. Последовательный интерфейс SPI // Информативный портал по микроэлектронике, описания микросхем, микроконтроллеров. – (Рус.). – URL: http://www. gaw. ru/html. cgi/txt/interface/spi/index. htm [26 апреля 2015].Приложение А
Внешний вид готовой установки

Приложение Б
Исходный код прошивки микроконтроллера
/*
* kursPLL. c
* Курсовой проект "Разработка синтезатора частоты на диапазон 8-10 ГГц"
* Программа для управления синтезатором частоты типа Stellex.
* Автор: Евгений Моисейкин, 3 курс, РТ, ФТФ
* 2015 год
*/
#include <avr/io. h>
#include <avr/interrupt. h>
#include <stdlib. h>
//#include <stdio. h>
////ПЕРЕМЕННЫЕ
unsigned long pll_value_r;
int last_freq, new_freq;
unsigned char control_flag=0;
char reciever[7]="",transmitter[7]="";
////НАСТРОЙКИ
//#define CONST_FREQ 8920 //Если активно, указать частоту здесь же (МГц). Уложитесь в допустимый диапазон
#define F_CPU 20000000
#define MAX_FREQ 10000 //МГц
#define MIN_FREQ 8000 //МГц
#define STEP_HZ 250000L //Гц, шаг изменения частоты (фактически в 4 раза больше)
#define REF_HZ 10000000L //Гц, опорный генератор частоты
#define UBBR 64
#define PRESCALER 32
////ОПРЕДЕЛЕНИЯ
//PLL
#define PLL_LATCH_R 0 //Значения для управляющих битов
#define PLL_LATCH_N 1
#define PLL_INIT 3
#define PLL_CB 0 //Control bits
#define PLL_COUNT 2
#define PLL_ACOUNTER 0
#define PLL_BCOUNTER 5
#define PLL_FOLD_CONTROL 4 //Обратная связь
#define PLL_PD_POLARITY 7 //Полярность фазового детектора
#define PLL_LD_PRECISION 20
//ПОРТЫ
//SPI
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SPI_PIN PINB
#define SPI_SCK 5
#define SPI_MOSI 3
#define SPI_SS 2
//USART
#define USART_PORT PORTD
#define USART_DDR DDRD
#define USART_PIN PIND
#define USART_RXD 0
#define USART_TXD 1
//PORTD
#define PLL_FOLD
////ТЕКСТ ПРОГРАММЫ
void __sendbyte(char data){
while(!(UCSRA&(1<<UDRE)));
UDR=data;
}
char __readbyte(void){
while(!(UCSRA&(1<<RXC)));
return UDR;
}
void __sendtext(char *string){
unsigned char c;
while ((c=*string++)!=0)
{
__sendbyte(c);
}
}
void __spi_send(long unsigned data){
SPI_PORT&=~_BV(SPI_SS); //начало передачи по SPI
SPDR=data>>13; //Передача байта информации
while(!(SPSR&(1<<SPIF))); //Проверка окончания передачи
SPDR=data>>5;
while(!(SPSR&(1<<SPIF)));
SPDR=data<<3;
while(!(SPSR&(1<<SPIF)));
SPI_PORT|=_BV(SPI_SS); //Конец передачи по SPI
}
void __set_MHz(long unsigned MHz){
unsigned long acounter, bcounter;
bcounter=MHz/PRESCALER;
acounter=MHz-(bcounter*PRESCALER);
__spi_send((PLL_LATCH_N<<PLL_CB)|(((bcounter<<PLL_BCOUNTER)|(acounter<<PLL_ACOUNTER))<<PLL_COUNT));
}
void __ready_for_input(void){
__sendtext("Current frequency: ");
itoa(last_freq, transmitter,10);
__sendtext(transmitter);
__sendtext(" MHz\r");
__sendtext("New frequency (MHz): ");
}
void __input_reading(void){
signed short i;
while(!(control_flag&(1<<FLAG_NEW_FREQ))){
i=0;
while(i<6){
reciever[i]=__readbyte();
__sendbyte(reciever[i]);
if(reciever[i]==0x0D){break;}
if(reciever[i]==0x08){
if(i=<0){__sendbyte(' ');}
i=-1;
}
if(i==5){
if(reciever[i]!=0x0D){
__sendtext("\rToo many numbers. It should be between 8000 and 10000 MHz.\rNew Frequency (MHz): ");
i=-1;
}
}
i++;
}
new_freq=atoi(reciever);
if((new_freq>=MIN_FREQ)&&(new_freq<=MAX_FREQ)){
control_flag|=1<<FLAG_NEW_FREQ;
control_flag&=~(1<<FLAG_LOCKED);
}
else{
__sendtext("Wrong value. It should be between 8000 and 10000 MHz.\rNew Frequency (MHz): ");
}
}
}
void __pll_lock(void){
while((PIND&(1<<3))!=0);
__sendtext("Frequency locked\r");
control_flag&=~(1<<FLAG_NEW_FREQ);
control_flag|=(1<<FLAG_LOCKED);
}
void __initialization(void){
////ПОРТЫ
DDRB=0xFF; // Все выводы настраиваются на выход,
DDRC=0xFF; // нужные настраиваются на вход.
DDRD=0xFF; // Избавляет от лишнего энергопотребления.
PORTD&=~(1<<3);
SPI_PORT|=_BV(SPI_SS);
USART_DDR&=~(1<<USART_RXD);
////РЕГИСТРЫ
//SPI
SPCR|=_BV(SPE)|_BV(MSTR); //MSB first, mode 0, fosc/4
//USART
UBRRH=(unsigned char)(UBBR>>8);
UBRRL=(unsigned char)(UBBR);
UCSRB=(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<URSEL)|(2<<UCSZ0); //7data, 1stopbit
////PLL
pll_value_r=REF_HZ/STEP_HZ;
__spi_send((PLL_INIT<<PLL_CB)|(2L<<PLL_FOLD_CONTROL)|(1<<PLL_PD_POLARITY)); //INITIALIZATION
__spi_send((PLL_LATCH_R<<PLL_CB)|(pll_value_r<<PLL_COUNT)|(1L<<PLL_LD_PRECISION)); //R DIVIDER
}
int main(void)
{;
__initialization();
#ifdef CONST_FREQ
__set_MHz(CONST_FREQ);
new_freq=CONST_FREQ;
last_freq=CONST_FREQ;
#else
new_freq=0;
last_freq=0;
#endif
while(1)
{
#ifndef CONST_FREQ
__ready_for_input();
__input_reading();
__set_MHz(new_freq);
last_freq=new_freq;
__pll_lock();
#endif
}
}
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


