Снятие показаний с датчика Холла автомобиля
- Войдите на сайт для отправки комментариев
Вс, 17/09/2017 - 21:18
volatile float lastflash; int RPM; void setup() { Serial.begin(9600); //открыть порт attachInterrupt(0,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала } void sens() { RPM=(15000000/(micros()-lastflash)); //4 сигнала за один оборот lastflash=micros(); //запомнить время последнего оборота } void loop() { if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды RPM=0; //считаем что RPM 0 } Serial.println(RPM); //вывод в порт }
Здравствуйте.Пытаюсь снять обороты двигателя с помощью штатного датчика Холла.Сначала прилепил 2 провода,один на минус аккумулятора ,второй через делитель на сигнальный провод Холла,показания уходили в космос из-за наводок от -7500 до 28000.
Взял обычную фольгу и экранировал провод,начали выводиться более правдивые значения ,однако они всё-равно пляшут(в логе-показания ,когда мотор работал ровно).Так вот,как получить нормальные значения?Может у кого-то есть похожие наработки?Код использую ,,стандартный" для датчика Холла,только делю показания на 4
Glinka0, до того, как решать программные проблемы, нужно избавиться от аппаратных.
Пока не избавитесь от помех, говорить о коде преждевременно.
(кстати, в коде Вы тоже нахомутали - будь здоров! Зачем float? Зачем два раза из прерывания вызываете millis(), а затем дважды приводите ее к float? Зачем деление в прерывании? Если 4 сигнала за оборот, есть ли уверенность, что они распределены равномерно по углу поворота?)
Хорошо.
Если я использую для подавления помех схему ,как в уроке Блума на конденсаторе и тригере шмидта она будет работать?
Как я понял расчёт конденсатора выглядит так:
Максимальные обороты двигателя 7000 в мин -- 116,6 в секунду
следовательно 466,7 импульсов в секунду-- 2,1 микросекунда на импульс
Значит нам надо подобрать ёмкость конденсатора C=время затухания /R
Резистор подтяжки на 10кОм
C=2.1*(10^-3) / 10000 =210 нанофарад
Я прав или бред?
Код немного подправил.Если например в прерывании сделать как счётчик (значение++) а потом в цикле его обнулять,то точность получается ниже,чем в моём варианте (задавал на другой ардуине изменение сигнала каждую милисекунду для проверки )
оптопару возьми. Сигнальный провод холла через резистор на диод оптопары. А транзистор оптопары к входу ардуино, не забыв про поддяжку.
Благодарю.Взял оптопару 4N25 ,резистор на диод 200 Ом,на подтяжку эмиттера 470 Ом.Всё замечательно работает,правда забыл ,что на один оборот КВ 2 сигнала,а не 4.
Знаю, что было давно, но не осталось ли схемы подключения?