Контролер насоса на Attini13

Обсуждаем контроллеры компании Atmel.
brusel2
Открыл глаза
Сообщения: 43
Зарегистрирован: Ср ноя 09, 2016 13:25:39

Контролер насоса на Attini13

Сообщение 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;
}
Заранее спасибо!
Вложения
таймер.zip
(85.83 КБ) 212 скачиваний
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Контролер насоса на Attini13

Сообщение Ivanoff-iv »

ууу...каналья....тысяча червей! :)
а как сделаны сами контакты? на КНС делали всяко - датчики мрут от ядовитости среды, собрали поплавок из огнетушителя и длинный шток туда, где меньше испарений, там магнит и герконы.... (это хоть както работало...)
для воды делал уровнемеры на тини13 с ёмкостным измерением, а от наводок хорошо помогает перепроверка (проверил несколько раз, если всё 0, значит уровень точно низкий, если всё 1, значит высокий, а если и те и те, то такой замер игнорируем) сами замеры раз в секунду, если мотор проработает секунд на 5-10 дольше положенного, то ничего страшного...
ограничение времени работы мотора тоже делается элементарно - пока мотор работает => считает счётчик...
а там или отключение или сигнализация
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Wladimir_TS
Друг Кота
Сообщения: 5066
Зарегистрирован: Вс фев 15, 2009 01:04:58
Откуда: Kaluga

Re: Контролер насоса на Attini13

Сообщение Wladimir_TS »

Герконы и магнит надо заливать в брусочки из эпоксидки.... Поплавок лучше полиэтилен - он самый стойкий. Емкостные датчики хорошо работают только по чистой воде. По грязной поплавок, причем поворотный с узлом поворота выше максимального уровня или дистанционный - ультразвуковой при больших перепадах уровня.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15548
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контролер насоса на Attini13

Сообщение BOB51 »

Скорее проблемы с самими датчиками...
Как оные реализованы?
:roll:
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Контролер насоса на Attini13

Сообщение Demiurg »

Угу, МК по кмоп технологии без опторазвязки. Конечно будут сбои от любой наводки, любой помехи.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Контролер насоса на Attini13

Сообщение NStorm »

Если именно наводки, аналогичные дребезгу контактов - то и решайте их как антидребезг программный делается. Вы же проверяете хоть и раз в 5 минут, а всё-равно только один раз. Где гарантия, что не словите наводку за этот один раз? Надо в течение определенного времени следить за состоянием пина. Вас вообще устроит, что насос может откачать всё, и еще будет 5 минут и более работать (из-за того же "дребезга") пока МК спит?

Предусмотрите внештатные ситуации. Что делать, например, если верхний датчик сработал, а нижний как бы нет (отвалился)? По хорошему надо сигнализировать неисправность и наверное кратковременно включать насос до пропадания сигнала с верхнего датчика или по таймеру. Так во всяком случае переполнения резервуара избежите.
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

[uquote="brusel2",url="/forum/viewtopic.php?p=3855809#p3855809"]Здраствуйте. Для включения насоса (откачка канализации) по двум датчикам (нижний и высокий уровень) сделал управление на микроконтролере[/uquote]
Насколько надёжны Ваши датчики уровня? Если датчики срабатывают без замечаний, то надёжный алгоритм работы насоса написать не сложно (могу предложить свой вариант алгоритма). :) Что из себя представляют датчики?
brusel2
Открыл глаза
Сообщения: 43
Зарегистрирован: Ср ноя 09, 2016 13:25:39

Re: Контролер насоса на Attini13

Сообщение brusel2 »

Wladimir_TS писал(а):Как оные реализованы?
датчики геркон, герметичные (мадеинКитая). Выход МК идет на оптопару, так как делал управление на симисторе. Симистор долго не выдержал, моЩных долго ждать), заменил на транзистор + реле и пускатель. Так как длина шлейфа датчиков около 10 м, на входах МК поставил конденсатор 103 и стабилитрон 4,7В. Пока без наводок. Блок питания на 5 В от зарядки.
Demiurg писал(а):Вас вообще устроит, что насос может откачать всё, и еще будет 5 минут и более работать (из-за того же "дребезга") пока МК спит?
По коду, если работает насос МК не спит. На крайняк насос с поплавком, отключится.

Добавлено after 1 hour 16 minutes 7 seconds:
NStorm писал(а): Что делать, например, если верхний датчик сработал, а нижний как бы нет (отвалился)? По хорошему надо сигнализировать неисправность и наверное кратковременно включать насос до пропадания сигнала с верхнего датчика или по таймеру. Так во всяком случае переполнения резервуара избежите.
Тут Вы правы, не предусмотрел
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

Ваше устройство я бы предложил сделать по такой схеме: :)
СпойлерИзображение
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15548
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контролер насоса на Attini13

Сообщение BOB51 »

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

Для простого водяного бака в древни времена было еще вот такое чудейко:
СпойлерИзображение
но... оное чудо контактное, и работало на долив водички (при размещении не далее 2 метров от датчиков)...
:roll:
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

[uquote="BOB51",url="/forum/viewtopic.php?p=3856213#p3856213"]Одно замечание...
Удаленные контактные датчики (независимо механика или электронный ключ) предпочтительно кормить от источника тока...[/uquote]
Это заблуждение. :) В промышленности я не встречал использование источников тока для дискретных сигналов. :dont_know: Все дискретные сигналы организованы так как я нарисовал. :)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15548
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контролер насоса на Attini13

Сообщение BOB51 »

20-мА токовая петля...
:roll:
Такое подключение снимает вопрос подбора балластного резистора в зависимости от длины линии связи и снижает требования к источнику питания.
Если решение удачно для линий связи, то почему бы и не использовать в относительно "медленном" режиме?
Тем более, что затраты минимальны - LM317 да резистор 68 ом.
8)
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

Унифицированный сигнал 4 – 20 мА, 0 – 20 мА, используется для передачи аналоговых сигналов, а не дискретных. Для входных цепей дискретных сигналов как правило используют оптопары. Это и гальваническая развязка и некая помехоустойчивость. Так как оптопара работает в широком диапазоне токов, то нет никакой необходимости использовать источник тока. :dont_know: Даже при удалении дискретного датчика на 1000 м и при среднем сопротивлении провода 1 Ом/м, то дополнительное сопротивление в 1 кОм никак не повлияет на работоспособность входной схемы. :)
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Контролер насоса на Attini13

Сообщение Demiurg »

ТС. Напиши здесь что-то вроде ТЗ. Как должен работать насос. О программе ни слова. Ты хочешь готовый продукт. Вот и пиши, как он должен работать. Датчики, насос, кнопки, светодиоды.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15548
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Контролер насоса на Attini13

Сообщение BOB51 »

Застращали топикстартера...
:(
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

Вот немного загрустил… и чтобы развлечься написал алгоритм управления насосом для выше предложенной мной схемы:
https://radiokot.ru/forum/viewtopic.php ... 1#p3856201
Традиционно, МК тактируется на заводских установках (1,2 МГц), прошивать фьюзы не нужно.
Pump.hex
Краткое описание алгоритма:
Насос работает по датчикам уровня. При замыкании верхнего уровня включается насос на откачку. Если контакт нижнего уровня разомкнут, то устройство считает это как неисправность датчика нижнего уровня и продолжительность работы насоса составит 5 минут. Если датчик нижнего уровня был замкнут, то насос будет работать пока контакты нижнего уровня не разомкнутся. При остановке насоса по любой причине, повторный запуск осуществится только после 5 минутного отдыха.
При ручном управлении включения насоса от кнопки (кратковременно нажать кнопку), включается ручной режим. Насос в данном режиме будет работать до повторного нажатия на кнопку. Повторное нажатие отключает насос и снимает ручной режим. При ручном режиме состояние датчиков не контролируется.
Светодиод: Сигнализирует о включении или отключении насоса. Если светодиод мигает, то насос работает по таймеру.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Re: Контролер насоса на Attini13

Сообщение dgrett »

Датчики лучше включать как НЗ контакты. Что будет, если отгниёт провод верхнего датчика? Потоп. Датчиков надо 3 штуки, один аварийный.
Я всё-всё узнAю и стану профессором.
brusel2
Открыл глаза
Сообщения: 43
Зарегистрирован: Ср ноя 09, 2016 13:25:39

Re: Контролер насоса на Attini13

Сообщение brusel2 »

Самсусамыч, код можете выложить? В будущем переделаю подключение датчиков по Вашей схеме. Сейчас пока работает. Еще вопрос: блок питания для МК и реле лучше сделать на трансформаторе или оставить импульсное?
Самсусамыч

Re: Контролер насоса на Attini13

Сообщение Самсусамыч »

[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
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Re: Контролер насоса на Attini13

Сообщение 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, последовательно с герконом резюк и параллельно резюк. Возле контроллера обвешиваем кондами, придавливаем к земле и подаём на вход АЦП. Резисторы рассчитать так, чтоб определить перечисленные выше состояния. Резисторы непосредственно у датчика.
Я всё-всё узнAю и стану профессором.
Ответить

Вернуться в «AVR»