датчик положения дроссельной заслонки

Обсуждаем электронику на колесах. Нужен увлажнитель воздуха для Камаза? Вам сюда.
Ответить
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

давление работает норм. сигнал с трима на вход приходит. проговорю алгоритм работы датчика холла. на валу стоит 2 магнита. один полюс включает датчик (дает верхний фронт) , второй магнит обратным полюсом выключает датчик (дает нижний фронт). получается за оборот датчик 2 раза меняет состояние это нужно использовать для счета.
Последний раз редактировалось ЗАВ Пн июн 15, 2026 14:54:45, всего редактировалось 1 раз.
самое сложно - сделать просто
Реклама
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

тогда убедиться, что это соответствие верно:
#define CH_ADC_TRIM 7 // Канал АЦП датчика "ТРИМ".
#define CH_ADC_PRESSURE 2 // Канал АЦП датчика "ДАВЛЕНИЕ".
#define CH_ADC_COUNT 0 // Канал АЦП датчика "СЧЁТЧИК".
Реклама
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

загрузил 21 скеч - трим работает, 22 и 23 трим стоит на нуле.
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

в 21:
#define CH_ADC_TRIM 1 // Канал АЦП датчика "ТРИМ".

Но потом было:
ЗАВ писал(а): Вт июн 09, 2026 11:12:21 схема не соответствует распайки . проверил, по факту трим подключен к А7.
поэтому сейчас стоит
#define CH_ADC_TRIM 7 // Канал АЦП датчика "ТРИМ".

На последней схеме тоже А7
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

трим стоит на А7. у меня 7 нога работает в 21 скетче. на 55 строке. помниться мне у трима в 21 скетче не было ноля. сейчас стоит ноль и не на что не реагирует.(в21 скетче с пустым пином значения бегали хаотично). я подозреваю, что в ТРИМ были внесены изменения для стабилизации ноля?
самое сложно - сделать просто
Реклама
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Да, нашёл: при тесте настройки диапазонов поставил
#define LOW_VOLTAGE_TRIM 800 // Минимальное напряжение (в значениях АЦП), при котором отображается LOW_DISPLAY_TRIM
и забыл вернуть
сделайте
#define LOW_VOLTAGE_TRIM 0
(или какое-то иное значение, если 0 должен отображаться при некотором ненулевом напряжении)
Реклама
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

ТРИМ заработал, однако вместо нуля показания 0,25. и хотя скетче выставлено ТРИМ - 1 знак после запятой, а давление 2 знака, по факту все наоборот. у трима -2 знака , у давления 1 знак. почему в комментариях наоборот ? поменял местами. разрядность восстановилась. ТРИМ нормально считает до 10, потом показывает галиматью. то 24, то 37. ошибка какая то.
счетчик не работает от слова совсем, только переключается при размотки с индикатор ТРИМА (а должен с давления - нужно исправить) и на индикаторе стоит ноль.
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

счётчик я не тестировал.
Диапазон отображения и диапазон фактического напряжения на датчике регулируются с помощью:
#define LOW_DISPLAY_TRIM 0 // Минимальное отображаемое значение "ТРИМ"
#define LOW_VOLTAGE_TRIM 0 // Минимальное напряжение (в значениях АЦП), при котором отображается LOW_DISPLAY_TRIM

#define HIGH_DISPLAY_TRIM 800 // Максимальное отображаемое значение "ТРИМ"
#define HIGH_VOLTAGE_TRIM 952 // Минимальное напряжение (в значениях АЦП), при котором отображается HIGH_DISPLAY_TRIM

АЦП выдаёт 0 при 0 В и 1024 при 5 В.

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

У меня на первом дисплее показывается 0...80 на втором 0...4 и счётчик переключает второй.
ранее было:
ЗАВ писал(а): Ср июн 03, 2026 08:56:45 на первом индикаторе "ТРИМ" значение должно быть 0-80,0. на втором индикаторе "ДАВЛЕНИЕ" 0-4,00.
притом, каналы:

#define CH_ADC_TRIM 7 // Канал АЦП датчика "ТРИМ".
#define CH_ADC_PRESSURE 2 // Канал АЦП датчика "ДАВЛЕНИЕ".
#define CH_ADC_COUNT 0 // Канал АЦП датчика "СЧЁТЧИК".

