08:06


Для связи с админом используйте гостевую книгу
Каталог статей
меню

Профиль
Гость


Группа:
Гость
Время:08:06

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!


Категории раздела
Измерения [10]
Звук [10]
Автоматика [9]
Интерфейсы [9]
Видео [1]
Программы [25]
Разное [12]
Для дома [8]
Источники питания [3]
Программирование [15]
STM32 [1]
ESP [0]
Как подключить? [6]

Облако тегов

Статистика





Мы вконтакте

Приветствую Вас, Гость · RSS 07.03.2021, 08:06

Главная » Файлы » Измерения

Подключаем синтезатор частоты AD9833

   Приветствую, сегодня подключим и напишем код программы для синтезатора частоты на основе микросхемы AD9833. 
   AD9833 - это программируемый генератор сигналов с низким энергопотреблением. Позволяет генерировать сигналы с частотой до 12МГц синусоидальной, треугольной и прямоугольной формы. Программирование осуществляется с использованием SPI интерфейса.  

  • Основные характеристики микросхемы:
  • Цифровое программирование частоты и фазы.
  • Потребляемая мощность 12.65 мВт при напряжении 3 В.
  • Диапазон выходных частот от 0 МГц до 12.5 МГц.
  • Разрешение 28 бит (0.1 Гц при частоте опорного сигнала 25 МГц).
  • Синусоидальные, треугольные и прямоугольные выходные колебания.
  • Напряжение питания от 2.3 В до 5.5 В.
  • Интерфейс SPI.
  • Расширенный температурный диапазон: от –40°C до +105°C.
  • Опция пониженного энергопотребления.

   AD9833 состоит из следующих основных частей: два регистра выбора частоты, аккумулятор фазы, два регистра выбора фазы и сумматор смещения фазы (вместе эти компоненты составляют генератор с цифровым управлением - NCO, SIN ROM для преобразования информации о фазе в амплитуду и 10-разрядный цифро-аналоговый преобразователь.



   Из схемы видно, что данные с интерфейса SPI передаются в управляющий регистр, регистры выбора фазы и частоты. Именно они определяют сигнал на выходе генератора. И программирование генератора сводится к изменению содержимого указанных регистров.
   B AD9833 всем этим заведует 16-разрядный управляющий регистр. Схема из даташита демонстрирует структуру управления регистра и назначение битов:




Описание битов 16-разрядного управляющего регистра.
 № бита Описание
 0 бит зарезервирован и должен быть установлен в 0.

 
1
 бит MODE вместе с битом OPBITEN управляют выходом генератора. При OPBITEN = 1 бит MODE должен быть установлен в 0. Значение MODE = 0 позволяет получить на выходе генератора синусоидальный сигнал. При MODE = 1 на выходе будет треугольный сигнал.
 2 бит зарезервирован и должен быть установлен в 0.

 3
 бит DIV2 используется в паре со значением OPBITEN = 1. При DIV2 = 1 значение старшего значащего бита данных с входа ЦАП подается напрямую на выход VOUT. DIV2 = 0 позволяет задействовать делитель частоты и уменьшить частоту выходного сигнала вдвое. При OPBITEN = 0 значение данного бита игнорируется.
 4 бит зарезервирован и должен быть установлен в 0.

5
 бит OPBITEN вместе с битом MODE управляют выходом генератора. При OPBITEN = 1 внутренний ЦАП отключается от выхода VOUT и для генерации выходного сигнала используется значение старшего значащего бита с входа ЦАП, что позволяет получить на выходе генератора прямоугольные импульсы.
 6 бит SLEEP12 отключает и включает внутренний ЦАП. Это может быть полезно для генерации прямоугольных импульсов, при которой не требуется выполнение цифро-аналоговых преобразований. При SLEEP12 = 0 внутренний ЦАП активен. SLEEP12 = 1 внутренний ЦАП не активен.

7
 бит SLEEP1 управляет внутренним тактированием. При SLEEP1 =1 приостанавливается работа NCO и выход генератора остается в своем текущем состоянии. При SLEEP1 = 0 тактирование разрешено.
 8 бит RESET = 1 сбрасывает внутренние регистры генератора в 0. Сброс не затрагивает регистры управления, частоты и фазы.
 9 бит зарезервирован и должен быть установлен в 0.
 10 бит PSELECT определяет, данные какого из регистров PHASE0 или PHASE1 добавляются к выходу аккумулятора фазы.
 11 бит FSELECT определяет, какой из регистров используется в аккумуляторе фазы – FREQ0 или FREQ1.
 
12
 бит HLB определяет, какая из частей регистра частоты (младшая или старшая) будет перезаписана. Используется при B28 = 0. При B28 = 1 значение этого бита игнорируется. HLB = 1 позволяет обновить старшие 14 бит регистра частоты; HLB = 0 позволяет обновить младшие 14 бит регистра частоты.
 


13
 регистры частоты AD9833 имеют разрядность 28 бит, поэтому для изменения их содержимого требуется передача двух 16-битных слов. Однако в некоторых случаях требуется изменить только старшую или младшую часть регистра частоты. Здесь и используется данный признак: B28 = 1 говорит о том, что необходимо обновить регистр частоты целиком и его новое значение будет передано двумя последовательными записями. Первая запись содержит 14 младших бит, вторая 14 старших бит. Первые два бита в обеих записях определяют регистр частоты, в который будет записано передаваемое значение и должны быть одинаковыми. Обновление регистра частоты происходит после получения полного слова, поэтому запись промежуточного значения в регистр исключена. B28 = 0 позволяет обновить отдельно старшую или младшую часть регистра. Какая именно часть будет изменена определяется управляющим битом HLB.
 14,    15 чтобы AD9833 понял, что принятое по SPI 16-битное слово содержит новое значение для управляющего регистра, два старших бита в слове должны быть установлены в 0.

  Генератор AD9833 имеет 2 регистра частоты и 2 регистра фазы разрядностью 28 бит и 12 бит соответственно. Выбор активного регистра частоты осуществляется установкой управляющего бита FSELECT: при FSELECT = 0 активным является FREQ0;  при FSELECT = 1 активен регистр FREQ1. 
Результирующая частота на выходе генератора определяется следующим образом: 

    (FMCLK / 228) * FREQREG

 где FMCLK – это опорная частота, FREQREG – значение, загруженное в активный регистр частоты. Таким образом, если мы хотим получить на выходе генератора сигнал с частотой 400Гц при опорной частоте 25МГц, в активный регистр должно быть загружено значение:

 FREQREG = FOUT*228 / FMCLK = 400Гц * 228 / 25МГц ≈ 4295 

 Для того чтобы загрузить значение FREQREG в регистр частоты необходимо, старшие биты передаваемого по SPI значения установить в 01 для загрузки в FREQ0 или 10 для загрузки в FREQ1. Напомню, что общение с AD9833 осуществляется по SPI 16-битными словами. 

 Фаза выходного сигнала определяется следующим образом: 

 (2π / 212) * PHASEREG 

 соответственно, значение для регистра фазы вычисляется по формуле: 

 PHASEREG = PHASE*212 / 2π 

 В приведенных формулах PHASEREG – это значение активного регистра фазы. Выбор активного регистра осуществляется установкой управляющего бита PSELECT: при PSELECT = 0 активным является PHASE0; при PSELECT = 1 активен регистр PHASE1. 
 При записи нового значения в регистр фазы старшие биты должны быть установлены в 11, а выбор регистра, в который должно быть записано значение, осуществляется установкой бита 13: при нулевом его значении будет обновлен регистр PHASE0; при установке указанного бита в 1 будет обновлен регистр PHASE1. 12й бит не используется, а биты с 0 по 11 содержат значение для регистра фазы.
 Разрядность регистра частоты в 28 бит при опорной частоте 25МГц обеспечивает шаг 0.1Гц для установки частоты сигнала на выходе. А 12-битный регистр фазы обеспечивает разрешение 2π/4096.

Таблица с допустимыми комбинациями битов и формой сигналов на выходе.
 OPBITEN MODE DIV2 Сигнал на выходе VOUT
 0 0 X синусоидальный
 0 1 X треугольный
 1 0 0 прямоугольный с частотой F/2
 1 0 1 прямоугольный с частотой F
 1 1 X зарезервирован 


Ну а теперь напишем тестовую программу в среде BASCOM AVR.


$Regfile = "m32def.dat"
$Crystal = 16000000

SDATA alias portb.0 : Config SDATA = output
SCLK alias portb.1 : Config SCLK = output
FSYNC alias portb.2 : Config FSYNC = output : FSYNC = 1

const SINE = &h2000                                                          '0010 0000 0000 0000 - Синусоидальный сигнал
const SQUARE = &h2028                                                   '0010 0000 0010 1000 - OPBITEN=1, DIV2=1 - Прямоугольный(MSB)
const SQUARE2 = &h2020                                                 '0010 0000 0010 0000 - OPBITEN=1 - Прямоугольный (MSB/2)
const TRIANGLE = &h2002                                               '0010 0000 0000 0010 - MODE=1 - Треугольный

   Send_AD9833 &h2108                                                     '0010 0001 0000 0000 - Reset + DB28 + DAC_MSB
   Send_AD9833 &h4000                                                     '0101 0000 1100 0111 - Freq0 LSB (0)
   Send_AD9833 &h4000                                                     '0100 0000 0000 0000 - Freq0 MSB (0)
   Send_AD9833 &hC000                                                    '1100 0000 0000 0000 - Phase0 (0)
   Send_AD9833 &h2000                                                     '0010 0000 0000 0000 - Exit Reset

Do
   Set_Frec_AD9833 1 , SQUARE2                                     '0010 0000 0000 0000 - Синусоидальный сигнал
   wait 5
   Set_Frec_AD9833 100 , TRIANGLE                               '0010 0000 0000 0010 - MODE=1 - Треугольный
   wait 5
   Set_Frec_AD9833 100 , SQUARE                                   '0010 0000 0010 1000 - OPBITEN=1, DIV2=1 - Прямоугольный (MSB)
   wait 5
Loop

End


Sub Send_AD9833(byval dat as word)
   FSYNC = 0
   waitms 1
   shiftout SDATA , SCLK , dat , 0 , 16
   FSYNC = 1
End sub


Sub Set_Frec_AD9833(byval frequency as dword , byval form as word)
  
   local temps as single
   local correction as single
   local FREQ as long
   local MSB as word
   local LSB as word 

'Формула по расчету выходной частоты: FREG = (Fout*2^28)/Mclk, где Fout - желаемая частота
'К примеру если ваш тактовый генератор будет Mclk = 25.0 МГц
'то коэффициент в формуле следует заменить на 2^28/25000000 = 1073/100

   correction = 236 * frequency
   correction = correction / 1000000                               'коррекция: 236 герц на каждый 1 МГц

   If frequency > 3000000 then
      temps = frequency / 10
      temps = temps - correction
      temps = temps * 1074
      FREQ = temps / 10
   else
      temps = frequency - correction                                 'FREQ =((Freq - correction) * 1074) / 100
      temps = temps * 1074
      FREQ = temps / 100
   End if

   LSB = FREQ and &h3FFF
   LSB = LSB or &h4000                                               '14 LSBs
   shift FREQ , right , 14
   MSB = FREQ
   MSB = MSB or &h4000                                             '14 MSBs
   Send_AD9833 LSB
   Send_AD9833 MSB
   Send_AD9833 form

End sub

Для скачивания файлов:
Войдите или Зарегистрируйтесь


[ Сообщить о нерабочей ссылке ]
Категория: Измерения | Добавил: Yuriy | Теги: Генератор, DDS, AD9833, AD9837
Просмотров: 1349 | | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Поиск Datasheet


Топ пользователей
Yuriy
Добавил статей: 68
Количество постов: 54

Sanyok
Добавил статей: 5
Количество постов: 0

snyfer
Добавил статей: 4
Количество постов: 2

4RESTER
Добавил статей: 1
Количество постов: 0

Аватар не выбран Arses
Добавил статей: 1
Количество постов: 0


Новое на сайте

 Bootloader


 LG FLATRON E2350V-PN


 Аудио Модуль USB TF Рад...


 Битовые операции И, ИЛИ...


 Учебник DipTrace для на...


 Samsung LE32R81B


 Коды ошибок


 Заправка и сброс картри...


 Сервисное меню телевизо...


 Изучаем Arduino - инст...


 Микросхемы EEPROM


 500 схем для радиолюбит...


 302 новые профессиональ...


 Сварочный инвертор. Тео...


 В копилку радиолюбителя


 В копилку радиолюбителя...


 Видеокарта GeForce 210


 Видеокарта Nvidia Gefor...


 Пульт для Сhallenger ch...


 Ноутбук Acer MS2277


 Осциллограф С1-65а



На форуме

БП ATOM IPS


Манчестер кодирование


Меню BAS


Контроллер теплых полов


Програмный Uart для BOO...


Простое шифрование данн...


433Mhz TX & RX



Опрос
По какой формуле вычислется закон Ома?

Всего ответов: 130

Галерея

Copyright Elektron © 2021

Яндекс цитирования Проверка PR и ТИЦ