sonyps4.ru

10 полосный анализатор спектра на atmega8. Семиполосный спектроанализатор звука на микроконтроллере

В статье рассматривается конструкция простого анализатора спектра (0 - 10 кГц) на микроконтроллере AVR . В качестве устройства отображения используется двухстрочный символьный ЖК индикатор. Основным моментом при реализации данного проекта является не аппаратная часть, а программная, точнее реализация дискретного преобразования Фурье (ДПФ) на 8-разрядном микроконтроллере. Сразу следует отметить, что автор не является экспертом в этой области и поэтому начал с основ - с простого дискретного преобразования Фурье. Алгоритм быстрого преобразования Фурье является не только быстрым, но и достаточно сложным.

Дискретное преобразование Фурье (в англоязычной литературе DFT, Discrete Fourier Transform) - это одно из преобразований Фурье, широко применяемых в алгоритмах цифровой обработки сигналов (его модификации применяются в сжатии звука в MP3, сжатии изображений в JPEG и др.), а также в других областях, связанных с анализом частот в дискретном (к примеру, оцифрованном аналоговом) сигнале. Дискретное преобразование Фурье требует в качестве входа дискретную функцию. Такие функции часто создаются путем дискретизации (выборки значений из непрерывных функций).

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

Цифровая часть образована микроконтроллером и подключенным к нему ЖК индикатором. Микроконтроллер тактируется от кварцевого резонатора 16 МГц, в качестве опорного напряжения для АЦП микроконтроллера используется напряжение питания +5 В.
Шина данных ЖК индикатора подключена к порту C микроконтроллера (линии ввода/вывода PC0-PC3), шина управления подключена к порту D(PD5, PD6) микроконтроллера. Индикатор работает в 4-битном режиме. Переменный резистор номиналом 4.7 кОм используется для регулировки контрастности. Для работы с индикатором были созданы пользовательские символы для отображения 8 горизонтальных столбиков анализатора, эти пользовательские символы занимают все 64 Байта ОЗУ ЖК индикатора.

Микроконтроллер работает от внешнего кварцевого резонатора 16 МГц.

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

Алгоритм ДПФ несколько медленнее в сравнении с быстрым преобразованием Фурье. Но наш анализатор спектра не требует высокой скорости, и если он способен обеспечить скорость обновления около 30 кадров в секунду, этого будет более чем достаточно для визуализации спектра звукового сигнала. В любом случае, в нашем варианте возможно достичь скорости 100 кадров в секунду, но это уже слишком высокое значение параметра для двухстрочного символьного ЖК индикатора и оно не рекомендуется. Частота дискретизации равна 20 кГц для 32 точечного дискретного преобразования Фурье и поскольку результат преобразования симметричен, нам нужно использовать только первую половину, т.е. первые 16 результатов. Следовательно, мы можем отображать частотный спектр в диапазоне до 10 кГц и разрешение анализатора составляет 10 кГц/16 = 625 Гц.

Автором конструкции были предприняты попытки увеличения скорости вычисления ДПФ. Если это преобразование имеет N точек, то мы должны найти N2/2 значений синуса и косинуса. Для нашего 32 точечного преобразования необходимо найти 512 значений синуса и косинуса. Но, прежде чем найти их нам необходимо вычислить угол (градусы), что займет некторое процессорное время, поэтому было решено использовать для этих вычислений таблицы значений. При расчетах в программе микроконтроллера не используются вычисления с плавающей точкой и числа двойной точности (double), так как это займет больше времени на обработку на 8-разрядном микроконтроллере. Вместо этого значения в таблицах поиска используются 16-разрядные данные целочисленного типа (integer), умноженные на 10000. Затем после выполнения преобразования результаты делятся на 10000. При таком подходе имеется возможность выполнять 120 32-точечных преобразований в секунду, что более чем достаточно для нашего устройства.

