цифровая электроника
вычислительная техника
встраиваемые системы

 



Прямой цифровой синтез с помощью Arduino и AD9850

Автор: Mike(admin) от 25-10-2021, 03:55

Получение сигналов различной формы с высокой точностью частоты является весьма распространенной задачей при создании различных радиолюбительских и профессиональных электронных устройств.


Прямой цифровой синтез с помощью Arduino и AD9850

Благодаря современной компонентной базе сегодня можно реализовать довольно функциональные генераторы сигналов, работающие по принципу DDS или прямого цифрового синтеза. И сегодня мы рассмотрим простой пример создания такого генератора сигналов с помощью Arduino и AD9850.


Для быстрого прототипирования возьмем плату Arduino Nano и плату HC-SR08 со встроенной микросхемой AD9850.


Прямой цифровой синтез с помощью Arduino и AD9850

Схема подключения данных двух плат довольно простая и может выглядеть следующим образом.


Прямой цифровой синтез с помощью Arduino и AD9850

Приведенный далее код для Arduino реализует свипирование частоты от 1 Гц до 40 МГц, что является пределом. Данный диапазон можно легко изменить в соответствии с вашими потребностями. Если вам нужны прямоугольные сигналы, вам нужно отрегулировать потенциометр, чтобы получить желаемый скважность, иначе вы можете получить коэффициент заполнения 0 и ничего не увидеть.



#include <SPI.h>
// Подключение: плата AD9850 Board - Плат Arduino:
// CLK  = 13,
// DATA = 11,
// RST  = GND
const byte FQ  = 10; // частота обновления
// VCC - Arduino +5V
// GND - Arduino GND

void setup() {
  Serial.begin(9600);
  Serial.println(__FILE__);
  SPI.begin();
  SPI.setBitOrder(LSBFIRST);
  pinMode(FQ, OUTPUT);
  upDownFq();
  // диапазон от 1 Гц до 40 МГц
  float f = 1;
  while (f < 40E6) {
    AD9850_set_frequency(f);
    Serial.println(f);
    delay(1000);
    f = f * 1.5;
  }
}

void loop() {}

void AD9850_set_frequency(float frequency) {
  // передаем частоту и запускаем DDS
  frequency = frequency / 1000000 * 4294967295 / 125;
  // для осциллятора 125 МГц
  union {
    long y;
    byte b[4];
  } freq;
  freq.y = frequency; // float в long
  SPI.transfer(freq.b, 4);
  SPI.transfer(0);
  upDownFq();
}

void upDownFq() {
    asm("sbi 5,2 \n\t"
      "cbi 5, 2 \n\t"); // устанавливаем новое значение частоты
}



© digitrode.ru


Теги: Arduino, генератор импульсов, прямой цифровой синтез




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий