Функциональный генератор НЧ сигналов на основе DDS с применением контроллера AVR ATMega16

В последнее время получили широкое распространение методы цифрового синтеза частоты(DDS), причем методы реализации очень многообразны. Способ и метод реализации зависит от требований к генератору.
    У меня к генератору были основные требования:
  • 1. Частота в диапазоне от 0.01Гц – 50000Гц с шагом 0.01Гц
  • 2. Максимальная, по возможности, линейность на протяжении всего диапазона.
  • 3. Работа на низкоомную нагрузку(для проверки динамиков и УЗ магнитострикционных излучателей)
  • 4. Удобство и быстрота перестройки «на горячую».
  • 5. Сканирование заданного диапазона с заданным шагом (удобно для определения частоты резонанса чего угодно)
  • 6. Большое количество форм сигналов, и постоянное напряжение для калибровки.
  • 7. Информативность отображения.

Поскольку я часто сталкивался с написанием программ на контроллеры AVR и Microchip – я выбирал между ними… Но дешевле и функциональнее оказался AVR. По быстродействию и нужному количеству выводов подошел ATMega16. Теперь о расчетах…
F max = 16000000Hz(Частота атмеги)
15 циклов берем на изменение аккумулятора фазы, выборку из LUT и вывод.
Итого Fclk=16000000Hz/15=1066666,6667Hz
Для необходимой точности выбрал 32-битный аккумулятор фазы.
Теперь вычислим минимальный шаг:
Step(Hz)= 1066666,6667Hz/(2^32)= 0,0002483526865641276041667(Hz)
Код самого генератора:
while (1){ 
          
            #asm 
                        ADD  R1,R6
                	ADC  R2,R7
                        ADC  R3,R8
                	ADC  R4,R9
            #endasm
PORTC=LUT_of_Signal[Phase_acc.Phase_acc_8bits_of_byte[3]];  

При 50000Гц сигнал за период будет образовываться ~21 сменой напряжений на выходе ЦАПа.
В качестве ЦАП я выбрал обычную R-2R матрицу – она не требует стробов и 8 бит вполне удовлетворяют условиям. Т.е. (|12|+|-12|) / 2^8 = 0,09375~ 0,1V
Максимум и минимум для расчета шага
Для удобства и быстроты настройки частоты я использовал валкодер, по схеме предложенной радиолюбителем VK6BRO, из шагового двигателя.
Схема валкодера

Чтобы предотвратить ложные срабатывания от валкодера – контроллер несколько раз проверяет направления при шагах и только тогда фиксирует изменения.
Остальные параметры задаются 4-мя кнопками.

Собственно сама схема генератора и его управления

    Генератор имеет возможность воспроизводить следующие формы сигналов:
  • 1. Синусоида
  • 2. Меандр
  • 3. H-wave
  • 4. Лестница симметричная
  • 5. Трапеция
  • 6. Пила
  • 7. Прямоугольник симметричный
  • 8. Лестница асимметричная
  • 9. Прямоугольник асимметричный
  • 10. Постоянный "+"
  • 11. Постоянный "-"
Видео с работой
Так же добавил функцию сканирования заданного диапазона частот с регулируемым шагом.
Шаг устанавливается 0,01Гц-0.1Гц-1Гц-10Гц-100Гц и обратно. Для удобства отображения и простоты написания программы использовал LCD от Nokia 3310(84x48). В качестве самого валкодера использовал биполярный шаговый двигатель от старого винчестера. Все устройство и программу просимулировал в Proteus.

Аналоговая часть генератора
Аналоговая часть
Поскольку ЦАП выдает сигнал однополярный а задумка была зделать именно двухполярный генератор то необходимо использовать смещение на усилителе. В качестве источника опорного напряжения я выбрал TL431. Сам усилитель я реализовал на 2-х каскадах. Для усиления нагрузочной способности я применил повторитель напряжения на микросхеме TDA2030A.
Повторитель TDA2030
Сигнал на выходе устройства U3 повторяет по форме и амплитуде входной, но имеет большую мощность, т.е. схема может работать на низкоомную нагрузку. Повторитель использован для увеличения выходной мощности низкочастотного генератора (чтобы можно было непосредственно испытывать головки громкоговорителей или акустические системы). Полоса рабочих частот повторителя линейна от постоянного тока до 0,5...1 МГц, что более чем достаточно для генератора НЧ.

Источник питания — любой(импульсный или линейный), желательно стабилизированный с питаниями +5,+12/-12V.

О сборке
При сборке проблем особых не возникло, настройка заключается в подстройке аналоговой части симметричности и амплитуды выходного сигнала. Смещение настраивается резистором R1 и R6.Амплитуда первого каскада R5, второго R8.

Ссылки на схемы цифровой и аналоговой части(JPG и проект в Proteus) и прошивка:
Загрузить с Letitbit
Загрузить с Filesonic

75 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.