Датчик температуры повышенной точности
ABB – JOKAB5Advantech1Ametherm4Amphenol4Analog Devices77Aosong1Autonics1AVX1Banner Engineering8CALEX1Cynergy317EPCOS10GXCAS8Heraeus46HES2Honeywell36HRUS6 Infineon1IST1Kemet1KUEBLER1Labfacility22Line Energy4Maxim221MCM1Melexis3Microchip81MICROTHERM1Molex3Murata15National3No trademark3NOVOSENSE1NXP58 OMEGA63Omron9ON Semiconductor20Panasonic5Pepperl+Fuchs3Red Lion1Rohm3Schneider1Semitec1Sensata1Sensirion2Silicon Labs7Smartec3SNCR2ST Microelectronics27TDK30TE Connectivity12 Telemecanique4Texas Instruments193UMW3VCC1VIGOR1Vishay10XSEC1ZF1Китай5Новатек-Электро1Овен11Россия2СКБ-Индукция1Эра14 -20010-1961-752-709-601-5575-508-451-4053-253-20101+52+101 701807+854+10011+1053+1101+12570125111301+150231509+175126063003500105403 вода12газ6газ/жидкость9газ/поверхность123 аналоговый/напряжение34аналоговый/токовый11зависимость r от t9зависимость сопротивления от температуры1напряжение14открытый коллектор3Открытый Сток1токовый8цифровой11цифровой (1-wire)19цифровой (2-wire serial, i2c/smbus)1цифровой (3-wire(CLK, DQ, RST))1Цифровой (I2C)20цифровой (i2c/smbus)9цифровой (pwm)2цифровой (smbus)1цифровой (spi)4 Москва Центральный офис / склад Щербинка, Симферопольское, 14АБеговая, 2Гиляровского, 39Волгоградский, 9/1 Санкт-Петербург Медиков, 9БВосстания, 8а Вологда Ленинградская, 81 Екатеринбург Ленина, 48Краснодарская, 7 Казань Николая Ершова, 28 Кемерово ул. Терешковой, 22А Краснодар Ставропольская, 81 Красноярск Красноярский Рабочий, 104 Набережные Челны Набережночелнинский, 31А Нижний Новгород Максима Горького, 65А Новосибирск Семьи Шамшиных, 66 Ростов-на-Дону Соколова, 53/182 Саратов Большая Горная, 353 Ставрополь Дзержинского, 131 Томск переулок 1905 года, 9 Ярославль Московский пр-кт, 97
| быстрый просмотр Honeywell 98 шт. 1 360 руб. быстрый просмотр Honeywell 16 шт. 2 510 руб. быстрый просмотр Honeywell 16 шт. 2 030 руб. быстрый просмотр Analog Devices 624 шт. 390 руб. быстрый просмотр Analog Devices 282 шт. 540 руб. быстрый просмотр Analog Devices 272 шт. 250 руб. быстрый просмотр Analog Devices 138 шт. 1 360 руб. быстрый просмотр Analog Devices 899 шт. 230 руб. быстрый просмотр Analog Devices 140 шт. 500 руб. быстрый просмотр Analog Devices 181 шт. 180 руб. быстрый просмотр Maxim 309 шт. 170 руб. быстрый просмотр Maxim 206 шт. 120 руб. быстрый просмотр Maxim 63 шт. 270 руб. быстрый просмотр Maxim 395 шт. 320 руб. быстрый просмотр Maxim 2639 шт. 180 руб. быстрый просмотр Maxim 156 шт. 740 руб. быстрый просмотр Maxim 1185 шт. 120 руб. быстрый просмотр Maxim 2989 шт. 190 руб. быстрый просмотр Honeywell 4 дня, 2 шт. 6 030 руб. быстрый просмотр Honeywell 41 шт. 3 430 руб. |
Датчики температуры – устройства, определяющие температуру воздуха и других газообразных и жидкостных сред в диапазоне от -70 до +2300 °С.
В основе работы ДТ лежит пропускание через них электрических сигналов. Показатели измеряемой температуры преобразовываются в сопротивление стабильной линейной зависимости.
Датчики температуры могут иметь отрицательный или положительный коэффициент, а также обладают высокой чувствительностью к измеряемой температуре.
Обычно ДТ оснащаются встроенной схемой усиления сигналов, которая позволяет устанавливать требуемые температурные зависимости.
Посмотреть и купить товар вы можете в наших магазинах в городах: Москва, Санкт-Петербург, Белгород, Владимир, Волгоград, Вологда, Воронеж, Гомель, Екатеринбург, Ижевск, Казань, Калуга, Кемерово, Киров, Краснодар, Красноярск, Курск, Липецк, Минск, Набережные Челны, Нижний Новгород, Новосибирск, Омск, Орёл, Пермь, Псков, Ростов-на-Дону, Рязань, Самара, Саранск, Саратов, Смоленск, Ставрополь, Тверь, Томск, Тула, Тюмень, Уфа, Чебоксары, Челябинск, Ярославль.
Доставка заказа почтой, через систему доставки Pickpoint или через салоны «Связной» в следующие города: Тольятти, Барнаул, Ульяновск, Иркутск, Хабаровск, Владивосток, Махачкала, Томск, Оренбург, Новокузнецк, Астрахань, Пенза, Чебоксары, Калининград, Улан-Удэ, Сочи, Иваново, Брянск, Сургут, Нижний Тагил, Архангельск, Чита, Курган, Владикавказ, Грозный, Мурманск, Тамбов, Петрозаводск, Кострома, Нижневартовск, Новороссийск, Йошкар-Ола и еще в более чем 1000 городов и населенных пунктов по всей России.
Товары из группы «Датчики температуры» вы можете купить оптом и в розницу.
Источник
При точности ±0.1 °C в широком диапазоне температур однокристальные цифровые датчики температуры помогают инженерам снизить сложность их конструкций
Texas Instruments (TI) представила новое семейство цифровых датчиков температуры с точностью измерений ±0.1 °C в широком диапазоне температур, которые помогут упростить разработку систем для промышленных и медицинских приложений. TMP117 – это первый однокристальный датчик температуры, достигший точности платиновых резистивных датчиков (RTD), тогда как TMP117M является цифровым датчиком для медицинских приложений и отвечает всем требованиям, предъявляемым к медицинским термометрам. При этом новые приборы значительно снижают сложность и энергопотребление конструкции. Новые датчики позволят инженерам быстрее разрабатывать высокоточные устройства со сверхнизким потреблением мощности для контроля пациентов, полевых передатчиков и измерений.
Высокая точность достигается без калибровки
Гарантируя точность ±0.1 °C в широком диапазоне с калибровкой нуля, выполняемой на этапе производства, новое семейство датчиков экономит время разработчиков и снижает производственные затраты для систем, требующих высокой точности измерений.
- Поддерживает требования клинической диагностики:
В медицинских приложениях TMP117M в диапазоне температур от 30 °C до 45 °C гарантирует точность ±0.1 °C и соответствует рекомендациям ASTM E1112 и требованиям стандарта ISO 80601 для термометров пациентов.
- В промышленных приложениях достигает типичной точности резистивных датчиков сопротивления класса AA:
TMP117 обеспечивает прямой отсчет температуры без дополнительных ошибок линеаризации или выборки, гарантируя следующую точность измерений:- ±0.1 °C от –20 °C до +50 °C,
- ±0.15 °C от –40 °C до +50 °C,
- ±0.2 °C от –40 °C до +100 °C,
- ±0.25 °C от –55 °C до +125 °C,
- ±0.3 °C от –55 °C до +150 °C;
Функциональная схема TMP117. |
Минимизируют сложность системы и программного обеспечения
Новые цифровые датчики температуры позволяют инженерам:
- Упростить систему:
TMP117 предоставляет инженерам необходимую для их приложения точность, освобождая их от необходимости решать сложные проблемы проектирования и изготовления типовых решений. Для сравнения, чтобы достичь такого же уровня точности с платиновыми RTD, инженеры должны подобрать множество прецизионных компонентов, смоделировать и точно настроить схему, тщательно развести печатную плату, чтобы избежать рассогласований импедансов, разработать программы для линеаризации выходного сигнала и откалибровать каждую систему.
- Сократить время разработки:
TMP117 и TMP117M совместимы с интерфейсами I2C и SMBus и обеспечивают прямой цифровой отсчет температуры, который значительно упрощает конструкцию, уменьшает время разводки платы и моделирования и, в конечном счете, ускоряет появление на рынке нового продукта.
Зависимость ошибки измерения от температуры. |
Снижают потребляемую мощность до 95%
Потребляя лишь 6.3 мкВт, TMP117 и TMP117M позволяют разработчикам повысить точность измерений и увеличить срок службы батарей.
- Значительно меньшее потребление мощности:
Потребляемая TMP117 мощность до 95% меньше, чем у типичных измерительных систем на основе RTD, что позволяет инженерам соблюдать строгие ограничения на бюджет мощности в полевых передатчиках или приложениях с батарейным питанием.
- Минимальное влияние саморазогрева:
Низкая мощность, потребляемая датчиками TMP117 и TMP117M, минимизирует влияние саморазогрева, повышая точность измерений температуры.
TMP117 и TMP117M пополнили портфель цифровых датчиков температуры TI, с помощью которых инженеры могут интегрировать в свои проекты интеллектуальный контроль температуры, выбирая варианты с высокой точностью, низкой мощностью потребления или миниатюрным корпусом.
Инструменты и средства ускорения разработки
Быстро приступить к разработке высокоточных приложений инженерам поможет оценочная плата TMP117EVM.
Оценочная плата цифрового датчика температуры TMP117 (TMP117EVM). |
Корпус, доступность и цена
Цифровые датчики температуры для медицинских приложений TMP117M и датчики TMP117 могут быть приобретены в промышленных объемах в онлайн магазине TI. Оба устройства выпускаются в 6-контактном безвыводном корпусе WSON. Цифровой датчик температуры TMP117 и цифровой датчик температуры для медицинских приложений TMP117M в партиях из 1000 приборов продаются по ценам $1.60 и $2.44 за штуку, соответственно.
Источник
Цифровые датчики температуры повышенной точности серии TSic
Интегральные датчики температуры производства швейцарской компании IST выпускаются под брендом TSic. Ранее бренд TSic принадлежал ныне несуществующей немецкой компании ZMD.
Каждый датчик состоит из источника опорного напряжения с пропорциональным температуре выходом, прецизионного АЦП, DSP-процессора и энергонезависимой памяти, хранящей калибровочные таблицы. Главным отличем серии TSic является высокая точность измерений. Датчики TSic поставляются с заводской калибровкой.
* К артикулу датчиков TSic 5xx добавляется буква “F”. Это обозначение относится только к производственному процессу, датчики TSic 5xxF и TSic 5xx обладают идентичными характеристиками.
Помимо стандартных корпусов TO92 и SOP-8 (см. рисунок), датчики выпускаются в нестандартных исполнениях.
Серия TSic 2xx
Датчики TSic 201, TSic 203 и TSic 206 имеют рабочий диапазон температур -50 .. +150°C и обеспечивают на нём следующую точность:
- ±0.5°C на диапазоне от +10 до +90°C
- ±1.0°C на диапазонах от -20 до +10°C и от +90 до +110°C
- ±2.0°C на диапазонах от -50 до -20°C и от +110 до +150°C
Наличие на складе
Серия TSic 3xx
Датчики TSic 301, TSic 303 и TSic 306 имеют рабочий диапазон температур -50 .. +150°C и обеспечивают на нём следующую точность:
- ±0.3°C на диапазоне от +10 до +90°C
- ±0.6°C на диапазонах от -20 до +10°C и от +90 до +110°C
- ±1.2°C на диапазонах от -50 до -20°C и от +110 до +150°C
Наличие на складе
Серия TSic 5xxF
Датчики TSic 501F, TSic 503F и TSic 506F имеют рабочий диапазон температур -10 .. +60°C и обеспечивают на нём следующую точность:
- ±0.1°C на диапазоне от +5 до +45°C
- ±0.2°C на диапазонах от -10 до +5°C и от +45 до +60°C
Наличие на складе
Серия TSic 7xx
В данной серии представлен единственный датчик – TSic 716 с цифровым выходом. Датчик имеет рабочий диапазон температур -10 .. +60°C и обеспечивают на нём следующую точность:
- ±0.07°C на диапазоне от +25 до +45°C
- ±0.2°C на диапазонах от -10 до +25°C и от +45 до +60°C
Наличие на складе
На рисунках выше показаны стандартные границы диапазонов температур, на которых обеспечивается минимальная погрешность измерений. По запросу выпускаются датчики TSic со “сдвинутым” диапазоном – например, стандартные микросхемы TSic 716 обеспечивают точность ±0,07 °C на диапазоне от +25 до +45 °C, однако могут быть произведены датчики с точностью ±0,07 °C в диапазоне температур от −10 до +10 °C, от +3 до +23 °C, от +30 до +50 °C и так далее.
Датчики с нестандартным диапазоном повышенной точности доступны под заказ.
ПОДКЛЮЧЕНИЕ ДАТЧИКА И ВЫХОДНОЙ СИГНАЛ
Для подключения любой модели датчика TSic используется три линии – питание (от 3.0 до 5.5 В), сигнал и GND. В зависимости от модели датчика, с сингальной линии снимается аналоговый, ратиометрический или цифровой (11 или 14 бит) сигнал.
Аналоговый сигнал (от 0 до 1 В)
Датчики с аналоговым выходом обозначаются как TSic 201, TSic 301 и TSic 501F. Для вычисления значения температуры используется следующая формула:
Ратиометрический сигнал (от 10 до 90% Vпит)
Датчики с ратиометрическим выходным сигналом (от 10 до 90% Vпит) обозначаются как TSic 203, TSic 303 и TSic 503F. Для вычисления значения температуры используется следующая формула:
Цифровой сигнал
Датчики с цифровым выходом используют для обмена информации с микроконтроллером однопроводной интерфейс. В посылке с данными содержится 11 или 14 значащих разрядов.
Таким образом, для датчиков TSic 206, TSic 306 и TSic 506F используется следующая формула для вычисления температуры:
Для 14-разрядного датчика TSic 716 используется другая формула:
Подробное описание работы с однопроводным интерфейсом датчиков TSic 206, TSic 306, TSic 506F и TSic 716 на русском языке доступно в статье, посвященной датчикам данной серии.
Приведем расшифровку использованных обозначений:
- Tвых – искомое значение температуры, °C
- Vвых – выходное напряжение датчика, В
- Vпит – напряжение питания датчика, В
- выходное значение – цифровой сигнал на выходе микросхемы
- Tверх – верхняя граница рабочего температурного диапазона, °C
Tверх = +150°C для TSic 20x и TSic 30x, Tверх = +60°C для TSic 50xF и TSic 716 - Tниж – нижняя граница рабочего температурного диапазона, °C
Tниж = -50°C для TSic 20x и TSic 30x, Tниж = -10°C для TSic 50xF и TSic 716
СТОИМОСТЬ
Цены, действующие на штучные образцы со склада, указаны на сайте.
Вы можете рассчитывать на значительные скидки при заказе оптовых партий – уже при заказе 100 датчиков цена элемента снизится на 20%.
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ
Наиболее полные сведения о датчиках TSic доступны на сайте производителя и в Application Note.
Также рекомендуется к прочтению статья о датчиках TSic из корпоративного блога компании ЭФО. Помимо прочего, в статье рассмотрен пример реализации опроса датчика с цифровым интерфесом, приведен исходный код примера программы для микроконтроллера.
Источник
Продолжаем серию материалов об особенностях применения различных датчиков и чувствительных элементов.
Герой сегодняшней статьи, на первый взгляд, не представляет собой ничего особенного — мало ли мы видели цифровых датчиков температуры. Однако у серии TSic есть два необычных свойства: действительно высокая точность (до ±0.07°C у старшей модели) и малоизвестный однопроводной интерфейс ZACwire.
Под катом подробно описываем номенклатуру стандартных датчиков TSic и кастомные решения, разбираемся в особенностях коммуникационного протокола, смотрим примеры программ для МК. Словом, делаем всё чтобы убедить уважаемого читателя в том что датчики TSic стоят своих денег.
TSic — это серия цифровых датчиков температуры, которые в прошлом выпускались под брендом ZMDI, а сейчас принадлежат швейцарской компании IST AG.
Чувствительным элементом датчика служит высокоточный источник опорного напряжения с выходом, пропорциональным температуре (bandgap reference with a PTAT (proportional-to-absolute-temperature). Как и другие интегральные датчики температуры, TSic также содержит АЦП, схему обработки сигнала, EEPROM с данными для калибровки и выходной интерфейс.
Между собой стандартные модели датчиков TSic различаются рабочим диапазоном температур, точностью, типом выходного сигнала и корпусом.
Рабочий диапазон температур и точность
Датчики TSic 20x и TSic 30x имеют рабочий диапазон температур от -50 до +150°C и три «зоны точности». На графике показана максимальная погрешность датчиков на различных диапазонах температуры.
Датчики TSic 50x предназначены для более узкого диапазона температур — от -10 до +60°C. На участке повышенной точности шириной 40 градусов датчики TSic 50x обеспечивают точность ±0.1°C, на остальном диапазоне — ±0.2°C.
Самый
дорогой
высокоточный датчик TSic — это модель TSic 716. На узком 20-градусном участке этот элемент обеспечивает ±0.07°C.
Отличием датчика TSic 716 также является более высокая разрядность (разрешение). Если в датчиках TSic 206, TSic 306 и TSic 506 встроен 11-битный АЦП, то TSic 716 оснащен 14-разрнядным преобразователем.
Таким образом, разрешение датчиков TSic 206 и TSic 306 составляет ,
разрешение TSic 506 составляет ,
разрешение TSic 716 составляет .
Кастомная калибровка
Выше описаны стандартные исполнения датчиков TSic, однако диапазон повышенной точности любого из датчиков TSic может быть «сдвинут» при производстве элемента. Так, например, под заказ доступны датчики TSic 50x с повышенной точностью на участке от -10 до 30°C или от 13 до 53°C. Аналогично для других моделей TSic.
Корпус
Датчики серии TSic выпускаются в корпусах SOP-8 и TO92, распиновка доступна в документации.
Кроме того, существует возможность поставки датчиков TSic в нестандартных корпусах, с разного рода кабелями, коннекторами, контактными площадками и так далее. Тут всё обсуждается индивидуально, но сразу скажу, что для использования этой возможности совершенно не обязательно иметь проект на сотни датчиков в год.
Подключение датчика
Для подключения любой модели TSic понадобятся соединения по питанию и земле, а также одна сигнальная линия.
Рабочее напряжение датчика — от 3 до 5.5В. Часто датчик удобнее запитать от одного из GPIO управляющего контроллера. Во-первых, это позволяет свести к нулю энергопотребление датчика вне цикла измерений, а во-вторых, упрощается детектирование начала посылки, если используется датчик TSic с цифровым выходом.
В случае питания датчика от ножки контроллера производитель рекомендует позаботиться об исключении влияния шумов и добавить на линию питания RC-цепочку.
Выходной сигнал
Датчики TSic 20x, TSic 30x и TSic 50x могут иметь аналоговый, ратиометрический или цифровой выход. В первом случае напряжение на выходе изменяется от 0 до 1 В пропорционально температуре среды, во втором случае — от 10 до 90% от напряжения питания. Датчики с цифровым выходом используют протокол ZACWire, о котором мы подробно поговорим чуть ниже.
Во всех трёх случаях выходной сигнал пропорционален температуре, т.е. для расчета температуры используются простые формулы.
Для датчиков TSic с аналоговым выходом:
Для датчиков TSic с ратиометрическим выходом:
Для датчиков TSic с цифровым выходом:
или
где
Примеры сигналов на выходе датчиков TSic приведены в таблице.
Для датчиков TSic 20x / TSic 30x | ||||
Измеряемая температура, °C | Аналоговый выход | Ратиометрический выход | Цифровой выход | |
-50 | 0.000В | 10% V+ (0.5В при V+=5В) | 0x000 | |
-10 | 0.200В | 26% V+ (1.3В при V+=5В) | 0x199 | |
0.250В | 30% V+ (1.5В при V+=5В) | 0x200 | ||
+25 | 0.375В | 40% V+ (2.0В при V+=5В) | 0x2FF | |
+60 | 0.550В | 54% V+ (2.7В при V+=5В) | 0x465 | |
+125 | 0.875В | 80% V+ (4.0В при V+=5В) | 0x6FE | |
+150 | 1.000В | 90% V+ (4.5В при V+=5В) | 0x7FF | |
Для датчиков TSic 50xF / TSic 716 | ||||
11-бит (TSic 506F) | 14-бит (TSic 716) | |||
-10 | 0.000В | 10% V+ (0.5В при V+=5В) | 0x000 | 0x0000 |
0.143В | 21.4% V+ (1.07В при V+=5В) | 0x124 | 0x0924 | |
+25 | 0.500В | 50% V+ (2.5В при V+=5В) | 0x3FF | 0x01FF |
+60 | 1.000В | 90% V+ (4.5В при V+=5В) | 0x7FF | 0x3FFF |
Чаще всего, впрочем, выбирают датчики с цифровым выходом, это позволяет не задумываться о влиянии схем обработки аналогового сигнала на точность измерений. При этом цифровой датчик TSic использует столько же ножек МК, сколько и аналоговый датчик, плюс он немножко дешевле.
Очевидный минус датчика TSic с цифровым выходом — нестандартный интерфейс, для которого на ваш МК ещё нет готовой библиотеки. Очевидный плюс — этот интерфейс очень простой.
Протокол ZACWire
ZACWire — однопроводной протокол, использующий кодировку, напоминающую Манчестерскую.
Датчик с заранее определенной частотой передаёт данные о температуре — два восьмибитных пакета данных. Каждый из пакетов начинается стартовым битом и заканчивается битом чётности. В зависимости от модели датчика, в каждой посылке либо 11, либо 14 значащих разрядов, первым идет старший бит.
Пассивным состоянием лини данных является высокий уровень. Каждый бит посылки TSic начинается со спада сигнала и занимает 125 микросекунд. Состояние линии данных фиксируется на середине этого интервала — если по прошествии 62.5 мксек со спада сигнала на линии высокий уровень, то записываем логическую «1», если низкий, то логический «0». Коэффицент заполнения в первом случае равняется 75%, в втором — 25%.
Коммуникационный интерфейс ZACWire не использует отдельного тактового сигнала, поэтому отсчёт тактов производится на стороне микроконтроллера.
Стартовый бит также начинается со спада сигнала, но имеет коэффициент заполнения 50%. Стартовый бит может использоваться как для детектирования начала посылки, так и для измерения длительности такта, если она не известна заранее: временной период между спадом и фронтом стартового бита равен Tstrobe — времени, по истечении которого нужно проверять состояние линии при чтении очередного бита.
С другой стороны, для стандартных датчиков TSic значение Tstrobeизвестно заранее
и равно 125 / 2 = 62.5 мксек, поэтому на практике стартовый бит просто детектируют и пропускают.
Биты чётности декодируются так же, как и биты данных. В отсутствии внешних помех и небольшой длине соединения (до 2 метров) контроль целостности, как правило, не требуется. Между окончанием первого пакета и вторым стартовым битом на линии установлен высокий уровень.
Чтобы внести окончательную ясность, рассмотрим осциллограмму пакета данных датчика TSic 306.
Посылка начинается со стартового бита, далее идут незначащие биты данных, которые всегда равны «0», далее идут старшие биты данных — «011», далее бит чётности, соответственно равный «0». Второй пакет начинается через один период (Tstrobe * 2) и содержит стартовый бит, восемь младших бит данных «00011000» и бит чётности, соответственно равный «0».
В результате получаем на выходе 01100011000bin = 792dec и по приведенной выше формуле вычисляем значение температуры.
Если говорить о частоте, с которой датчик TSic передаёт такие посылки с данными, то она устанавливается при производстве компонента и не может быть изменена по ходу использования датчика. Для моделей TSic 206, TSic 306, TSic 506 частота равляется 10 Гц, для TSic 716 — 1 Гц. Под заказ доступны датчики с нестандартной частотой измерений — 250, 10, 1 и 0.1 Гц.
Если задача не предполагает опроса датчика с максимально возможной частотой и на микроконтроллере есть свободная линия, то имеет смысл использовать эту линию для питания датчика. Таким образом, каждый раз когда требуется получить данные с датчика, можно подать питание на датчик и ожидать спада на линии данных — стартового бита первого пакета. Между подачей питания на TSic и передачей посылки пройдет менее 85 микросекунд, а после приёма двух пакетов данных питание датчика можно отключить.
Именно такой способ подключения датчика использовался вашей покорной слугой.
В порядке эксперимента я подключаю две стандартные модели TSic 306 TO92 и TSic 506 TO92 к отладочной плате EFM32ZG-STK3200. По нажатию на кнопку на датчик подаётся питание, принимается одна посылка с данными о температуре, данные обрабатываются, результат выводится на установленный на плату LCD дисплей, после чего датчик от питания отключается.
Отладочная плата EFM32ZG-STK3200 выпускается компанией Silicon Labs (SiLabs)
для работы с микроконтроллерами EFM32 Zero Gecko.EFM32 Zero Gecko — младшая серия семейства EFM32. Эти микроконтроллеры построены на базе ядра ARM Cortex-M0+, имеют стандартный набор встроенный периферии и разные интересные модули для снижения энергопотребления контроллера. Мы уже публиковали на хабре подробную статью об особенностях этой платформы и средствах отладки для EFM32 Zero Gecko.
Сегодня мы вообще не будем касаться специфических программных и аппаратных компонентов EFM32, предназначенных для контроля и снижения энергопотребления. Вместо этого будем использовать самые базовые компоненты и режимы их работы, чтобы полученный алгоритм было проще
перенести на богомерзкий STM
портировать на другие микроконтроллерные платформы.
Итак, от МК нам понадобятся
- Три GPIO: подключенный к кнопке PC9 и свободные PC0 и PC1 для линий питания и данных TSic
- Таймер для тактирования линии данных TSic
- SPI для работы со встроенным дисплеем. SPI я упоминаю просто для порядка, т.к. вся работа с выводом данных проводится с помощью SiLabs-овской библиотеки glib, содержимое которой мне не очень интересно
На отладочной плате, соответственно, мы используем
- Микроконтроллер EFM32ZG222F32
- USB-отладчик SEGGER J-Link USB
- Механическую кнопку PB1
- Разъем expansion header, на котором доступны нужные GPIO и земля
- Дисплей 128×128 пикселей — исключительно симпатичный LCD
Итак, по прерыванию от кнопки подаём на датчик питание, принимаем посылку и отключаем питание. Если при приёме данных возникла ошибка — выдаём соответствующее сообщение, иначе вычисляем температуру в градусах Цельсия и показываем результат на LCD.
void ReceiveTempAndShowIt(void) {
GPIO_PinOutSet(TSIC_VDD_PORT, TSIC_VDD_PIN);
int8_t TSic_result = receiveTSicData();
GPIO_PinOutClear(TSIC_VDD_PORT, TSIC_VDD_PIN);
if (TSic_result == TSIC_IS_OK) {
float temperatureCelsius = calculateCelsius(fullTSicTransmission);
Display_ShowTemperature(temperatureCelsius);
} else if (TSic_result == TSIC_PARITY_ERROR) {
Display_ShowParityError();
} else if (TSic_result == TSIC_TIMING_ERROR) {
Display_ShowTimingError();
}
}
Важно!
Здесь пора отметить, что рассмотренный в этой статье код — совершенно не оптимален. То есть совсем-совсем не оптимален. Ниже вы увидите, как фронты и спады сигнала детектируются с помощью while, как временные интервалы отсчитываются без использования прерываний и прочая, прочая.
Причина такого подхода — желание рассмотреть максимально простой и понятный пример, в котором не будет использоваться вообще никаких специфических для конкретного микроконтроллера функций.
Итак, функция приёма данных receiveTSicData() — это приём двух пакетов данных, вычленение из каждого из них бита чётности и проверка целостности для обоих пакетов.
int8_t receiveTSicData(void) {
uint16_t firstTSicPacket = 0;
uint16_t secondTSicPacket = 0;
bool firstParityBit = 0;
bool secondParityBit = 0;
/* Time critical section [all interrupts disable]:
* Receive two data packets from TSic sensor
*/
INT_Disable();
if (readTSicPacket(1) == PACKAGE_READING_OK) {
firstTSicPacket = currentTSicPacket;
} else {
INT_Enable();
return TSIC_TIMING_ERROR;
}
if (readTSicPacket(0) == PACKAGE_READING_OK) {
secondTSicPacket = currentTSicPacket;
} else {
INT_Enable();
return TSIC_TIMING_ERROR;
}
INT_Enable();
/* Decode received packets */
/* Get parity bit from first packet */
firstParityBit = firstTSicPacket & 0x01;
/* Get 3 data bits from first packet */
firstTSicPacket = firstTSicPacket & 0x0007;
/* Delete first parity bit */
firstTSicPacket >>= 1;
/* Get parity bit from second packet */
secondParityBit = secondTSicPacket & 0x01;
/* Delete second parity bit */
secondTSicPacket >>= 1;
/* Check parity errors and assemble full temperature transmission from TSic */
if (checkParity(firstTSicPacket, firstParityBit) == PARITY_OK
&& checkParity(secondTSicPacket, secondParityBit) == PARITY_OK) {
fullTSicTransmission = (firstTSicPacket << 8) + secondTSicPacket;
return TSIC_IS_OK;
} else {
return TSIC_PARITY_ERROR;
}
}
Функция readTSicPacket(), возвращающая currentTSicPacket, может выглядеть следующим образом.
int8_t readTSicPacket(bool isTheFirstPacket) {
currentTSicPacket = 0;
/* Wait until start bit occurs, return error if it takes too long
*/
if (isTheFirstPacket) {
/* If we are waiting after powering up the sensor */
myTIMER_Start(PRESCALER_1024);
while (TSIC_DATA_HIGH) {
if (TIMER_COUNTER >= WAITING90MS_TICKS) {
return NO_SIGNAL_OCCURS;
}
}
myTIMER_Stop();
} else {
/* If we are waiting just for time between first and second packet */
myTIMER_Start(NO_PRESCALER);
while (TSIC_DATA_HIGH) {
if (TIMER_COUNTER >= TSTROBE_TICKS * 4) {
return NO_SECOND_PACKAGE;
}
}
myTIMER_Stop();
}
/* Check if start bit has occurred:
*
* As Tstrobe = 125 us / 2 = 62.5 us, we need to check if the signal is
* low for about Tstrobe time and then goes high for about Tstrobe time.
*/
myTIMER_Start(NO_PRESCALER);
while (TSIC_DATA_LOW) {
if (TIMER_COUNTER >= TSTROBE_TICKS * 1,1) {
return START_BIT_ERROR;
}
}
while (TSIC_DATA_HIGH) {
if (TIMER_COUNTER >= TSTROBE_TICKS * 2,2) {
return START_BIT_ERROR;
}
}
if (TIMER_COUNTER <= TSTROBE_TICKS * 1,8) {
return START_BIT_ERROR;
}
myTIMER_Stop();
/*
* Receive 8 data bits + 1 parity bit
*/
for (uint8_t i = 0; i <= 8; i++) {
/* Wait for exact Tstrobe time to check the line state */
myTIMER_Start(NO_PRESCALER);
while (TIMER_COUNTER < TSTROBE_TICKS) {
}
myTIMER_Stop();
/* Read bit */
currentTSicPacket <<= 1;
if (TSIC_DATA_HIGH) {
currentTSicPacket |= 1;
}
/* Wait until the end of one-bit-timeframe.
*/
if (TSIC_DATA_LOW) {
myTIMER_Start(NO_PRESCALER);
while (TSIC_DATA_LOW) {
if (TIMER_COUNTER >= TSTROBE_TICKS * 0,6) {
return PACKAGE_TIMING_ERROR;
}
}
myTIMER_Stop();
}
/* Last bit (parity bit) doesn’t end up with falling edge so we should
* wait for the next falling edge just for data bits.
*/
if (i != 8) {
myTIMER_Start(NO_PRESCALER);
while (TSIC_DATA_HIGH) {
if (TIMER_COUNTER >= TSTROBE_TICKS * 1,1) {
return PACKAGE_TIMING_ERROR;
}
}
myTIMER_Stop();
}
}
return PACKAGE_READING_OK;
}
Настройки самого микроконтроллера и таймера слишком сильно зависят от используемой платформы, чтобы приводить их в тексте статьи про датчик.
Функции проверки целостности и вычисления температуры в градусах Цельсия также не представляют собой совершенно ничего примечательного.
Функция проверки целостности пакета TSic
uint8_t parityCounter = 0;
for (uint8_t i = 0; i <= 7; i++) {
if (package & (1 << i)) {
parityCounter++;
}
}
if (parityCounter % 2 == parity) {
return PARITY_OK;
} else {
return PARITY_ERROR;
}
}
Функция расчета температуры в градусах Цльсия для датиков TSic 206, TSic 306 и TSic 506
/* TSic20x / 30x sensors: LT = -50, HT = 150, Digital output 11 bit */
//float celsius = ((float) transmissionData * 200 / 2047) – 50;
/* TSic50x sensors: LT = -10, HT = 60, Digital output 11 bit */
float celsius = ((float) transmissionData * 70 / 2047) – 10;
return celsius;
}
Код целиком доступен по ссылке.
Ссылки
- Application Note на сайте производителя.
- Информация о датчиках TSic на нашем сайте efo-sensor.ru — здесь же цены на образцы и кнопка для их покупки.
- Проект опроса датчика TSic для микроконтроллеров EFM32ZGxxx на github.
Заключение
В заключении традиционно благодарю читателя за внимание и напоминаю, что вопросы по применению продукции, о которой мы пишем на хабре, можно также задавать на email, указанный в моем профиле.
Источник