MagicianT

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

7 сообщений в этой теме

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

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

0

Поделиться сообщением


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

Глянуть бы скетч.

Отправлено с моего LG-d802 через Tapatalk

0

Поделиться сообщением


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

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

 

SplitRadixRealT.zip

TFT-LGDP4535.zip

SA_remix-1a.zip

0

Поделиться сообщением


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

Частота дискретизации 20480  возможно её уменьшить ?

Как реализовать вывод на lcd в цифрах , частоты с максимальной амплитудой ?

0

Поделиться сообщением


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

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

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

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

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

0

Поделиться сообщением


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

А как же быть мне нужна частота дискретизации 240 как быть ?

Изменено пользователем Q-ti
0

Поделиться сообщением


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

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

#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;
}

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

0

Поделиться сообщением


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

Ваша публикация должна быть проверена модератором

E
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

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

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

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

Загрузка...

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

  • Сообщения

    • С чего вы взяли!? До 100000000 легко получаем любое напряжение.
    • Ну так обратного никто не говорил. Я говорил что достаточно сравнить питание и выход - этого будет достаточно и просто.
    • @KRAB, по-моему, грех - не понимать принцип действия щупа с выносным делителем и его назначение (что мы и наблюдаем в случае@dimanaviator), т.е. не понимать базовые принципы работы с осциллографом и более-менее высокочастотными цепями. Если же ты всё это знаешь и понимаешь, то спаять электронную часть щупа самому, действительно, не проблема. Однако, проблема возникает с изготовлением корпусов, с поиском подходящих деталей и т.д. и т.п. И все эти проблемы по стоимости могут оказаться существенно больше, чем 300 рублей, за которые готовый щуп с делителем можно купить на Али или Ебэе. Входная ёмкость осциллографа с таким щупом составляет пару сотен пикофарад. Проще говоря, прикасаясь к измеряемой цепи, вы всякий раз шунтировали её указанной ёмкостью на землю.
    • Плюс тембр блок на  CXA1352SA  Колонки буду потом собирать , надо что то одно сначала собрать , потом остальное , и в колонках особых приколюх нет, выбрал по мощности и купил вот и готово, ну или купил ещё фанеру сделал закрытый ящик набил  его стекловатой и провода хорошие все, больше там замарочек нет, тут же с блоком питания ппц, кстати 500 это запас так как потери и т.д. микруха жрет 110 ватт максимум но её КПД около 60% т.е. на выходе я буду иметь порядка 60-70 ватт это не чертовски много но очень хорошо по сравнению с тем что я имею ... А именно простую авто магнитолу подключенную  к блоку питания от компа , и на ней 4 колонки которые она вообще не раскачивает или если делать звук громче то кооэфициент нелинейных искажений ппц какой и часть звука срезается так как основная микросхема не может дать больше 4x40 хоть и написанной 4x45 , поэтому хочу собрать хорошую музыку и чтоб усилитель не выкручивать на 100% а на 70% так как звук будет но будет просто орать дудуть и ...все остальное, возможно я возьму 2 транса по 250, у меня нет опыта в номотке,транса возможно я буду искать в своём городе может конечно буду пробовать сам, но у меня есть желание от которого я не могу сидеть на месте ,  Чтобы пробить стену лбом надо ,много лбов , или разбег по больше ,  Я по первой конечно думал что размеры будут куда скромнее , и хотел сделать как бы переносную акустику и тоскать за собой, но это уже не критично , будет стоять в зале (зал на 27 квадратов )  и длинные провода к динамикам  чтоб по ближе к окну можно протащить  Спасибо за понимание и помощь всем, просто мне нужен блок пининия , я не понимаю , ну или мало что понимаю, по этому прошу вас помочь , 
    • Сами возим и растомаживаем. Мы хотим сделать доступный магазин компонентов, где любой сможет купить от 1 штуки в забугорье, или если нужно у наших партнёров в России.
    • Резистор не менее чем 0,5Вт.
  • Похожие публикации

    • Автор: Саша Никифоров
      Здравствуйте! Разрабатываю проект на Ардуино и с датчиком озона MQ131 и столкнулся с проблемами. Очень мало информации именно по этому датчику.
      По сути нужно считать аналоговый сигнал с выхода датчика и преобразовать его в уровень газа озона в ppm.
      Есть датчик на плате  с  компаратором MQ131 и Ардуино с LCD дисплеем.
      Судя по даташиту есть резистор у датчика который подгоняет диапазон измеряемой величины (на плате он уже установлен). Выход датчика подсоединяется к АЦП ардуино...
      Вопрос как перевести величину на АЦП ардуино в PPM ? Как добится реальных замеров с этого датчика и как с ним работать? 
       
      Даташит на датчик: http://www.dimitra.by/files/datasheets/air-quality-control-gas-sensor.pdf
      Тут кто-то уже хотел подключить: http://forum.arduino.cc/index.php?topic=112882.0
      Тут исходник Ардуино проекта под любой из известных датчиков: https://github.com/empierre/arduino/blob/master/AirQuality-Multiple_Gas_Sensor1_4.ino
      Форум где обсуждают: https://forum.mysensors.org/topic/147/air-quality-sensor/31
       
       
      Примеры работы, но только с другим датчиком:
      http://snickser.livejournal.com/10124.html
      http://arduino.ru/forum/programmirovanie/rabota-s-datchikom-gaza-mq135


    • Автор: admin
      В холодное время года актуален вопрос автоматического поддержания заданной температуры в комнате с помощью различных нагревательных приборов. К сожалению, чаще всего датчик температуры у таких приборов находится внутри, и поэтому стабилизируется не температура воздуха в комнате, а температура внутри обогревателя. Предлагаем вашему вниманию термостат из Arduino, который автоматически будет включать и выключать обогреватель для поддержания температуры, заданной с помощью энкодера.
      term.ino
    • Автор: KoLLnAMe
      Занялся такой проблемой: создание детектора хлопков, чтобы  исключить реагирование на другие звуки.
      Пытался построить устройство на основе програмного фильтра, по следующему алгоритму : при срабатывании детектора, ардуино записывает в массив состоящий из 500 ячеек каждый такт. Таким образом записал 100 хлопков. Получилась очень грязная картина синусоиды. С Очень расплывчатыми периодами подъема и спада синусоиды. 

      На других форумах мне посоветовали сделать аппаратный фильтр звука вместе с программным. Но представления о том как это сделать равны 1- 2 %
      На других форумах дали несколько вариантов как решить эту проблема, ниже приведу парочку из них:

      "Анализатор спектра на ардуино))), ну даже быстрое преобразование фурье для 8 битного контроллера задача не простая.
      Можно попробовать реализовать корреляцию сигналов, но это нужно сделать таблицу, в которую ещё нужно заполнить, далее нужно измерять уровень при помощи АЦП и считать, и организовать смещение массива, вобщем-то тоже нужно постараться.

      А если взять компаратор, выставить порог срабатывания при котором он будет переключаться, выход компаратора, повесить на счетчик, скажем того же ардуино, но счетчик будет тактироваться внешним сигналом компаратора, задача просто скажем каждые 50мс смотреть чего там насчитал таймер, если настроить так чтобы за 1 хлопок регистрировал от 3 до 7 переключений, и соответственно если это так, регистрировать хлопок.
      PS: сам я это не проверял, это просто идея)))"
      Вот второй совет: en555 lm358 что то на них похожее если хлопок то сначала его обработает en555 задаст частоту после два операционника они эту частоту фильтруют по продолжительности импульса после когда импульс сформированный кидаем его на лапку контролера и программно описываем задержку после чего опршиваем лапку и смотрим что там происходит если импульс длица значит разговор если нет значит хлопок ну перд микрофоном я бы еще простой частотный фильтр бы применил 

      Как видите, в этих советах нет четких последовательностей. 
      Буду очень признателен если вы поможите: 
      1)  Понять каким образом можно создать аппаратный фильтр (желательно на пальцах) Если не трудно с пояснением принципа работы каждого из элементов. 
      2) Сформировать последовательный список задачь , который поможет решить эту проблему.

      P.S. Я ЗАИНТЕРЕСОВАН В СОТРУДНИЧЕСТВЕ С ЛЮДЬМИ БОЛЕЕ ЗНАЮЩИМИ ЧЕМ Я( В ЭЛЕКТРОНИКЕ).ГОТОВ ОТБЛАГОДАРИТЬ ДЕНЕЖНО. ТЕХ КТО БУДЕТ СОПРОВОЖДАТЬ МЕНЯ В ЭТОМ ПРОЕКТЕ.
    • Автор: MagicianT
      Всплыла тут давича интересная тема на форуме: http://forum.cxem.net/index.php?/topic/173977-проверка-2sc5200-и-2sa1943/
      И хотя обсуждение касалось только двух определённых типов транзисторов, я подумал что вопрос затронут вобщем достаточно шире, касательно проверки на оригинальность всех аудио транзисторов, а их я думаю подделывают чаще всего. Что самое неприятное, если в других применених замена типов усилительных устройств не критична, то как раз для аудио подмена линейных транзисторов приводит к глубокому разочарованию для дизайнеров звуковых усилителей мощности.
       Кратко суть проэкта: 
      Измерить бэта мощного транзистора в широком диапазоне тока (3 порядка) и построить график. Точность не хуже 1 - 3 процента,  минимальная стоимость.
      Сложность:
       Заявленые требования к точности автоматически требуют проведение измерений в импульсном режиме, т.к. температура кристалла не должна менять измеряемую величину (бэта) сколь нибудь заметно.  Широкий динамический диапазон измеряемых токов. К примеру, 3 порядка по току коллектора (10 мА - 10 А) это 60 дБ, плюс точность 1 % на краю диапазона ещё 40 дБ -> получается 100 дБ. В цифре требуется АЦП 17 бит и выше, и хотя 24-битных дешёвых АЦП полно на рынке, и многие из них потянут 16-18 бит с низким уровнем шума в реальных условиях, НО все они сигма-дельта и не подходят по пункту 1 - для импульсных измерений. Решение, выбраное мной.
      Упрощённая схема:

      Как видим, два генератора тока по базам, и измеритель тока коллектора/эммитера. Для автоматизации я выбрал ардуино Уно,  самую распостранённую, простую в программировании и низкой стоимостью платформу. Кроме того для неё легко найти цветной ЖКИ с тач скрином.
      Минусы: не имеет ЦАПа, АЦП всего 10 бит. 
      Что получилось : 

      ЦАП 12-бит, достаточно быстрый, но на больших токах это и не требуется, коммутация импульсов осуществляется TB6612. 12-бит, как я уже пытался обьяснить выше очень мало, для задания тока базы требуется 17 и ещё хотя бы 5-бит для перекрытия разброса по бэта (10 - 320 или около того), поэтому в схеме использован коммутатор диапазонов, ещё примерно 10-бит - итого до 22-х.
      Для АЦП при таком исполнении разброс по бэта не надо учитывать, и хотя ардуино УНО не имеет програмируемого усилителя перед АЦП (как Мега) я применил софтовый подход, избыточное сэмплирование. Решение не идеальное, но стоимость и отсутсвие пинов на ардуино не оставили другого выбора. К счастью, для малых токов, увеличение длительности измерения не проблема, низкая рассеиваемая мощность на коллекторе позволяет легко масштабировать эти величину, кол-во измерений меняется от 2048 при 10мА, до 1-го на токах > 3А.
      Как это выглядит в "железе" и первые результаты:
            
       
      Выводы:  присланные мне с алиэкспресс  2SB772  и 2SD882 никакие не комплементарные. Завал бэта у первых однозначно показывает подделку.


    • Автор: ARV
      Коллеги-любители электроники!
      Давно и почти безуспешно пытаюсь распродать излишки абсолютно новых электронных компонентов. На сегодняшний день, к сожалению, они уже не являются последним словом техники, но параметры очень неплохие, ассортимент, в основном - это силовая электроника (IGBT, драйверы для них, Fast и Ultrafast диоды), а так же различные микросхемы. Есть и б/у вещи, с гарантией работоспособности.
      Вся электроника "настоящая", т.е. была куплена у официального дилера (это я к тому, что 100% гарантия от китайских подделок), цены, с моей точки зрения, очень нормальные - в среднем в 2 раза ниже, чем сейчас можно найти. Но и торг особо никто не отменяет.
      Чтобы не сильно засорять тему картинками и т.п., даю ссылку, где почти все мои "излишки" представлены в виде интернет-магазина (не считайте рекламой - просто так вышло: долго там пытался распродаться, а теперь оплаченный срок магазина истекает). По условиям размещения товаров я не могу показывать более 40 позиций, на самом деле есть и еще... Например, грамм 400 микросхем 564-й серии (никель, но есть и Au), пол-литровая банка транзисторов (от МП25 до КТ859 - пластик и металл), куча КУ202Н... В общем всего много. Если проявите интерес - выложу полный перечень.