Как подключить датчик холла
- Войдите на сайт для отправки комментариев
Пнд, 27/02/2012 - 21:06
Продолжаю подключение к авто и добрался до датчика скорости. Он 3 контактный, дает 6 импульсов за один пройденный метр. Причем между землей и сигнальным проводом всегда 0в. А между сигнальным и питанием разность потенциалов меняется (то есть импульсы идут). Вопрос, как теперь эти импульсы посчитать?вот если бы разность потенциалов менялась между сигнальным и землей, все бы просто было, а так никак не могу сообразить.
http://arduino.ru/Reference/AttachInterrupt - если во время паралельно с замероми еще чем-то заниматься нужно.
arduino.ru/Reference/PulseIn - если нужно проще и логика "ждем, меряем пока не прийдут все 6 импульсов", потом что-то делаем.
Спасибо, это я знаю:) тахометр уже цеплял.
Вопрос немного в другом. Ардуина меряет напряжение между А0 и землей как я понимаю. Так вот между этими контактами у меня всегда 0В. А вот между плюсом и сигналом у меня напруга меняется. Вот теперь как "такое" подключить к Ардуине?
Arduino - и любой вольтметр - меряет напряжение между двумя точками с (возможно) разными потенциалами. подключите сигнал датчика к земле Arduino, а плюс - к входу (через соответствующий делитель, чтобы не получить deltaU>5В) и меряйте. Главное, чтобы у вас не было других соединений между датчиком и Arduino.
Кстати, если между землей и сигналом у вас всегда 0, а между сигналом и плюсом - переменное напряжение, то между землей и плюсом - по идее - должно быть то же самое переменное напряжение. Не проверяли?
>Причем между землей и сигнальным проводом всегда 0в.
Одну из двух: или у вас неправильно собранна схема и сигнальный коротнулся на землю, либо он не фига не "сигнальный" а просто еще одна земля (и про него можно забыть). "Сигнальным-то" и называется тот по которому идут сигналы, а не тот "который желтый" ;)
> А между сигнальным и питанием разность потенциалов меняется (то есть импульсы идут)
Ну значит между "питанием" и землей идут импульсы. Тогда непонятно зачем вы его обозвали "питанием". Раз по нему идут сигналы, значит это и есть "сигнальный". Вот его и заводим на цифровой пин и ловим эти сигналы.
>Ардуина меряет напряжение между А0 и землей.
Между землей и любым пином включенным на вход. В том числе и A0. Но, IMHO, импульсы удобнее мерять цифровыми пинами (A0- аналоговый), естественно приведя сигналя к TTL уровню.
Я вот логически думал, что между землей и плюсом тоже должна быть переменка. Контакты помечены как +, - и А. Вот за сигнальный я посчитал тот который А. Инструкции на датчик нет.
Про то что можно попробовать сигнал на землю кинуть я не думал. Вообще можно ли так сделать? У меня земля с авто общая и там еще на ней висит тахометр и другие датчики. Кстати, на + и - датчика я подаю, соответственно, питание с аккума, иначе не пашет.
Про импулься все верно, буду цеплять на 3-ий пин, там где INT1. На аналоговый цепанул ради эксперимента, чтобы посмотреть че там.
Чтобы уж совсем не бояться КЗ, поставьте в вашу линию, где удалось отследить импульсы напряжения, RC-цепочку - импульсы будут проходить, постоянная составляющая отфильтруется, КЗ нет.
>Кстати, на + и - датчика я подаю, соответственно, питание с аккума
Что-то тут неладно в датском королевсте. Предположим минусе у нас напряжение V0, на плюсе V1, на A - V3
Имеем три ваших утверждения:
(1) V0 и V1 - всегда постоянны, то есть V1-V0=CONST (по вашим словам "подаю, соответственно, питание с аккума")
(2) V3=V0 - по вашим словам (между землей и сигнальным проводом всегда 0в)
(3) V1-V3=[переменная дельта] (по вашим словам: А между сигнальным и питанием разность потенциалов меняется)
Делаем подстановку из утверждения (2) в (3), заменяем V3 на V0 (так как они равны), получаем V1-V0=[переменная дельта], что прямо противоречит первому утверждению. V1-V0=CONST.
То есть из ваших трех утвержний можно получить два противоположных вывода. Что означает "как минимум одно из них ложь" (в логическом смысле :) )
>Инструкции на датчик нет
Метод тыка это хорошо. Но ведь можно поискать что-то подобное. Вбить туда "Как подключить датчик холла". Втроая ссылка - замечательная статья знаменитого "объяснятеля на пальцах" DI Halt-a easyelectronics.ru/datchik-xolla.html Думаю для понимания "общих принципов", и с чем такие датчики едят, что значат их ноги - ее обязательно нужно прочитать.
Ну и саму инструкцию тоже в гугле поискать не повредит. Авось повезет. Магическое слова "datasheet", "апноуты" и т.п.
Имею ДХ - 10-30В, три провода:
Два провода питание, третий (выход) сигнальный.
Подал питание на датчик +12В.
На выходе получил:
Без магнита ~ 12В
С магнитом 0,02В
как подключить сигнальный выход ДХ к ардуино?
Через обычный диод к цифровому выходу с внутренней подтяжкой?
> Через обычный диод к цифровому выходу с внутренней подтяжкой?
По всей видимости тут речь идет про схему описанную в разделе "диодный интерфейс" http://we.easyelectronics.ru/Shematech/soglasovanie-logicheskih-urovney-5v-i-33v-ustroystv.html (элементы R1,D1)
Только у вас в качестве "3.3v" устройства будет выступать ардуина, а в качестве 5v из схемы - 12v датчик.
Другими словами, так, что ли?
Вначале оговорюсь. В схемотехнике я сам нуб. Эту схему с диодом сам два дня назад узанал/понял. Так что "могу ошибатся".
Но если не ошибаюсь, то резистор и диод нужно поменять местами. Диод катодом (острым носиком) к датчику.
И вход уже не нужно включать "с подтяжкой". Вот этот 10k это и будет подтяжка (или выкинуть ее, если внутренюю подтяжку включаете, но я бы лучше на внешней делал).
Логика работы такая:
когда на датчике 12-ть вольт. Он пытается "пропихнуть их через диод", диод, естественно запирается (не пускает ток в обратную сторону), и на вход попадает только напряжение с "подттяжки" (то есть 5v). Если же на датчике 0. То ток, с подтяжки через диод (в прямом направлении он пропустит его спокойно) целиком уйдет в ногу датчика. И на вход "останется" только 0.
Но, эта схема предполагает что "когда на сигнальном датчика 0", то сопротивление между сигнальным проводом и землей (внутри датчика) - близко к нулю. И через него можно гнать ток в этом направлении. Так ли это - я не знаю.
Логика работы такая:
когда на датчике 12-ть вольт. Он пытается "пропихнуть их через диод", диод, естественно запирается (не пускает ток в обратную сторону), и на вход попадает только напряжение с "подттяжки" (то есть 5v). Если же на датчике 0. То ток, с подтяжки через диод (в прямом направлении он пропустит его спокойно) целиком уйдет в ногу датчика. И на вход "останется" только 0.
Но, эта схема предполагает что "когда на сигнальном датчика 0", то сопротивление между сигнальным проводом и землей (внутри датчика) - близко к нулю. И через него можно гнать ток в этом направлении. Так ли это - я не знаю.
Все правильно. А почему считаете, что лучше внешнюю "подтяжку" использовать?
1. Как-то спокойней когда ее видишь глазами :) - иррационально, можно игнорить.
2. Внутреняя подтяжка, если я помню правильно 2.2K, что меньше 10K, значит ток будет больше. Насколько "больше" - лень считать :)
3. Внутреняя "греет кристал", но существенно это или нет - не знаю. А ток там будет идти практически постоянно.
4. Я не знаю какой ток можно "вгонять" в дата ногу датчика (и можно ли вообще). Поэтому "чем меньше тем лучше".
Вообщем все доводы можно суммировать так: на всякий случай, так как нет 100% понимания (у меня).
Да и еще. Используя обычный диод, когда на датчике будет 0, вы на "входе ардуины", получите 0.7V (он хоть и пропускает ток в прямом направлении, но падение все равно есть). По идее digitalRead должно нормально воспринимать эти 0.7V как "логический ноль".
Если же, будут проблемы с "детектироваинем нуля". То можно диод заменить на диод шотки, у него падение меньше. Он будет, если не изменяет память, "добавлять к нулю", не 0.7, а где-то 0.2 вольта.
Спасибо.
Кстати а внутрення подтяжка как физически реализована?
Схемку можно? для общего развития так сказать...
Если идти от цифрового входа на ардуине в ее недры так сказать, там что сразу резистор идет?
Сопротивление внутренних подтягивающих резисторов 20 кОм, а реализованы они на резисторах и полевых транзисторах.
>Сопротивление внутренних подтягивающих резисторов 20 кОм
Выбили-таки последнюю табуретку из под моего утвержния "лучше внешний" ;) Кроме довода "мне так больше нравится" - больше ничего не осталось ;) Почему-то в голове сидела цифра 2.2K. Полез в даташит atmega8 таки 20K. Вернее от 20K до 50K.
>Схемку можно? для общего развития так сказать...
Вот тут про это можно почитать http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html
Ну и конечно в даташите на камень схем есть много и разных. Он "первоисточник" всего.
Подключил специфической датчик холла к АНАЛОГОВОМУ входу ардуино.
Все устраивает, на аналоговом входе значения в диапазоне 100-900, как в даташит.
Но полностью отключив датчик от ардуины имею на аналоговом входе случайные значения в диапазоне 200-300.
Беспокоит тот факт, что при обрыве провода, система будет эти случайные числа понимать как сигналы с датчика... А нужно чтобы 0 или 1023 было...
Можно как-то использовать подтягивающий резистор, при этом чтобы аналоговый вход таковым и остался...
Если я вот так притяну аналоговый вход
digitalWrite(14, HIGH);
перестанут у меня при отключенном датчике случайные значения выводиться?
analogRead будет нормально на этом порту работать?
не спалю датчик холла?
перестанут у меня при отключенном датчике случайные значения выводиться?
Да. Будут значения в районе 1020-1024
analogRead будет нормально на этом порту работать?
Может немного начать "завышатся значения". Будет не 900, а, скажем, 950-1000. А может вообще не заметит разницы. Вообщем "проще попробовать/посмотреть". Если будет уж очень сильно влиять, то можно внешний резистор попробовать. Номиналом побольше встроенного (там кажись 20K встроенный).
не спалю датчик холла?
Да вроде нет.
P.S. Все это мое IMHO :)
Кстати, если у вас разброс от 100 до 900 (то есть "грубо" 0.48V и 4.39V), то и цифровой вход замечательно должен справится с чтением.
Вот правда разницу между 900 и 1024 он уже не сможет увидить (а значит задетектировать "обрыв").
Беспокоит тот факт, что при обрыве провода, система будет эти случайные числа понимать как сигналы с датчика... А нужно чтобы 0 или 1023 было...
Предусмотреть программное детектирование "обрыв линии" по величине разброса - все равно полезно.
Беспокоит тот факт, что при обрыве провода, система будет эти случайные числа понимать как сигналы с датчика... А нужно чтобы 0 или 1023 было...
Предусмотреть программное детектирование "обрыв линии" по величине разброса - все равно полезно.
Дык никто с этим не спорит. Просто вариантов этого может быть несколько.
1. Как изначально предполагал топик-стартер - с помощью аналогового
2. Если датчик ВСЕГДА дает сигналы с какой-то переодичностью. То можно ловить обрыв если слишком долго сигналов нет
3. Попытатся самому дать на линию сигнал слабенький и подергать выход. Если "легко дергается" - значит обрыв. Если "стоит" - значит датчик есть (при условии что рабочий датчик - четко держит линию в каком-то значении). Сделать что-то вроде "самотестирования" (при включении или с какой-то переодичностью).
Спасибо за советы.
Сделаю программно.
Еще посоветуйте такой момент: датчики для надежности спаренные (2 в 1) - основной и дополнительный....( так сделано)
Так вот как можно реализовать алгоритм этой самой надежности?
Ну сравню я показания этих датчиков, если они равны (с каким-то допуском), то оба они работают и я возьму основной датчик за базу.
А если не равны, то буду считать это ошибкой, а что за базу брать??? основной или доп.? какой из них барахлит?
Или спаренный датчик для того и нужен, чтобы только оценить что есть разница в показаниях и выдать АЛАРМ!!!???
Или спаренный датчик для того и нужен, чтобы только оценить что есть разница в показаниях и выдать АЛАРМ!!!???
Да. Конечно.
Если два человека дают вам два взаимоиключающих утверждения - с уверенностью вы можете утверждать только "МИНИМУМ один из них врет. Но кто, и не врут ли оба - уже не скажете.
Точно так же как и "оба совпадают" - не означает 100% что оба работают. Особенно если у них есть общие составляющие (например питание или земля).
Повыстить надежность - взять еще больше датчиков.
Из опыта авиации - желательно работающих на другом принципе (пусть и с меньшей точностью). То есть - не Холла, а какую-то альтернативу.
Еще можно попытатся сделать тестирование датчика, самому создавая магнитное поле. Поставить возле него какую-то катушку и на нее подавать сигналы. А потом, через датчик, смотреть "слышно или нет". Вообщем кроме того что вы меряете датчиком, сделать еще и "генератор тестовых сигналов".
Вообщем параноится по поводу "надежности" - можно почти бесконечно :) Вспомнить потом что сам контроллер - тоже может заглючить :)
Если кто то врет, то нужно использовать сохраненное значение. Если сбои повторяются, только тогда аларм. На счет самолетов, согласен с Лешаком, я и сам самолетами занимался :)
Да не так-то просто обработчик датчиков холла (ДХ) замутить...
Вот мое видео (выведено с помошью TVout):
http://youtu.be/yFc_r92gnAc
Тут DH1 - первый основной ДХ
DH11 - первый вспомогательный ДХ
DH2, DH21 - вторые ДХ.
Видно как значения скачут, хотя датчики вообще к ардуине не подключены.
При подключении датчиков:
DH1=DH11=614 (например) плюс-минус 2
DH2=DH21=400 (например) +-2