Консультация № 176581
08.02.2010, 22:15
0.00 руб.
0 8 1
Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста решить задачу: имеются 2 последовательности импульсов (от 2 датчиков). Они сдвинуты по фазе друг относительно друга. Сдвиг может быть как положительный, так и отрицательный. Нужно реализовать систему определения, по какому входу сигнал приходит раньше, и посчитать количество импульсов. Очень желательно реализовать сие на ATTiny2313. И еще уточнение: счет можно реализовать только на счетчике? Или можно считать по любому биту порта D? (Порт B на индикаторе).
Спасибо!

Обсуждение

Неизвестный
09.02.2010, 06:30
общий
Счет нужно вести отдельно по каждому датчику?
Когда надо обнулять счетчики?
Диапазон частот сигналов?
Разрядность счета?
Неизвестный
09.02.2010, 09:40
общий
Счет ведется по любому из датчиков. Запуск и останов счета - по фронту и спаду управляющего импульса. Время измерения - от десятков миллисекунд до десятков секунд. Счетчики обнулять перед новым замером (по приходу импульса) или по нажатию кнопки. Частота входного сигнала с датчиков - 0...12 кГц.
И еще одна особенность - нужно определять время управляющего импульса, т.е. его длительность, а также мерять частоту с одного из датчиков постоянно (частотомер).
Неизвестный
09.02.2010, 19:04
общий
счетчик будет один, импульс на каждом из двух входов будет прибавлять по единице в счетчик? или импульсы будут идти с одинаковой частотой, на со сдвигом пофазе? зачем тогда мерять два входа? не понятно в этом месте.
Для управляющего импульса будет отдельный вход?
Кнопка как должна работать? нажал - считает, отпустил перестал? Или один раз нажал считает, второй раз нажал перестал?
сколько будет индикаторов? и вообще какой индикатор будет? что нужно отображать на индикаторе? разрядность значений какая будет?
Неизвестный
09.02.2010, 19:32
общий
2 сигнала (одинаковые) с датчиков - для определения направления вращения (по часовой, против часовой). Подобная система реализована в расходомерах KRACHT. Т.е. надо сосчитать кол-во импульсов пока идет стробирующий сигнал. Длительность этого сигнала тоже надо определять. Индикатор - LCD 20х4 (MT–20S4M фирмы МЭЛТ). Разрядность - целое число импульсов, до 5 разрядов (12 кГц). Время - 2 разряда целых, 2 разряда после запятой. На индикаторе отображается частота вращения (кол-во импульсов с датчика) - динамически, время измерения (строба) - после его измерения, направление вращения (по час, против час) - по результату прихода 1-го импульса либо с 1-го датчика, либо со 2-го.
Кнопка в данном случае будет обнулять все результаты. Запуск счета - по стробу (как я уже выше описал).
Возможно реализовать вариант определения направления вращения не на МК (если, скажем, памяти не хватит или еще что-то), т.е. схема сравнения двух сигналов будет выдавать на МК сигнал направления (Скажем, если 1 - по час, если 0 - против).
Неизвестный
09.02.2010, 19:46
общий
направление вращения может меняться во время измерения? направление надо измерять и показывать во время всего цикла измерения (активности строба) или в конце ?
Неизвестный
09.02.2010, 20:29
общий
нет, направление одно при одном измерении. его надо определить вначале. при следующем измерении направление м.б. иным. направление показывать можно и в конце цикла, можно и в начале, по приходу определяющего импульса (с одного из датчиков). как я понимаю, это данные статические. их в динамике (как, например, показания счетчика импульсов или частотомера) отображать не надо.
Неизвестный
09.02.2010, 22:53
общий
Еще вопрос у меня по кварцу, который в данном случае будет необходим. Они есть обычные и усеченные. В чем различие? Какой лучше брать?
Неизвестный
13.02.2010, 09:59
общий
это ответ
Здравствуйте, Деда Дима.
Краткое тех задание на основе Ваших комментариев. Есть сигналы:
1. Датчик №1
2. Датчик №2
3. Строб, сигнал проведения измерений
4. Кнопка сброс
Определить нужно следующее:
1. Период сигнала строба
2. Направление вращения
3. Количество импульсов с датчика.

Для наиболее точных измерений нужна наиболее быстрая реакция контроллера на внешние сигналы. Поэтому их нужно завести на входы внешних прерываний INT0 и INT1.

На первый вход заведем сигнал №3 (строб). Сконфигурировать прерывание надо по перепадам уровня сигнала. В обработчике этого события сначала проверяем уровень сигнала на входе, если активный, то обнулим переменные для счета импульсов. Установим переменную – флаг разрешения счета. Обнулим и запустим таймер-счетчик, который будет считать длительность строба.
Если сигнал не активный, то выводим на индикацию посчитанные данные. Сбрасываем флаг разрешения счета.

На второй вход внешнего прерывания заводим сигнал №1 (от первого датчика). Прерывание конфигурируем по фронту. В обработчике проверяем флаг разрешения счета. Если он установлен, то производим счет в переменных для подсчета импульсов.
Для определения направления вращения можно просто проверять состояние датчика №2, если уровень высокий, то одно направление, если низкий, то другое. Эту проверку можно производить в каждом прерывании и выводить на индикацию постоянно. Второй датчик можно подключить к любому свободному входу контроллера.

Про резонаторы не имею информации в их различии, кроме размеров корпуса и цены, маленькие продавали дороже больших, но они более удобны для миниатюрных устройств, там, где есть ограничение по размерам. Рекомендую найти техническую документацию и сравнить характеристики на конкретные модели резонаторов. Некоторую информацию можно посмотреть в этом файле http://lib.chipdip.ru/051/DOC000051109.pdf

Ответить на Ваш вопрос, учтя все нюансы в одном ответе сложно. Задавайте дополнительные более маленькие и конкретные вопросы в процессе их появления.
5
Спасибо большое! Определили с направлением, куда двигаться при разработке, как организовать чтение и обработку сигналов. Я понимаю, что вопрос емкий и так сразу исчерпывающий ответ дать нереально. К слову, исходные данные тоже несколько меняются. Я об этом узнаю в процессе разработки.Как появятся новые вопросы, буду спрашивать! Спасибо за поддержку!
Форма ответа