Page 1 of 1

Контроллер насоса. Прошу помощи!

Posted: 02 Mar 2019 20:08
by astron
Доброго времени суток всем!
Однажды мне уже помогли отзывчивые люди на этом форуме, вынужден снова обратиться с просьбой о помощи( Имеется простой контроллер работы насоса на участке, собранный мной на дискретной рассыпухе, но в силу его невысокой надежности, хотелось бы перенести его функционал на МК. На паре других форумов мою просьбу помочь проигнорили, либо написали что-то из серии "напиши сам", но к сожалению в программировании не силён. Чуть-чуть знаю только ассемблер для АВР "со словарём" и имею общее представление о архитектуре этих МК. Ниже постараюсь как можно подробнее и доступнее написать что мне хотелось бы увидеть. И да, готов сделать автору прошивки материальное пожертвование в разумных пределах, на халяву не рассчитываю)

Небольшая преамбула: что, почему и зачем. Если не интересно, этот абзац можно пропустить)

Имеется приусадебный участок на болотистой почве. Ранее воду для полива брали в протекающем по границе ручье, но пару лет назад его перекрыли выше по течению, и пришлось задумываться о бурении скважины. Так как в силу расположения, загнать на участок тяжёлую технику нереально, пришлось бурить скважину вручную, самостоятельно. Вдвоём с товарищем смогли забуриться всего на 5 метров, ниже идёт зыбун, который без обсадной трубы и спец. оборудования мы пробить не смогли. В итоге скважина получилась хорошо отдающей воду, но мелкой. Как следствие, опущенный в неё насос "выхлёбывает" воду до дна минут за 10, после чего необходимо подождать ещё 5-10 минут чтобы она вновь наполнилась. Для нормального водоснабжения участка, сварил и поставил ёмкость для воды на две тонны, из которой уже самотёком идёт питание всего участка. Но дёргать туда-сюда насос при каждом наливе бочки несколько напрягает, поэтому мной на рассыпухе был собран контроллер для управления насосом, который и обеспечивал необходимый режим работы с выдерживанием пауз и обратной связью для контроля налива. Сперва всё было замечательно, но спустя полтора сезона контроллер начал ерундить, а потом и вовсе вышел из строя. Расследование показало, что из-за колебаний температуры и влажности "плывут" параметры временнЫх пауз (они у меня реализованы на 555таймерах), кроме того, возникает коррозия на подвижных элементах, таких как контакты кнопок и потенциометры. Покрытие платы лаком не помогло решить проблему полностью. Если кнопки ещё можно сделать герметично, то движки переменных резисторов загерметизировать в бытовых условиях довольно сложно. Так возникла мысль перевести весь контроллер с рассыпухи на МК, по идее для алгоритма его работы какой-нибудь Меги8 должно хватить за глаза, плюс можно будет добавить несколько фишек, повышающих удобство пользования.

Собственно об устройстве и периферии.

Для управления и контроля используются следующие линии:
Сигнал от поплавкового датчика уровня воды. 1 - бак заполнен под завязку, 0 - можно лить ещё.
Сигнал от датчика потока воды. Меандр, с частотой, пропорциональной скорости потока жидкости в трубе. А ля компьютерный кулер с тремя проводами. Меандр есть - вода течёт. Меандра нет или он ниже некоего порогового значения - в трубе сухо.
Сигналы от кнопок "Старт/стоп", "Уст. времени", + и - для управления самим контроллером.
Выходы на два семисегментных индикатора для отображения времени паузы между запусками насоса в минутах, редактирования этой паузы и т. п.
Выход на реле, включающее насос. 1 - включаем мотор, 0 - выключаем
Выходы на индикаторные светодиоды "Работа", "Ошибка" и "Бак полон".

Алгоритм работы. Ниже приложу свое кривое творение в редакторе блок схем. Да, знаю что не по госту и выглядит страшно, но нарисовал как умел, просьба понять и простить) Плюс программа кривовата, прямо скажем. На рисунке забыл добавить одно условие для проверки, ниже об этом напишу.
алгоритм2.jpg
Сперва коротко и простыми словами. При попытке запустить насос проверяем, не заполнен ли бак, и если нет, то пробуем стартовать. Если после старта выясняется, что воды в скважине нет, пробуем ещё два раза через некоторое время, после чего прекращаем попытки и выдаём ошибку. Если вода есть, качаем её, пока она не закончится, затем делаем паузу, после паузы пытаемся качать снова и так по кругу до тех пор, пока либо бак не заполнится, либо вода в скважине не кончится совсем (или что-то сломается), либо юзер не отдаст принудительный приказ "Отставить!")

Теперь более развёрнуто и нудно) После подачи питания инициализируем периферию, обнуляем всё что нужно и уходим в бесконечный цикл. В цикле опрашиваем поплавковый датчик и кнопки "Старт/стоп" и "Уст. времени". Если от датчика приходит единица, зажигаем светодиод "Бак полон", если ноль - этот светодиод гасим.
Если была нажата кнопка "Уст. времени", переходим в режим задания продолжительности паузы между включениями насоса. Забираем из eeprom прошлое значение (если есть) и выводим на семисегментный индикатор в виде мигающего двухзначного числа. Пауза задается в целых числах минут от 5 до 30 с шагом в 1 минуту. При отсутствии нажатий кнопок в течение 5 секунд или повторном нажатии кнопки "Уст. времени", контроллер возвращается в режим ожидания, при этом новое значение паузы записывается в eeprom. Перейти в режим установки времени если насос уже запущен в автоматическом режиме нельзя.
Если была нажата кнопка "Старт/стоп", пытаемся перейти в режим автоматической работы. Проверяем условие заполненности бака, если он полон (с датчика приходит единица), то вылетаем обратно в режим ожидания, если не полон идём дальше. В алгоритме предусмотрена индикация ошибки работы контроллера при большом количестве неудачных запусков и прерывание его работы. Для этого вводится программный счётчик неудачных запусков, который обнуляется сразу после "запускающего" нажатия кнопки "Старт/стоп". Также здесь же обнуляется флаг "Ошибка". Перед включением насоса проверяем этот счётчик на переполнение больше трёх, и если таковое имеется, зажигаем светодиод "Ошибка" и вываливаемся в режим ожидания. Если же счётчик не переполнен, включаем насос одновременно зажигая светодиод "Работа", выдерживаем паузу около трех секунд для того, чтобы насос раскрутился и вода (если она есть) достигла турбинки датчика потока воды. Далее проверяем, имеется ли меандр на датчике потока воды. Если его нет или частота слишком низкая, значит либо в скважине нет воды, либо есть повреждение какого-то из узлов системы. *Тут надо отметить, что я пока не могу сказать какая именно частота импульсов появляется на выходе датчика при нормальной работе насоса, так как в старом контроллере я контролировал наличие потока аналоговым способом: ставил РЦ-цепочку на выход датчика, а с неё заводил получившийся аналоговый сигнал на вход компаратора с гистерезисом и регулировкой порога срабатывания, соответственно выставляя оптимальный порог на глаз. На выходе получался логический сигнал "есть вода - нет воды" Надо будет собрать стенд и измерить точную частоту осциллографом. Хотя не проблема прикрутить такую же схемку к обычному входу МК для упрощения программы* Эта ситуация определяется как неудачный запуск. Выключаем насос, одновременно погасив светодиод "Работа", инкрементируем счётчик неудачных запусков и выжидаем паузу, продолжительность которой мы выставили в разделе установки времени. При этом на сегментном индикаторе показываются убывающие цифры минут. По достижению нуля возвращаемся в точку перед проверкой счётчика неудачных запусков. Для наглядности см. картинку с алгоритмом.
Если же запуск прошёл удачно, т. е. на выходе датчика потока воды появляется меандр нужной частоты, начинаем крутиться в цикле, одновременно отслеживая три условия: 1) Не нажата ли кнопка "Старт/стоп", т. е. нет ли попытки остановить программу автоматического налива принудительно. Если да, то вырубаем насос и светодиод "Работа" и уходим в режим ожидания. 2) Не поступил ли сигнал единицы с датчика переполнения бака. Если поступил, также вырубаем насос и уходим в режим ожидания. 3) Не снизилась ли частота меандра с датчика потока воды ниже порогового значения, т. е не осушили ли мы скважину в процессе работы насоса. Если да, то вырубаем насос и выжидаем паузу, как это описано в предыдущем абзаце. Затем возвращаемся в точку программы перед проверкой счётчика неудачных запусков. Конечно в алгоритме не описаны разные мелочи вроде программного антидребезга кнопок и датчиков и т. п. На самом деле болтовни здесь больше, чем непосредственно алгоритма работы)
Вот такая "портянка" получилась) Прошу прощения за много букв. Буду очень благодарен, если кто-то из форумчан поможет мне с реализацией кода для МК. Думаю, данный контроллер насоса мог бы пригодиться не только мне, но и другим людям, оказавшимся в сходной ситуации. Спасибо, что прочитали)