Как вы думаете, что делают девушки, когда собираются вместе? Идут по магазинам, фотографируются, ходят по салонам красоты? Да, так и есть, но так делают далеко не все. В данной статье пойдёт речь о том, как две девушки решили собрать радиоэлектронное устройство своими руками.

Почему именно анализатор-визуализатор спектра?

Ведь программных решений данной задачи довольно много и вариантов аппаратной реализации так же немало. Во-первых, очень хотелось поработать с большим количеством светодиодов (т.к. мы уже собирали led-куб, каждый для себя, но в небольших размерах), во-вторых, применить на практике полученные знания по цифровой обработке сигналов и, в-третьих, в очередной раз попрактиковаться в работе с паяльником.

Разработка устройства

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

В качестве дисплея выбрали светодиодную матрицу 8х32. Можно было использоваться готовые led-матрицы 8х8 и собирать из них, но мы решили не отказывать себе в удовольствии посидеть вечерком с паяльником, и поэтому собирали дисплей сами из светодиодов.

Для управления дисплеем мы не изобретали велосипед и использовали схему управления с динамической индикацией. Т.е. выбрали один столбец, зажгли его, остальные столбцы в этот момент погасили, затем выбирали следующий, зажгли его, остальные погасили и т.д. Ввиду того, что человеческий глаз не идеален, мы можем наблюдать статическую картинку на дисплее.
Пойдя по пути наименьшего сопротивления было решено, что все вычисления разумно будет перенести на контроллер Arduino.

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

В качестве интерфейса подключения к компьютеру (или другому устройству, способному передавать аудио сигнал) был выбран разъём TRS (mini-jack 3.5 mm).

Сборка устройства

Сборку устройства начинаем с того, что делаем макет лицевой панели устройства.

Материалом для лицевой панели был выбран чёрный пластик толщиной 5мм (т.к. диаметр линзы диода также 5мм). По разработанному макету размечаем, вырезаем лицевую панель под необходимый размер и просверливаем отверстия в пластике под светодиоды.

Таким образом получаем готовую лицевую панель, на которой можно уже собирать дисплей.

В качестве светодиодов для матрицы были использованы двухцветные (красный-зелёный) с общим катодом GNL-5019UEUGC. Перед началом сборки матрицы, руководствуясь правилом “лишний контроль не повредит” все светодиоды, а именно 270 шт. (брали с запасом на всякий случай), были проверены на работоспособность (для этого было собрано тестирующее устройство, включающее в себя разъём, резистор 200Ом и источник питания на 5В).

Дальше разгибаем светодиоды следующим образом. Аноды красного и зеленого диодов отгибаем в одну сторону (вправо), катод отгибаем в другую сторону, при этом следим, чтобы катод был ниже чем аноды. И затем под 90° загибаем катод вниз.

Сборку матрицы начинаем с правого нижнего угла, сборку производим по столбцам.

Вспоминая про правило “лишний контроль не повредит”, после одного-двух спаянных столбцов, проверяем работоспособность.

Готовая матрица выглядит следующим образом.

Вид сзади:

По разработанной схеме паяем схему управления строками и столбцами, распаиваем шлейфы и место под Arduino.

Было решено так же выводить не только амплитудно-частотны, но и фазо-частотный спектр, а также выбирать количества отсчетов для отображения (32,16,8,4). Для этого были добавлены 4 переключателя: один на выбор типа спектра, два на выбор количества отсчётов, и один на включение и выключение устройства.

Написание программы

В очередной раз руководствуемся нашим правилом и убеждаемся, что наш дисплей полностью в рабочем состоянии. Для этого пишем простую программу, которая полностью зажигает все светодиоды на дисплее. Естественно, по закону Мёрфи, нескольким светодиодам не хватало тока, и их необходимо было заменить.

Удостоверившись, что всё работает, мы приступили к написанию основного программного кода. Он состоит из трёх частей: инициализация необходимых переменных и считывание данных, получение спектра сигнала при помощи быстрого преобразования Фурье, вывод полученного спектра с необходимым форматированием на дисплей.

Сборка конечного устройства

