В последнее время получили широкое распространение методы цифрового синтеза частоты(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(84×48). В качестве самого валкодера использовал биполярный шаговый двигатель от старого винчестера. Все устройство и программу просимулировал в Proteus.
Аналоговая часть генератора
Поскольку ЦАП выдает сигнал однополярный а задумка была зделать именно двухполярный генератор то необходимо использовать смещение на усилителе. В качестве источника опорного напряжения я выбрал TL431. Сам усилитель я реализовал на 2-х каскадах. Для усиления нагрузочной способности я применил повторитель напряжения на микросхеме TDA2030A.
Сигнал на выходе устройства U3 повторяет по форме и амплитуде входной, но имеет большую мощность, т.е. схема может работать на низкоомную нагрузку. Повторитель использован для увеличения выходной мощности низкочастотного генератора (чтобы можно было непосредственно испытывать головки громкоговорителей или акустические системы). Полоса рабочих частот повторителя линейна от постоянного тока до 0,5…1 МГц, что более чем достаточно для генератора НЧ.
Источник питания — любой(импульсный или линейный), желательно стабилизированный с питаниями +5,+12/-12V.
О сборке
При сборке проблем особых не возникло, настройка заключается в подстройке аналоговой части симметричности и амплитуды выходного сигнала. Смещение настраивается резистором R1 и R6.Амплитуда первого каскада R5, второго R8.
Ссылки на схемы цифровой и аналоговой части(JPG и проект в Proteus) и прошивка:
Загрузить с Letitbit
Загрузить с Filesonic
Оцените статью!