Блог Влада Вильгельма

контроллер наполнения бака

2013-08-31 00:00:00 /электроника/

 

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

 

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

 

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

 

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

 

Скважина ДОЛЖНА быть оборудована датчиками, показывающими минимальный уровень воды для начала работы насоса и уровень, на котором мотор необходимо выключить. Голь, как обычно, хитра на выдумку и вариантов всяческих поплавковых концевиков понапридумано много. Но у любого датчика есть совершенно мерзопакостная особенность - ну не любят они влажность!!! Впрочем, датчиком может служить и простая, частично изолированая (от стенок скважины), металическая пластина - ей влажность как раз и нужна :) А точнее - нужна вода, чтобы замкнуть ее со стенками скважины или с какой-нить железякой на дне колодца. Проблема с теми датчиками одна - питать их надо переменным током, чтобы предотвратить накопление солей, образующихся в результате электролиза.

 

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

 

Для решения этой задачи, помимо банальной развязки цепей питания датчиков, есть неплохое решение - использование микрокомпьютера для кратковременных замеров. Ведь длительность работы датчика так же важна в процессе кипячения водички переменным током :)

 

Но мы немного увлеклись. Пожалуй настало время прикинуть варианты...

 

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

 

 

это устройство работает только на одной полуволне, вторая - тупо восстанавливает датчик.

 

Ну и что мы имеем? На вход ключа подаем сигнал генератора. Ключик накачивает наш импульсный трансформатор мощности ключа и трансформатора - минимальны. Запалить светодиод  в оптопаре - сильно много тока не нужно. Выход оптопары отрабатывает наличие замыкания на разъеме J1. Вроде все просто... Есть только маленький нюанс - емкость подводящих к датчику проводов и емкость самого датчика будут критичны, поскольку, заряжаясь, будет давать ложное срабатывание в начале меандра, вне зависимости от наличия замыкания на датчике. Для ликвидации данного безобразия у нас есть вариантики - суровая подтяжка оптопары и отсрочка измерений несколько исправят дело, но ухудшит чувствительность датчика, поскольку для борьбы с той же подтяжкой понадобятся большие токи на входе оптрона. Да и обвязка дополнительная.... ФИ!

 

Мы будем использовать переключабельность направления пинов микроконтроллера для подавления данного эффекта.

 

 

Режим генератора микросхемы, при этом, задается так:

 

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Disconnected
// OC0B output: Disconnected
//TCCR0A=0x02;
//TCCR0B=0x03;
stop_gen(); // собственно тут в TCCR0B заносится 0x00, чтоб не гудел зазря
OCR0A=0x01;
OCR0B=0x00;


Прерывание таймера по достижению OCR0A. а там уже все остальные чудеса.

 

void stop_gen(void) {
 TCCR0A=0x02;
 TCCR0B=0x00;
 PORTD.5 = 0;
}

 

void start_gen(void) {
 gc = 11;  
 TCCR0A=0x02;
 TCCR0B=0x03;
 TCNT0=0x00;
 DDRB = 0x01;
 PORTD.5 = 1;
}


// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void) {
 #asm("cli")
 if (DDRB.0) DDRB = 0; 
 else {
  DDRB = 0x01;
  gc--;
  if (!gc) stop_gen();  else PORTD.5 = !PORTD.5;
 }
 #asm("sei")
}

 

 Вай! Чуть не забыл!

 

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTB=0xFF;
DDRB=0x00;
 

Почему это возможно? Пяток миллиампер, которые транзистор оптопары способен утянуть с ВЫХОДА микроконтроллера абсолютно никак не влияет на здоровье оного, а восстановление сигнала (логического 0, если таковой присутствует) произойдет быстро и безболезненно. И все это при минимальной обвязке входов.

 

Результат сиих измышлений в виде схемы, печатки и прошивки в приложениях к статье.

 

В качестве импульсного трансформатора использован сетевой дроссель импульсного блока питания. Индуктивностью 25мГн. Для формирования нескольких миллиампер на датчиках его вполне достаточно, а изоляция между обмотками у него зверская :)

 

Из излишеств - двухполупериодный замер и стабилизатор тока в питании релюхи. Но это дело вкуса...

 

 

Логика работы схемы такова:

При отсутствии сигнала с датчика на баке, датчик верхнего уровня включает мотор. Мотор работает либо до заполнения бака, либо до потери сигнала от датчика нижнего уровня.

Кнопки ручного включения и отключения мотора работают 10 минут после первого нажатия из автоматического режима.

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


Фьюзы контроллера:


Прикрепленные файлы:

замордобучить

powered by WILHELM.AZ