Pic.Rkniga.ru - Сайт как для начинающих, так и для опытных радиолюбителей, разрабатывающих свои устройства на популярных PIC микроконтроллерах. Здесь можно обмениваться сообщениями на форуме, а также добавлять на сайт статьи и схемы своих устройств.
Анализатор спектра в реальном времени на PIC18F4550
Автор публикации: alex
Просмотров: 15413
Добавлен: 11-03-2013, 09:41
Комментарии: 1
Проект демонстрирует реализацию анализатора спектра звуковых частот на 8-разрядном микроконтроллере PIC18F4550 производства компании Microchip. Анализ спектра выполняется при помощи оптимизированного алгоритма быстрого преобразования Фурье (Fast Fourier Transformation, FFT), написанного полностью на языке Си. Визуализация данных (спектра) в реальном времени осуществляется на графическом ЖК дисплее с разрешением 128×64 точки.
Основные характеристики:
частота дискретизации 20 кГц;
диапазон частот 312 Гц – 10 кГц;
скорость отображения 10 кадров в секунду;
разрешение дисплея 128×64 точки;
Аппаратная часть Принципиальная схема устройства
Для вычисления значений по алгоритму быстрого преобразования Фурье в диапазоне звуковых частот необходимо должным образом подготовить сигнал для дальнейшей обработки микроконтроллером. PIC18F4550 имеет встроенный многоканальный АЦП, который может использоваться для измерения напряжения в диапазоне 0 В – 5 В с 10-битным разрешением (0-1023).
Основные характеристики микроконтроллера:
ядро PIC18, рабочая частота до 48 МГц;
32 КБайт Flash-память программ;
2 КБайт RAM;
один 8-разрядный таймер, три 16-разрядных таймера;
USB интерфейс, SPI интерфейс;
13-канальный 10-битный АЦП;
до 35 линий ввода/вывода общего назначения.
Звуковой сигнал с линейного выхода аудиоустройства представляет собой переменный сигнал, волну с амплитудой около 1 В. Осциллограмма ниже наглядно отображает звуковой сигнал синусоидальной формы частотой 5 кГц (контрольная точка на схеме W2).
Если такой сигал подать непосредственно на вход АЦП микроконтроллера, мы получим лишь малый диапазон значений входного напряжения (0 В – 0.5 В), т.е. мы получим значения лишь верхней волны и вычисление алгоритма FFT будет неверным.
Для того, чтобы получить верные вычисления, нам необходимо над исходным сигналом проделать некоторые действия. Сперва необходимо усилить сигнал с целью использования всего рабочего диапазона АЦП микроконтроллера (0 В – 5 В). На втором этапе нам необходимо сместить сигнал на 2.5 В («виртуальный» 0), чтобы АЦП мог захватить все значения аналогового сигнала. Таким образом микроконтроллер сможет делать выборки положительной и отрицательной полуволны сигнала.
С этой целью в устройстве применен простой усилитель на микросхеме LM386-1 – решаем первое условие – усиление сигнала. Питание усилителя осуществляется напряжением +5 В, и благодаря этому, мы выполняем второе условие – положительное смещение сигнала. С этой же целью допустимо использование rail-to-rail операционного усилителя (ОУ c размахом выходного сигнала, равным напряжению питания).
Осциллограмма ниже демонстрирует форму сигнала после усилителя LM386-1 (контрольная точка на схеме W3).
Устройство имеет стерео вход J4, однако при помощи двух резисторов (R1, R2) номиналом 10 кОм проводится смешивание двух сигналов. С помощью потенциометра R3 возможно регулирование амплитуды сигнала. Выходной сигнал с усилителя проходит через простой RC фильтр 10 кГц, и результирующий сигнал поступает на вход АЦП микроконтроллера.
RC фильтр 10 кГц в нашем случае применен в качестве фильтра «сглаживания» для FFT, который не может корректно обнаружить сигнал с частотой выше 10 кГц. Стоит отметить: RC фильтр – самый простой фильтр и очень неэффективный, но данный тип фильтра был выбран из-за простоты реализации, т.к. требуется все два пассивных элемента. Пользователи могут самостоятельно заменить данную часть схемы, например на фильтр с использованием операционного усилителя.
Для отображения данных используется графический ЖК дисплей ATM12864D, выполненный на базе контроллеров KS0108B и KS0107B. Дисплей подключается непосредственно к микроконтроллеру по 8-битной шине. Дополнительно имеются три светодиода, которые используются в тестовом режиме преобразования «музыка-свет». Две кнопки SW1 и SW2 предназначены для переключения режимов отображения. Второй разъем J5 предназначен для реализации сквозного канала (например, для подключения наушников). Разъем J2 предназначен для подключения программатора и внутрисхемного программирования микроконтроллера. Для питания схемы применен регулятор напряжения LM7805.
Разработанная односторонняя печатная плата рассчитана на применение и установку компонентов со штыревыми выводами.
Однако принципиальная схема устройства не сложная и позволяет собрать ее на макетной плате. Возможно применение другого микроконтроллера, программно совместимого с PIC18F4550 (например, PIC18F2550).
Демонстрация работы анализатора спектра на микроконтроллере PIC18F4550
Программное обеспечение Программное обеспечение микроконтроллера написано полностью на языке Си, и условно его можно разделить на 4 части.
1. Выборки данных АЦП (сэмплирование) Осуществление выборок аналого-цифровым преобразователем ведется по каналу RA0 каждые 50 мкс. Это дает нам частоту дискретизации 20 кГц (20000 раз в секунду). Для преобразования Фурье очень важно, чтобы выборки были равномерными и точными. С этой целью в подпрограмме получения данных с АЦП введена короткая временная задержка, которая калибровалась с использованием осциллографа подключенного к контрольной точке W4 на плате. Период прямоугольных импульсов при измерении в этой контрольной точке должен составлять точно 50 мкс. АЦП работает с полным 10-битным разрешением и результаты смещаются вниз на 512 для реализации «виртуальной земли» входного сигнала. Это означает, что результирующие данные будут лежать в диапазоне от –512 до +512, как и требуется для математических преобразований FFT.
Процедура получения выборок займет по времени немного более 32 мс (64×50 мкс) для каждого цикла.
2. 16-битное быстрое преобразование Фурье Подпрограмма, реализующая вычисление алгоритма FFT, была найдена на просторах всемирной сети (ссылка на оригинальный код имеется в исходном коде в конце статьи). Математика FFT достаточно сложна и трудна для понимания. Код был немного упрощен и адаптирован для PIC18F4550. Так как микроконтроллер имеет аппаратный перемножитель 8×8 в составе своего арифметико-логического устройства, были оптимизированы вычисления, позволяя компилятору корректно использовать возможности микроконтроллера.
3. Вычисление абсолютных значений Результат вычислений по алгоритму Быстрого Преобразования Фурье – это комплексные числа, которые состоят из действительной и мнимой части, представленных двумя массивами. Чтобы получить результат в значащей форме, нам необходимо вычислить абсолютную величину комплексного числа, которое мы получаем с использованием вычислений Пифагора для комплексных чисел. Это подразумевает извлечение квадратного корня из чисел, поэтому мы реализуем быстрое целочисленное вычисление SQRT(), так как любые вычисления с плавающей точкой значительно замедляют процесс обработки.
Алгоритм FFT и вычисление абсолютных величин комплексных чисел занимают примерно 70 мс для каждого цикла.
4. Обновление ЖК дисплея ЖК дисплей с разрешением 128×64 точки должен обновляться настолько быстро, насколько это возможно. С этой целью был использован простой алгоритм прорисовки диаграммы в виде столбиков, который требует минимальное количество команд дисплея.
Два переключателя установленных на плате позволяют изменить масштаб отображения (1×, 8×) и режим отображения (линейный, логарифмический). Подпрограмма обслуживания дисплея занимает по времени 45 мс.
Приблизительная скорость работы дисплея анализатора спектра 1 кадр за 150 мс, т.е. мы получаем в итоге 6.5 кадров в секунду (или приблизительно 10 кадров в секунду без использования ЖК дисплея). Пользователи могут увеличить быстродействие, сократив количество необходимых для анализа частот (это ведет к сокращению времени получения выборок и вычислений по алгоритму FFT) или применив быстродействующий дисплей. Кроме того, пользователи могут переделать устройство для использования его совместно со светодиодами.
Предельная частота для преобразования Фурье (частота Найквиста, Nyquist frequency) – 10 кГц. Устройство анализирует 32 диапазона частот (Гц):
1 : 312.5 - 625
2 : 625 - 937.5
3 : 937.5 - 1250
4 : 1250 - 1562.5
5 : 1562.5 - 1875
6 : 1875 - 2187.5
7 : 2187.5 - 2500
8 : 2500 - 2812.5
9 : 2812.5 - 3125
10 : 3125 - 3437.5
11 : 3437.5 - 3750
12 : 3750 - 4062.5
13 : 4062.5 - 4375
14 : 4375 - 4687.5
15 : 4687.5 - 5000
16 : 5000 - 5312.5
17 : 5312.5 - 5625
18 : 5625 - 5937.5
19 : 5937.5 - 6250
20 : 6250 - 6562.5
21 : 6562.5 - 6875
22 : 6875 - 7187.5
23 : 7187.5 - 7500
24 : 7500 - 7812.5
25 : 7812.5 - 8125
26 : 8125 - 8437.5
27 : 8437.5 - 8750
28 : 8750 - 9062.5
29 : 9062.5 - 9375
30 : 9375 - 9687.5
31 : 9687.5 - 10000
Примечание: Частота Найквиста - частота дискретизации аналогового сигнала, обеспечивающая его корректное преобразование в цифровую форму. В теореме о выборках Найквиста доказывалось, что частота дискретизации должна быть, по крайней мере, вдвое выше самой высокой частоты обрабатываемого сигнала, чтобы можно было восстановить исходный сигнал – так, для дискретизации голосового сигнала, имеющего полосу 4 кГц, необходима частота 8 кГц, в противном случае неизбежны искажения при воспроизведении этого сигнала в цифровом виде.
По материалам сайта rlocman.ru
В архиве: Принципиальная схема и печатная плата (формат expressSCH и expressPCB) и Исходный код программы микроконтроллера (компилятор HiTech C18)