Генератор на AD9833

Рассмотрим в данной статье как сделать генератор на AD9833. Микросхеме от компании Analog Devices. Данная микросхема позволяет генерировать синусоидальный, прямоугольный и треугольный сигналы с частотой до 12.5 Мгц.

Характеристики AD9833

  • Низкое потребление энергии. Всего 12,6 мВт при напряжении 3 В.
  • Диапазон изменяемой частоты от 0 до 12500000 Гц. С шагом 1 Гц.
  • Формирует такие формы сигнала как, треугольник, синус, меандр.
  • Напряжение питание от 2,3 до 5,5 В.
  • Диапазон рабочих температур от -40 до +105 °C.
  • Десяти выводной корпус.
  • Управление микросхемой через SPI интерфейс до 40 МГц.

Функциональная диаграмма

Функциональная диаграмма микросхемы AD9833

Цоколевка и описание выводов

Выводы микросхемы AD9833
№ выводаНазваниеНазначение
1COMPЗдесь подключается блокировочный конденсатор, который защищает от помех напряжение смещения.
2VDDОбщее питание аналоговой и цифровой частей микросхемы. Так же необходимо подключить развязывающие конденсаторы 0.1 мкФ и 10 мкФ между VDD и AGND.
3CAP/2.5VТак как цифровая часть работ от напряжения 2,5В, то когда это напряжение превышает 2,7В необходимо подключать развязывающий конденсатор на 100нф. Он подключается между выводом CAP/2.5V и DGND. Если напряжение питания меньше или равно 2,7В то вывод CAP/2.5V подключается напрямую к VDD.
4DGNDЗемля цифровой части микросхемы
5MCLKВход тактируемой частоты. На основе ее рассчитывается выходная частота.
6SDATAВход данных по SPI. Принимает по 16 бит данных.
7SCLKТактирование интерфейса SPI
8FSYNCCS сигнал SPI. Логический 0 указывает, что в микросхему загружается слово.
9AGNDЗемля аналоговой части микросхемы
10VOUTВыход сигнала. В зависимости от того, какой режим выбран, вфходной сигнал либо цифровой либо аналоговый. Так же на этом выходе имеется резистор 200 Ом. По этому внешнюю нагрузку не нужно делать.

Регистр управления ad9833

Регистр управление представляет собой 16 битное слово. Установив биты D14 и D15 в 0 указываем микросхеме, что регистр изменился и необходимо сделать новые установки.

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

В таблице описаны назначения битов регистра управления микросхемы AD9833.

БитИмяОписание функций
D13B28Так как за раз мы можем загрузить 16 бит, то для загрузки частоты нам необходимо сделать 2 раза запись. Установив B28 = 1 микросхема ожидает полную загрузку значения частоты. Это достигается записью в микросхему двух частей значения частоты. Сначала записываем 14 младших бит (LSB), затем 14 старших бит (MSB).
Биты 15 и 16 содержат информацию, какой регистр частоты загружается, первый или второй. Установка частоты произойдет только после того как микросхема получит 2 части значения этой частоты.
D12HLBУстановка этого бита в 1 дает возможность отдельно загрузить либо старшую либо младшую часть частоты. Для этого необходимо установить бит B28 в 0. Бит HLB показывает какая часть, старшая или младшая должна быть загружена. HLB = 1 записывается старшая часть слова частоты, HLB = 0 — записывается младшая часть слова частоты. Если B28 = 1, то этот бит игнорируется и записывать и старшая и младшая часть частоты.
D11FSELECTБит FSELECT указывает, какой из регистров частоты используется в данное время — FREQ0 или FREQ1.
D10PSELECTБит PSELECT указывает, какой из регистров фазы используется в данное время -PHASE0 или PHASE1.
D9зарезервированДолжен быть 0
D8ResetReset = 1 сбрасывает внутренние регистры в 0, что соответствует появлению на выходе среднего уровня. При этом регистры фазы, частоты и управления не сбрасываются.
D7SLEEP1Данный бит отключает MCLK. Для этого нужно установить SLEEP1 = 1. после отключения MCLK, DAC сохраняет свое текущее состояние. SLEEP1 = 0 — разрешает работу MCLK.
D6SLEEP12Бит SLEEP12 = 1 выключает встроенный ЦАП. После чего микросхема формирует прямоугольный сигнал. Когда SLEEP12 = 0 то ЦАП работает в штатном режиме.
D5OPBITENЭтот бит устанавливает, какой формы сигнал будет на VOUT. Работает вместе с битом D1. Если OPBITEN = 1, то встроенный DAC выключен и на VOUT появляется либо старший бит данных либо частота MSB/2. (Прямоугольный сигнал). Если OPBITEN = 0, DAC подключается к выходу VOUT и с помощью бита D1 устанавливаем форму сигнала — синусоиду или треугольник.
D4зарезервированДолжен быть 0
D3DIV2DIV2 используется в связке с битом D5 (OPBITEN). Если DIV2 = 1, старший бит данных DAC (MSB) напрямую выводится на вывод VOUT. Если DIV2 = 0, на выводе VOUT формируется меандр MSB/2.
D2зарезервированДолжен быть 0
D1ModeЭтот бит работает вместе с битом OPBITEN. Если OPBITEN = 1, то бит mode должен быть установлен в 0, так как DAC отключен. Если OPBITEN = 0, то при mode = 0 на выходе синусоидальный сигнал, если mode = 1, то на выходе сигнал треугольной формы.
D0зарезервированДолжен быть 0

