Например TDA7294

Форум РадиоКот • Просмотр темы - Генератор синуса на ардуино для частотного преобразователя
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 08:37:47

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Генератор синуса на ардуино для частотного преобразователя
СообщениеДобавлено: Сб май 29, 2021 16:52:09 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср авг 28, 2019 21:33:11
Сообщений: 30
Рейтинг сообщения: 0
Код:
/*
 *
 * DDS Sine Generator mit ATMEGS 168
 * Timer2 generates the  31250 KHz Clock Interrupt
 *
 * KHM 2009 /  Martin Nawrath
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne
 
 */
 
#include "avr/pgmspace.h"
 
// table of 256 sine values / one sine period / stored in flash memory
PROGMEM  prog_uchar sine256[]  = {
  127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,
  242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,
  221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,
  76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,
  33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124
 
};
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 
int ledPin = 13;                 // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;
 
double dfreq;
// const double refclk=31372.549;  // =16MHz / 510
const double refclk=31376.6;      // measured
 
// variables used inside interrupt service declared as voilatile
volatile byte icnt;              // var inside interrupt
volatile byte icnt1;             // var inside interrupt
volatile byte c4ms;              // counter incremented all 4ms
volatile unsigned long phaccu;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  Serial.begin(115200);        // connect to the serial port
  Serial.println("DDS Test");
 
  pinMode(6, OUTPUT);      // sets the digital pin as output
  pinMode(7, OUTPUT);      // sets the digital pin as output
  pinMode(11, OUTPUT);     // pin11= PWM  output / frequency output
 
  Setup_timer2();
 
  // disable interrupts to avoid timing distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
  dfreq=1000.0;                    // initial output frequency = 1000.o Hz
  tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word
 
}
void loop()
{
  while(1) {
     if (c4ms > 250) {                 // timer / wait fou a full second
      c4ms=0;
      dfreq=analogRead(0);             // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
 
      cbi (TIMSK2,TOIE2);              // disble Timer2 Interrupt
      tword_m=pow(2,32)*dfreq/refclk;  // calulate DDS new tuning word
      sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
      Serial.print(dfreq);
      Serial.print("  ");
      Serial.println(tword_m);
    }
 
   sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
   cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope
  }
 }
//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM,  16000000/510 = 31372.55 Hz clock
void Setup_timer2() {
 
// Timer2 Clock Prescaler to : 1
  sbi (TCCR2B, CS20);
  cbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);
 
  // Timer2 PWM Mode set to Phase Correct PWM
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);
 
  sbi (TCCR2A, WGM20);  // Mode 1  / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}
 
//******************************************************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {
 
  sbi(PORTD,7);          // Test / set PORTD,7 high to observe timing with a oscope
 
  phaccu=phaccu+tword_m; // soft DDS, phase accu with 32 bits
  icnt=phaccu >> 24;     // use upper 8 bits for phase accu as frequency information
                         // read value fron ROM sine table and send to PWM DAC
  OCR2A=pgm_read_byte_near(sine256 + icnt);   
 
  if(icnt1++ == 125) {  // increment variable c4ms all 4 milliseconds
    c4ms++;
    icnt1=0;
   }   
 
 cbi(PORTD,7);            // reset PORTD,7
}


Перед вами текст рабочей программы для генератора синуса на ардуино. Сейчас на выходе частота ШИМ, который модулирует синусоиду, около 30 кГц. Измените код так, чтоб частота ШИМ была около 5 кГц. Брал отсюда https://cxem.net/arduino/arduino16.php


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вс май 30, 2021 12:58:35 
Друг Кота

Карма: 1
Рейтинг сообщений: 23
Зарегистрирован: Вс июл 24, 2011 11:38:09
Сообщений: 6174
Рейтинг сообщения: 0
В оригинале есть ссылка на форум https://yandexwebcache.net/yandbtm?fmod ... 1d&keyno=0
оригинал http://yandexwebcache.net/yandbtm?fmode ... b9&keyno=0
смотрю чтиво вырезали https://www.analog.com/media/en/trainin ... MT-085.pdf

возможно тут
Цитата:
dfreq=1000.0; // initial output frequency = 1000.o Hz

