offerkin 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба Доброе время суток уважаемые форумчане! В программирование я новичок,так что сильно не "пинайте" по возможности! :rolleyes: Есть проект на атмега 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 25 апреля, 2016 Опубликовано 25 апреля, 2016 · Жалоба Есть схема,на стрелочном индикаторе,вместо него можно подключить АЦП,но предел измерений будет в интервале от 0 до +90°,как таким же самым методом можно провести измерение отрицательного диапазона от 0 до -90°? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 25 апреля, 2016 Опубликовано 25 апреля, 2016 · Жалоба Если я правильно понял Вашу задачу, то: 1. Имеется два сигнала прямоугольной формы и частоты 6 - 15кГц 2. Нужно измерить фазовый сдвиг между ними. Для решения это задачи я вообще не вижу необходимости в аналоговой обработке. Можно так: 1. Преобразуете сигналы к логическим уровням. 2. Подаете сигналы на входы одного из таймеров ATMega. 3. По фронту одного из сигналов сбрасываете таймер, по фронту второго, фиксируете время сдвига. Если есть на этом контроллере аппаратная возможность, то делаете через Capture. Если нет, можно программно, даже через прерывания. Всё равно точность будет не хуже, чем в аналоговом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
offerkin 0 25 апреля, 2016 Опубликовано 25 апреля, 2016 · Жалоба a с примером кода сможете мне помочь? Очень нужна помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 25 апреля, 2016 Опубликовано 25 апреля, 2016 · Жалоба a с примером кода сможете мне помочь? Очень нужна помощь! С кодом помочь не могу, таких задач не было. Я уже много лет не занимался мегами. Сейчас посмотрел в документации на её таймера, убогое зрелище. Всего один канал capture, чего явно мало. Вероятно есть возможность объединить и засинхронизировать пару таймеров, но это сложновато будет, если опыт маленький. Я предлагаю Вам такой вариант: 1. Запустить таймер на максимальной частоте. 2. Сигналы подать на ноги, где можно настроить внешние прерывания по изменению уровня. 3. По прерываниям фиксировать в переменные код счётчика таймера. 4. На основании этих данных в фоне с помощью простой арифметики вычисляете период импульсов и фазовый сдвиг. Только смотрите, чтобы другие прерывания не мешали измерениям. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SlavaV 0 8 мая, 2016 Опубликовано 8 мая, 2016 · Жалоба Можно немного подкорректировать ТЗ нельзя чтобы у оборудования ни чего не горело (светилось) это я про показания при нулевом сдвиге фаз, а то становиться непонятно проводит измерение оборудование или сдохло. а по коду это в Вашей компетенции, Вы же написали, что осилите сами работу с внешними прерываниями. Это ни что иное как внешнее прерывание первый сигнал подаёте на INT0 запускаете таймер(счетчик) второй сигнал запускаете на T0 фиксируете значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться