Автор работы: Пользователь скрыл имя, 29 Января 2013 в 20:02, курсовая работа
Целью работы является изучение лабораторного генератора сигналов на DDS.
Данная цель конкретизируется решением взаимосвязанных задач:
1. охарактеризовать выбор темы и элементной базы.
2. сделать расчетную работу.
3. разработать печатную плату и спрограммировать.
Введение
1. Выбор темы
2. Выбор элементной базы
3. Расчетная часть
4. Разработка печатной платы
5. Программирование
Заключение
Список литературы
Катушки L1 и L2 индуктивностью 6 мкГн можно намотать проводом ПЭВ-2 диаметром 0,15...0,2 мм на ферритовых кольцах с начальной магнитной проницаемостью 100...400 и внешним диаметром 5...7 мм. Число витков лучше подобрать экспериментально с помощью измерителя индуктивности или добиваясь резонанса параллельного контура, составленного из катушки и конденсатора емкостью 51 пФ, на частоте около 10 МГц. На плате предусмотрена и возможность установки готовых катушек индуктивности в оформлении для поверхностного монтажа. Контактные площадки для них обозначены L1' и L2'. Дроссель L3 —ДМ-0,1.
Некоторые резисторы, как показано на рис. 4, смонтированы непосредственно на выводах переменных резисторов, кнопок и переключателей, размещенных на верхней крышке корпуса генератора. Конденсатор С15 составлен из двух меньшей емкости, соединенных параллельно. Также из двух параллельных резисторов составлен резистор R27.
Трансформатор Т1 должен давать напряжение 2x12 В при токе 100 мА. Переменный резистор R14 — СП5-20ВБ. Увеличивать его номинал более 1,5 кОм не следует, это приведет к сильной зависимости амплитуды выходного сигнала от частоты.
Налаживание генератора
заключается в установке
Теоретически максимальная генерируемая DDS частота равна половине тактовой. На практике выше 1/4 тактовой частоты начинается резкий спад амплитуды сигнала, который в какой-то степени можно скомпенсировать, усложняя выходной фильтр. Но налаживание генератора при этом также резко усложнится. В данной конструкции максимальная частота выбрана равной 6 МГц. Однако учитывая, что радиолюбители предпочитают реализовывать возможности своих приборов по максимуму, программа микроконтроллера позволяет установить частоту и 11 МГц, но амплитуда и форма выходного сигнала при этом не гарантируются.
5. Программирование
В программной части проекта, для реализации DDS метода, нам понадобится 4 вещи:
аккумулятор и tuning word, который в нашем случае состоит из двух long integer переменных;
таблица значений синусоидального сигнала (один период);
цифро-аналоговый преобразователь, который обеспечивается внутренним ШИМ Arduino (analogWrite);
генератор тактовых импульсов (используем внутренний hard-таймер от ATMega).
Большинство значащих байт
аккумулятор используется для адресов
таблицы синусоидального
Для работы данного скетча на Arduino Diecimila или Duemilenove подключите потенциометр к аналоговому выводу 0 и к GND и +5В. Выход генератора находится на выводе 11, куда вы можете подключить активные колонки, или ФНЧ фильтр описанный ниже.
/*
*
* DDS Sine Generator mit ATMEGS 168
* Timer2 generates the 31250 KHz Clock Interrupt
*
* KHM 2009 / Martin Nawrath
* Kunsthochschule fuer Medien Koeln
* Academy of Media Arts Cologne
*/
#include "avr/pgmspace.h"
// table of 256 sine values / one sine period / stored in flash memory
PROGMEM prog_uchar sine256[] = {
127,130,133,136,139,143,146,
242,243,244,245,247,248,249,
221,219,217,215,212,210,208,
76,73,70,67,64,62,59,56,54,51,
33,35,37,39,42,44,46,49,51,54,
};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
int ledPin = 13; // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;
double dfreq;
// const double refclk=31372.549; // =16MHz / 510
const double refclk=31376.6; // measured
// variables used inside interrupt service declared as voilatile
volatile byte icnt; // var inside interrupt
volatile byte icnt1; // var inside interrupt
volatile byte c4ms; // counter incremented all 4ms
volatile unsigned long phaccu; // pahse accumulator
volatile unsigned long tword_m; // dds tuning word m
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
Serial.begin(115200); // connect to the serial port
Serial.println("DDS Test");
pinMode(6, OUTPUT); // sets the digital pin as output
pinMode(7, OUTPUT); // sets the digital pin as output
pinMode(11, OUTPUT); // pin11= PWM output / frequency output
Setup_timer2();
// disable interrupts to avoid timing distortion
cbi (TIMSK0,TOIE0); // disable Timer0 !!! delay() is now not available
sbi (TIMSK2,TOIE2); // enable Timer2 Interrupt
dfreq=1000.0;
tword_m=pow(2,32)*dfreq/
}
void loop()
{
while(1) {
if (c4ms > 250) { // timer / wait fou a full second
c4ms=0;
dfreq=analogRead(0);
cbi (TIMSK2,TOIE2); // disble Timer2 Interrupt
tword_m=pow(2,32)*dfreq/
sbi (TIMSK2,TOIE2); // enable Timer2 Interrupt
Serial.print(dfreq);
Serial.print(" ");
Serial.println(tword_m);
}
sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope
}
}
//****************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM, 16000000/510 = 31372.55 Hz clock
void Setup_timer2() {
// Timer2 Clock Prescaler to : 1
sbi (TCCR2B, CS20);
cbi (TCCR2B, CS21);
cbi (TCCR2B, CS22);
// Timer2 PWM Mode set to Phase Correct PWM
cbi (TCCR2A, COM2A0); // clear Compare Match
sbi (TCCR2A, COM2A1);
sbi (TCCR2A, WGM20); // Mode 1 / Phase Correct PWM
cbi (TCCR2A, WGM21);
cbi (TCCR2B, WGM22);
}
//****************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {
sbi(PORTD,7); // Test / set PORTD,7 high to observe timing with a oscope
phaccu=phaccu+tword_m; // soft DDS, phase accu with 32 bits
icnt=phaccu >> 24; // use upper 8 bits for phase accu as frequency information
// read value fron ROM sine table and send to PWM DAC
OCR2A=pgm_read_byte_near(
if(icnt1++ == 125) { // increment variable c4ms all 4 milliseconds
c4ms++;
icnt1=0;
}
cbi(PORTD,7); // reset PORTD,7
}
Заключение
Генератор синусоидального сигнала является одним из наиболее распространенных приборов в любой измерительной лаборатории. Генераторы сигналов промышленного производства имеют большие габариты, вес и довольно высокую стоимость. С появлением микросхем прямого синтеза частоты DDS (Direct Digital Synthesizer) появилась возможность изготовить генератор синусоидальных сигналов, имеющий довольно высокие параметры при относительно простой схеме и конструкции.
Генератор позволяет плавно перестраивать частоту в диапазоне 0,1 Гц...6 мГц с шагом 0,1 Гц...1 мГц, амплитуда может регулироваться от 0 до 7 В. Возможно смещение выходного напряжения относительно нуля в пределах до +/- 5 В. В генераторе использована одна из самых дешевых микросхем прямого синтеза частоты – AD9832 с тактовой частотой 25 мГц. Управляющий контроллер PIC16F84 или PIC16F628. Установленная частота и период отображаются на ЖКИ индикаторе.
Принципиальная схема лабораторного генератора сигналов на DDS показана на рисунке. Выходной сигнал с микросхемы DDS генератора проходит через пассивный LC фильтр c частотой среза 10 мГц, который улучшает спектр сигнала, фильтруя высшие гармоники. Поскольку микросхема DDS работает с однополярным питанием, необходима схема сдвига уровня. Она выполнена на «ОУ с активной обратной связью» типа AD8130. Кроме сдвига уровня на этом ОУ реализован активный фильтр нижних частот второго порядка с частотой среза 10 мГц и коэффициентом передачи 2, который дополнительно подавляет высшие гармоники.
Отфильтрованный и симметричный
относительно нуля сигнал с выхода
ОУ подается на регулятор амплитуды
- обычный переменный резистор. Применение
обычного резистора, а не электронного
аттенюатора обусловлено
Работой генератора прямого
синтеза управляет
Программа работает следующим образом. Вначале, исходя из введенной частоты, рассчитываются значения коэффициентов, загружаемых в DDS синтезатор. Затем по этому значению производится расчет периода генерируемой частоты. Результат, особенно на частотах менее 10 Гц, может несколько отличаться от того, который получился бы при расчете по формуле T=1/F. Это связано с тем, что частота в DDS синтезаторе может быть установлена не любая, а только с шагом FMCLK/2^32. Для тактовой частоты 25 мГц это около 0,006 Гц. Вопреки широко распространенному мнению о примитивности и несовершенстве системы команд PIC контроллеров двух килобайт внутренней памяти и 35 команд вполне достаточно для проведения всех расчетов без каких-либо упрощений и округлений. Поэтому точность установки частоты определяется только точностью и стабильностью тактового генератора DDS. Разработаны варианты программы для тактовой частоты 25 и 20 мГц.
Монитор питания DA1 использован не стандартно. В PIC контроллерах, в отличие от некоторых AVR, внутренняя память не склонна к искажению при медленном нарастании или снижении напряжения питания. Поэтому принимать специальные меры для внешнего сброса контроллера при включении и выключении нет необходимости. Монитор питания подключен к выводу порта RB0 и служит для подачи команды контроллеру на сохранение установленной частоты в EEPROM PIC при снижении напряжения питания ниже 4,7 В
В генераторе можно использовать как устаревший, но широко распространенный контроллер PIC16F84A, так и более новый, имеющий аналогичную цоколевку PIC16F628. Индикатор HG1 типа MT 16S2Q-2YLG производства фирмы МЭЛТ. Теоретический предел генерируемой частоты в DDS равен половине тактовой. На практике на частотах выше 1/4 тактовой начинается резкий спад амплитуды первой гармоники, который в какой-то степени можно скомпенсировать усложнением схемы фильтра. Но настройка генератора сигналов при этом резко усложняется, поэтому в данной конструкции верхняя частота принята равной 6 мГц. Однако, учитывая, что радиолюбители предпочитают реализовывать возможности своих приборов по максимуму, программно верхняя рабочая частота DDS генератора ограничена значением 11 мГц.
Список литературы