Страница 1 из 2
Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 08:38:33
brusel2
Здраствуйте. Для включения насоса (откачка канализации) по двум датчикам (нижний и высокий уровень) сделал управление на микроконтролере по такой программе:
Спойлер
Код: Выделить всё
#define OUT PB1 // выход на помпу
#define butHIGH PB3 //датчик HIGH
#define butLOW PB4 //датчика LOW
#define butUSER PB2 //кнопка ручного режима
#define LED PB0 //индикатор ручного режима
boolean B_HIGH, B_LOW, B_USER, MOTOR = 0;
//unsigned long timer;
void startPomp() { //функция запуск помпи
digitalWrite(OUT, HIGH);
digitalWrite(LED, HIGH);
}
void stopPomp() { //функция остановки помпи
digitalWrite(OUT, LOW);
digitalWrite(LED, LOW);
}
void setup() {
pinMode(butLOW, INPUT_PULLUP);
pinMode(butHIGH, INPUT_PULLUP);
pinMode(butUSER, INPUT_PULLUP);
pinMode(OUT, OUTPUT);
pinMode(LED, OUTPUT);
}
void loop() {
B_HIGH = !digitalRead(butHIGH); // считать текущее положение датчика HIGH
B_LOW = !digitalRead(butLOW); // считать текущее положение датчика LOW
B_USER = digitalRead(butUSER); // считать текущее положение датчика USER
delay(100);
if(B_USER == false){
startPomp();
}
else
if (B_HIGH == false & B_LOW == false) {
digitalWrite(OUT, HIGH);
}
else
if (B_HIGH == true & B_LOW == true) {
stopPomp();
}
}
Но, как показала практика, периодически микроконтролер ложно срабатывает из-за внешних наводок. Думаю нужно сделать чтоб по таймеру (раз в 5 мин) проверял состояние датчиков. Вот переделал код, в протеусе работает, подскажите на ошибки. И еще, помогите добавить кнопку для включения в ручном режиме (если датчики выйдут из строя) и функцию отключение выхода при ложном срабатывании (при долгом включении может сгореть обмотка пускателя):
Спойлер
Код: Выделить всё
/*
* Контролер фекального насоса.
*/
#define F_CPU 1200000UL
#define OUT PB1
#define butHIGH PB3
#define butLOW PB4
#define butUSER PB2
#define LED PB0
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned char timer1 = 20; //установка времени ТМ/4 5 секунд
//unsigned char motor=0;
volatile unsigned char temp=0;
// Оброботчик прерывания по таймеру TIMER0
ISR(TIM0_OVF_vect){
temp++;
}
int main(void)
{
// Датчики
DDRB &= ~((1<<butLOW)|(1<<butHIGH)|(1<<butUSER)); // входы
PORTB |= (1<<butLOW)|(1<<butHIGH)|(1<<butUSER); // подтянуты
// Выход
DDRB |= (1<<OUT)|(1<<LED); // выход
PORTB &= ~(1<<OUT)|~(1<<LED); // выключен
// Настраиваем таймер
TIMSK0 = (1<<TOIE0); // Включаем таймер TIMER0
TCCR0B = (1<<CS02) | (1<<CS00); // Пределитель таймера на 1/1024
// Задаем режим сна
MCUCR &= ~(1<<SM1); // idle mode
MCUCR &= ~(1<<SM0); // idle mode
MCUCR |= (1<<SE);
sei();
while (1)
{
// Засываем до прерывания по таймеру
asm("sleep");
// Таймер сработал
TIMSK0 &= ~ (1<<TOIE0); // Останавливаем TIMER0
if( temp >= timer1 )
{
if ( (PINB & (1<<butLOW)) && (PINB & (1<<butHIGH)) ) // если сработали нижний и верхний датчики (високий уровень)
{
PORTB |= (1<<OUT); // ПУСК насоса
}
temp=0;
}
if (!(PINB & (1<<butLOW))) // если сработал нижний датчик
{
PORTB &= ~(1<<OUT); // СТОП насоса
}
TIMSK0 = (1<<TOIE0); // Включаем таймер TIMER0
sei();
}
return 0;
}
Заранее спасибо!
Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 09:25:18
Ivanoff-iv
ууу...каналья....тысяча червей!

а как сделаны сами контакты? на КНС делали всяко - датчики мрут от ядовитости среды, собрали поплавок из огнетушителя и длинный шток туда, где меньше испарений, там магнит и герконы.... (это хоть както работало...)
для воды делал уровнемеры на тини13 с ёмкостным измерением, а от наводок хорошо помогает перепроверка (проверил несколько раз, если всё 0, значит уровень точно низкий, если всё 1, значит высокий, а если и те и те, то такой замер игнорируем) сами замеры раз в секунду, если мотор проработает секунд на 5-10 дольше положенного, то ничего страшного...
ограничение времени работы мотора тоже делается элементарно - пока мотор работает => считает счётчик...
а там или отключение или сигнализация
Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 11:10:00
Wladimir_TS
Герконы и магнит надо заливать в брусочки из эпоксидки.... Поплавок лучше полиэтилен - он самый стойкий. Емкостные датчики хорошо работают только по чистой воде. По грязной поплавок, причем поворотный с узлом поворота выше максимального уровня или дистанционный - ультразвуковой при больших перепадах уровня.
Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 11:13:31
BOB51
Скорее проблемы с самими датчиками...
Как оные реализованы?

Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 12:11:09
Demiurg
Угу, МК по кмоп технологии без опторазвязки. Конечно будут сбои от любой наводки, любой помехи.
Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 12:31:25
NStorm
Если именно наводки, аналогичные дребезгу контактов - то и решайте их как антидребезг программный делается. Вы же проверяете хоть и раз в 5 минут, а всё-равно только один раз. Где гарантия, что не словите наводку за этот один раз? Надо в течение определенного времени следить за состоянием пина. Вас вообще устроит, что насос может откачать всё, и еще будет 5 минут и более работать (из-за того же "дребезга") пока МК спит?
Предусмотрите внештатные ситуации. Что делать, например, если верхний датчик сработал, а нижний как бы нет (отвалился)? По хорошему надо сигнализировать неисправность и наверное кратковременно включать насос до пропадания сигнала с верхнего датчика или по таймеру. Так во всяком случае переполнения резервуара избежите.
Re: Контролер насоса на Attini13
Добавлено: Вт июн 16, 2020 19:21:00
Самсусамыч
[uquote="brusel2",url="/forum/viewtopic.php?p=3855809#p3855809"]Здраствуйте. Для включения насоса (откачка канализации) по двум датчикам (нижний и высокий уровень) сделал управление на микроконтролере[/uquote]
Насколько надёжны Ваши датчики уровня? Если датчики срабатывают без замечаний, то надёжный алгоритм работы насоса написать не сложно (могу предложить свой вариант алгоритма).

Что из себя представляют датчики?
Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 08:28:47
brusel2
Wladimir_TS писал(а):Как оные реализованы?
датчики геркон, герметичные (мадеинКитая). Выход МК идет на оптопару, так как делал управление на симисторе. Симистор долго не выдержал, моЩных долго ждать), заменил на транзистор + реле и пускатель. Так как длина шлейфа датчиков около 10 м, на входах МК поставил конденсатор 103 и стабилитрон 4,7В. Пока без наводок. Блок питания на 5 В от зарядки.
Demiurg писал(а):Вас вообще устроит, что насос может откачать всё, и еще будет 5 минут и более работать (из-за того же "дребезга") пока МК спит?
По коду, если работает насос МК не спит. На крайняк насос с поплавком, отключится.
Добавлено after 1 hour 16 minutes 7 seconds:
NStorm писал(а): Что делать, например, если верхний датчик сработал, а нижний как бы нет (отвалился)? По хорошему надо сигнализировать неисправность и наверное кратковременно включать насос до пропадания сигнала с верхнего датчика или по таймеру. Так во всяком случае переполнения резервуара избежите.
Тут Вы правы, не предусмотрел
Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 08:49:17
Самсусамыч
Ваше устройство я бы предложил сделать по такой схеме:
Спойлер

Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 09:14:43
BOB51
Одно замечание...
Удаленные контактные датчики (независимо механика или электронный ключ) предпочтительно кормить от источника тока...
К примеру...
Спойлер

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

но... оное чудо контактное, и работало на долив водички (при размещении не далее 2 метров от датчиков)...

Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 09:36:42
Самсусамыч
[uquote="BOB51",url="/forum/viewtopic.php?p=3856213#p3856213"]Одно замечание...
Удаленные контактные датчики (независимо механика или электронный ключ) предпочтительно кормить от источника тока...[/uquote]
Это заблуждение.

В промышленности я не встречал использование источников тока для дискретных сигналов.

Все дискретные сигналы организованы так как я нарисовал.

Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 11:08:57
BOB51
20-мА токовая петля...
Такое подключение снимает вопрос подбора балластного резистора в зависимости от длины линии связи и снижает требования к источнику питания.
Если решение удачно для линий связи, то почему бы и не использовать в относительно "медленном" режиме?
Тем более, что затраты минимальны - LM317 да резистор 68 ом.

Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 12:43:08
Самсусамыч
Унифицированный сигнал 4 – 20 мА, 0 – 20 мА, используется для передачи аналоговых сигналов, а не дискретных. Для входных цепей дискретных сигналов как правило используют оптопары. Это и гальваническая развязка и некая помехоустойчивость. Так как оптопара работает в широком диапазоне токов, то нет никакой необходимости использовать источник тока.

Даже при удалении дискретного датчика на 1000 м и при среднем сопротивлении провода 1 Ом/м, то дополнительное сопротивление в 1 кОм никак не повлияет на работоспособность входной схемы.

Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 14:05:38
Demiurg
ТС. Напиши здесь что-то вроде ТЗ. Как должен работать насос. О программе ни слова. Ты хочешь готовый продукт. Вот и пиши, как он должен работать. Датчики, насос, кнопки, светодиоды.
Re: Контролер насоса на Attini13
Добавлено: Ср июн 17, 2020 15:30:48
BOB51
Застращали топикстартера...

Re: Контролер насоса на Attini13
Добавлено: Чт июн 18, 2020 21:09:21
Самсусамыч
Вот немного загрустил… и чтобы развлечься написал алгоритм управления насосом для выше предложенной мной схемы:
https://radiokot.ru/forum/viewtopic.php ... 1#p3856201
Традиционно, МК тактируется на заводских установках (1,2 МГц), прошивать фьюзы не нужно.
Pump.hex
Краткое описание алгоритма:
Насос работает по датчикам уровня. При замыкании верхнего уровня включается насос на откачку. Если контакт нижнего уровня разомкнут, то устройство считает это как неисправность датчика нижнего уровня и продолжительность работы насоса составит 5 минут. Если датчик нижнего уровня был замкнут, то насос будет работать пока контакты нижнего уровня не разомкнутся. При остановке насоса по любой причине, повторный запуск осуществится только после 5 минутного отдыха.
При ручном управлении включения насоса от кнопки (кратковременно нажать кнопку), включается ручной режим. Насос в данном режиме будет работать до повторного нажатия на кнопку. Повторное нажатие отключает насос и снимает ручной режим. При ручном режиме состояние датчиков не контролируется.
Светодиод: Сигнализирует о включении или отключении насоса. Если светодиод мигает, то насос работает по таймеру.
Re: Контролер насоса на Attini13
Добавлено: Пт июн 19, 2020 10:48:59
dgrett
Датчики лучше включать как НЗ контакты. Что будет, если отгниёт провод верхнего датчика? Потоп. Датчиков надо 3 штуки, один аварийный.
Re: Контролер насоса на Attini13
Добавлено: Пт июн 19, 2020 12:31:34
brusel2
Самсусамыч, код можете выложить? В будущем переделаю подключение датчиков по Вашей схеме. Сейчас пока работает. Еще вопрос: блок питания для МК и реле лучше сделать на трансформаторе или оставить импульсное?
Re: Контролер насоса на Attini13
Добавлено: Пт июн 19, 2020 14:45:12
Самсусамыч
[uquote="dgrett",url="/forum/viewtopic.php?p=3857119#p3857119"]Датчики лучше включать как НЗ контакты.[/uquote]
Чем лучше?
dgrett писал(а):Что будет, если отгниёт провод верхнего датчика? Потоп. Датчиков надо 3 штуки, один аварийный.
Что будет если отгниёт аварийный датчик? Потоп.

Так можно до бесконечности датчики дублировать… чтобы таких случаев не было, проводят периодически ревизию…
Добавлено after 2 minutes 59 seconds:
[uquote="brusel2",url="/forum/viewtopic.php?p=3857196#p3857196"]блок питания для МК и реле лучше сделать на трансформаторе или оставить импульсное?[/uquote]
Если оба БП выполнены по Феншую, то необходимо отталкиваться от качества питающего напряжения. Если и в данном случае всё нормуль, то без разницы какой использовать БП.
код можете выложить?
Легко…
исходник на АВ (Algorithm Builder):
brusel2.zip
Re: Контролер насоса на Attini13
Добавлено: Пт июн 19, 2020 18:55:14
dgrett
Если отгниёт какой угодно датчик с норм замкнутыми контактами - это авария. Сирена, сигнализация, фейерверк и тд. что угодно. Встречались мне разработчики, спроектировавшие аварийный стоп (красный гриб) с Н.О. контактами. Можешь хоть всю кнопку спи...ть - хрена ты остановишь станок. Заставил переделывать. Подумай сам(сусамыч).
Из того же геркона с НО делается датчик с НЗ. То есть понадобится реально 3 датчика, а не 1 с тремя герконами и одним поплавком. Нижний датчик также должен размыкаться по достижении нижнего уровня.
Геркон надо брать побольше(есть по 4-5 см длиной). Мелкие малонадёжные. Уже их туеву хучу поменял в охранных сигнализациях.
Добавлено after 16 minutes 31 second:
А по нормальному ставить по 2 датчика на уровень. Тиня 13 столько ног не имеет, но можно извратиться с регистром. Тогда и 3х ног хватит. И анализ датчиков позволит решить, а не отвалился ли часом датчик. Трудно только на один уровень установить. Или герконы датчиков одного уровня соединить последовательно.
Добавлено after 35 minutes 19 seconds:
Самсусамыч, в Вашей схеме надо бы подмять линию к земле резюком параллельно конду 100n. И питалово можно до 24В поднять. Резюк по минимуму наводок и потреблению (если важно). Я, правда, слаб в схемотехнике, но чисто интуитивно.
Добавлено after 1 hour 22 minutes 53 seconds:
Я тут заикнулся про охранную сигнализацию. Так вот, централь знает, датчик в порядке, отвалился, закорочен, замкнут, разомкнут. Для этого убираем РС817, последовательно с герконом резюк и параллельно резюк. Возле контроллера обвешиваем кондами, придавливаем к земле и подаём на вход АЦП. Резисторы рассчитать так, чтоб определить перечисленные выше состояния. Резисторы непосредственно у датчика.