Печать

DDS генератор на ATmega16

Опубликовано . Опубликовано в Устройства на AVR

Рейтинг:   / 16
ПлохоОтлично 
DDS генератор на ATmega16

В этой статье рассматривается схемотехническое решение, устройство и конструкция DDS генератора (генератор с прямым цифровым синтезом формы сигнала) на микроконтроллере ATmega16 фирмы Atmel. В приборе, кроме синтеза сигнала различной формы и частоты, реализуется возможность регулировки амплитуды и смещения выходного сигнала.

Основные характеристики прибора:

- простое схемотехническое решение, доступные компоненты;
- односторонняя печатная плата;
- сетевой источник питания;
- специализированный выход частоты от 1 МГц до 8 МГц;
- DDS выход с регулировкой амплитуды и смещения;
- форма выходного DDS сигнала: синусоида, прямоугольные импульсы, пилообразные импульсы, треугольные импульсы, ЭКГ, шум;
- для отображения текущих параметров используется двухстрочный ЖК дисплей;
- пятикнопочная клавиатура;
- шаг перестройки частоты: 1, 10, 10, 1000, 10000 Гц;
- восстановление последней конфигурации при включении;
- регулировка смещения: –5 В … +5 В;
- регулировка амплитуды: 0 … 10 В;
- регулировка частоты: 0 … 65534 Гц.

За основу прибора, а точнее алгоритм работы микроконтроллера, была взята разработка DDS генератора Jesper Hansen. Предложенный алгоритм был немного переработан и адаптирован под компилятор WinAVR-GCC

Сигнальный генератор имеет два выхода: выход DDS сигнала и выход высокочастотного сигнала (1 – 8 МГц) прямоугольной формы, который может использоваться для «оживления» микроконтроллеров с неправильными установками Fuse-битов или для других целей.

Высокочастотный сигнал поступает непосредственно с микроконтроллера, с вывода OC1A (PD5). DDS сигнал формируется микроконтроллером с использованием цепочки резисторов R2R (ЦАП), регулировка смещения и амплитуды возможна благодаря использованию низкопотребляющего операционного усилителя LM358N.

Блок-схема DDS генератора

Блок-схема DDS генератора

Как видно, для питания устройства необходимо три напряжения: +5 В, +12 В, –12 В. Напряжения +12 В и –12 В используются для аналоговой части устройства на операционном усилителе для регулировки смещения и амплитуды.

Принципиальная схема источника питания.

Принципиальная схема источника питания

В источнике питания используются стабилизаторы напряжения LM7812, LM7805, LM7912 (стабилизатор отрицательного напряжения –12 В).

Принципиальная схема прибора

Принципиальная схема прибора

Рисунок печатной платы

Рисунок печатной платы

Вид со стороны установки элементов

Внешний вид платы с установленными компонентами

Список использованных элементов

Обозначение
в схеме
Номинал
R1 470 Ом
R2, R6, R8, R10,
R12, R14, R16, R18
10 кОм
R3, R21 100 кОм
R4, R5, R7, R9, R11,
R13, R15, R17, R19
20 кОм
R20 100 Ом
R22 12 кОм
R23 150 Ом
POT1 Потенциометр 1 кОм
POT2 Потенциометр 47 кОм
POT3 Пдстроечный резистор 10 кОм
C1, С2 100 нФ
C3, С4 18 пФ
Q1 Кварцевый резонатор 16 МГц
IC1 Микроконтроллер Atmel ATMEGA16P
IC2 Операционный усилитель LM358N
BNC1 - BNC2 Коннектор типа BNC
S1 - S6 Кнопки
LCD Header 16-выводный коннектор
для подключения дисплея
LCD Module ЖК модуль на базе контроллера HD44780
ISP Коннектор 2×3 для внутрисхемного
программирования
POWER Коннектор для подключения питания
LED1 Светодиод зеленого цвета свечения, 3 мм
ON/OFF Миниатюрный выключатель

Изменения в программном обеспечении микроконтроллера

Изменения в исходном коде связаны лишь с назначением кнопок подключенных к порту D микроконтроллера:

1.Кнопки «влево» и «вправо»

#define LEFT 3  //PORTD 
#define RIGHT 1 //PORTD 

2.Кнопки «вниз» и «вверх»

#define DOWN 4 //PORTD 
#define UP 0   //PORTD 

Кроме того для последних версий компилятора AVR-GCC необходимо внести изменения в следующие строчки кода:

struct signal{
  volatile uint8_t mode;  //signal
  volatile uint8_t fr1;   //Frequency [0..7]
  volatile uint8_t fr2;   //Frequency [8..15]
  volatile uint8_t fr3;   //Frequency [16..31]
  volatile uint32_t freq; //frequency value
  volatile uint8_t flag;  //if 0 generator is OFF, 1 is ON
  volatile uint32_t acc;  //accumulator
  volatile uint8_t ON;
  volatile uint8_t HSfreq;     //high speed frequency [1...4Mhz]
  volatile uint32_t deltafreq; //frequency step value
}SG;

Fuse-биты микроконтроллера ATmega16: HIGH = 0×59, LOW = 0×CF – это соответствует тому, что будут запрограммированы следующие биты: OCDEN, SPIEN, BOOTSZ1, BOOTSZ2, SUT1, SUT0.

Источник: Радиолоцман

Файлы:
Исходный проект AVR GCC, схема и плата в формате Eagle
Дата 09.01.2012 Размер файла 168.74 KB Закачек 3334

Комментарии  

+1 #1 zigler 11.12.2012 02:36
Здравствуйте!
Нужно получить на выходе генерированный сигнал с током по амплитуде от 0 до 1 А (вручную регулирование, напр., потенциометром) . То есть важна форма и амплитуда тока, напряжение абсолютно не интересно. Т.е. выход должен работать как источник тока, не зависимо от нагрузки.
Подскажите, пожалуйста, каким методом реализовывали бы такую задачу Вы?
Сообщить модератору
+1 #2 apeks1 04.07.2015 16:36
в чем преимущество данного генератора по сравнению с этим?
sxem.org/.../...

и еще вопрос обязателно корректировать прошивку с переназначением кнопок?
Сообщить модератору
+1 #3 AntonChip 05.07.2015 08:54
Отличие в применяемых контроллерах и меню, кнопки переназначать необязательно
Сообщить модератору
0 #4 Юрий. 11.07.2015 10:34
Здравствуйте. Возможно ли заменить мегу 16Р на мегу 16А?
Сообщить модератору
+1 #5 AntonChip 11.07.2015 11:54
Цитирую Юрий.:
Здравствуйте. Возможно ли заменить мегу 16Р на мегу 16А?

Да, можно, 16A более энергоэффективн а
Сообщить модератору
-1 #6 apeks1 11.07.2015 21:29
AntonChip 05.07.2015 08:54
Отличие в применяемых контроллерах и меню, кнопки переназначать необязательно

спасибо за ответ! буду собирать а то на атмега8 мне не нравится,часто слетает прошивка в момент подключения и отключения к измеряемым устройствам
Сообщить модератору
0 #7 apeks1 22.08.2015 02:14
собрал этот генератор и столкнулся с такой ситуацией,во всех режимах только меандр частота регулируется нормально, что делать? и еще контролер очень тяжело прошивался. контролер использовал TQFP, лм358 запитал с 7809 по плюсу по минусу использовал 7660
Сообщить модератору
+1 #8 apeks1 22.08.2015 05:10
все :-) вопрос снят,допустил косяк в разводке ЦАП
Сообщить модератору

Рекомендуем посмотреть