я так понял вы его даже не включали


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вс май 30, 2021 17:33:54 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср авг 28, 2019 21:33:11
Сообщений: 30
Рейтинг сообщения: 0
74LS00, запускал. Спасибо за статью. А refclk не за это случайно отвечает?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Пн май 31, 2021 08:28:34 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Можно уменьшить частоту ШИМ до 3921Гц.
Код:
// Timer2 Clock Prescaler to : 1
  cbi (TCCR2B, CS20);
  sbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);
Если кварц поменять на 20Мгц, то ШИМ будет 4901Гц.
А что готовый пример не хотите взять, там минимум три канала ШИМ надо?

А так dds с 32 битами
Код:
volatile unsigned long phaccu;   // pahse accumulator
шибко жирно будет, хватило бы и 16 бит.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Ср июн 02, 2021 21:55:51 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Ср авг 28, 2019 21:33:11
Сообщений: 30
Рейтинг сообщения: 0
После изменения частоты ШИМ генератор стал слишком медленно реагировать на вращение переменного резистора. Т.е. нужно ждать секунд 5 пока частота изменится. Подскажите как это можно исправить? А ещё при изменении initial frequency с 1000 Гц до 100 Гц ШИМ на осциллографе начинает бегать быстрее


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Чт июн 03, 2021 14:25:26 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Внимательно смотрите что я в коде исправил
Спойлер
Код:
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
 
int ledPin = 13;                 // LED pin 7
int testPin = 7;
int t2Pin = 6;
byte bb;
 
double dfreq;
// const double refclk=31372.549;  // =16MHz / 510
//const double refclk=31376.6;      // measured
const double refclk=3921.0;      // переделано measured
 
// variables used inside interrupt service declared as voilatile
volatile byte icnt;              // var inside interrupt
volatile byte icnt1;             // var inside interrupt
volatile byte c4ms;              // counter incremented all 4ms
//volatile unsigned long phaccu;   // pahse accumulator
volatile unsigned long tword_m;  // dds tuning word m


void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
  Serial.begin(57600);        // connect to the serial port 115200
  Serial.println("DDS Test");
 
  pinMode(6, OUTPUT);      // sets the digital pin as output
  pinMode(7, OUTPUT);      // sets the digital pin as output
  pinMode(11, OUTPUT);     // pin11= PWM  output / frequency output
 
  Setup_timer2();
 
  // disable interrupts to avoid timing distortion
  cbi (TIMSK0,TOIE0);              // disable Timer0 !!! delay() is now not available
  sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
  dfreq = 100.0;                    // initial output frequency = 100.o Hz
  tword_m=pow(2,16)*dfreq/refclk;  // calulate DDS new tuning word
 
}
void loop()
{
  while(1) {
     if (c4ms > 250) {                 // timer / wait fou a full second
      c4ms=0;
      dfreq=analogRead(0);             // read Poti on analog pin 0 to adjust output frequency from 0..1023 Hz
      //dfreq=analogRead(0)/2;             // read Poti on analog pin 0 to adjust output frequency from 0..511 Hz
     //dfreq=analogRead(0)/4;             // read Poti on analog pin 0 to adjust output frequency from 0..255 Hz
 
      cbi (TIMSK2,TOIE2);              // disble Timer2 Interrupt
      tword_m=pow(2,16)*dfreq/refclk;  // calulate DDS new tuning word
      sbi (TIMSK2,TOIE2);              // enable Timer2 Interrupt
 
      Serial.print(dfreq);
      Serial.print("  ");
      Serial.println(tword_m);
    }
 
   sbi(PORTD,6); // Test / set PORTD,7 high to observe timing with a scope
   cbi(PORTD,6); // Test /reset PORTD,7 high to observe timing with a scope
  }
 }
//******************************************************************
// timer2 setup
// set prscaler to 1, PWM mode to phase correct PWM,  16000000/510 = 31372.55 Hz clock ??????
void Setup_timer2() {
 
// Timer2 Clock Prescaler to : 1
  cbi (TCCR2B, CS20);
  sbi (TCCR2B, CS21);
  cbi (TCCR2B, CS22);
 
  // Timer2 PWM Mode set to Phase Correct PWM
  cbi (TCCR2A, COM2A0);  // clear Compare Match
  sbi (TCCR2A, COM2A1);
 
  sbi (TCCR2A, WGM20);  // Mode 1  / Phase Correct PWM
  cbi (TCCR2A, WGM21);
  cbi (TCCR2B, WGM22);
}
 
//******************************************************************
// Timer2 Interrupt Service at 31372,550 KHz = 32uSec
// this is the timebase REFCLOCK for the DDS generator
// FOUT = (M (REFCLK)) / (2 exp 32)

//  переделано Timer2 Interrupt Service at 3921 Hz = 255uSec
// runtime : 8 microseconds ( inclusive push and pop)
ISR(TIMER2_OVF_vect) {
  static unsigned int phaccu;   // pahse accumulator
  sbi(PORTD,7);          // Test / set PORTD,7 high to observe timing with a oscope
 
  phaccu=phaccu+tword_m; // soft DDS, phase accu with 16 bits
  icnt=phaccu >> 8;     // use upper 8 bits for phase accu as frequency information
 
  OCR2A=pgm_read_byte_near(sine256 + icnt);
     
  if(icnt1++ == 16) {  // increment variable c4ms all 4 milliseconds
    c4ms++;
    icnt1=0;
   }   
 
 cbi(PORTD,7);            // reset PORTD,7
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Ср авг 04, 2021 11:01:22 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт мар 07, 2017 23:14:07
Сообщений: 70
Откуда: Москва
Рейтинг сообщения: 0
Чистый синус из меандра с помощью интегратора на двух компараторах, по алгоритму: вход. частота = выход. частота:
Вложение:
Фильтр.png [31.72 KiB]
Скачиваний: 351

Напряжение на выходе частотозависимо и обратнопропорционально частоте, но это легко решается путем установки усилителя...
Спойлер

Полагаю не нужно объяснять, как из Ардуины сотворить генератор меандра 1 Гц -1 мГц?

_________________
"Ваше время ограничено, поэтому не тратьте его, живя чужой жизнью."
Стив Джобс (Steve Jobs) сооснователь Apple.


Последний раз редактировалось Allaya Ср авг 04, 2021 14:48:38, всего редактировалось 5 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Ср авг 04, 2021 13:50:03 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14052
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Ежли просто генератор...
Лучше вот это:
Вложение:
ICL8038CCPD_intersil.pdf [155.72 KiB]
Скачиваний: 161

:roll:
А уж адуринкой управляем внешним модулем...
:wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Ср авг 04, 2021 17:19:51 
Сверлит текстолит когтями

Карма: 4
Рейтинг сообщений: 260
Зарегистрирован: Пт авг 21, 2009 03:22:12
Сообщений: 1104
Рейтинг сообщения: 2
Чистый синус из меандра с помощью интегратора на двух компараторах...

Ёпть! Ты жертва ЕГЭ и копипасты?
1. Интегрированием в принципе нельзя из прямоугольника получить синус:
- первый интегратор из перепада сформирует линейно нарастающий/падающий участок (линейная функция y=x+c),
- второй интегратор из линейной функции сформирует ее квадрат (y=x^2/2+c).

Чтобы на выходе интегратора получить синус, ему на вход нужно подать косинус, которого нет.

2. На компараторе интегратор не делается, он делается на ОУ и LM324 - это ОУ.
3. Приведенная схема не интегратор, а два частотно-зависимых усилителя, можно сказать два последовательно включенных ФНЧ 1-го порядка.

Напряжение на выходе частотозависимо и обратнопропорционально частоте, но это легко решается путем установки усилителя...
Спойлер

Полагаю не нужно объяснять, как из Ардуины сотворить генератор меандра 1 Гц -1 мГц?

Хрен там легко решается!
Давай, отфильтруй с помощью ФНЧ у меандра 1 Гц гармоники, с ослаблением третьей, скажем на 40 дБ, чтобы синус походил на синус. Что останется на выходе такого фильтра при частоте входного меандра даже не 1 МГц, а 1 кГц? Хрен, да еще чуток и если ты это возьмешься усиливать, то синусоида умрет в шумах.
Фильтровать меандр, для получения из него синуса, можно, но фильтр для этого должен быть следящий за входной частотой. Проще всего такое делается на коммутируемых конденсаторах.

А вообще лучше использовать специализированные генераторы, а ардуину использовать для управления частотой генератора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Чт авг 05, 2021 12:11:19 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт мар 07, 2017 23:14:07
Сообщений: 70
Откуда: Москва
Рейтинг сообщения: 0
А вообще лучше использовать специализированные генераторы, а ардуину использовать для управления частотой генератора.

Согласен, есть уже готовое решение на ЦАП MCP4725 по I2C протоколу.
Попробуйте разделить период синуса на 4095 частей - как вам дискретность?
Генератор на этом ЦАП способен принимать SPWM сигналы частотой до 500 кГц.
Единственный недостаток - востребуется малошумящий источник питания!
Спойлер

_________________
"Ваше время ограничено, поэтому не тратьте его, живя чужой жизнью."
Стив Джобс (Steve Jobs) сооснователь Apple.


Последний раз редактировалось Allaya Чт авг 05, 2021 16:20:48, всего редактировалось 3 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Чт авг 05, 2021 14:32:33 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Allaya писал(а):
на ЦАП MCP4725 по I2C протоколу.
Allaya писал(а):
до 500 кГц
Что?
Ну способен это чип работать на скоростях high speed (3.4 MHz) mode, сначала найдите тот МК которое вытянет шину I2C на этой скорости.
У линейки stm32 максимальное значение 400 кГц, F0/F3/F7/L0/L4 составляют исключение и поддерживают режим fast mode plus (1 МГц).

Максимальный вменяемый синус с stm32f100 ЦАП12бит 30кГц, чуть хуже результат выдает stm32f0(DMA) + MCP4725 (fast mode plus 1 МГц).

Allaya писал(а):
Генератор на этом ЦАП способен генерировать синус с частотой до 500 кГц и 20 сэмплами
позвольте поинтересоваться, что такое 20 семплов? Вроде как - число сэмплов в секунду называется частотой дискретизации (сэмплирования)?

Тогда для построения синуса в 500 кГц и 20 семплами, потребуется 500.000*20=10.000.000(Гц)....
Вы что, смеетесь? Ни один чип не способен вам генерировать табличный синус в 500 кГц.

Связка stm32f0(DMA) + MCP4725 (fast mode plus 1 МГц) при частоте таймера 500кГц выдаст вам синус, 20 семплов, максимум 25кГц.

Смотрите в сторону специализированных чипов DDS AD9833, у них таймер работает на частоте 25МГц, 25МГц/20 = синус в 1,250 МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Чт авг 05, 2021 15:12:07 
Сверлит текстолит когтями

Карма: 4
Рейтинг сообщений: 260
Зарегистрирован: Пт авг 21, 2009 03:22:12
Сообщений: 1104
Рейтинг сообщения: 0
Allaya писал(а):
Согласен, есть уже готовое решение на ЦАП MCP4725 по I2C протоколу.
Попробуйте разделить период синуса на 4095 частей - как вам дискретность?
Генератор на этом ЦАП способен генерировать синус с частотой до 500 кГц и 20 сэмплами на этой частот


1. У этого ЦАП типовое время установления выходного напряжения 6 мкс, так что ни о каких 500 кГц (период 2 мкс) речи быть не может.
2. В ардуине уно с кварцем 16 МГц, I2C работает со скоростью 100 кбит/сек, а это означает, что работая с MCP4725 по Fast Mode Write Command (передается 2 байта), отсчеты в ЦАП можно передавать не чаще 100000/16 = 6250 раз в секунду. Если синус формировать из 20 отсчетов на период, то максимальная частота этого синуса будет не выше 6250/20 = 312,5 Гц.
Даже если вдруг скорость I2C удастся поднять до 400 кбит/сек, это поднимет максимальную частоту синуса всего в 4 раза - до 1250 Гц.
Следует так же учитывать, что 20 отсчетов на период - это немного, после ЦАП обязательно потребуется фильтр.

P.S. Копипаста никогда не заменит собственных знаний. Не смотри чушь в ютьюбе, изучай хотя бы основы электроники, чтобы элементарно на пальцах можно было прикинуть что к чему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Чт авг 05, 2021 16:17:57 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт мар 07, 2017 23:14:07
Сообщений: 70
Откуда: Москва
Рейтинг сообщения: 0
P.S. Копипаста никогда не заменит собственных знаний. Не смотри чушь в ютьюбе, изучай хотя бы основы электроники, чтобы элементарно на пальцах можно было прикинуть что к чему.

Можно подумать, что я постоянно этим тут занимаюсь... :(
И, вроде давно подправил свой пост на счет 500 кГц :dont_know:
А за идею генератора на модуле AD9833 благодарю... :beer:

_________________
"Ваше время ограничено, поэтому не тратьте его, живя чужой жизнью."
Стив Джобс (Steve Jobs) сооснователь Apple.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Пт авг 06, 2021 06:25:35 
Сверлит текстолит когтями

Карма: 4
Рейтинг сообщений: 260
Зарегистрирован: Пт авг 21, 2009 03:22:12
Сообщений: 1104
Рейтинг сообщения: 2
...Можно подумать, что я постоянно этим тут занимаюсь... :(


А нахрена тогда лезть с глупыми советами? Если сам ни бум-бум и разобраться нет желания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Пт авг 06, 2021 17:39:48 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт мар 07, 2017 23:14:07
Сообщений: 70
Откуда: Москва
Рейтинг сообщения: 0
А нахрена тогда лезть с глупыми советами? Если сам ни бум-бум и разобраться нет желания?

Разве ЦАП MCP4725 не в состоянии воспроизвести синус с частотой 5 кГц, пусть даже и с фильтром на выходе? И чего тут по-вашему глупого?

_________________
"Ваше время ограничено, поэтому не тратьте его, живя чужой жизнью."
Стив Джобс (Steve Jobs) сооснователь Apple.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вс авг 08, 2021 11:31:03 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Allaya писал(а):
Разве ЦАП MCP4725 не в состоянии воспроизвести синус с частотой 5 кГц
Нет, не в состоянии.
Даже если взять high speed (3.4 MHz) mode 3400000 / 16бит = 212500 / на 20 семплов = 10625Гц.
PIC, возможно, и раскочегарит шину I2C до таких скоростей.

Но вы не расстраивайтесь, Ардуино с кварцем 16 МГц Atmega168 не тянет да же и 400кГц,
максимум что удалось выжить 262144Гц, а это 262144 / на 20 семплов = 13107Гц.
Вот код:
СпойлерПорт PORTD 8бит ЦАП R-2R
Таблица синуса 256 значений
Код:
uint8_t period[] = {
128   ,125   ,122   ,119   ,116   ,112   ,109   ,106   ,103   ,100   ,97   ,94   ,91   ,88   ,85   ,82   ,79   ,76   ,73   ,71   ,68   ,65   ,62   ,60   ,57   ,55   ,52   ,50   ,47   ,45   ,42   ,40   ,38   ,36   ,34   ,31   ,29   ,27   ,26   ,24   ,22   ,20   ,19   ,17   ,16   ,14   ,13   ,11   ,10   ,9   ,8   ,7   ,6   ,5   ,4   ,4   ,3   ,2   ,2   ,1   ,1   ,1   ,1   ,1   ,1   ,1   ,1   ,1   ,1   ,1   ,2   ,2   ,3   ,4   ,4   ,5   ,6   ,7   ,8   ,9   ,10   ,11   ,13   ,14   ,16   ,17   ,19   ,20   ,22   ,24   ,26   ,27   ,29   ,31   ,34   ,36   ,38   ,40   ,42   ,45   ,47   ,50   ,52   ,55   ,57   ,60   ,62   ,65   ,68   ,71   ,73   ,76   ,79   ,82   ,85   ,88   ,91   ,94   ,97   ,100   ,103   ,106   ,109   ,112   ,116   ,119   ,122   ,125   ,128   ,131   ,134   ,137   ,140   ,144   ,147   ,150   ,153   ,156   ,159   ,162   ,165   ,168   ,171   ,174   ,177   ,180   ,183   ,185   ,188   ,191   ,194   ,196   ,199   ,201   ,204   ,206   ,209   ,211   ,214   ,216   ,218   ,220   ,222   ,225   ,227   ,229   ,230   ,232   ,234   ,236   ,237   ,239   ,240   ,242   ,243   ,245   ,246   ,247   ,248   ,249   ,250   ,251   ,252   ,252   ,253   ,254   ,254   ,255   ,255   ,255   ,255   ,255   ,255   ,255   ,255   ,255   ,255   ,255   ,254   ,254   ,253   ,252   ,252   ,251   ,250   ,249   ,248   ,247   ,246   ,245   ,243   ,242   ,240   ,239   ,237   ,236   ,234   ,232   ,230   ,229   ,227   ,225   ,222   ,220   ,218   ,216   ,214   ,211   ,209   ,206   ,204   ,201   ,199   ,196   ,194   ,191   ,188   ,185   ,183   ,180   ,177   ,174   ,171   ,168   ,165   ,162   ,159   ,156   ,153   ,150   ,147   ,144   ,140   ,137   ,134   ,131   
};
объявление переменных
Код:
union BytByte {
struct {
uint8_t l;
uint8_t h;
} bit;
uint16_t byte;
};

register uint16_t  n_counter asm("r6");   // r6 r7
register union BytByte myBByte asm("r8");   // r8 r9
само прерывание
Код:
ISR(TIMER2_COMPA_vect)
{   
   myBByte.byte += n_counter;

   PORTD = period[myBByte.bit.h];
}
а теперь, частота прерывания таймера 262144Hz, частота МК 16МГц
Код:
// Пусть нам нужно генерировать частоту 1000 Гц, учитывая, что основную процедуру таймер у нас исполняет 262144 раз в секунду
//  32768*2 / (262144 / 1000Гц) = 250

myBByte.byte = 0;
n_counter=250;
шаг получается 4Гц
джиттер 1/262144 = 3,8 us
Напомню, в данном примере таймер качается от частоты 262144Гц, а AD9833 от 25МГц.
Вот результаты исследования AD9833
А вот Конструктор для сборки простого DDS генератора на Атмега16

А если и уж что-то и советовать, то dds-синтез для частотного преобразователя не годится, он имеет один недостаток - джиттер, чем ниже частота накачки сумматора, тем этот джиттер больше.
Было 30кГц, попросили сделать 5кГц, джиттер был 1/30000 = 33 мкс, стал 1/5000 = 200мкс, как это отразится на реальном устройстве - не знаю.

Я как-то подключал к компьютерному бесперебойнику, естественно при питании от аккумулятора, вот такой насос отопления
СпойлерИзображение
так сразу работает как-то не адекватно, появился какой-то шум.
Так этот бесперебойник имеет на выходе аппроксимацию синусоиды полиномом третей степени, ну не было у меня бесперебойника с чистой синусоидой.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вс авг 08, 2021 11:59:03 
Друг Кота
Аватар пользователя

Карма: 123
Рейтинг сообщений: 7955
Зарегистрирован: Сб сен 13, 2014 16:27:32
Сообщений: 39199
Откуда: СпиртоГонск созвездия Омега
Рейтинг сообщения: 0
не знаю что за моторы которые вы хотите крутить чт им нужен частейший синус?
ну будет чуть гудеть силнее и гретца не смертелно чай не вечно он отинвертора работать будет
ну а частотники даде пром серий часто вапше филтроф не имею поэтомуи огнраничение на длину кабеля до мотора....

_________________
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вс авг 08, 2021 19:21:38 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
ну а частотники даде пром серий часто вапше филтроф не имею поэтомуи огнраничение на длину кабеля до мотора....

Ограничение на длину кабеля связано с условиями по ЭМИ. А минимальны РЧ фильтр стоит во всех частотниках.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Генератор синуса на ардуино для частотного преобразовате
СообщениеДобавлено: Вт авг 10, 2021 18:22:08 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
musor писал(а):
чай не вечно он отинвертора работать будет
Осенью включается, весной выключается, разгон от 0 до 35Гц за 30 секунд, двигатель 3х фазный 75кВт, крыльчатка с меня ростом, дымосос в котельной.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y