Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фазометр
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
offerkin
Доброе время суток уважаемые форумчане! В программирование я новичок,так что сильно не "пинайте" по возможности! rolleyes.gif Есть проект на атмега 128,основную часть которого я осилю сам(внешние прерывания,SPI),а вот вторая часть проекта на данном этапе мне не по зубам,кому не трудно очень прошу помочь с написанием кода,сильно нуждаюсь в Вашей отзывчивости! Суть в следующем-есть два меандра с постоянной частотой от 6 до 15 кГц (выборочно),вот с этих сигналов и нужно будет вычесть фазовый сдвиг от -90° до +90°,индикацией будут служить 15 светодиодов подключенных к 30 портам атмеги 128(мультиплексию не предлагать) 30 портов из-за того,что светодиоды двухцветные с общим катодом,то есть отклонение фазы от 0 до -90° показывает бегущий огонек например зеленого цвета,от 0 до +90° -красного цвета,если 0 то соответственно ничего не горит. Прилагаю схему,к которой и будет подключатся девайс,и комментарий человека,который долгое время "копался" в этой теме-"Фазу измерять надо от -90 до +90 градусов.
Если в аналоговом тракте МД есть синхронные детекторы, то с их выходов X и Y снимаем напряжение при помощи АЦП, усредняем и обрабатываем. Опорной точки нет как таковой (всё уже сделано в СД), мы просто измеряем VDI и длину вектора (амплитуду сигнала) непрерывно в каждый момент времени.
Если прибор с прямой обработкой сигнала, то опорный сигнал - это фаза TX в точке 0 и в точке +90 градусов."

offerkin
Есть схема,на стрелочном индикаторе,вместо него можно подключить АЦП,но предел измерений будет в интервале от 0 до +90°,как таким же самым методом можно провести измерение отрицательного диапазона от 0 до -90°?



amiller
Если я правильно понял Вашу задачу, то:
1. Имеется два сигнала прямоугольной формы и частоты 6 - 15кГц
2. Нужно измерить фазовый сдвиг между ними.

Для решения это задачи я вообще не вижу необходимости в аналоговой обработке.
Можно так:
1. Преобразуете сигналы к логическим уровням.
2. Подаете сигналы на входы одного из таймеров ATMega.
3. По фронту одного из сигналов сбрасываете таймер, по фронту второго, фиксируете время сдвига.
Если есть на этом контроллере аппаратная возможность, то делаете через Capture. Если нет, можно программно, даже через прерывания. Всё равно точность будет не хуже, чем в аналоговом виде.
offerkin
a с примером кода сможете мне помочь? Очень нужна помощь!
amiller
Цитата(offerkin @ Apr 25 2016, 13:49) *
a с примером кода сможете мне помочь? Очень нужна помощь!

С кодом помочь не могу, таких задач не было. Я уже много лет не занимался мегами. Сейчас посмотрел в документации на её таймера, убогое зрелище.
Всего один канал capture, чего явно мало. Вероятно есть возможность объединить и засинхронизировать пару таймеров, но это сложновато будет, если опыт маленький.
Я предлагаю Вам такой вариант:
1. Запустить таймер на максимальной частоте.
2. Сигналы подать на ноги, где можно настроить внешние прерывания по изменению уровня.
3. По прерываниям фиксировать в переменные код счётчика таймера.
4. На основании этих данных в фоне с помощью простой арифметики вычисляете период импульсов и фазовый сдвиг.
Только смотрите, чтобы другие прерывания не мешали измерениям.
SlavaV
Можно немного подкорректировать ТЗ нельзя чтобы у оборудования ни чего не горело (светилось) это я про показания при нулевом сдвиге фаз, а то становиться непонятно проводит измерение оборудование или сдохло.

а по коду это в Вашей компетенции, Вы же написали, что осилите сами работу с внешними прерываниями. Это ни что иное как внешнее прерывание первый сигнал подаёте на INT0 запускаете таймер(счетчик) второй сигнал запускаете на T0 фиксируете значение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.