Настройка сна для AD9833

SLEEP1SLEEP12Описание
00Работают все цепи микросхемы
01DAC выключен
10Отключено внутреннее тактирование. MCLK не работает.
11Максимальная экономия энергии. Выключен DAC и MCLK.

Пример библиотеки на STM32

Ниже представлен программный код, для обмена данными между STM32 и микросхемой DDS AD9833.

#include "AD9837.h"
#include "spi.h"
#include "math.h"

#define LOW(x) (x & 0xFF)
#define HIGH(x) ((x >> 8) & 0xFF)

int32_t Freq;

void SetFreqAD9837(int32_t freq)
{
	__disable_irq();
	Freq = calcDDSTuningWord(freq);
	sineWave(Freq);
	__enable_irq();
}


int32_t calcDDSTuningWord(int32_t frequency)
{
        // Частота кварца 16 Мгц
       
    	int32_t FTW;
        // stepSize = 2^28 / 16 = 16.777216 
	float stepSize = 16.777216;
	FTW = stepSize * frequency;
	return FTW;
}


void sineWave(int32_t FTW)
{
  uint32_t MSB;
  uint32_t LSB;
  uint32_t phase = 0;
  MSB = (uint32_t)((FTW & 0xFFFC000)>>14); //14 bits
  LSB = (uint32_t)(FTW & 0x3FFF);
  //Set control bits DB15 ande DB14 to 0 and one, respectively, for frequency register 0
  LSB |= 0x4000;
  MSB |= 0x4000;
  phase &= 0xC000;

  //WriteRegister(0x2100); //sin
  //WriteRegister(0x2102); //triangle
  WriteRegister(0x2168);   //square
  WriteRegister(LSB);  //lower 14 bits
  WriteRegister(MSB);  //upper 14 bits
  //WriteRegister(0xC001);  //mid-low
  WriteRegister(0xC000);
  //Power it back up
  WriteRegister(0x2068); //square
  //WriteRegister(0x2000); //sin
  //WriteRegister(0x2002); //triangle

}

//Запись в регистр микросхемы AD9837
void WriteRegister(uint16_t dat)
{
    uint8_t LL = (dat >> 8) & 0xFF;
    uint8_t HH = dat;
    SS_EN();  //Set FSYNC low
    HAL_SPI_Transmit(&hspi4,&LL,1,10);
    HAL_SPI_Transmit(&hspi4,&HH,1,10);
    SS_DIS();  //Set FSYNC high
}

void SS_EN(void)
{
     HAL_GPIO_WritePin(CS_Sintezator_GPIO_Port, CS_Sintezator_Pin, 0);
}

void SS_DIS(void)
{
     HAL_GPIO_WritePin(CS_Sintezator_GPIO_Port, CS_Sintezator_Pin,1);
}

Загрузки

Где купить

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии