Перейти к содержанию

Делаем спектроаналайзер из ардуино.


Гость MagicianT

Рекомендуемые сообщения

Один из прошлогодних проэктов, может кому будет интересно. Видео тут: https://www.youtube.com/watch?v=r7Mm5jKa0qc

БПФ-512, плата ардуино Уно, ЖКИ-ТФТ с алиэкспресс.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Конечно, прицеплю здесь и две библиотеки, одна для ТФТ, сдёрнута где-то мной из и-нэта, другая БПФ - моя.

 

SplitRadixRealT.zip

TFT-LGDP4535.zip

SA_remix-1a.zip

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Библиотека тестировалась на ардуино Уно, 16 МГц,  для других тактовых частот там формулу подправить маленько надо будет. Дискретизация любая, какую таймер потянет, кажется до 488 Гц можно уменьшать.

На ЖКИ вы чего хотите можете выводить, максимумы или минимумы, после вычисления амплитуд запускайте цикл фор

  for ( int i = 0; i < FFT_SIZE/dlina; i++)
   { if ( (data[i]) > peak ){
        peak = data[i];
        nbr = i;
       }

Там же в библиотеке есть код скетча

Ссылка на комментарий
Поделиться на другие сайты

Так, давайте по порядку. Здесь топик спектроаналайзера, в нём частота выборки определяется здесь

#define  SMP_RATE                20480       // Sampling Rate, in Hz
#define  SMP_TMR1 ((16000000UL/SMP_RATE) -1) // Sampling Period of Timer1

и здесь

void adc_init()
{ 
  ADMUX    = 0xC5;        // PIN 5 Analog. REF Internal. Bias = 0.55V
  ADCSRA = ((1<< ADEN)|   // 1 = ADC Enable
      (0<< ADSC)|         // ADC Start Conversion 
      (1<<ADATE)|         // 1 = ADC Auto Trigger Enable
      (0<< ADIF)|         // ADC Interrupt Flag
      (0<< ADIE)|         // ADC Interrupt Enable
      (1<<ADPS2)|
      (0<<ADPS1)|         // ADC Prescaler : 1 MHz.
      (0<<ADPS0));  
  ADCSRB = ((1<<ADTS2)|   // Sets Auto Trigger source - Timer/Counter1 Compare Match B
      (0<<ADTS1)|
      (1<<ADTS0));
  /* Set up TIMER 1 - ADC sampler */
  TIMSK0 = 0x00;
  TIMSK1 = 0x00;
  TIMSK2 = 0x00; 

  TCCR1A = 0;
  TCCR1B = 0;
  TCCR1C = 0;

  TCCR1A =  ((1<<WGM11) | (1<<WGM10));       // Mode 15, Fast PWM
  TCCR1B =  ((1<<WGM13) | (1<<WGM12));       // Mode 15, Fast PWM

  TCCR1B |=  (1<<CS10);                      // clk/1 prescaling.
  OCR1A  = SMP_TMR1;
  OCR1B  = SMP_TMR1;

  TCNT1  = 0;
  TIFR1   |= (1<<OCF1B); 
  TIMSK1  |= (1<<OCIE1B);
}

Для низких частот преселектор таймера изменить надо, это вы сами делайте или открывайте другой топик по конфигурации таймеров на АтМеге. Регистр TCCR1C, CS10-CS11-CS12.

В примере (скетче) библиотеки всё проще

void sampling() {
  ADCSRA = 0x85;   // turn on adc, freq  = 1/32,   500 kHz/ 13.5 =~ 36 kHz sampling rate
  ADMUX = 0x40;    //Bit 5 – ADLAR: NO ADC Left Adjust Result
  ADCSRA |= (1<<ADSC);

  while(!(ADCSRA & 0x10));
  int sum2b;
  for(int i = 0; i < FFT_SIZE; i++ ) {
    while(!(ADCSRA & 0x10));
    ADCSRA |= (1<<ADSC);
    sum2b =  ADCL; 
    sum2b += (ADCH << 8);   
    f_r[i] = sum2b - sdvig;
  }  
  ADCSRA = 0x00;
}

Вопрос в том, надо в реальном времени выборки - сэмплирование делать, или можно периодически, второй вариант намного проще

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...