реклама на сайте
подробности

 
 
> Каким образом обрабатывать данные с расходомера воды, Как это принято делать, никогда не сталкивался.
Ga_ry
сообщение Jul 20 2018, 10:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Необходимо дополнить систему таким расходометром воды.
Непонятно каким образом реагировать на поступающие импульсы не теряя при этом информацию.
Система это насосная станция полива по расписанию, которая решает задачи контроля периода, времени полива, есть датчик освещенности и датчик осадков - все работает на прерываниях, контролер атмега 48.
Ставить дополнительный маленький контроллер, который будет передавать готовые данные на основной или можно как-то решить на одном имеющемся.
Инфа от продавца товара:
Один литр воды выводит на выход 450 импульсов.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 27)
Priest_89
сообщение Jul 20 2018, 10:40
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 21-03-12
Пользователь №: 70 931



А в чем, собственно, проблема? Большинство контроллеров имеют таймеры-счетчики с входом внешнего тактирования, на такой вход и подключить датчик. Если уж таймера нет, можно и по прерыванию инкрементировать программный счетчик, или просто опрашивать порт в цикле, частота то мизерная.
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 20 2018, 10:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Почему сразу в чём проблема?
Проблема в первом разе... я специально запостил в разделе для начинающих.
То есть, если я найду счётчик с внешним тактированием, он будет работать аппаратно и мне останется только считывать показания?
Go to the top of the page
 
+Quote Post
ikm
сообщение Jul 20 2018, 11:01
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(Ga_ry @ Jul 20 2018, 13:17) *
контролер атмега 48.

Один литр воды выводит на выход 450 импульсов.

В атмеге есть прерывания на ножках PCINT_ по любому изменению состояния.
Например для ножки №31 (PD1) это будет выглядеть так:
CODE
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: On
EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EIMSK=(0<<INT1) | (0<<INT0);
PCICR=(1<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
PCMSK2=(1<<PCINT23) | (0<<PCINT22) | (0<<PCINT21) | (0<<PCINT20) | (0<<PCINT19) | (0<<PCINT18) | (1<<PCINT17) | (0<<PCINT16);
PCIFR=(1<<PCIF2) | (0<<PCIF1) | (0<<PCIF0);

Затем пишем функцию что делать при этом событии и вставляем туда инкремент счётчика импульсов
Например:
CODE
// Pin change 16-23 interrupt service routine
interrupt [PC_INT2] void pin_change_isr2(void) //прерывание внешних кнопок
{
if (на ножке 1) cnt++;

}

Далее в коде делаете проверку сколько импульсов у вас "натекло", отключаете воду и сбрасывайте счётчик.
Каждый расходомер можно завести на отдельную ножку.


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 20 2018, 12:04
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



ikm, спасибо, универсально, но... Если посадить так прямо на это прерывание расходомер, и в случае контроля 3-5 кубов, а это один два часа непрерывного счета, все остальные прерывания и вся обработка что с ними связана будет сбоить/пропадать?
Как быть, или это моя паранойя...
Go to the top of the page
 
+Quote Post
ikm
сообщение Jul 20 2018, 12:23
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(Ga_ry @ Jul 20 2018, 15:04) *
ikm, спасибо, универсально, но... Если посадить так прямо на это прерывание расходомер, и в случае контроля 3-5 кубов, а это один два часа непрерывного счета, все остальные прерывания и вся обработка что с ними связана будет сбоить/пропадать?
Как быть, или это моя паранойя...

Нет, тут как раз дело в том, что прерывание срабатывает только когда у вас есть изменение состояния ноги с"1" на "0" или обратно. По этому прерыванию выполняется тело функции. И чем это тело короче, тем меньше остальные задачи будут ждать своей очереди (кроме Reset INT0 INT1, они более приоритетные). Если совсем "на пальцах", то обработка вашего импульса от расходомера будет занимать какое то количество тактов с самом начале, а потом будет выполнятся тот код на котором программа остановилась до прерывания, пока длительность этого импульса не закончиться. Затем опять измерение состояния, начальный момент обработка прерывания, и возврат к основному циклу программы. Поэтому если импульсы у вас будут достаточно длинными (например мс), а функция минимально короткая (например одна ножка и там просто инкримент), то ресурсов на другие задачи вполне хватает. Единственное, что наверное не стоит использовать такие прерывания, если на этом же МК запущены другие таймеры и ведется учет времени, так как они будут останавливаться и в последствии набежит ошибка.


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Plain
сообщение Jul 20 2018, 14:04
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(Ga_ry @ Jul 20 2018, 13:55) *
Почему сразу в чём проблема? ... если я найду счётчик с внешним тактированием

Проблема в том, что если Вы, зная требования ТЗ, разбазарили все таймеры, то данную тему надо было именно так и называть.

Цитата
мне останется только считывать показания?

Нет, останется только нарастить разрядность выбранного таймера в прерываниях. Если это будет TC2, то при 2250000 импульсах в час он будет прерывать каждые 0,4096 с.
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 20 2018, 14:47
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Plain, ничего не разбазарено, 1 восьмибитный свободен и наращивать разрядность это и так понятно, непонятно что это вы за цифры привели, можете подробнее пояснить?

А какие еще могут быть решения кроме как использовать таймер с внешним тактируемым входом или прерывания int0,1?
Go to the top of the page
 
+Quote Post
ikm
сообщение Jul 20 2018, 14:55
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(Ga_ry @ Jul 20 2018, 17:47) *
А какие еще могут быть решения кроме как использовать таймер с внешним тактируемым входом или прерывания int0,1?

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


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 20 2018, 14:57
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ga_ry @ Jul 20 2018, 17:47) *
А какие еще могут быть решения кроме как использовать таймер с внешним тактируемым входом или прерывания int0,1?

