2016-11-02 10 views
0

Я хочу подсчитать количество импульсов от механического счетчика воды с помощью микроконтроллера STM32L. Выходы счетчика воды находятся от двух переключателей REED.подсчет импульсов от механического счетчика воды с двумя входами

Работа коммутаторов объясняется следующим образом:

  • двух герконов будет работать «ВКЛ» или «ВЫКЛ», соответственно, с помощью магнита, установленного на указатель или зубчатого колеса во время его хода в регистре , но никогда не "ON" одновременно.
  • Два герконовых переключателя работают с двумя «ON» и двумя «OFF» в одном раунде указателя/шестерня означает один выход сигнала.

Как я могу прочитать на двух входах и уметь подсчитывать количество импульсов в C? Примечание: 1 импульс = 100 литров.

+0

Когда один переключатель закрывается, установите флаг. Когда другой переключатель закроется, снимите флажок. Подсчитайте количество сбросов флага. Я не понимаю, в чем проблема. –

+1

Не могли бы вы нарисовать временную диаграмму состояния двух переключателей? Ваше объяснение трудно понять. –

+0

Непонятно. Вас интересует, как настроить аппаратное обеспечение для чтения коммутаторов, или вы уже можете прочитать переключатели и заинтересованы в алгоритме обработки данных? –

ответ

0

Я не уверен, что вы на самом деле спрашиваете, потому что то, что вы, кажется, спрашиваете, настолько просто, если вы опросили или использовали прерывания, вызванные прерыванием. Основная проблема заключается в отладке сигналов коммутатора. Для debouncing вы должны определить максимальный расход вашего счетчика, который вам действительно неинтересен, но он позволит вам рассчитать максимальный период переключения. Используйте некоторую значительную часть минимального времени включения или выключения для выполнения вашего отскока.

+0

Несомненно, вам не нужно отказываться от этой системы. Это похоже на механический спуск часов. Вы не можете считать другой импульс A до тех пор, пока у вас не будет B-импульса. A и B никогда не будут одновременно сделаны одновременно. Итак, с точки зрения алгоритма, debounce не имеет значения. Когда вы получаете импульс A, вы ждете B-импульса. Когда вы получаете импульс B, вы регистрируете еще 100L и ждете импульса A. –

+0

@WeatherVane: Если происходит поток потока, который вращает магнит рядом с тростником, тростник может переворачиваться, но тогда магнит может вернуться назад на небольшое количество (нет идеального храповика на 100%). Это будет импульс, который не следует учитывать, потому что он слишком короткий, чтобы быть реальным переходом. Кроме того, если использовать прерывания для обнаружения переходов, то debouncing будет состоять в том, чтобы определить, действительно ли было достигнуто правовое состояние коммутатора. – nategoose

+0

не должно иметь значения, сколько импульсов вы выходите из одного геркона, если другой переключатель находится на 180 градусов и не имеет шансов на ложный make.Я бы подумал, что это целая * точка * наличия двух переключателей, а не одна - для устранения необходимости отладки. –

0

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

На практике код должен был бы быть более сложным, но основной алгоритм может быть представлен следующим образом:

while(1) { 
    while(switchA() == 0);   // wait for switch A to be made 
    litres += 100;     // clock up unit volume 
    display(litres);    // tell the user 
    while(switchB() == 0);   // wait for switch B to be made 
} 

Это не имеет значения, сколько импульсов приходят от геркона, когда он находится рядом с магнит - все, кроме первого импульса, будут игнорироваться, потому что алгоритм затем смотрит на другой переключатель.

 Смежные вопросы

  • Нет связанных вопросов^_^