Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Чт ноя 23, 2017 18:42:02

Спасибо, принцип понятен.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Чт мар 22, 2018 09:05:22

Привет всем прибор такой ARDUino NANO, AD9850, AD8009, AD8307, все видит порт вкл. рисует график но проблема такая греется модуль AD9850 проверил питания 4,95В на неё подается, я думаю нормально, может кто подскажет в чем дело, и ещё вопрос такой мне надо прибор для настройки ПДФ и КФ и все подскажите какую лучше схему собрать за ранние благодарен

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Сб мар 24, 2018 08:04:26

Для Pavel64: Запитайте модуль на ad9850 от 3.3В стабилизатора. Если на нём стоИт маленький, плоский smd опорник, он- то и греется. По поводу-"какую схему лучше собрать?"- у вас вроде всё есть. Я в такой комплектации и настраиваю и ДПФ-ы и кварцевые. Успехов.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Чт апр 26, 2018 13:25:30

Не подскажет, где можно скачать последнюю версию ПО и схем с топологией платы для данного устройства? Если у кого есть, киньте сюда пожалуйста. Хочу попробовать повторить прибор.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Пн май 14, 2018 05:50:58

Всего-то 16 страниц ветки. Мотайте от конца к началу и всё найдёте. Печатки выкладывал Laguvit. Софт на 4 входа. На 11-ой странице всё есть.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Пт мар 20, 2020 16:15:02

а где продолжение лили оконечни вариант

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Сб апр 11, 2020 21:21:45

Привет! А вместо обычной Nano 3 китайский клон WAVGAT с контроллером LGT8F328P на борту кто нибудь заюзал? Там АЦП покруче (12bit) будет и возможность подключить 3 внутренних референсных источников AREF.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 09:27:26

А вместо обычной Nano 3 китайский клон WAVGAT с контроллером LGT8F328P на борту кто нибудь заюзал?

У меня нет LGT8F328P. Если есть желание допилить ПО прилагаю исходники для ПК и ATMega 328P.
Вложения
AD9850_1.ZIP
Исходники для ПК и МК
(579.77 KiB) Скачиваний: 494

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 16:17:07

Спасибо за исходники. Попробую

Добавлено after 5 hours 3 minutes 10 seconds:
Для LGT8F328P (WAVGAT UNO R3) + AD9851 + диодный ВЧ пробник такое сквозное АЧХ получилось при analogReference(INTERNAL2V048) и 12 бит разрешение АЦП
Спойлер
Код:
#define W_CLK 8       
#define FQ_UD 9       
#define DATA 10       
#define RESET 11     

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

void tfr_byte(byte data)
{
 for (int i=0; i<8; i++, data>>=1) {
   digitalWrite(DATA, data & 0x01);
   pulseHigh(W_CLK);   
 }
}

void sendFrequency(double frequency) {
 int32_t freq = frequency * 4294967295/180000000; 
 for (int b=0; b<4; b++, freq>>=8) {
   tfr_byte(freq & 0xFF);
 }
 tfr_byte(0x001);   
 pulseHigh(FQ_UD); 
}

float readInVoltage()
{
  float vin = 0;
  float vin1 = 0;
  float vin2 = 0;
 
  for (int i = 0; i < 12; i++)
  {
    vin1 = analogRead(A0);
    vin2 = analogRead(A1);
    vin = vin + (((vin1 + vin2) / 2) / 4095 * 2.048);
  }
  vin = vin / 12;
  return vin;
}

void setup() {
 pinMode(FQ_UD, OUTPUT);
 pinMode(W_CLK, OUTPUT);
 pinMode(DATA, OUTPUT);
 pinMode(RESET, OUTPUT);

 pulseHigh(RESET);
 pulseHigh(W_CLK);
 pulseHigh(FQ_UD); 
 analogReference(INTERNAL2V048);
 analogReadResolution(12);
 Serial.begin(115200);
uint32_t i=0; 
while(i<=70000000)
  {
    sendFrequency(i);
    Serial.print("fr=");
    Serial.print(i);
    Serial.print(" v=");
    Serial.print(readInVoltage(),6);
    Serial.println("");
    i=i+1000;
  }
}

void loop() {
}


Судя по графику, нужно только подкинуть широкополосной усилитель для AD9851 c обратной связью, и получить равномерную напругу в 2V или 4V (для рефернса 4.096) во всем интересуемом диапазоне частот (1мгц - 60 мгц). Остальные навороты в виде входных цепей от NWT нафиг не нужны. И между установкой очередной частоты нет смысла на A1 логический "0" выставлять для разряда кондера в пробнике. Потенциал в 0.3 v все равно присутствовать будет.
Вложения
АЧХ.png
(46.72 KiB) Скачиваний: 400

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 18:13:42

Измеряемое напряжение с Mega328 выводится на монитор компьютера. Для отображения АЧХ на мониторе достаточно 512 пикселей по вертикали (в среднем пол экрана). В АЦП Mega328p 10 разрядное (можно вывести 1024 пикселей). Так что, 10 бит разрешение АЦП для данного проекта достаточно.
Не забываем что это не высокоточный вольтметр, а ГКЧ для показа АЧХ.

Основная погрешность измерения АЧХ связана с временем окончания переходных процессов. Это наглядно видно если увеличить время измерения на каждой частоте (убрать галочку в V max в окне АЧХ, что уменьшает скорость сканирования по шкале частоты).

Разница амплитуд между соседними частотами не слишком большая и разряжать конденсатор пикового детектора до 0 необязательно.

Данный проект задумывался для измеритель АЧХ из минимум деталей. Можно не делать печатку, а бросить несколько проводников между модулями AD9850 и Arduino Nano 328р и спаять простейший выпрямитель. Питание осуществляется от USB.

Изображение

Что позволяет во многих случаях посмотреть АЧХ.

Изображение

А для дальнейшего развития ставь различные усилители на вход/выход, заводи отдельное питание...
Вложения
ГКЧ.zip
Прошивка для МК и софт для ПК
(444.18 KiB) Скачиваний: 418
Последний раз редактировалось kvn234 Пн апр 13, 2020 13:14:15, всего редактировалось 2 раз(а).

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 18:28:07

kvn234, понятно что перфекционизм штука вредная :) , но иногда хочется на собранном на коленках девайсе сделать реальные измерения с точностью плюс-минус лапоть хотя бы, а не только посмотреть. Я с Вами полностью согласен, и благодарю за полезную идею. Сотня баксов экономии без необходимости покупать NWT.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 18:53:24

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


А что и как мерить? Как я писал, если хотите увеличит точность измерения АЧХ необходимо увеличить время измерения на каждой частоте (для окончания переходных процессов). А затем для большего увеличения точности повышать разрядность АЦП.

Вас устроит время построения АЧХ 10-40 сек?

Для 40 сек для каждой частоты время измерения 40/1000=40 мс., и этого может быть недостаточно для окончания переходных процессов в некоторых цепях.

Другой вариант уменьшить количество частот для сканирования.

Увеличение разрядности АЦП не основной параметр для повышения точности.
Последний раз редактировалось kvn234 Вс апр 12, 2020 19:17:56, всего редактировалось 1 раз.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 19:14:28

Аж 12 раз с двух каналов с усреднением. Достаточно для любого переходного процесса (50ms)

Код:
float readInVoltage()
{
  float vin = 0;
 
  for (int i = 0; i < 12; i++)
  {
    vin = vin + ((((float)analogRead(A0) + (float)analogRead(A1)) / 2) / 4095 * 2.048);
  }
  vin = vin / 12;
  return vin;
}



Полоса в 500 кГц сканируется за 3 секунды с шагом 1 кГц. Вполне приемлимое время

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 19:54:56

Аж 12 раз с двух каналов с усреднением. Достаточно для любого переходного процесса (50ms)

Полоса в 500 кГц сканируется за 3 секунды с шагом 1 кГц. Вполне приемлимое время


1. 500измерений х 50ms = 25000ms = 25s

2. Я писал об окончании переходных процессов в измеряемой цепи.

3. Измерение надо начинать (включать АЦП) после окончания переходных процессов в измеряемой цепи. Выставил частоту, ждеш окончания переходного процесса (можно делать вычисление следующей частоты) например 50ms, затем включаем АЦП. И так в цикле 500 раз.

Изображение
Вложения
Переходной процесс.JPG
(42.75 KiB) Скачиваний: 175
Последний раз редактировалось kvn234 Вс апр 12, 2020 20:52:35, всего редактировалось 2 раз(а).

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вс апр 12, 2020 20:48:41

Скетч адаптировал под LGT8 и десктопный показомер UA3REO

Спойлер
Код:
#define W_CLK 8
#define FQ_UD 9
#define DATA 10
#define RESET 11

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

String serial_readline = "";
const int bSize = 64; //serial buffer size from desktop
char Buffer[bSize]; //serial buffer from desktop
long freq = 35000000;

void tfr_byte(byte data)
{
  for (int i = 0; i < 8; i++, data >>= 1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);
  }
}

void sendFrequency(double frequency) {
  int32_t freq = frequency * 4294967295 / 180000000;
  for (int b = 0; b < 4; b++, freq >>= 8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0x001);
  pulseHigh(FQ_UD);
}

float readInVoltage()
{
  float vin = 0;

  for (int i = 0; i < 12; i++)
  {
    vin = vin + ((((float)analogRead(A0) + (float)analogRead(A1)) / 2) / 4095 * 2.048);
  }
  vin = vin / 12;
  return vin;
}

void setup() {
  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);

  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);

  analogReference(INTERNAL2V048);
  analogReadResolution(12);

  Serial.begin(115200);
  Serial.setTimeout(100);

}

void loop() {
  while (Serial.available() > 0)
  {
    memset(Buffer, 0, bSize);
    Serial.readBytesUntil('\n', Buffer, bSize);
    serial_readline = String(Buffer);
    if (serial_readline.startsWith("GET "))
    {
      String sfreq = serial_readline.substring(4);
      char carray[sfreq.length() + 1];
      sfreq.toCharArray(carray, sizeof(carray));
      sendFrequency(long(atof(carray)));
      Serial.println(readInVoltage(), 6);
    }
    Serial.flush();
  }

}

Завтра полосовик посмотрю
Вложения
СквозноеАЧХсКалибровкой.png
(230.32 KiB) Скачиваний: 282

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Пн апр 13, 2020 06:07:16

Скетч адаптировал под LGT8 и десктопный показомер UA3REO


Блин!!!! Я сразу, как и все читающие форум, понял, что такое LGT8 и десктопный показомер UA3REO.
По LGT8 информацию нашёл здесь: http://arduino.ru/forum/apparatnye-vopr ... -lgt8f328p
А по запросу "десктопный показомер UA3REO" гугл вежливо послал меня к черту:

По запросу десктопный показомер UA3REO ничего не найдено.

Рекомендации:

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

Может дадите ссылочки, что бы заценить и воспользоваться Вашим скетчем?

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Пн апр 13, 2020 07:06:23

В предыдущем посте я напутал... 50 мкс - цикл установки частоты и измерение с усреднением.
Скорость визуализации зависит от канала передачи данных. Надо ethernet попробовать...

123ksn, конечно дам...
https://github.com/XGudron/UA3REO-Sweep-Analyzer
https://ua3reo.ru/izmerenie-parametrov- ... a-arduino/
Вложения
Контур465.png
(60.75 KiB) Скачиваний: 260

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Пн апр 13, 2020 15:16:39

Скорость визуализации зависит от канала передачи данных. Надо ethernet попробовать...

У меня скорость передачи 57600, что вполне достаточно.

Считаем время передачи для каждой частоты:

Посылка с МК состоит из кода начала ':' (1 байт), кода признака информации (1 байт), значения частоты (float = 4 байта), значения АЦП (2 байта) и CRC (1 байт). Итого 9 байт.
Для передачи 1 байта в RS232 использую 10 бит. Общая длина посылки для одной частоты 9х10=90бит.
Время передачи одной посылки 1 / 57600 x 90 = 1.562 ms.

Для правильного измерения необходима задержка начала измерения на несколько ms после установки новой частоты (для завершения переходного процесса в измеряемой цепи).
Пока идет задержка и измерение АЦП одновременно идет передача предыдущего значения с использованием кольцевого буфера и прерываний.

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

Изображение

Так что увеличивать скорость передачи не имеет смысла.

У меня время полного сканирования 1000 значений частот около 3 сек. Можно уменьшить время сканирования за счет уменьшения количества частот 2, 4 раза.

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Вт апр 14, 2020 11:00:10

Немного причесал скетч

Спойлер
Код:
//Скетч для AD9851 и платы WAVGAT UNO R3 с контроллером LGT8F328P (AVGA328P) https://aliexpress.ru/item/4000587200875.html?gps-id=pcDetail404&scm=1007.16891.96945.0&scm_id=1007.16891.96945.0&scm-url=1007.16891.96945.0&pvid=12e0d1cd-2156-489e-a2b8-26084e010c5d&_t=gps-id:pcDetail404,scm-url:1007.16891.96945.0,pvid:12e0d1cd-2156-489e-a2b8-26084e010c5d,tpp_buckets:668%230%23131923%239_668%23808%234093%23801_668%23888%233325%235
//для проекта UA3REO-Sweep-Analyzer ссылки на оригинальный проект https://ua3reo.ru/izmerenie-parametrov-filtrov-i-konturov-na-arduino/
//GitHub https://github.com/XGudron/UA3REO-Sweep-Analyzer
//Дрова для этой платы лежат https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
//Выбираем в Инструментах плату LGT8F328, Clock source - Internal, Clock - 16Mhz, Variant - 328P-LQFP32 MiniEVB nano-style

//Ноги для управления AD9851.
//Генератор на такой плате https://russian.alibaba.com/product-detail/ad9851-dds-signal-generator-module-circuit-diagram-2-sine-wave-0-70mhz-and-2-square-wave-0-1mhz-output-1918582945.html
//Перемычки J1,J2 установлены. Перемычка J3 - по желанию, если надо прямоугольник получить
 
#define W_CLK 7
#define FQ_UD 8
#define DATA 9
#define RESET 10

#define INP_VAL A0  //Измерительный вход

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

String serial_readline = "";
const int bSize = 64; //serial buffer size from desktop
char Buffer[bSize]; //serial buffer from desktop
long freq = 35000000;

void tfr_byte(byte data)
{
  for (int i = 0; i < 8; i++, data >>= 1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);
  }
}

void sendFrequency(double frequency) {
  int32_t freq = frequency * 4294967295 / 180000000;
  for (int b = 0; b < 4; b++, freq >>= 8) {
    tfr_byte(freq & 0xFF);
  }
  tfr_byte(0x001);
  pulseHigh(FQ_UD);
}

float readInVoltage()
{
  float vin = 0;
  for (int i = 0; i < 12; i++)
  {
    vin = vin + ((float)analogRead(INP_VAL) / 4096 * 4.096);
  }
  vin = vin / 12;
  return vin;
}

//При старте переключаемся на внешний кварц
void switchToExtQuartz() {

  bitSet(PMCR, PMCE);
  bitSet(PMCR, OSCMEN);
  asm("nop");
  asm("nop");
  asm("nop");
  bitSet(PMCR, PMCE);
  bitClear(PMCR, CLKFS);
  bitSet(PMCR, CLKSS);
  asm("nop");
  asm("nop");
  asm("nop");

}

void setup() {

  switchToExtQuartz(); // Для WAVGAT UNO R3, nano с внешним кварцем

  pinMode(FQ_UD, OUTPUT);
  pinMode(W_CLK, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);

  pulseHigh(RESET);
  pulseHigh(W_CLK);
  pulseHigh(FQ_UD);

  analogReference(INTERNAL4V096);
  analogReadResolution(12);

  Serial.begin(115200);
}

void loop() {
  while (Serial.available() > 0)
  {
    memset(Buffer, 0, bSize);
    Serial.readBytesUntil('\n', Buffer, bSize);
    serial_readline = String(Buffer);
    if (serial_readline.startsWith("GET "))
    {
      freq = (long)serial_readline.substring(4).toFloat();
      sendFrequency(freq);
      Serial.println(readInVoltage(), 6);
    }
    Serial.flush();
  }
}

Re: Простейший ГКЧ на AD9850 и Arduino Nano 328

Чт апр 16, 2020 08:08:42

У LGT8F328P (WAVGAT UNO R3) на борту 8 битный ЦАП есть. А это как бы намекает... :)
Вложения
DAC.png
(16.95 KiB) Скачиваний: 231
Пила.png
(102.98 KiB) Скачиваний: 194
Ответить