volatile uint8_t adcChannels[3] = { CH_ADC_TRIM, CH_ADC_PRESSURE, CH_ADC_COUNT }; // Каналы АЦП для датчиков 1...3 индикаторов 0...2

:dont_know:
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

в 6 строке #define LOW_VOLTAGE_TRIM 50 . поставил 50 вместо 0, однако минимальное значение все равно осталось 2,5.
в 19 строке стоит #define HIGH_DISPLAY_PRESSURE 245 // Максимальное отображаемое значение "ДАВЛЕНИЕ". значит выше 2,45 не может быть значение, а показывает боллее 3,00 при 1,6 в.
Я что то не понимаю ? градуировка вторично, с начало нужно отладить функционал. почему ТРИМ после значения 10 начинает подвисать и боллее 16 показывает ерунду
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Минимальное показание ограничено нулём, но максимальные - 999
То есть, если HIGH_VOLTAGE_DISPLAY 245 при HIGH_VOLTAGE_PRESSURE 1024 тогда да, показания не должны превышать 245.
Но если HIGH_VOLTAGE_PRESSURE 800 - то 245 будет показано при 3,9 В (5 В/1024 * 800 = 3.9). Если датчик выдаст более 3.9 - на дисплее отобразится и большее значение.
То есть, определения LOW_DISPLAY_... HIGH_DISPLAY... и LOW_VOLTAGE_... HIGH_VOLTAGE_... позволяют отмасштабировать реальный диапазон напряжений на датчике к диапазону отображения индикатора.
Это как раз первично, позволяет исключить несоответствия, особенно когда я не знаю, какое напряжение, и фактически:
ЗАВ писал(а): Вт июн 09, 2026 13:38:25 при напряжении на входе ТРИМ 0,5 в ... нужен 0.
Почему может скакать: сейчас логика работы очень проста: АЦП делает тридцать две выборки и получает среднее арифметическое из них. Также предполагается, что сигнал стабильный. У меня в качестве сигнал используется переменный резистор, и всё это на столе - ни помех, ни каких-то нестабильностей от датчика. Индикаторы работают без рывков и зависаний. Но как только я вытаскиваю провод от резистора, даже на столе Ардуино "сходит с ума" и отображает ахинею.
Предыдущий программист мог применять какой-то цифровой фильтр.
То есть, причиной может быть помеха на сигнале датчика или на питании Ардуино.
Оба канала (давление и трим) в программе обрабатываются совершенно одинаково. Просто подставляются те самые LOW_DISPLAY_... HIGH_DISPLAY... и LOW_VOLTAGE_... HIGH_VOLTAGE_...
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

помехи отсутствую. мотор не запущен. датчики аналоговые НЕ резистивные (ТРИМ - датчик холла ) у него сигнал чище, чем резистор. думаю проблема в ПО
загрузил 21 скетч - все считает нормально. в нем нужна только калибровка
Последний раз редактировалось ЗАВ Пн июн 15, 2026 20:18:50, всего редактировалось 1 раз.
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

тогда проблема была бы на обоих каналах... перепроверю сегодня.

--------------------
нашёл пару странностей, и счётчик считает, но не так, как бы хотелось... через пару дней выдам пробное. Надо причесать всё, а то код стал неудобным и нелогичным.
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Новый вариант. У меня на стенде считает, показывает... вроде, всё нормально.
Настройки:
пользователя в файле user.h
ардуины, дисплея и каналов АЦП - device.h
Сейчас счётчик настроен на прибавление, запоминание и уменьшение.
Меньше нуля не делается (поэтому, если пороги напряжения выбраны так, что первое вращение будет уменьшать - счётчик останется 0).
Для режима со сбросом счётчика убрать // перед TURN_RESET. В этом случае счётчик обнуляется при исчезновении с индикатора, любое направление прибавляет его.
Вложения
sketch_30.zip
(19.5 КБ) 10 скачиваний
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