В конце мы имеем лицевую панель, а под ней куча проводов, которые необходимо чем-то закрыть, да и переключатели нужно на чём-то закрепить. До этого были мысли сделать корпус из остатков пластика, но мы не вполне представляли, как это будет конкретно выглядеть и как это сделать. Решение проблемы пришло довольно неожиданно. Прогулявшись по строительному магазину, мы обнаружили пластиковый цветочный горшок, который на удивление идеально подошёл по размеру.

Дело оставалось за малым, разметить отверстия под разъёмы, кабели и переключатели, а также вырезать две боковые панели из пластика.

В итоге, собрав всё воедино, подключив устройство к компьютеру мы получили следующее:

Амплитудно-частотный спектр (32 отсчёта):

Амплитудно-частотный спектр (16 отсчётов):

Амплитудно-частотный спектр (8 отсчётов):

Амплитудно-частотный спектр (4 отсчёта):

Фазо-частотный спектр:

Вид задней панели:

Видео работы устройства

Для большей наглядности видео снималось в темноте. На видео устройство выводит амплитудно-частотный спектр, а затем на 7 секунде переключаем его в режим фазо-частотного спектра.

Список необходимых элементов

  1. Светодиоды GNL-5019UEUGC – 256 шт. (Для дисплея)
  2. Транзисторы n-p-n KT863A – 8 шт. (Для управления строками)
  3. Транзисторы p-n-p С32740 – 32 шт. (Для управления столбцами)
  4. Резисторы 1кОм – 32 шт. (Для ограничения тока базы p-n-p транзисторов)
  5. Дешифраторы 3/8 IN74AC138 – 4 шт. (Для выбора столбца)
  6. Дешифраторы 2/4 IN74AC139 – 1 шт. (Для каскадирования дешифраторов)
  7. Монтажная плата 5х10см – 2 шт.
  8. Шлейфы
  9. Arduino Pro micro – 1 шт.
  10. Разъём mini-jack 3.5мм – 1 шт.
  11. Переключатель – 4 шт.
  12. Чёрный пластик 720*490*5 мм – 1 лист. (Для лицевой панели)
  13. Горшок цветочный чёрный 550*200*150 мм – 1 шт. (Для корпуса)

Miguel A. Vallejo

После посещения некоторых web страниц, на которых рассказывалось об анализаторе спектра ISM диапазона 2.4 ГГц на основе модуля CYWM6935 , я попытался создать собственный анализатор, но с некоторыми улучшениями. В тех проектах, что я нашел в сети, использовалась связь с компьютером, либо через параллельный порт, либо через последовательный. Я же хотел сделать анализатор портативным, и решил использовать микроконтроллер и графический ЖК дисплей.

У меня было несколько старых телефонов Nokia, так что я мог использовать пластиковый корпус и встроенный LCD для своего портативного анализатора, но… Сделал ли я так? Давайте посмотрим:

Микроконтроллер: Я выбрал ATMega8 с напряжением питания 3.3 В, поскольку и ЖК модуль, и CYWM6935 питаются напряжением 3.3 В. ATMega8 прекрасно справляется с поставленной задачей, работая даже на низких, внутренних тактовых частотах. Я выбрал частоту 4 МГц, используя внутренний генератор.

ЖКИ: ЖК индикатор взят от сотового телефона Nokia 3410. В нем используется контроллер PCD8544 , работать с которым очень легко. Можно найти множество примеров программ для работы с этим контроллером.

Аккумулятор: Эти телефоны использую LiIon или NiMh аккумуляторы, но с технической точки зрения оба типа эквивалентны. Их диапазон напряжений от 4.2 до 3.6 В. Моей первой идеей было использовать стабилизатор на 3.3 В, но я не нашел ни одного подходящего, и просто включил диод 1N4004 , между аккумулятором и схемой. После этого, за счет падения 0.6 В на диоде, диапазон напряжений питания снизился до 3.6 … 3.0 В. Поскольку указанные для ЖКИ и модуля CYWM6935 напряжения питания должны находиться в пределах от 2.7 до 3.6 В, все будет работать нормально.

Макет

Собрав макет для тестирования модуля и проверки программ микроконтроллера, я столкнулся с первой проблемой. Я нашел в Интернете, что ЖК дисплеи Nokia 3410 и Nokia 3310 использует один и тот же контроллер PCD8544, и, следовательно, могут управляться одной и той же программой. И да и нет. Набор инструкций у обоих ЖКИ, действительно, одинаковый, но форматы экранов разные. Дисплей от Nokia 3310 имеет разрешение 84 × 48 точек, а от Nokia 3410 - 96 × 65 точек, так что подпрограммы управления дисплеем должны быть переписаны с учетом другого формата.

После исправления подпрограмм, вы будете ожидать, что ЖК дисплей заработает, не так ли? Снова нет. Дисплей от Nokia 3410 имеет видимое разрешение 96 × 65 точек, но реальное разрешение внутри контроллера ЖКИ - 102 × 72 точки, и это вам придется учитывать при написании программы.

Вторая проблема была связана с модулем CYWM6935, для которого очень важно строго соблюсти временные соотношения сигналов и выполнить корректную инициализацию. Когда же, наконец, я все сделал правильно, и анализатолр спектра заработал, я увидел на экране сигнал от беспроводной камеры, работавшей на частоте 2468 МГц.

После множества экспериментов, я нашел несколько способов отображения спектров на дисплее. Один для отображения быстрых цифровых сигналов (таких как WiFi, Bluetooth, и т.п.), один для отображения аналоговых сигналов (беспроводные камеры, беспроводные телефоны и т.п.) и один для отображения среднего по всему диапазону значения. Для удобного переключения между этими режимами мне понадобилась пара кнопок. И, поскольку устройство работает от аккумуляторов, не лишним был бы вольтметр, показывающий их напряжение на экране. С помощью АЦП микроконтроллера сделать это было несложно. Окончательная схема для анализатора спектра диапазона 2.4 ГГц была готова:

Монтаж анализатора

В копусе Nokia 3410 много свободного места для монтажа компонентов, но с одним существенным ограничением: высота печатной платы с компонентами не может быть больше 3.3 мм. Это высота оригинальной печатной платы телефона. При использовании SMD компонентов эта проблема решается легко.

Чтобы плата с деталями вписалась по высоте в 3.3. мм, пришлось вырезать в плате отверстия под DIP корпус микроконтроллера ATMega8 и под две кнопки. Сделав отверстия, сделаны, я склеил вместе плату с пластиковым корпусом ЖКИ, а затем припаял проводами узкие контакты дисплея к контактам платы.

Модуль CYWM6935 выше, чем 3.3 мм, но его можно разместить на месте телефонной антенны, если предварительно отрезать от модуля передающую антенну. Все равно, использоваться она не будет.

Разместив все части анализатора, я соединил их тонким монтажным проводом. Вот окончательный вариант. Не слишком красивый, но полностью функциональный:

Осталось завернуть шесть винтов, и анализатор готов.

Окончание читайте

Перевод: /i/Image/wand.gif по заказу

  • Подскажите,если кто-то собирал "этот приборчик, как он в работе,есть ли какие нюансы при сборке,можно ли применить вместо модуля CYWM6935, модуль IDWARF-168 со встроенным контроллером ATmega168(вроде он аналог CYWM6935). Хотелось бы узнать побольше информации о нем.! Если кто собирал поделитесь впечатлением?:)
  • Неужели даже ни кто и не собирал приборчик. Дело в том,что я прошил ATMega8 ,дисплей не 3410,а прикрутил 3310. Запустил на отладочной получил картинку как у автора,только на строку уже и короче,кнопки режимы отрабатывают,а модуля супрессора,такого нет. Заказал аналог,а он с уже встроенным контроллером 168 мегой, прошивку перекомпеллировал под 168 мегу,пока не прошил,попросту в наличие сейчас ее нет,поэтому и хотел узнать стоит замарачиваться собирать или как?
  • Жаль,что нет повторивших его,сегодня прошил 168 мегу,перекомпелированной прошивкой,внутренний кварц установил на 8мгц при прошивки фузов,воткнул в отладочную на место 8 атмеги,все сраслось,дисплей пошустрее стал показывать..Теперь осталось модуль с гуном на 2.4 ггц забрать,дело за этим осталось и железо под 168 мегу собрать,если все срастется,то устройство получится не больше индикатолра 3410 от нокиа. ,короче со спичечный коробок!:) P.S. Все жду с надеждой,кто нибудь да откликнется!
  • Привет.Тоже пробую собрать данный девайс но не имел дело с атмегами.Не подскажешь,киким Компилятором преобразовывал файл написанный на C+ в hex?Можешь скинуть HEX для анализатора?Заранее спасибо.
  • Во второй части статьи указано, что использовался компилятор AVR-GCC (WinAVR)? в нем компилируете и получаете файл для прошивки микроконтроллера. Ну, либо вам помогут и предложат готовый файл...
  • Спасибо за ответ.
  • К сожалению отдельный модуль не достал,а достал аналог.С аналогом пока не разобрался. Сейчас есть вот такой приборчик -анализатор спектра, кого заинтересует --вот ссылка на него. http://electronix.ru/redirect.php?http://vrtp.ru/index.php?showtopic=18816&st=690
  • Собрал данный анализатор 2.4 ГГц на монтажной плате,без вч модуля...Работает.Теперь нужен вч модуль.
  • На данный момент,тоже самое,работает на отладочной,но нет самого глаза прибора!(самого модуля,есть аналог навороченный,нет мозгов его прикрутить!!) . Надо обязательно собрать данный девайс, тем более у меня есть с чем сравнивать.. Вот аналог вч модуля.Может кто,что присоветует?
  • подскажи а без модуля вч какая рабочая частота. мне бы надо не более 20кгц. и скинь пожалуйста прошивку если можно с исходником. можно в почту. vskitovich @yandex.ru а то что то не по глазам видно. искал в инете не нашел. хотелось бы тоже такой прибор но для других целей. тем более у тебя он работает хоть и без одного блока. заранее благодарен.

Принципиальная схема блока фильтров и предусилителя ниже на рисунке. Фильтры настроены на следующие частоты: 32Гц, 63Гц, 125Гц, 250Гц, 500Гц, 1кГц, 2кГц, 4кГц, 8кГц, 16кГц.


Печатная плата. Изготавливалась самостоятельно при помощи фоторезиста.


Рекомендации по подбору емкостей- номиналы емкостей лучше подбирать с помощью LCR метра (я пользовался E7-22) нестандартные номиналы получал параллельно или последовательно собирая из стандартного ряда.

Принципиальная схема линейки индикаторов.

