AHT20 — цифровой датчик влажности и температуры Aosong (ASAIR)
AHT20 — недорогой датчик влажности и температуры Aosong (марка ASAIR) в корпусе 3 × 3 мм с выходом I²C. Он стоит на многих модулях для Arduino, часто в паре с BMP280. Разбираем по даташиту производителя выводы, питание, точность, порядок опроса и пересчёт кодов — и отмечаем места, где английский перевод даташита путает читателя.
Обновлено Редакция GAW
AHT20 содержит ёмкостный МЭМС-датчик относительной влажности, датчик температуры и специализированную микросхему, которая калибрует результат на заводе и отдаёт его по I²C. Даташит Aosong — перевод с китайского: таблицы в нём частично нарисованы картинками, а несколько ссылок и подписей перепутаны; ниже — только то, что в документе написано однозначно, а нестыковки собраны в последнем разделе. Как AHT20 соотносится с другими датчиками влажности — в статье «Датчики влажности» и в карточке SHT31.
Коротко
- Питание — 2,2–5,5 В (тип. 3,3 В); предел тоже 5,5 В.
- Интерфейс — I²C до 400 кГц, адрес 0x38, CRC-8 в конце кадра.
- Влажность — 0–100 %, ±2 % тип., разрешение 0,024 %, отклик τ63 — 8 с.
- Температура — −40…85 °C, ±0,3 °C тип., разрешение 0,01 °C, отклик 5–30 с.
- Ток — 980 мкА при измерении, до 250 нА во сне (3,3 В, ниже 60 °C).
- Измерение — 80 мс после команды 0xAC; готовность — через 100 мс после включения.
- Корпус — 3 × 3 × 1,0 мм, шесть контактов снизу.
Выводы
| Вывод | Обозначение | Назначение |
|---|---|---|
| 1 | NC | не подключён |
| 2 | VDD | питание 2,2–5,5 В |
| 3 | SCL | тактовый сигнал I²C |
| 4 | SDA | данные I²C, двунаправленный |
| 5 | GND | общий |
| 6 | NC | не подключён |
Нумерация — по таблице 5 даташита, вид сверху: выводы 1–3 идут по одной стороне корпуса, 4–6 — по другой в обратную сторону, ключ у вывода 1. Типовая схема (рис. 16) такая: между VDD и GND — конденсатор развязки 10 мкФ как можно ближе к датчику, питание подано через резистор R1 330–390 Ом, который вместе с конденсатором образует RC-фильтр, а SCL и SDA подтянуты резисторами 4,7 кОм к тому же питанию. В тексте допустимый диапазон подтяжек — 2,0–4,7 кОм; подобрать номинал под ёмкость шины поможет калькулятор подтяжки I²C.
Порядок включения важен: VDD подают раньше SCL и SDA или одновременно с ними, иначе ток через выводы шины может запустить кристалл в нерабочем состоянии. На рис. 15 Aosong показывает и питание датчика от вывода микроконтроллера — так его можно перезапустить, сняв питание; наш расчёт: при токе измерения 980 мкА на R1 = 390 Ом падает около 0,38 В, поэтому от 3,3 В на датчике остаётся около 2,9 В — выше минимума 2,2 В (без учёта падения на выводе микроконтроллера). Под датчиком не прокладывают дорожки и полигоны, а от тёплых деталей его отделяют прорезью в плате.
Параметры
По таблицам 1–3, 6–8 даташита. Точность измерена при питании 3,3 В и 25 °C, без учёта гистерезиса и нелинейности, в отсутствие конденсации.
| Параметр | Мин. | Тип. | Макс. | Условия |
|---|---|---|---|---|
| Питание | 2,2 В | 3,3 В | 5,5 В | |
| Ток во сне | — | — | 250 нА | 3,3 В, ниже 60 °C |
| Ток при измерении | — | 980 мкА | — | |
| Влажность: точность | — | ±2 % | по рис. 2 | 25 °C |
| Влажность: повторяемость / гистерезис | — | ±0,1 % / ±1 % | — | |
| Влажность: отклик (63 %) | — | 8 с | — | 25 °C, обдув 1 м/с |
| Влажность: дрейф | — | менее 1 %/год | — | |
| Температура: точность | — | ±0,3 °C | по рис. 3 | |
| Температура: повторяемость / гистерезис | — | ±0,1 °C / ±0,1 °C | — | |
| Температура: отклик (63 %) | 5 с | — | 30 с | |
| Температура: дрейф | — | менее 0,1 °C/год | — | |
| Питание, предельное | −0,3 В | — | 5,5 В | |
| Напряжение на SDA и SCL, предельное | −0,3 В | — | VDD + 0,3 В | |
| Низкий уровень выхода SDA | — | — | 0,4 В | 3,3 В, ток до 4 мА |
| Низкий уровень входа VIL | 0 | — | 30 % VDD | |
| Высокий уровень входа VIH | 70 % VDD | — | VDD | |
| Частота SCL | 0 | — | 100 / 400 кГц | Standard / Fast mode |
Нормальный рабочий диапазон влажности — 0–80 %. После 60 часов при высокой влажности показания уходят примерно на 3 % и потом медленно возвращаются; ускорить восстановление можно сушкой при 60–85 °C и влажности ниже 5 % в течение 2–10 часов. После пайки оплавлением полимеру нужна перегидратация: 12–72 часа при 25 °C и влажности выше 75 % либо 2–6 часов при 60–85 °C и влажности выше 85 %.
Порядок опроса
- После включения подождать не меньше 100 мс.
- Прочитать байт состояния (байт адреса на чтение — 0x71). Бит 7 — «занят», бит 3 — «откалиброван». Если состояние & 0x18 ≠ 0x18, датчик инициализируют записью в регистры 0x1B, 0x1C, 0x1E по примеру с сайта Aosong — сам даташит процедуру не раскрывает. Проверка нужна только после включения.
- Через 10 мс отправить команду измерения: 0xAC, 0x33, 0x00.
- Подождать 80 мс и прочитать байт состояния: при бите 7, равном 0, данные готовы, при 1 — ждать дальше.
- Прочитать шесть байт: состояние, два с половиной байта влажности и два с половиной байта температуры. Седьмой байт — контрольная сумма; если она не нужна, мастер отвечает NACK после шестого байта.
Контрольная сумма — CRC-8 с полиномом 1 + x⁴ + x⁵ + x⁸ и начальным значением 0xFF. Наш вывод: это тот же полином 0x31 и то же начальное значение, что у Sensirion SHT3x, так что для проверки годится одна функция и калькулятор CRC.
Пересчёт кодов
Влажность и температура приходят 20-битными кодами S. По рисунку на с. 13 код влажности занимает байты 1, 2 и старшие четыре бита байта 3, код температуры — младшие четыре бита байта 3 и байты 4, 5 (байт 0 — состояние):
- влажность, %: RH = S / 2²⁰ × 100;
- температура, °C: T = S / 2²⁰ × 200 − 50.
Наш расчёт: пришли байты 0x18, 0x80, 0x00, 0x06, 0x00, 0x00. Состояние 0x18 — не занят, откалиброван. Код влажности 0x80000 = 524 288, RH = 524 288 / 1 048 576 × 100 = 50,0 %. Код температуры 0x60000 = 393 216, T = 393 216 / 1 048 576 × 200 − 50 = 75 − 50 = 25,0 °C.
Наш вывод о разрядности: 20 бит в кадре не означают 20 бит точности. Шаг 20-битного кода — 100 / 2²⁰ ≈ 0,0001 %, а заявленное разрешение влажности — 0,024 %, что соответствует примерно 12 битам (100 / 4096 ≈ 0,024 %). Выводить показания AHT20 с тремя-четырьмя знаками после запятой бессмысленно.
Сравнение с SHT31
| AHT20 | SHT31 | |
|---|---|---|
| Питание | 2,2–5,5 В | 2,15–5,5 В |
| Адреса I²C | 0x38 | 0x44, 0x45 |
| Влажность, тип. | ±2 % | ±2 % |
| Температура, тип. | ±0,3 °C | ±0,2 °C (0…90 °C) |
| Время измерения | 80 мс (ожидание после команды) | 2,5–12,5 мс тип. |
| Ток при измерении | 980 мкА | 600 мкА тип. |
| Нагреватель | нет | есть |
Обе микросхемы проверяют кадр одним и тем же CRC-8. Наш вывод: по типичной точности они близки, но SHT31 быстрее, допускает два адреса и подробнее документирован — у Sensirion для каждого исполнения есть графики максимальной погрешности по всему диапазону. AHT20 проще в обмене: один адрес, одна команда измерения. Датчик с собственным однопроводным протоколом — DHT22, а влажность вместе с давлением меряет BME280; на модулях AHT20 часто соседствует с барометром BMP280, и адреса у них не пересекаются. Об адресах на шине — на странице «Адрес I²C», о собственном нагреве датчиков — на странице «Самонагрев».
Расхождения в документации
- «Команда» 0x71. В разделе 7.4 сказано, что байт состояния получают «отправкой 0x71». По рисунку на с. 13 это байт адреса на чтение (адрес 0x38 и бит R = 1 в младшем разряде), а не команда: состояние просто читают.
- Время запуска. Разделы 7.1 и 7.4 требуют не меньше 100 мс после включения, а примечание к рис. 15 разрешает подавать высокий уровень на SCL и SDA через 5 мс. Наш вывод: первый обмен — не раньше 100 мс.
- Частота SCL. Раздел 5.2 говорит, что минимальной частоты SCL нет, раздел 4.4 советует 10–400 кГц во время измерения.
- Подписи и ссылки. В таблице 7 входные уровни VIL и VIH подписаны как выходные; раздел 6.1 и подпись к рис. 7 ссылаются на «таблицу 2» вместо таблицы 3 с электрическими параметрами; сноска 5 к таблице 3 описывает средний ток при измерении раз в 2 с, которого в таблице нет.
- Площадка снизу. Раздел 4.1 описывает открытую теплоотводящую площадку и трафарет 1,4 × 2,3 мм под неё, но на чертеже корпуса (рис. 1) только шесть контактов. Наш вывод: посадочное место рисуют по рис. 1 и рис. 8, а не по тексту.
- Диапазоны. Рабочая температура — до 85 °C, а график погрешности температуры (рис. 3) обрывается на 80 °C. Влажность — 0–100 % в таблице 1 и «нормальный диапазон 0–80 %» в сноске 3; там же сдвиг «>3 %» после 60 часов при 90 %, а в разделе 3.1 — «+3 %» после 60 часов при влажности выше 80 %.
Частые вопросы
Какой адрес I²C у AHT20?
Только 0x38: вывода выбора адреса у AHT20 нет. Байт адреса на запись — 0x70, на чтение — 0x71. Поэтому два AHT20 на одну шину без коммутатора шины или отдельных линий I²C не поставить; соседи с другими адресами, например BMP280 (0x76 или 0x77), не мешают.
Как опросить AHT20?
После включения подождать не меньше 100 мс и прочитать байт состояния. Если биты 3 и 4 не равны единицам (состояние & 0x18 ≠ 0x18), датчик нужно инициализировать — порядок даташит не описывает и отсылает к примеру на сайте Aosong. Затем отправить 0xAC 0x33 0x00, подождать 80 мс, убедиться, что бит 7 состояния равен 0, и прочитать шесть байт данных и, при желании, седьмой — CRC.
Можно ли питать AHT20 от 5 В?
По даташиту — да: рабочее питание 2,2–5,5 В, подтяжки SCL и SDA подключают к тому же VDD. Но предельное напряжение питания в таблице 6 — тоже 5,5 В, то есть запаса до разрушения нет. Наш вывод: от 5-вольтовой линии с выбросами надёжнее питать датчик через стабилизатор 3,3 В — тогда и уровни шины нужно согласовывать.
Почему AHT20 показывает завышенную температуру?
Самонагрев: при измерении датчик потребляет около 980 мкА, и Aosong советует опрашивать его не чаще раза в секунду, чтобы собственный нагрев оставался не больше 0,1 °C. На температуру влияют и детали рядом на плате — даташит рекомендует прорезь в плате вокруг датчика и не прокладывать дорожки и полигоны под ним.
Источники
- Aosong (ASAIR). Data Sheet AHT20 Humidity and Temperature Sensor (Version V1.0, May 2021) — с. 1, рис. 1 — корпус 3 × 3 × 1,0 мм; с. 2, табл. 1–2 — влажность и температура: разрешение, точность, повторяемость, гистерезис, отклик, диапазоны, дрейф; с. 3, табл. 3 и сноски 1–6 — питание 2,2–5,5 В, токи 250 нА и 980 мкА, мощность; рабочий диапазон 0–80 %RH; с. 6, разд. 4.1 — перегидратация после пайки; с. 7, разд. 4.4 — самонагрев, опрос не чаще раза в секунду; с. 8, рис. 15 — порядок подачи питания; с. 9, табл. 5, рис. 16 — выводы, 10 мкФ, RC-фильтр, подтяжки 2,0–4,7 кОм; с. 10, табл. 6–7 — предельные режимы, уровни входов и выходов; с. 11, табл. 8 — I²C до 400 кГц, запуск ≥100 мс; с. 12–13, разд. 7.3–8.2 — адрес 0x38, команды 0x71 и 0xAC 0x33 0x00, байт состояния, CRC-8, формулы пересчёта
- Sensirion. Datasheet SHT3x-DIS: Humidity and Temperature Sensor (Version 7, December 2022) — для сравнения: питание 2,15–5,5 В, адреса 0x44 и 0x45, ±2 %RH и ±0,2 °C тип. (SHT31), CRC-8 с полиномом 0x31 и начальным 0xFF (табл. 1–3, 8, 20)
Нашли ошибку?
Смотрите также
- Микросхемы датчиковТок, давление, влажность, температура, свет, ИК: карточки и статьи
- Датчики влажности SHT3x, HDC1080, HDC2080, BME280Точность, адреса, питание, отклик, дрейф, нагреватель, пересчёт и размещение
- SHT31Влажность и температура по I²C: выводы, адреса, точность SHT30/31/35, команды, CRC
- DHT11 и DHT22Датчики влажности по одному проводу: точность, формат 40 бит, тайминги, подтяжка
- BME280Давление, влажность, температура: питание, адреса, точность, режимы
- BMP280Барометр I²C и SPI: питание, адреса, точность, шум, режимы, отличие от BME280
- Относительная влажностьПар к насыщенному пару при той же температуре: формула и пример
- Адрес I²C7-битный адрес ведомого и байт адреса с битом R/W
- CRCЦиклический избыточный код для обнаружения ошибок
- Самонагрев датчикаДатчик греется током измерения: ΔT = P/δ
- Блокировочный конденсаторМестный запас заряда у выводов питания: ёмкость, тип, разводка
- Калькулятор CRCCRC-8, CRC-16, CRC-32, Modbus, блок CRC STM32, код на C
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины