Ємнісний датчик рівня зерна і рідин
Звернувся колись до мене знайомий з проханням полагодити протравлювач зернових культур. У ході діагностики з'ясувалося, що некоректно працюють ємнісні датчики рівня. Зібрані вони на PIC12F629. Я довго не став мучитися, вирішив повторити те ж саме на ATiny13A. На моє здивування, рішення на AVR запрацювало значно краще (швидше за все, це пов'язано з алгоритмом реалізації та швидкодією МК).
У моєму рішенні виконується усереднення результатів вимірювання, перед вмиканням керуючого виходу, плюс до всього реалізований гистерезис порога спрацьовування, тобто введений діапазон, при якому стан не визначено. Усереднюється 20 вимірювань, швидкість реакції сенсора порядку 200-500мс. Для мого випадку - якраз.
Код реалізації такий :
PORTB.0=1; DDRB.0=1;// Встановити вихідний порт delay_ms(2); DDRB.0=0;// hi-z рівень встановлення порту PORTB.0=0; while(PINB.0==1) { if(timer>1000)timer=1000; timer++; } timer+=timer; if(++cnt>19) // усереднення вимірювань { timer/=20; if(timer>10) {OUT=1; delay_ms(2000); } else if(timer<6) { OUT=0; delay_ms(1000); } timer=0; cnt=0; }
Як видно з коду, все зроблено програмно і працює як молоток.
Схема на дивування також дуже проста.
Викладаю також тестову прошивку. Працює 3 вмикання, потім блокується. Щоб розблокувати, потрібно замкнути викруткою контакти 3 і 4 мікросхеми.
Також, викладаю вихідний код, який можна відредагувати, скомпілювати і отримати нормальну прошивку.
За питаннями доопрацювання прошивки або отримання повної прошивки під конкретно Ваші потреби, можна написати мені в ЛС.