опробовал. есть проблемы
давление норм. (изменил на 2 атм).
ТРИМ работает, но не могу разобраться с индикацией. в настройках 1- индицирует один знак перед запятой. 2- все уходит в сотые. 0- норм - десятки 70-0, но нет третьего знака после запятой.
счетчик все плохо. с вашими настройками считал только в + , при намотке - 999 и висит. изменил на свои намотка есть , - при размотке 0. с последними настройками вообще отказался считать.что не так делаю ? или проблема со скетчем ...
ставил так-
#define DIR1_LOW 500 // минимальное напряжение (в значениях АЦП) первого направления 3,7в- 757
#define DIR1_HIGH 830 // максимальное напряжение (в значениях АЦП) первого направления
// увеличение счётка
#define DIR2_LOW 860 // минимальное напряжение (в значениях АЦП) второго направления 4,45-911
#define DIR2_HIGH 1024 // максимальное напряжение (в значениях АЦП) второго направления
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Да, с погасшим разрядом это моя ошибка, пока возился со счётчикам, оптимизировал отображение его и где-то нарушил основные, и не заметил. Прошу прощения. Сегодня вечером исправлю.

А вот то, что счётчик считает не очень - мне тут очень сложно понять. На макетке я делаю вроде даже в относительно худших условиях - касаюсь проводом двух источников напряжения. Тут и дребезг, и сопротивления. И он иногда на дребезге делает ложные срабатывания, проскакивая фильтр. Но он всё равно считает. Датчики Холла здесь в более выигрышном положении: у них гистерезис, исключающий подобное.
Но всё же хотелось бы видеть осциллограмму сигнала от них на входе Ардуино. Без этого я не могу сказать, почему такое различное поведение.

Если доходит до 999 - это значит, что сделано 999 подсчётов. Больше отображать он не сможет, если не растягивать на два дисплея.
У счётчика есть делитель: #define TURN_IMPULS 1 // Количество импульсов, изменяющих счётчик на единицу.
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

немного не так.
счетчик на сбросе досчитал до 0-106 (должно быть 30). начинаю подъем - на дисплее 999. реакции нет.
по поведению я подозреваю, что счетчик использует для счета один фронт снижая дискретность. есть возможность использовать оба фронта ? ( ПОДЪЕМ/СПАД)
завтра сделаю видео осциолограмму
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

Если использовать оба фронта, то на один пролёт магнита мимо датчика будет два импульса и 212 вместо 30.
И это особо ничего не меняет, можно выставить деление на 2 и считать о одному фронту, как сейчас.
Если при 106 должно быть 30, то надо выставить делитель #define TURN_IMPULS (106/30)
Дробные числа не используются, поэтому результат будет округлён.

Алгоритм реализован просто:
есть напряжение - анализируется, что было раньше: ноль или такое же напряжение. Если такое же - состояние не изменилось. Если ноль - значит, сейчас импульс.
По уровню и выбранной логике (всегда сбрасывать счётчик или сохранять и потом уменьшать) определяется, в какую сторону импульс.

Учитывая скачок от 106 до 999, возможно, было какое-то переполнение, но вообще странно. Попробую увидеть.
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

хотелось бы в счете видеть один знак после запятой.
самое сложно - сделать просто
Потрогал лапой паяльник
Сообщения: 394
Зарегистрирован: Чт май 07, 2026 00:30:38

Сообщение Zapolyarny »

с ошибкой ТРИМ нашёл:
#define HIGH_DISPLAY_TRIM 80 // Максимальное отображаемое значение "ТРИМ"
я сам забыл, что здесь надо показывать с учётом точки, то есть, правильно надо так:
#define HIGH_DISPLAY_TRIM 800 // Максимальное отображаемое значение "ТРИМ", с учётом десятичной точки, например:
// желаемое отображение 34.5 или 3.45 - HIGH_DISPLAY_TRIM одинаково 345, изменяется только местоположение точки в #define DOT_TRIM
Прорезались зубы
Сообщения: 201
Зарегистрирован: Вт июн 01, 2021 22:09:42

Сообщение ЗАВ »

трим заработал норм, давление тоже норм.
счетчик при первом включении и размотке - считает в + норм. намотку ( счет в минус с амплитудой 3,7в) не видит на индикаторе 0. повторяю размотку - не реагирует - на индикаторе ноль.
осциолограму смотрел , ввиду низкой частоты , происходит показ постоянного напряжения с разным уровнем .
самое сложно - сделать просто
Ответить

Вернуться в «АвтоМотоВело»