Mio-tech-service.ru

Автомобильный журнал
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Датчик температуры двигателя b20b

Honda Accord Org24 Style Бортжурнал SWAP F20B DOHC VTEC SIR-T

За все время производства мотора производитель Honda использовал не одинаковое навесное оборудование и маркировку силового привода:

  • отличается геометрия впускного коллектора и выпускного тракта;
  • до 1999 года мощность движка была ограничена 128 л. с., затем эта характеристика увеличилась до 147 л. с.;
  • для внутреннего рынка использовалась маркировка B20B, для внешнего B20Z1.

Основными модификациями силового привода B20B считаются:

В каком авто Honda устанавливалсяМощность (л. с.)Степень сжатияКрутящий момент
StepWGN1259,2185 (4200 мин-1)
CR-V (1997 – 1998)1288,8/9,2182 (5200 мин-1) или 188 (4200 мин-1)
CR-V (1996)1309,6190 (4200 мин-1)
S-MX (1996)1308,8187 (4200 мин-1)
S-MX (1999 – 2000)1409,6190 (4200 мин-1)
Orthia (1995 – 1999)1459,2182 (5200 мин-1) или 188 (4500 мин-1)
CR-V (1999 – 2000)1479,6188 (4500 мин-1)

Модификация B20Z с ресивером большого объема

Датчик DS18B20: схема построения

Прибор DS18B20 имеет сразу 3 ключевых корпуса:

  1. Сторона ТО-92;
  2. Стенка SO-150mil;
  3. Корпус uSOP.

Если говорить о внутренней структуре, то следует рассмотреть небольшую микросхему, которая представлена на рисунке:

Данная микросхема свидетельствует о наличии сразу нескольких ключевых модульных блоков в строении DS18B20, отвечающих за механизм правильного действия устройства.

Итак, начать стоит с блока «POWER SUPPLY SENSE» он обеспечивает полное питание для функционирования всей системы. Помощником «POWER SUPPLY SENSE» является юнфер «PARASIT POWER CIRCUIT», способный ,в случае необходимости, взять на себя функцию распорядителя питания.

К еще одному ключевому элементу в структуре термодатчика следует отнести «64-BITROM AND 1-WIREPORT». Это модуль структуры, отвечающий за хранение уникального кода устройства и передачу этого кода во внутреннюю память DS18B20 «SCRATCHPAD». «SCRATCHPAD», в свою очередь, взаимодействуя с регистрами «MEMORY CONTROL LOGIC» и «1-Wire», подает сигнал связи следующим принципиально-важным блокам датчика:

  • «TEMPERATURE SENSOR»(система, предназначенная для считывания преобразованных показателей температур);
  • «CONFIGURATON REGISTER»(структура, отвечающая за настройку уникальной программируемой точности, которая варьируется от 9 бит до 12 или, если рассматривать градусы Цельсия, от 0.5 °C до 0.0625 °C.);
  • «8-BIT CRC GENERATOR»(система, предназначенная сугубо для защитной функции);
  • «ALARM HIGH TRIGGER» (блок, ограничивающий нижние пределы температуры DS18B20);
  • «ALARM LOW TRIGGER» (система, ограничивающая верхние пределы температуры DS18B20).

Основные преимущества

Датчик ds18b20 обладает массой основных функций и плюсов:

  1. Однопроводный интерфейс 1-Wire требует только один порт связи для контроллера.
  2. Уникальные коды для каждого агрегата.
  3. Одна линия может подключить сразу несколько датчиков.
  4. Не нужны никакие внешние компоненты.
  5. Питание может быть получено напрямую после подключения к линии связи.
  6. Большой диапазон температур, от -55 до +125 градусов Цельсия.
  7. Ошибки и погрешности могут составлять максимум полградуса.
  8. Можно запрограммировать тревожный сигнал.
  9. Адрес датчика будет передаваться тревожным сигналом, если температура вышла за предел допустимого.
  10. Позволяет установить программное обеспечение.
  11. Может применяться практически повсеместно.

Способ 1: чтение показаний DS18B20 по индексу

В этом методе библиотека Dallas Temperature при инициализации обнаруживает все датчики, использующие одну шину. Она рассматривает всю шину как массив датчиков и присваивает им индексы. Поэтому мы можем точно выбрать каждый датчик по его индексу и прочитать показания температуры.

Вывод вышеприведенного скетча выглядит так:

Рисунок 5 – Вывод показаний нескольких датчиков DS18B20 индексным методом

Объяснение кода

Скетч начинается с включения библиотек, объявления вывода, к которому подключена шина датчиков, и создания объекта библиотеки DallasTemperature .

В настроечной части кода мы сначала вызываем функцию begin() . Она инициализирует шину и обнаруживает все DS18B20, присутствующие на ней. Затем каждому датчику присваивается индекс и устанавливается разрешение в 12 бит.

Затем мы вызываем функцию getDeviceCount() , чтобы получить количество устройств, найденных на шине.

В циклической части кода мы используем функцию requestTemperatures() , чтобы отправить команду всем датчикам для преобразования температуры.

Теперь, используя простой цикл for(int i = 0; i , мы можем перебирать массив датчиков и считывать температуру DS18B20 по индексу i , просто вызывая getTempCByIndex(i) .

Читать еще:  Эквивалентный режим работы двигателя

Режим измерения температур

Как проверить работоспособность датчика? Преобразовывать температуру в цифровые данные – вот основная функция датчика. Разрешение цифровых кодов задает сам владелец. Когда питание подключено, DS18B20 потребляет малое количество энергии. Для инициации измерения температур, микроконтроллер выполняет команду преобразования температуры. Когда процесс завершается, результаты находятся в 2 байтах регистра.

Если подключена схема внешнего питания, микроконтроллер может следить за состоянием конвертации. Он читает состояние линии, то есть, другими словами – выполняет временные слоты чтения. Далее, когда команда завершиться, линия переходит в высокое состояние. Когда выполняются процессы конвертации, она, наоборот, в низком положении.

Способ невозможен, если владелец хочет использовать паразитную емкость. На шине должен быть стабильный высокий уровень сигнала, что невозможно в таких условиях. Поэтому данный метод не является корректным в этом случае.

Как проверить полученный результат? Датчик предоставит все данные в 16-ти разрядном знаковом числе с дополнительным кодом. Если разрешение выставлено 12 быт, то регистр предоставляет наиболее точные результаты.

Датчик температуры DS18B20,Arduino и библиотека OneWire.

Так исторически сложилось, что на текущий момент одним из самых популярных цифровых температурных датчиков является датчик DS18B20 корпорации Dallas Semiconductor. Конечно же и мы не можем обойти его стороной.

Сейчас вы можете приобрести его в разном исполнение. И как готовый модуль, в влагозащитном корпусе, просто датчик в разном исполнении. Дума каждому найдется предложение для его нужд.

Особенности датчика :

  • Простой интерфейс подключения 1-Wire .
  • Наличие уникального 64-битного адреса датчика, для использование систем с большим числом датчиков.
  • Напряжение питания от 3 V до 5.5 V .
  • Точность в ±0,5 С, для диапазона -10…+85 С . Для диапазона -55… +125 точность ± 2 С.
  • Возможность паразитного питания (Parasite power).

Более подробно можно почитать в Datasheet или на русском . Мы не будем заморачиваться с паразитным питание и подключим датчик всем тремя проводами. Если у вас не готовый модуль о вам придется поставить еще подтягивающий резистор для работы по 1-Wire.

Вся память DS18B20 включает в себя оперативную (SRAM) и энергонезависимую (EEPROM) память. В EEPROM хранятся регистры TH, TL и регистр конфигурации. Если функция тревожного сигнала не используется, то регистры TH и TL могут использоваться как регистры общего назначения. В режиме термостата TH содержит значение верхнего порога температуры, TL соответственно нижнего порога.

Кодинг.

Первым делом нам потребуется библиотека OneWire которая нам очень упростит жизнь. Скачать можно с GitHub или с нашего сайта.

Любое общение с датчиком начинается с команды Reset . То есть МК прижимает шину данных в состояние логический «0» на 480 µs, потом отпускает ее. Датчик отвечает на это сигналом присутствия, после чего мы отправляем команду Skip ROM ( 0xCC ) . Тое сть обратимся ко всем датчика которые присутствуют на шине.

Конструктор, Pin – номер вывода, к которому подключен датчик.

Инициализация операции на шине. С этой команды должна начинаться любая операция обмена данными. Возвращает:

  • 1 – если устройство подключено к шине (был ответный импульс присутствия);
  • – если устройство отсутствует на шине (ответного импульса не было).

Запись байта. Передает байт в устройство на шине.

  • v – байт;
  • power – признак выбора режима питания;
    power = – питание от внешнего источника.
    power = 1 – “паразитное” питание.

Отправим команду 0x44 инициализации измерения температуры.

Пауза 1 сек . Ожидание на время, необходимое для выполнения датчиком преобразования температуры. Это время зависит от выбранной разрешающей способности датчика. Разрешение 12 бит установлено в датчике по умолчанию. Время преобразования для него – 750 мс.

Затем мы отправляем команду Reset , Skip ROM ( 0xCC ) , а замет команду 0xBE чтения памяти датчика.

uint8_t.read_bytes(buf, 9) — Чтение 9 ти байтов данных.

Основные команды библиотеке OneWire :
  • search(addressArray) – ищет температурный датчик, при нахождении в массив addressArray записывается его код, в ином случае – false.
  • reset_search() – производится поиск на первом приборе.
  • reset() – выполнение сброса шины перед тем, как связаться с устройством.
  • select(addressArray) – выбирается устройство после операции сброса, записывается его ROM код.
  • write(byte) – производится запись байта информации на устройство.
  • write(byte, 1) – аналогично write(byte), но в режиме паразитного питания.
  • read() – чтение байта информации с устройства.
  • crc8(dataArray, length) – вычисление CRC кода. dataArray – выбранный массив, length – длина кода.
Читать еще:  Двигатель aac фольксваген характеристики

Вот и сам код из библиотеке :

Собственно это библиотека подходить для всех датчиков семейства DS18 (DS18B20, DS18S20, DS1820, DS1822) подключение ни чем не отличается. Ну а некоторые различия можно уже узнать из datesheet к ним.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Схема подключения датчиков:

Назначение выводов:

Также существует герметичная версия DS18B20, в таких датчиках смотрим на цвета проводов.

PINЦветTO-928-PIN SOICОПИСАНИЕ
GNDЧерный15Масса
DQЖелтый, Белый или Синий24Линия данных интерфейса 1-Wire.
VDDКрасный33Вход внешнего питания.

Подключение одного датчика:

Датчик (ногу DQ) можно подключать на любой свободный выход arduino, в данном случаи датчик подключен к аналоговому А1 (он же 15 цифровой). В коде, при необходимости, можно задать любой другой, на котором будет сконфигурирована шина 1-Wire.

Также необходимо притянуть линию данных к питанию резистором на 4,7к. Питание у датчика 5 вольт.

Подключение нескольких датчиков:

Дополнительные датчики подключаются параллельно.

Подключение датчика с фантомным питанием:

Не рекомендуется, без крайней необходимости подключать датчик подобным образом, это плохо сказывается на быстродействии и стабильности работы датчика.

Для работы с датчиками необходима библиотека OneWire, скачать можно тут или тут, благодаря которой можно работать со всей линейкой устройств от Maxim/Dallas с однопроводной шиной (1-Wire), включая DS18B20.

Также, для удобства работы с датчиками DS18B20, рекомендуется использовать библиотеку DallasTemperature, особенно если датчиков на шине несколько, можно скачать тут или тут, она работает поверх библиотеки OneWire. Библиотека обширная, возможно будет тяжела для освоения начинающим, особенно по примерам из комплекта.

Пример работы с одним датчиком, без DallasTemperature:

Открываем пример DS18x20_Temperature.pde из библиотеки OneWire.

Далее в 10 строке указываем пин к которому подключен датчик, изначально там указан 10 пин, а в нашем случаи это A1, то есть, меняем «OneWire ds(10);» на «OneWire ds(A1);» и загружаем в arduino. Открываем «монитор порта» в мониторе каждую секунду приходят следующие данные.

ROM = 28 A8 3E F9 5 0 0 12 — Адрес датчика на шине в HEX формате.
Chip = DS18B20 — Тип датчика, вычисляется из адреса датчика.
Data = 1 C0 1 4B 46 3F FF 10 10 6F CRC=6F — Данные о температуре в HEX формате.
Temperature = 28.00 Celsius, 82.40 Fahrenheit — Температура в двух системах.

Алгоритм получения данных с датчика:

Получение температуры в примере DS18x20_Temperature.pde, происходит в три этапа.

Первым нужно узнать адрес датчика на шине и подключен ли он вообще,

за это отвечает код выше и функция ds.search(addr), которая, если найдет устройство, положит его адрес в массив addr. Можно эту процедуру опустить, если адрес датчика заранее известен.

Вторым отправляется команда на датчик, чтобы он прочитал температуру и положил данные в регистр.

на это датчику требуется относительно много времени, порядка 750мс.

Третьем даем команду на чтение данных из регистра и в цикле считываем ответ в массив

и попутно отправляем его в «монитор порта» для отладки, ниже конвертируем в привычные нам Цельсии или Фаренгейты.

Пример целиком, на всякий случай

Работа с библиотекой DallasTemperature:

Получать температуру с датчиков библиотекой DallasTemperature можно разными методами, у каждого метода есть свои особенности, но по порядку.

Работа с датчиками по индексу:

Родными примерами из библиотеки пользоваться не будем, разберем упрощенную версию, что ниже. Датчик температуры все также подключен ко входу А1.

Пример крайне упрощен и по сути не отличается от кода из примера «DS18x20_Temperature.pde» библиотеки OneWire.

При инициализации просиходит поиск устройств на шине и каждому устройству назначается свой «индекс» по номеру которого, функцией getTempCByIndex(0), можно достать температуру из датчика. Перед считыванием нужно вызвать функцию requestTemperatures() которая дает команды на подключенные датчики считать температуру и положить её в регистр для считвания.

Читать еще:  Что такое электрореактивные двигатели

Метод не стабилен при работе с несколькими датчиками, ибо если будут проблемы с обнаружением одного из нескольких датчиков на шине, индексы перестроятся и будем получать ошибочные показания. Также такой метод, не всегда имеет смысл использовать при работе с одним датчиком, зачем использовать тяжелую библиотеку, если достаточно одной функции в коде?

Еще один пример работы с датчиками по индексу, этот пример использоватся в видео. Он отправляет в «монитор порта» температуру со всех подключенных датчиков. Для получения количества подключенных датчиков, вызывается функция getDeviceCount(), которая возвращает значение в переменную qty. В loop, также даем команду датчикам, вызывая функцию requestTemperatures(), а ниже, в цикле for, используя количество подключенных датчиков, отпраляем в монитор порта температуру со всех подключенных датчиков.

Работа с датчиками по ID:

В данном случаи обращаемся к датчику не по назначенному библиотекой «индексу», а по серийному номеру датчика, заданного в коде,

и в данном случаи мы исключаем возможность считать температуру с неправельного датчика, но нужно зарание задать серийный номер. Если задавать его в коде, то устройство будет привязано к конкретному датчику, что осложнит замену датчика при его неисправности.

В коде объяевленны два массива sensor1 и sensor2 в которых хранятся 8 битный серийный номер датчика. В loop после вызова функции requestTemperatures() считываем температуру функцией getTempC(sensor1) передавая ей массив с серийным номером датчика, функция возвращает значение температуры с датчика, которую отправляем в «монитор порта», в случаи если датчика с таким серийным номером на шине не окажится, функция вернет -127.0

Еще один пример из видео, работающий по такому принципу ниже. Он отображает полученную температуру с датчика на LCD сшилде.

Работа с ID:

И заключительный простой пример, в данном случаи, при включении микроконтроллера и всего прочего, вызываем функцию getDeviceCount() которая возвращает количество найденых датчиков на шине, это количество отправляем в «монитор порта» но правельее сделать проверку на наличие датчиков и остановку устройства если датчики не найдены.

Следом вызываем функцию getAddress(sensor0, 0), в функцию передаем массив sensor0 который в нашем случаи объявлен в 7 строке кода и индекс датчика, адрес которого функция присвоит в sensor0.

Следом, в цикле for отправляем в монитор порта содержимое массива sensor0, в котором должен содержатся серийный номер датчика, если все прошло успешно

В функции setResolution(sensor0, 11) устанавливаем разрешение получаемой с датчика sensor0 температуры по его серийному номеру, может быть 9, 10, 11, 12 бит, данный параметр не влияет на точность датчика.

в loop, как и в примере выше, отправляем значение температуры с датчика в «монитор порта» по серийному номеру

Зачем нужен этот пример? если с таким же успехом, можно написать ds.getTempCByIndex(0), с одним датчиком так и нужно, а если их много? серийный номер датчика можно записать в EEPROM с привязкой к конкретной задачи, отслеживать получение верных данных с конкретного датчика, все это повышает надежность устройства.

Применение термодатчика на Ардуино

Для сборки измерителя температуры в основе которого микроконтроллер Arduino нужно подготовить следующее:

  • Ардуино UNO;
  • коннекторы;
  • монтажная плата;
  • цифровой модуль DS18B20 (диапазон от −56 до +1250 С).

Цифровой температурный датчик DS18B20 — это устройство, которое не только сигнализирует о превышении заданного температурного порога, но и может запоминать значения измерений. Микросхема датчика имеет три выходных контакта — это «+», «−» и сигнальный провод. Термодатчик в водонепроницаемом исполнении используется для измерения нагрева воды или жидкостей.

Термодатчик всегда можно приобрести, как и плату Arduino, в интернет-магазинах. Цифровой модуль подсоединяют к Ардуино через каналы GND, а выход Vdd подключается к 5V, Data к любому Pin. Для более понятного восприятия схема подключения цифрового датчика DS18B20 к Ардуино представлена на нижеследующем фото.

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector