ураа! Склад!!!
Внимание! это учебный материал. и прибор тоже учебный. если нужно не учиться, а просто получить работающий прибор, то вам вот сюда "простой металлоискатель".
Следующее устройство которое мы соберем - будет простой металлоискатель. На примере этой игрушки мы рассмотрим еще одно интересное устройство - компаратор. Он может сравнивать два аналоговых сигнала. Если речь идет о синусоидальном сигнале, то мы можем вычислить период данного сигнала.
Применив компаратор, мы можем сделать не только простейший игрушечный металлоискатель, но и целый ряд полезных устройств (к примеру "без помеховый" регулятор мощности, термостат, сенсорную кнопку, датчик движения, систему АРУ и прочее...)
Но не будем отклоняться от темы и соберем простенькую схемку. основное отличие ее от предыдущих схем - это наличие кварцевого резонатора для повышения стабильности измерений. к сожалению для таких ответственных дел, как измерение временного периода внутренний генератор микросхемы слишком нестабилен. я взял кварц на 12 мегагерц. но на самом деле сойдет и любой другой в пределах от 3 до 20 мегагерц.
Кроме того в конструкции есть чувствительный элемент - это колебательный контур на элементах L1-C1. Внимание! работа прибора напрямую зависит от добротности этого контура, по этому даже не вздумайте ставить электролитический конденсатор! лучше всего использовать КМ-5 или аналогичные импортные.
Рассмотрим теперь принцип работы "миноискателя".
При внесении металла в контур его резонансная частота и добротность
изменяются. Если металл черный (железо) то индуктивность контура
растет, а соответственно, частота падает. и наоборот, при внесении в
контур цветного металла (алюминия, серебра, золота) индуктивность
контура падает, а частота растет.
То есть перед нами стоит 2 задачи, а именно: возбудить в контуре электромагнитные колебания, и измерить их частоту (период).
Как уже говорили выше - с измерением периода синусоидального сигнала
отлично справляется компаратор. по этому, не мудрствуя лукаво
подключаем выводы компаратора (AIN.1 и AIN.2) к выходам нашего
резонансного контура. теперь каждый период будет сопровождаться
переключением компаратора.
Для возбуждения колебаний достаточно на короткое время подать
электрический импульс на контур. (как для того чтобы заставить качели
качаться - необходимо просто пнуть их разок). роль такого "пинка"
исполняет ток, текущий через конденсатор C2 при изменении логического
уровня на выходе PD.4
При включении логического ноля - конденсатор С1 заряжается через
конденсатор С2 от источника питания. при включении логической единицы
конденсатор С2 оказывается коротко замкнут на контур, и разряжается
через С1.
ниже приведена осциллограмма сигналов: вверху - меандр который подается с выхода 8 (PD.4) микросхемы. внизу - сигнал с колебательного контура L1C1
Таким образом для работы металлоискателя достаточно просто подать на С2 - сигнал с 50% скважностью, и считав показания частоты колебаний с контура сравнить их с предыдущими данными измерений. расхождение вывести на дисплей. вот и все.
Конечно это не то что простой, это примитивнейший способ. в более сложном варианте можно было бы по экспоненте затухания сигнала вычислять добротность контура. но... это задача на будующее. сейчас делаем чтобы работало...
в первую очередь - наматываем катушку... никаких изысков, просто наматываем катушку диаметром 100мм, около 50 витков практически любого провода.. желательно не слишком тонкого. эдак 0.25-0.8 мм в диаметре.. резонансный конденсатор можно повесить прямо на катушку. выводы сделать гибким многожильным кабелем. саму катушку хорошенько замотать изолентой. но с другой стороны, если делать компактное устройство - то можно катушку припаять к плате безо всяких там переходных кабелей. тут широкий простор для творчества. лично я собрал схему на макетной плате..
теперь осталось запрограммировать логику работы чипа.
в начале работы программа должна проинициализировать порты и "новое" устройство - компаратор.
далее мы запускаем цикл, который следит за состоянием компаратора. как только оно изменяется - фиксирует этот факт прибавляя 1 к счетчику полупериодов, а число циклов - это как раз длительность прошедшего полупериода.
по прошествии некоторого количества полупериодов необходимо снова "накачать" энергией контур. это делается путем инвертирования уровня на выходе PD.4
далее мы сравниваем длительность импульса с заранее сохраненной (или наоборот - сохраняем ее если нажата кнопка установки ноля) и разницу выводим на "дисплей" в виде шкалы из 5 светодиодов. кроме того - мы выводим на отдельный диод знак разницы, который указывает цветной или не цветной металл поднесен к детектору.
;========================================================== ;Autor: MadMayDay 2008 ;Project: StepByStep ;Name: MetDet-LED ;========================================================== .device ATtiny2313 .include "tn2313def.inc" .def st0=R20 .def st1=R19 .def st2=R21 .def st3=R22 .def st5=R24 .def SlopReg=R16 .def DelayReg=R17 .def ViewReg=R18 .def outReg=R25 .def summRegh=R27 .def summRegl=R26 .def difReg=R28 ;========================================================== Start: rjmp Init; ;------------------------------------------------- ;устанавливаем часть ног микросхемы в состояние "выход", ;и часть в состояние "вход" ;обратить внимание - выводы используемые для компаратора необходимо ;перевести в отключенное состояние - т-е входы без "подтяжки" Init: ldi SlopReg,0b11111100 ; грузим признак выхода out DDRB,SlopReg ; в регистр управления out PortB,SlopReg ; портом "В" ;один вывод надо сконфигурировать как вход ldi SlopReg,0b11101111 ; грузим признак выхода out DDRD,SlopReg ; в регистр упр. портом "D" ldi SlopReg,0b00010000 ; грузим признак "активности" out PortD,SlopReg ; в регистр входа ldi ViewReg,0b11111100 ; формируем начальное состояние и out PortB,ViewReg ; отображаем его на «экране» ;------------------------------------------------- ;устанавливаем самый простой режим работы компаратора ;в этом режиме он просто изменяет значение бита в зависимости от ;напряжения на входах. ldi slopreg,0 out ACSR,slopreg ldi slopreg,03 out DiDr,slopreg ;загружаем константы. ldi ViewReg,0b011100000 ldi SlopReg,0 ldi St2,0 ldi St3,0 ldi outreg,0b00010000 ldi summregl,0 ;------------------------------------------------- ;основной цикл ожидания. nochange: inc st2 ;прибавляем счетчик in St0,ACSR ;проверяем состояние компаратора cp St1,St0 ;если НЕ изменилось breq nochange ;переходим на начало цикла. ;если Изменилось то mov st1,st0 ;запоминаем состояние компаратора ;проверяем сколько было полупериодов cpi slopreg,11 ;если число циклов меньше заданного brne next ;то ничего не предпринимаем ;иначе ldi SlopReg,0 ;обнуляем счетчик полупериодов bst st0,5 ;изменяем состояние "задающего" bld outreg,5 ;выхода на противоположное out portD,outreg ;обеспечивая накачку энергии в контур. ;для измерения берем только периоды когда задающий выход в "нулевом" состоянии. brts donosing; ;если цикл с 1 - ничего не делать. ;если требуется - устанавливаем значение "ноля" in st5,pinD ;проверяем не нажата ли кнопка установки ноля bst st5,4 brts nosetZero ;если нет - ничего не делаем mov summregl,st2; ;если - да, то в "ноль" записываем текущее значение. ldi st3,0 ;и в "фильтр" ноль. nosetzero: ;обрабатываем результаты sub st2,summregl ;получаем модуль разницы в сигнале brpl plus neg st2 clt plus: ;фильтруем полученное значение - убираем случайные выбросы ;простенький фильтр со скользящим средним. add st2,st3 lsr st2 mov st3,st2 ;отображаем на экране из 5 светодиодов. ;каждый светодиод имеет свой порог зажигания ldi ViewReg,0b11111100 cpi st2,2 brlo display lsl Viewreg cpi st2,3 brlo display lsl Viewreg cpi st2,6 brlo display lsl Viewreg cpi st2,11 brlo display lsl Viewreg cpi st2,17 brlo display lsl Viewreg display: ;показываем знак разницы между нолем и сигналом bld Viewreg,7 ;за знак отвечает крайний диод. out portB,Viewreg ;выводим полученное на экран. donosing: ldi St2,0 ;обнуляем счетчик для нового измерения. next: inc slopreg ;дрибавляем счетчик полупериодов ;уходим на следующий цикл rjmp nochange ;и снова здгаствуйте. End: ;========================================================== |
еще раз хочу напомнить что пока это даже не игрушка, а лишь пример того, что минимальных знаний при умелом их использовании уже хватает для достаточно сложных приложений. так что до "Кощея" нам пока далеко.
ОДНАКО чуток модернезировав схему и программу можно получить уже вполне стабильный и рабочий прибор. Как это сделать показанно в сатье "простой металлоискатель". однако обсуждение этой статьи выходит за рамки учебного курса.