Генератор-частотомер на MSP430

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

Прибор имеет следующие характеристики:

Генератор:
генерируемая частота в низкочастотном диапазоне 0-15000 Гц с дискретностью 0.0005 Гц
генерируемая частота в высокочастотном диапазоне 0-4000000 Гц с дискретностью 0.03 Гц
амплитуда выходного сигнала 3В
Максимальный выходной ток 300мА
форма сигнала: синус треугольник меандр.

Частотомер:
измеряемый диапазон 0.01Гц-25МГц.
точность измерения в диапазоне 1Гц-1МГц 0.01Гц
точность измерения в диапазоне 1МГц-25МГц 1Гц
чувствительность не хуже 500мВ

экр1_300x236.jpgэкр5_300x234.jpg

экр2_300x231.jpgэкр3_300x238.jpg

экр4_300x231.jpg

В качестве ядра прибора выступает микроконтроллер MSP430F147 (может быть без проблем и изменения кода заменен на любой из следующих микроконтроллеров MSP430F133 MSP430F135 MSP430F148 MSP430F149). В качестве экрана используется экран от Nokia 1202 с программной реализацией интерфейса SPI. В роли генератора используется широко известный генератор прямого цифрового синтеза AD9833 от Analog Device. Контроллер использует два источника тактирования: от высокочастотного кварца на 8МГц и часового кварца 32768Гц. Благодаря возможности буферизирования тактовых частот на ногах ввода-вывода появляется возможность переключения тактовой частоты генератора AD9833, что позволяет получить низкочастотный генератор в высокой разрешающей способностью, так и высокочастотный генератор. Для увеличения выходной мощности генератора и увеличения амплитуды выходного сигнала используется операционный усилитель AD8397. Схема устройства приведена на рисунке.

Схема прибора

Частотомер до 1МГц выполнен на хорошо себя зарекомендовавшем принципе временных ворот в котором начало и конец временных ворот формируются фронтами измеряемого сигнала. Точность в этом случае определяется точностью тактовой частоты. Наличие асинхронного таймера в контроллере позволяет измерять частоты выше тактовой. Хотя в даташите на микроконтроллер и указана максимальная частота на входе INCLK таймера 10МГц это дает основание предположить, что частота на входной ноге INCLK может быть асинхронна и выше тактовой. Дальнейшая проверка это подтвердила. Если в методе временных ворот частота оказалась выше 1МГЦ, то частотомер автоматически переключается на метод подсчета измеряемых импульсов за 1с. На экране это видно по обнуленным разрядам измеряемой частоты после запятой.

На рисунке показан принцип измерения частоты методом временных ворот формируемых входной частотой.

теория.jpg
В микроконтроллере настраиваются два таймера. Один тактируется от высокочастотного кварца 8МГц, а второй тактируется от внешнего входа INCLK. Оба находятся в режиме стоп.
На первом этапе программа стоит пока на ножке INCLK высокий уровень. На втором этапе как только он сменяется низким уровнем то программ опять останавливается до появления фронта сигнала. (это необходимо для исключения ошибочного измерения в случае начала измерения например в середине входного импульса, таким образом захватывается именно фронт).После этого на третьем этапе включаются оба таймера в режиме счета с прерыванием. В прерываниях инкрементируются переменные для расширения разрядности счетчиков. После включения таймеров стартует задержка на 1 секунду. (величина задержки не критична, но естественно влияет на точность измерения)
После окончания задержки на этапе четыре и пять повторяется процедура ожидания фронта измеряемого сигнала. При его обнаружении счетчики переводятся в режим стоп. Измеряемая частота находится по формуле число импульсов измеряемой частоты*тактовую частоту/число импульсов тактовой частоты насчитанных за время задержки. Так как мы ловили фронты входного измеряемого сигнала то их число за период измерения всегда целое, а точность определяется точностью тактовой частоты. Этот принцип позволяет мерить как низкочастотные так и высокочастотные сигналы.

Захватывать фронт входного сигнала можно несколькими способами:
1. Использовать прерывание по фронту входного сигнала и в прерывании стартовать и останавливать таймеры. Погрешность вноситься за счет того что требуется время на вход в прерывание. Так же возможна ситуация, что прерывание вызовется в момент переполнения счетчика таймера измеряемой частоты, что также приведет к дополнительной ошибке измерения.
2. Использовать режим захвата при котором фронт входного сигнала приводит к захвату текущего значения таймера, переносу его в регистр захвата и вызову прерывания. Ошибка измерения может быть вызвана теми же причинами, что и в пункте 1.
3. Программный опрос входного сигнала на предмет обнаружения фронта.
В процессе реализации прибора были опробованы все три метода и наибольшую точность показал метод номер 3.

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

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

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

Управление прибором осуществляется от четырех кнопок. Кнопки <- и -> осуществляют передвижение курсора по экрану. Кнопки вверх и вниз осуществляют изменение соответствующей позиции на которой установлен курсор. Текущий элемент выделяется инвертированным цветом. Частотный диапазон генератора переключается когда курсор стоит на символе LF (в случае низкочастотного генератора) или меняется на HF (в случае высокочастотного сигнала). Форма генерируемого сигнала меняется при нахождении курсора на символе меандра вверху справа (меняется на символ синуса или треугольника). Важно помнить, что хотя все позиции в выбираемой частоте генератора являются числами от 0 до 9, частота в режиме низкой частоты не может превышать 15кГц и 4МГц в режиме высокой частоты, что определяется требованиями генератора AD9833.

Фото прибора

Настройка прибора заключается в следующем:
Так как величина частоты генератора AD9833 рассчитывается относительно тактовой и точность измерения частотомера тоже зависит от тактовой частоты, то необходимо измерить частоту высшего высокочастотного кварца и низкочастотного кварца на любом частотомере. Частоту можно взять с ножки тактирования генератора AD9833 в режиме генератора HF и LF. Эти частоты необходимо записать в программе.

Важно в опциях проекта IAR при компилировании выставить следующие настройки оптимизации

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

Плата на одностороннем текстолите. Плата для экрана тоже и распаяна на шлейф экрана.

плата nokia12

плата.jpg

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
МК MSP430 MSP430F135 1 MSP430F133, MSP430F147, MSP430F148, MSP430F149
Генератор прямого цифрового синтеза AD9833 1
Операционный усилитель AD8397 1
Биполярный транзистор BFR93A 1
Выпрямительный диод 1N4148 2
Электролитический конденсатор 1000 мкФ 1
Электролитический конденсатор 10 мкФ 1
Конденсатор 10 нФ 2
Конденсатор 10 пФ 5
Резистор 10 кОм 5
Резистор 470 Ом 2
Резистор 22 кОм 1
Резистор 100 Ом 1
Резистор 2.8 кОм 1
Резистор 15 кОм 1
Резистор 28 кОм 1
X1 Часовой кварц 32768Гц 1
X2 Кварц 8 МГц 1
LCD-дисплей Nokia 1202 1
Кнопка тактовая 4