Re: Контроллер насоса. Прошу помощи!

Posted: 02 Mar 2019 21:12
by propell_ant
Если заменить кнопки на емкостной сенсор, а переменный резистор померить и заменить на постоянный, то остается только проблема с "уплывающим" временем задержки. И с этой проблемой тоже можно побороться, но понадобится ваша схема на 555 с номиналами.
Я использую емкостные сенсоры на контроллере TTP223 - на односторонней плате делается прямоугольник в пару кв сантиметров, контроллер при прикосновении к плате выдает логическую 1. Очень удобно. Плату ставлю внутри пластмассового корпуса, а она реагирует на прикосновения снаружи.

Re: Контроллер насоса. Прошу помощи!

Posted: 02 Mar 2019 23:20
by astron
Переменный резистор заменить на постоянный не выйдет, у нас довольно сильно скачет уровень грунтовых вод, поэтому каждый сезон приходится выставлять интервалы иногда по нескольку раз. Возможность удобной регулировки в любой момент должна сохраняться

Re: Контроллер насоса. Прошу помощи!

Posted: 05 Mar 2019 19:29
by propell_ant
Получается два сигнала на входе -
1. меандр или напряжение пропорциональное частоте меандра. И то и другое показывает скорость потока в попугаях.
2. сигнал от датчика переполнения бака

кнопка стоп на самом деле может располагаться на одной линии с датчиком переполнения - для контроллера это одинаковая команда безусловного прекращения работы насоса.

Если требуется всего два входа, то можно взять за основу термостат хардлока на меге8 с кварцем.
Настройки параметров в термостате уже есть и работают хорошо, это добрая половина вашей блок-схемы.
Аналоговый сигнал от датчика потока можно измерить мегой и сравнить с пороговым значением. Порог настраиваемый, с гистерезисом - этим решается вопрос с попугаями, но придется выводить на дисплей измеряемое значение, видимо в десятых долях вольта.
Как вам такой вариант?
Сразу предупреждаю у меня времени на такой проект еще долго не появится.

Re: Контроллер насоса. Прошу помощи!

Posted: 06 Mar 2019 07:14
by IYra
propell_ant wrote:Получается два сигнала на входе -
1. меандр или напряжение пропорциональное частоте меандра. И то и другое показывает скорость потока в попугаях.
2. сигнал от датчика переполнения бака

кнопка стоп на самом деле может располагаться на одной линии с датчиком переполнения - для контроллера это одинаковая команда безусловного прекращения работы насоса.

Если требуется всего два входа, то можно взять за основу термостат хардлока на меге8 с кварцем.
Могу заняться

Re: Контроллер насоса. Прошу помощи!

Posted: 06 Mar 2019 19:18
by astron
propell_ant, IYra, было бы здорово попробовать. До начала сезона не смогу проверить прибор в боевых условиях по понятным причинам, но обкатать его на макетке с помощью кнопок и генератора импульсов на той же 555й можно запросто)

Добавлено спустя 11 минут 22 секунды:
propell_ant wrote:кнопка стоп на самом деле может располагаться на одной линии с датчиком переполнения - для контроллера это одинаковая команда безусловного прекращения работы насоса.
Можно конечно, но по задумке кнопка "Старт/стоп" одна, т. е. она же запускает насос и она же останавливает. Имхо, так проще, да и входы экономятся. Поплавковый датчик это уже своеобразный "ручник", если он в активном состоянии, то любые попытки нажатия "Старт/стоп" просто игнорируются.

Re: Контроллер насоса. Прошу помощи!

Posted: 07 Mar 2019 19:04
by IYra
astron wrote:было бы здорово попробовать. До начала сезона не смогу проверить прибор в боевых условиях по понятным причинам, но обкатать его на макетке с помощью кнопок и генератора импульсов на той же 555й можно запросто)
Вот набросал в первом приближении. Напор воды отслеживается по напряжению(0-5в / 0-1023).
#define LEVEL 500 - то есть если напряжение на входе < 2.5v -воды нет
В Протеусе вроде все понятно по выводам

Re: Контроллер насоса. Прошу помощи!

Posted: 09 Mar 2019 14:33
by astron
Скачал, проверил в симуляторе. Есть пара моментов, требующих исправления. Причем это я сам недоглядел, когда составлял алгоритм.
Хотелось бы, чтобы во время отсчёта паузы была возможность принудительно выйти в режим ожидания нажатием клавиши "Старт/стоп", не дожидаясь пока таймер дотикает до нуля.
Сейчас реакция на её нажатие в этот период работы программы весьма странная: то таймер опять начинает отсчёт с начала, то просто отсутствует реакция на нажатие кнопки. Кстати, с кнопкой "Уст. времени" при отсчёте времени паузы та же история. То нет реакции на нажатие, а то вдруг включается режим редактирования времени, хотя когда контроллер находится не в режиме ожидания (два прочерка) а в режиме налива, зайти в редактирование времени по идее не должно быть возможности. Скорее всего, всё вышеперечисленное есть глюк протеуса. На днях постараюсь собрать схему на стенде и погонять на реальном железе.
Также во время отсчёта паузы отсутствует реакция на показания поплавкового датчика. То есть светодиод "бак полон" зажигается конечно, но отсчёт идёт дальше как ни в чём ни бывало. Ситуация нештатная, но вдруг в бак дольют воду вручную до полной, пока там таймер тикает, и во включении насоса отпадёт необходимость. Желательно добавить выход в режим ожидания при появлении сигнала "бак полон".
Всё-таки хотелось бы иметь отдельный светодиод "Ошибка". Возможно, на него повешу пищалку с генератором или какой-нибудь другой исполнительный механизм. У нас ведь остались ещё свободные ноги PC2-PC5, может на какую-то из них повесить этот светодиод?
В остальном вся программа работает отлично!

Re: Контроллер насоса. Прошу помощи!

Posted: 10 Mar 2019 08:13
by IYra
astron wrote: 1.
Хотелось бы, чтобы во время отсчёта паузы была возможность принудительно выйти в режим ожидания нажатием клавиши "Старт/стоп", не дожидаясь пока таймер дотикает до нуля.
2.
Желательно добавить выход в режим ожидания при появлении сигнала "бак полон".
3.
Всё-таки хотелось бы иметь отдельный светодиод "Ошибка". Возможно, на него повешу пищалку с генератором или какой-нибудь другой исполнительный механизм. У нас ведь остались ещё свободные ноги PC2-PC5, может на какую-то из них повесить этот светодиод?
Поправил.
В Протеусе используется модель Mega8 в TQFP корпусе (32 вывода) Частота 8 Мгц внутренний генератор (без кварца)
Это так для уточнения

Re: Контроллер насоса. Прошу помощи!

Posted: 10 Mar 2019 17:55
by propell_ant
astron wrote:Ситуация нештатная, но вдруг в бак дольют воду вручную до полной, пока там таймер тикает
Я всё ждал подобного замечания, если бы я делал такую систему себе на дачу, то сигнал с датчика переполнения я бы продублировал на реле насоса - чтобы насос при переполненном баке вообще не смог включиться. Контроллер штука темная, бывает и зависает, поди знай, в каком состоянии будут управляющие выходы.

Re: Контроллер насоса. Прошу помощи!

Posted: 11 Mar 2019 05:25
by astron
IYra спасибо, вечером проверю!
propell_ant ну да, такая система защиты была в прошлой версии контроллера. Любые условия, останавливающие мотор, принудительно просаживали в ноль логическую линию управления реле запуска.

Re: Контроллер насоса. Прошу помощи!

Posted: 17 Mar 2019 23:02
by astron
Уважаемый IYra, я пару дней назад отправил Вам личное сообщение по поводу вознаграждения за помощь, ответа пока так и не получил :oops:
"Воплощать в металле" пока не начал - свободного времени мало. Через полмесяца отпуск, скорее всего тогда и займусь. Как сделаю, выложу сюда фото/видеоматериалы