Обявления

Для полноценной работы рекомендуется пройти регистрацию.

Рекламные сообщения будут удаляться вместе с пользователем. Что есть реклама - буду решать я.

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

Здесь только проекты на ATmega

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

Сообщение astron » 02 мар 2019 21:08

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

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

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

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

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

Алгоритм работы. Ниже приложу свое кривое творение в редакторе блок схем. Да, знаю что не по госту и выглядит страшно, но нарисовал как умел, просьба понять и простить) Плюс программа кривовата, прямо скажем. На рисунке забыл добавить одно условие для проверки, ниже об этом напишу.


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

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

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

Сообщение propell_ant » 02 мар 2019 22:12

Если заменить кнопки на емкостной сенсор, а переменный резистор померить и заменить на постоянный, то остается только проблема с "уплывающим" временем задержки. И с этой проблемой тоже можно побороться, но понадобится ваша схема на 555 с номиналами.
Я использую емкостные сенсоры на контроллере TTP223 - на односторонней плате делается прямоугольник в пару кв сантиметров, контроллер при прикосновении к плате выдает логическую 1. Очень удобно. Плату ставлю внутри пластмассового корпуса, а она реагирует на прикосновения снаружи.
propell_ant
Живу тут
 
Сообщения: 408
Зарегистрирован: 03 июн 2014 09:22

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

Сообщение astron » 03 мар 2019 00:20

Переменный резистор заменить на постоянный не выйдет, у нас довольно сильно скачет уровень грунтовых вод, поэтому каждый сезон приходится выставлять интервалы иногда по нескольку раз. Возможность удобной регулировки в любой момент должна сохраняться
astron
Частенько бываю
 
Сообщения: 32
Зарегистрирован: 10 апр 2017 00:22

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

Сообщение propell_ant » 05 мар 2019 20:29

Получается два сигнала на входе -
1. меандр или напряжение пропорциональное частоте меандра. И то и другое показывает скорость потока в попугаях.
2. сигнал от датчика переполнения бака

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

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

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

Сообщение IYra » 06 мар 2019 08:14

propell_ant писал(а):Получается два сигнала на входе -
1. меандр или напряжение пропорциональное частоте меандра. И то и другое показывает скорость потока в попугаях.
2. сигнал от датчика переполнения бака

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

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

Могу заняться
IYra
Живу тут
 
Сообщения: 712
Зарегистрирован: 01 фев 2012 19:36
Откуда: Санкт-Петербург

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

Сообщение astron » 06 мар 2019 20:07

propell_ant, IYra, было бы здорово попробовать. До начала сезона не смогу проверить прибор в боевых условиях по понятным причинам, но обкатать его на макетке с помощью кнопок и генератора импульсов на той же 555й можно запросто)

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

Можно конечно, но по задумке кнопка "Старт/стоп" одна, т. е. она же запускает насос и она же останавливает. Имхо, так проще, да и входы экономятся. Поплавковый датчик это уже своеобразный "ручник", если он в активном состоянии, то любые попытки нажатия "Старт/стоп" просто игнорируются.
astron
Частенько бываю
 
Сообщения: 32
Зарегистрирован: 10 апр 2017 00:22

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

Сообщение IYra » 07 мар 2019 20:04

astron писал(а):было бы здорово попробовать. До начала сезона не смогу проверить прибор в боевых условиях по понятным причинам, но обкатать его на макетке с помощью кнопок и генератора импульсов на той же 555й можно запросто)

Вот набросал в первом приближении. Напор воды отслеживается по напряжению(0-5в / 0-1023).
#define LEVEL 500 - то есть если напряжение на входе < 2.5v -воды нет
В Протеусе вроде все понятно по выводам
Вложения
Motor.rar
(30.39 КБ) Скачиваний: 22
IYra
Живу тут
 
Сообщения: 712
Зарегистрирован: 01 фев 2012 19:36
Откуда: Санкт-Петербург

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

Сообщение astron » 09 мар 2019 15:33

Скачал, проверил в симуляторе. Есть пара моментов, требующих исправления. Причем это я сам недоглядел, когда составлял алгоритм.
Хотелось бы, чтобы во время отсчёта паузы была возможность принудительно выйти в режим ожидания нажатием клавиши "Старт/стоп", не дожидаясь пока таймер дотикает до нуля.
Сейчас реакция на её нажатие в этот период работы программы весьма странная: то таймер опять начинает отсчёт с начала, то просто отсутствует реакция на нажатие кнопки. Кстати, с кнопкой "Уст. времени" при отсчёте времени паузы та же история. То нет реакции на нажатие, а то вдруг включается режим редактирования времени, хотя когда контроллер находится не в режиме ожидания (два прочерка) а в режиме налива, зайти в редактирование времени по идее не должно быть возможности. Скорее всего, всё вышеперечисленное есть глюк протеуса. На днях постараюсь собрать схему на стенде и погонять на реальном железе.
Также во время отсчёта паузы отсутствует реакция на показания поплавкового датчика. То есть светодиод "бак полон" зажигается конечно, но отсчёт идёт дальше как ни в чём ни бывало. Ситуация нештатная, но вдруг в бак дольют воду вручную до полной, пока там таймер тикает, и во включении насоса отпадёт необходимость. Желательно добавить выход в режим ожидания при появлении сигнала "бак полон".
Всё-таки хотелось бы иметь отдельный светодиод "Ошибка". Возможно, на него повешу пищалку с генератором или какой-нибудь другой исполнительный механизм. У нас ведь остались ещё свободные ноги PC2-PC5, может на какую-то из них повесить этот светодиод?
В остальном вся программа работает отлично!
astron
Частенько бываю
 
Сообщения: 32
Зарегистрирован: 10 апр 2017 00:22

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

Сообщение IYra » 10 мар 2019 09:13

astron писал(а):1.
Хотелось бы, чтобы во время отсчёта паузы была возможность принудительно выйти в режим ожидания нажатием клавиши "Старт/стоп", не дожидаясь пока таймер дотикает до нуля.
2.
Желательно добавить выход в режим ожидания при появлении сигнала "бак полон".
3.
Всё-таки хотелось бы иметь отдельный светодиод "Ошибка". Возможно, на него повешу пищалку с генератором или какой-нибудь другой исполнительный механизм. У нас ведь остались ещё свободные ноги PC2-PC5, может на какую-то из них повесить этот светодиод?

Поправил.
В Протеусе используется модель Mega8 в TQFP корпусе (32 вывода) Частота 8 Мгц внутренний генератор (без кварца)
Это так для уточнения
Вложения
Motor1.rar
(30.71 КБ) Скачиваний: 20
IYra
Живу тут
 
Сообщения: 712
Зарегистрирован: 01 фев 2012 19:36
Откуда: Санкт-Петербург

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

Сообщение propell_ant » 10 мар 2019 18:55

astron писал(а):Ситуация нештатная, но вдруг в бак дольют воду вручную до полной, пока там таймер тикает
Я всё ждал подобного замечания, если бы я делал такую систему себе на дачу, то сигнал с датчика переполнения я бы продублировал на реле насоса - чтобы насос при переполненном баке вообще не смог включиться. Контроллер штука темная, бывает и зависает, поди знай, в каком состоянии будут управляющие выходы.
propell_ant
Живу тут
 
Сообщения: 408
Зарегистрирован: 03 июн 2014 09:22

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

Сообщение astron » 11 мар 2019 06:25

IYra спасибо, вечером проверю!
propell_ant ну да, такая система защиты была в прошлой версии контроллера. Любые условия, останавливающие мотор, принудительно просаживали в ноль логическую линию управления реле запуска.
astron
Частенько бываю
 
Сообщения: 32
Зарегистрирован: 10 апр 2017 00:22

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

Сообщение astron » 18 мар 2019 00:02

Уважаемый IYra, я пару дней назад отправил Вам личное сообщение по поводу вознаграждения за помощь, ответа пока так и не получил :oops:
"Воплощать в металле" пока не начал - свободного времени мало. Через полмесяца отпуск, скорее всего тогда и займусь. Как сделаю, выложу сюда фото/видеоматериалы
astron
Частенько бываю
 
Сообщения: 32
Зарегистрирован: 10 апр 2017 00:22


Вернуться в ATmega



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3