В первой части мы познакомились со схемой, с назначением отдельных узлов и элементов, рассмотрели принципы работы устройства.
Программное обеспечение микроконтроллера написано полностью на языке Си, и условно его можно разделить на 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 кГц, в противном случае неизбежны искажения при воспроизведении этого сигнала в цифровом виде.
Загрузки
Исходный код программы микроконтроллера (компилятор HiTech C18) – скачать