Функциональный генератор НЧ сигналов на основе DDS с применением контроллера AVR ATMega16
В последнее время получили широкое распространение методы цифрового синтеза частоты(DDS), причем методы реализации очень многообразны. Способ и метод реализации зависит от требований к генератору.
Поскольку я часто сталкивался с написанием программ на контроллеры AVR и Microchip – я выбирал между ними… Но дешевле и функциональнее оказался AVR. По быстродействию и нужному количеству выводов подошел ATMega16. Теперь о расчетах…
F max = 16000000Hz(Частота атмеги)
15 циклов берем на изменение аккумулятора фазы, выборку из LUT и вывод.
Итого Fclk=16000000Hz/15=1066666,6667Hz
Для необходимой точности выбрал 32-битный аккумулятор фазы.
Теперь вычислим минимальный шаг:
Step(Hz)= 1066666,6667Hz/(2^32)= 0,0002483526865641276041667(Hz)
Код самого генератора:
При 50000Гц сигнал за период будет образовываться ~21 сменой напряжений на выходе ЦАПа.
В качестве ЦАП я выбрал обычную R-2R матрицу – она не требует стробов и 8 бит вполне удовлетворяют условиям. Т.е. (|12|+|-12|) / 2^8 = 0,09375~ 0,1V

Читать дальше →
- У меня к генератору были основные требования:
- 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

Читать дальше →