Завести UART на соответствующую скорость и по каждому импульсу получать символ. Считать символы.
Go to the top of the page
 
+Quote Post
Plain
сообщение Jul 20 2018, 15:31
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(Ga_ry @ Jul 20 2018, 17:47) *
непонятно что это вы за цифры привели

Цитата(Ga_ry @ Jul 20 2018, 13:17) *
Один литр воды выводит на выход 450 импульсов
Цитата(Ga_ry @ Jul 20 2018, 15:04) *
5 кубов, а это один два часа

Таким образом, привели таки не мы, а Вы, а конкретнее:

5000 л/ч · 450 имп/л = 2250000 имп/ч = 625 имп/с

256 имп / 625 имп/с = 0,4096 с
Go to the top of the page
 
+Quote Post
DAndy_boy
сообщение Jul 20 2018, 15:46
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 25-09-05
Из: Москва
Пользователь №: 8 922



Как показала практика просто сажать такие сигналы на прерывания таймера и инкрементировать переменную опасно. Простой дребезг, перебитый провод даст кучу ложных литров воды и займёт все процессорное время. Если на прерывание, то необходимо ставить аппаратный фильтр на определённую частоту, или вешать на обычный порт и фильтровать программно.
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 20 2018, 15:51
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



За uart надо подумать, но по-моему uart имеет определенную сетку скоростей, которая может не совпасть с частотой импульсов, которая к тому же вероятно будет "плавать", или я ошибаюсь?
Plain что мне даёт время переполнения счётчика, ровным счётом ничего. Оно достаточно большое чтобы не мешать работать остальным узлам.
Go to the top of the page
 
+Quote Post
Plain
сообщение Jul 20 2018, 16:19
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(Ga_ry @ Jul 20 2018, 18:51) *
что мне даёт время переполнения счётчика, ровным счётом ничего. Оно достаточно большое чтобы не мешать работать остальным узлам

Не понятно, Вы изрекли что-то положительное или что-то отрицательное? Нам за Вас радоваться или огорчаться? На всякий случай поясню, что всем остальным в мире такая конструкция давным давно даёт точное значение расхода.
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 20 2018, 17:29
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Plain а можете как радоваться так и огорчаться я не в праве запрещать.
Хотя если разобраться дельного я от вас так ничего и не услышал.
Go to the top of the page
 
+Quote Post
Plain
сообщение Jul 20 2018, 19:27
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Цитата(Ga_ry @ Jul 20 2018, 18:51) *
Оно достаточно большое чтобы не мешать работать остальным узлам

В начале темы Вам именно это и требовалось, а теперь ровно наоборот, Вы именно этим и недовольны.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 21 2018, 07:33
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(DAndy_boy @ Jul 20 2018, 18:46) *
Как показала практика просто сажать такие сигналы на прерывания таймера и инкрементировать переменную опасно. Простой дребезг, перебитый провод . . .

Какой "дребезг" у датчика Холла ? sm.gif
Перебитый провод .... Да..... "крыть" нечем, я пас .... sad.gif Еще коллапс Вселенной .....

Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 21 2018, 09:01
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ga_ry @ Jul 20 2018, 18:51) *
За uart надо подумать, но по-моему uart имеет определенную сетку скоростей, которая может не совпасть с частотой импульсов, которая к тому же вероятно будет "плавать", или я ошибаюсь?

Достаточно чтобы минимальная длительность регистрируемого импульса была не меньше длительности одного бита UART, и не более длительности символа UART за исключением последнего стоп-бита. И пауза между импульсами должна быть не менее длительности одного символа UART.
А скорость вашего UART-а вы программируете сами какую нужно.

Цитата(k155la3 @ Jul 21 2018, 10:33) *
Перебитый провод .... Да..... "крыть" нечем, я пас .... sad.gif Еще коллапс Вселенной .....

Любимый питомец кот Васька пожевал провод и насчитался за минуту объём озера Байкал. biggrin.gif
Go to the top of the page
 
+Quote Post
Ga_ry
сообщение Jul 21 2018, 09:45
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 494
Регистрация: 23-06-09
Из: Полтава, UA
Пользователь №: 50 579



Кот Васька уже предупреждён тапком по поводу проводов, но эта система недоступна Ваське. Она стоит на улице и находится в металлическом шкафу, а провода разведены в гофре.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jul 22 2018, 08:27
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Ga_ry @ Jul 21 2018, 12:45) *
Кот Васька уже предупреждён тапком по поводу проводов, но эта система недоступна Ваське. Она стоит на улице и находится в металлическом шкафу, а провода разведены в гофре.
Рядом с расходомером я поставил бы конвертер-трансивер в RS485. Это защита от помех и искажений прямоугольного сигнала в линии связи. Как реализовывать схему счета - зависит от точности счета объема-расхода, которую Вы желаете получить (с учетом инерционности потока итд). Самое простое решение - озадачить этим отдельный контроллер, в который прописывается уставка объема, на которой он должен выдать сигнал "стоп" на основной контроллер и клапан (возможно - сигнал должен сформироваться заранее, с учетом инерционности клапана-потока).

Google - RS485
Go to the top of the page
 
+Quote Post
murmur
сообщение Jul 22 2018, 10:05
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Цитата
питомец кот Васька пожевал провод

Ваську за это обработать в прерывании
Go to the top of the page
 
+Quote Post
vladec
сообщение Jul 23 2018, 07:08
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 3-10-05
Из: Москва
Пользователь №: 9 158



Какие то надуманные проблемы, таймерный счетчик то чем не устраивает? Это же все равно что счетчик снаружи, ни чем не хуже.
Go to the top of the page
 
+Quote Post
Baza
сообщение Jul 27 2018, 10:08
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 122
Регистрация: 16-05-05
Из: С-Пб
Пользователь №: 5 078



Приветствую, коллеги.
можно вклинюсь немножко в тему?
у меня похожая задачка, но с выподвыподвертом sm.gif
есть два одинаковых расходомера жидкости
допустим 1000имп=1литр
первый включен между бензонасосом и карбюратором
второй между карбюратором и бензобаком
надо выделить разностные импульсы, соответствующие мгновенному расходу топлива.
к сожалению, в программировании я от слова совсем никак.
есть ли аппаратная возможность или проще на процессоре всё же лепить?
Go to the top of the page
 
+Quote Post
Baza
сообщение Jul 27 2018, 11:17
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 122
Регистрация: 16-05-05
Из: С-Пб
Пользователь №: 5 078



вроде получилось

исключающее ИЛИ+фильтр+компаратор
Go to the top of the page
 
+Quote Post
Herz
сообщение Jul 28 2018, 09:36
Сообщение #25


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(Baza @ Jul 27 2018, 13:08) *
первый включен между бензонасосом и карбюратором
второй между карбюратором и бензобаком
надо выделить разностные импульсы, соответствующие мгновенному расходу топлива.

Это как? Бензин возвращается из карбюратора обратно в бензобак?
Go to the top of the page
 
+Quote Post
Baza
сообщение Jul 30 2018, 07:34
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 122
Регистрация: 16-05-05
Из: С-Пб
Пользователь №: 5 078



[off]
Цитата(Herz @ Jul 28 2018, 12:36) *
Это как? Бензин возвращается из карбюратора обратно в бензобак?

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

это уменьшает нагрузку на игольчатый клапан и дополнительно охлаждает карбюратор (правда не сильно это помогает) sm.gif

применяется на ВАЗ от 2108 , и на классике (втч Ниве 21213) с переходом на карбюраторы СОЛЕКС
[/off]
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jul 30 2018, 09:00
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Baza @ Jul 27 2018, 14:17) *
исключающее ИЛИ+фильтр+компаратор

Не работает так.
Точнее, в режимах "клапан полностью открыт, обратка не работает" и "клапан полностью закрыт, расход в обратке равен расходу в подаче" будут худо-бедно корректные показания.
Но если клапан приоткрыт, и оба расходомера крутятся, и крутятся с разными скоростями, эта схема с XOR'ом выдаст какое-то нереально большое значение.

Ставьте ардуину...
Если предположить расход 36 литров/час, это 0,01 л/сек, это с вашим расходомером всего 10 импульсов в секунду.
Можно тупо "в лоб" считать, ардуино-библиотеки с такими "скоростями" справятся.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Herz
сообщение Jul 30 2018, 10:46
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



В доисторические времена схемы вычитания частот успешно строились на логических элементах. Задача решалась сравнительно просто, если частоты отличались не более чем на 30 - 40% и в известную сторону.
Но и схемы, не имеющие таких ограничений, существуют. Например, схема, приведенная в книге В.С. Гутникова "Интегральная электроника ..." содержит лишь счётный триггер и две ячейки И-ИЛИ.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 11:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.03256 секунд с 7
ELECTRONIX ©2004-2016