Печатная плата в DIP и SMD вариантах все есть в архиве.Платы заказывал на производстве так как дома такие размеры было проблематично сделать (размер в DIP 320х50).
В качестве диода можно использовать любой быстродействующий диод Шоттки. Сопротивление резисторов на светодиоды зависит от типа используемых светодиодов, (надо рассчитать по току), можно использовать любые другие светодиоды с пересчетом или переделкой схемы. ДА есть еще одно замечание- это потребление одной линейки, при задействовании все 40 светодиодов линейка потребляет 40*0,02А=0,8А а все 10 линеек будут кушать при полном задействовании светодиодов 8А!! не забудьте подобрать соответствующий блок питания. Если будете использовать покупной импульсный БП с несколькими входами как правило это +/-12В, +5В, то есть один нюанс с которым я столкнулся, если одноканальные Импульсные БП в большинстве не требуют нагрузку для запуска, то многоканальные требуют, т.е. необходимо нагрузить все каналы чтобы БП запустился.
Настройка.
Настройка заключается в установке равенства чувствительности всех каналов. Нужен генератор НЧ и низкочастотный милливольтметр. На генераторе устанавливают последовательно частоты 32 Гц, 63 Гц, 125 Гц, 250 Гц. 500 Гц, 1 кГц, 2 кГц, 4 кГц, 8 кГц и 16 кГц. Частоты поочередно подают на вход прибора. При этом параллельно выходу генератора НЧ должен быть подключен милливольтметр, по его показаниям нужно следить за тем, чтобы величины напряжения ЗЧ, подаваемые с ГНЧ на всех частотах были одинаковыми (при необходимости регулировать регулятором уровня выхода ГНЧ). Выставляем R42 предварительного усилителя в среднее положение и начиная с частоты 32 Гц на ГНЧ устанавливают такой уровень выходного напряжения при котором в среднем положении R2(блока фильтра 32Гц) горит средний светодиод индикаторной шкалы. Запоминаете этот уровень выходного напряжения ГНЧ. Затем повышаете частоту до 64 Гц. Устанавливаете такой же уровень НЧ с выхода ГНЧ (смотря по милливольтметру), и регулируете R*в фильтре 63Гц так чтобы горел средний светодиод шкалы 63 Гц.
Аналогичные операции проделать на всех других частотах. Предварительно можно точнее установить средние частоты полос, определив среднюю частоту каждого фильтра перестройкой частоты ГНЧ в некоторых пределах относительно указанной частоты на схеме. Затем, если есть существенное отличие, отрегулировать частоту соответствующим изменением емкостей конденсаторов.

Несколько фото процесса изготовления




В этой статье приведена принципиальная схема 10-ти полосного анализатора спектра (индикатора), которую можно применить при конструировании каких-либо усилителей, если не устраивают ламповые, простенькие светодиодные, или стрелочные индикаторы. Вообще в сети можно найти огромное множество схем подобного назначения, ну а мы с вами остановимся на более сложном варианте, данная схема построена с применением микроконтроллера Atmega8. Давайте рассмотрим схему:

Кроме микроконтроллера есть еще пара микросхем, это операционный усилитель TL071, на него приходит линейный сигнал, и дешифратор CD4028, аналогом последней является отечественная микросхема К176ИД1. Питается устройство от блока питания, реализованного на интегральном стабилизаторе 7805. Кварц имеет частоту 18 MHz. Также на схеме мы видим кучу транзисторных ключей, управляющих светодиодной матрицей. Схема матрицы показана ниже:

100 светодиодов образуют матрицу 10х10. Частоты, на которые реагирует каждый столб матрицы следующие:

31Hz, 62Hz, 125Hz, 250Hz, 500Hz, 1kHz, 2kHz, 4kHz, 8kHz, 16kHz

С помощью J4 и J5 можно задать режим работы индикации, то есть работа в линейном режиме, в линейном режиме с индикацией пиков, в режиме точек, и режиме точек с индикацией пиков. Вместо этих джамперов для оперативности смены режимов можно установить какие-либо миниатюрные переключатели.

Печатные платы устройства.

С печатной платой в формате LAY пришлось немного повозиться, ни один элемент на ней был не подписан, плата просто имела кучу контактных площадок, соединенных дорожками, поэтому пришлось ее переделать используя свои шаблоны деталей (макросы), полностью отрисовать слой шелкографии с указаниями номиналов элементов.

В переработанном виде платы имеют следующий вид:

Дроссель по питанию микросхемы CD4028 установлен для корректной работы дешифратора, в принципе вместо него можно поставить перемычку (смотри нижний левый угол платы).

Стабилизатор 7805 устанавливается на небольшой радиатор:

Плата в сборе выглядит так:

Все необходимые материалы для повторения индикатора, в том числе прошивку микроконтроллера и информационный файл по установке фьюзов для программы Algorithm Builder вы найдете в архиве. Также в нем есть оригинальная статья из зарубежного журнала, в которой рассматривается этот спектроанализатор, ну и конечно печатные платы блоков в формате LAY6. Размер файла – 6 Mb.



Загрузка...