95. Как подключать датчики: питание, подтяжки, уровни, провода
С этой части справочник переходит от блоков микроконтроллера к тому, что к нему подключают. Каждый следующий раздел — датчик или семейство датчиков: схема подключения к F103 и F407, драйвер на регистрах и числа, проверенные расчётом. Этот раздел — общий для всех: что стоит на плате модуля, откуда брать питание, как выбрать подтяжки шины I²C и сколько провода она выдержит.
Защита выводов и делители разобраны в разделе 62, развязка питания самого микроконтроллера — в разделе 61, датчики на прототипе — в разделах 81 и 83. Здесь — то, что добавляется, когда датчиков несколько и они на проводах.
Как это называется в документации
Оригинал Перевод breakout board, module модуль: датчик, распаянный на плате с обвязкой pull-up resistor подтягивающий резистор, подтяжка open-drain output выход с открытым стоком rise time время нарастания фронта bus capacitance ёмкость шины sink current втекающий ток низкого уровня level shifter, level translator преобразователь уровней 5 V tolerant (FT) pin вывод, выдерживающий 5 В decoupling capacitor развязывающий конденсатор bus buffer, bus extender буфер шины
95.1 Модуль или голый датчик
Датчик почти всегда покупают на модуле — маленькой плате, где кроме самой микросхемы распаяно всё, что ей нужно. Прежде чем подключать, стоит посмотреть, что именно:
| На плате модуля | Зачем | Чем грозит |
|---|---|---|
| стабилизатор на 3,3 В | модуль можно питать от 5 В | ничем, если выход датчика — после стабилизатора |
| подтяжки SDA и SCL | шина работает без внешних резисторов | с несколькими модулями подтяжки складываются (95.4) |
| преобразователь уровней | датчик на 3,3 В работает с платой на 5 В | линии шины подтянуты к 5 В |
| перемычка адреса | два одинаковых датчика на одной шине | забыли переставить — конфликт адресов |
| светодиод питания | видно, что модуль запитан | лишний ток при питании от батареи |
Правило одно: до подключения найти на модуле резисторы подтяжки и понять, к какому питанию они идут. Модуль, рассчитанный на пятивольтовую плату, нередко подтягивает SDA и SCL к пяти вольтам — и тогда вход микроконтроллера получает 5 В через резистор.
Не всегда это беда. Выводы I2C1 — PB6/PB7, после переназначения
PB8/PB9 — у F103 (приложение E) и F407 допускают 5 В (FT): подтяжка к
пяти вольтам им не вредит, пока микроконтроллер запитан. Опасны два случая:
вывод без FT — ток через защитный диод уйдёт в линию 3,3 В (95.9), и
модуль, запитанный раньше микроконтроллера, — без питания FT-вывод 5 В не
выдерживает (раздел 62).
95.2 Питание: 3,3 или 5 вольт
У F103 и F407 питание 3,3 В, и лучше всего датчику то же питание: уровни совпадают, согласовывать нечего. Модуль на 5 В берут, когда сам датчик требует 5 В, — и тогда вопрос в том, что приходит обратно на вход:
- Цифровой выход 5 В на вход микроконтроллера. Годится только вывод, выдерживающий 5 В (в документации — FT), и только в цифровом режиме, без аналоговой функции. Надёжнее — делитель (раздел 62) или преобразователь уровней (95.6).
- Выход 3,3 В на вход датчика 5 В. Порог единицы у пятивольтовой логики может оказаться выше 3,3 В — это разобрано в разделе 62.
- Аналоговый выход. Больше 3,3 В на вход АЦП подавать нельзя ни на каком выводе — только через делитель.
Общая земля обязательна: без неё уровни «0» и «1» не значат ничего.
95.3 Подтяжки I²C: расчёт вместо «4,7 кОм»
Выход на шине I²C — открытый сток: вывод умеет только тянуть линию к земле, единицу создаёт подтяжка. Выводы шины настраиваются так — у F103:
void i2c1_pins(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRL |= GPIO_CRL_MODE6 | GPIO_CRL_CNF6 | GPIO_CRL_MODE7 | GPIO_CRL_CNF7;
}
У F407 режим, тип выхода и подтяжка — в разных регистрах, и встроенную подтяжку надо явно выключить:
void i2c1_pins(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODER6 | GPIO_MODER_MODER7))
| GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
GPIOB->OTYPER |= GPIO_OTYPER_OT_6 | GPIO_OTYPER_OT_7; /* открытый сток */
GPIOB->PUPDR &= ~(GPIO_PUPDR_PUPDR6 | GPIO_PUPDR_PUPDR7); /* подтяжки — внешние */
GPIOB->AFR[0] = (GPIOB->AFR[0] & ~0xFF000000u) | 0x44000000u; /* AF4 — I2C1 */
}
Фронт единицы — это заряд ёмкости шины C (входы, провода, дорожки) через
подтяжку R. От 0,3 до 0,7 питания — от порога нуля до порога единицы — он
растёт за R·C·ln(7/3) ≈ 0,8473·R·C, а стандарт шины ограничивает это время:
1000 нс в стандартном режиме (100 кГц) и 300 нс в быстром (400 кГц). Те же
числа зашиты в расчёт регистра TRISE в библиотеках ST для обоих семейств —
отсюда 37 и 11 при 36 МГц у F103 и 43 и 13 при 42 МГц у F407:
#define TRISE(pclk_mhz, tr_ns) ((pclk_mhz) * (tr_ns) / 1000u + 1u)
Отсюда верхняя граница подтяжки: R не больше t / (0,8473·C). Нижняя — от тока: при нуле на линии вывод пропускает через себя (питание − 0,4 В) / R, а стандарт требует держать не выше 0,4 В при токе до 3 мА:
uint32_t r_max(uint32_t tr_ns, uint32_t c_pf)
{
return (uint32_t)((uint64_t)tr_ns * 10000000u / ((uint64_t)8473u * c_pf));
}
uint32_t r_min(uint32_t vdd_mv)
{
return ((vdd_mv - VOL_MV) * 1000u + IOL_UA - 1u) / IOL_UA;
}
| Ёмкость шины | 100 кГц: подтяжка не больше | 400 кГц: не больше |
|---|---|---|
| 50 пФ | 23 604 Ом | 7081 Ом |
| 100 пФ | 11 802 Ом | 3540 Ом |
| 200 пФ | 5901 Ом | 1770 Ом |
| 400 пФ | 2950 Ом | 885 Ом |
Нижняя граница при питании 3,3 В — 967 Ом, при 5 В — 1534 Ом. На 400 пФ в быстром режиме окно закрывается совсем: 885 Ом меньше 967, такую шину подтяжкой не спасти — нужен буфер или меньшая скорость.
Правило «4,7 кОм для 100 кГц, 2,2 кОм для 400 кГц» из раздела 17 — частный случай: 4,7 кОм успевают до 251 пФ, 2,2 кОм — до 160 пФ. Для платы с парой датчиков этого хватает с запасом; на проводах — уже нет (95.5).
И почему не встроенная подтяжка: у выводов STM32 она в десятки килоом. Возьмём 40 кОм — при 100 пФ фронт тянется 3389 нс, в три с лишним раза дольше, чем позволено даже на 100 кГц.
Модель на компьютере заряжает ёмкость через резистор мелкими шагами и меряет время от 0,3 до 0,7 питания: 398,2 нс против 398 по формуле для 4,7 кОм и 100 пФ, 186,4 против 186 для 2,2 кОм, 1694,6 против 1694 для 10 кОм и 200 пФ.
95.4 Несколько модулей: подтяжки складываются
Каждый модуль приносит свои подтяжки, и на шине они стоят параллельно. Сколько тока приходится утягивать выводу в нуле при питании 3,3 В:
| Резисторов по 4,7 кОм | Вместе | Ток через вывод в нуле |
|---|---|---|
| 1 | 4700 Ом | 617 мкА |
| 2 | 2350 Ом | 1234 мкА |
| 3 | 1566 Ом | 1851 мкА |
| 4 | 1175 Ом | 2468 мкА |
| 5 | 940 Ом | 3085 мкА |
Пять таких резисторов уводят ток за предел 3 мА: вывод больше не обещает ноль ниже 0,4 В, и приёмники начинают путать ноль с единицей. Лечение — оставить подтяжки на одном модуле (на остальных это обычно перемычка или пара резисторов, которые можно выпаять) и проверить оставшуюся по 95.3.
95.5 Длина провода
Провод — тоже ёмкость. Возьмём для примера 70 пФ на метр, три датчика и вывод микроконтроллера по 10 пФ. Тогда подтяжка 4,7 кОм на 100 кГц вытянет 3,01 м провода, а 2,2 кОм на 400 кГц — только 1,71 м. Дальше — либо ниже скорость, либо сильнее подтяжка (в пределах 95.3), либо буфер шины, который делит её на отрезки со своей ёмкостью.
Кроме ёмкости провод собирает наводки. SDA и SCL лучше вести рядом с землёй: в плоском шлейфе — через жилу земли, в витой паре — каждый сигнал в паре со своей землёй.
95.6 Преобразователь уровней на полевом транзисторе
Если модуль подтягивает шину к 5 В, а снять его подтяжки нельзя, ставят двунаправленный преобразователь на N-канальном полевом транзисторе — по одному на линию. Затвор — на 3,3 В, исток — к линии микроконтроллера, сток — к линии модуля, и у каждой стороны своя подтяжка к своему питанию:
- обе стороны в единице — затвор и исток под одним напряжением, транзистор закрыт, каждую сторону держит своя подтяжка;
- микроконтроллер тянет свою сторону к нулю — затвор оказывается выше истока, транзистор открывается и тянет к нулю сторону модуля;
- модуль тянет к нулю свою сторону — через внутренний диод транзистора опускается исток, транзистор открывается, и ноль приходит к микроконтроллеру.
Готовые платы преобразователей на несколько линий собраны именно так, обычно на транзисторах BSS138.
95.7 1-Wire, DHT и аналоговые датчики
- 1-Wire — одна линия данных с открытым стоком и подтяжкой к питанию. В режиме паразитного питания датчик берёт энергию с самой линии, и на время измерения её держат в единице ключом, а не резистором.
- DHT11 и DHT22 — тоже одна линия, но со своим протоколом: длительность импульса кодирует бит, и подтяжка определяет, насколько круто линия возвращается в единицу.
- Аналоговый датчик — вход АЦП заряжает свой конденсатор выборки, и источнику с большим сопротивлением не хватает времени выборки. Конденсатор у входа и время выборки разобраны в разделах 14 и 50.
95.8 Развязка и земля
- У каждого модуля — конденсатор 100 нФ между питанием и землёй, как можно ближе к датчику. На готовых модулях он обычно уже стоит; у голой микросхемы это ваша забота.
- Земля датчиков и микроконтроллера — одна, а сильноточная нагрузка (двигатель, реле, нагреватель газового датчика) идёт своим проводом земли до источника, а не через землю датчиков: падение напряжения на общем проводе сдвигает показания аналоговых датчиков и уровни цифровых линий.
- Дальнему датчику на длинном проводе — ещё конденсатор побольше у самого датчика, параллельно 100 нФ.
95.9 Грабли
Шина работает с одним модулем и перестаёт с тремя. Подтяжки модулей складываются: пять по 4,7 кОм — уже 940 Ом и больше 3 мА через вывод. Оставить подтяжки на одном модуле.
Шина работает на столе и сбоит на проводе. Ёмкость провода съела запас фронта: на 400 кГц с подтяжкой 2,2 кОм — всего 1,71 м. Снизить скорость, пересчитать подтяжку, поставить буфер.
Встроенной подтяжки «хватает» — пока провода короткие. Десятки килоом дают фронт в микросекунды, и шина то работает, то нет. Для I²C — только внешние резисторы.
Модуль на 5 В подтягивает шину к пяти вольтам. Вход без допуска 5 В получает ток через свои защитные диоды (раздел 62). Снять подтяжки модуля или поставить преобразователь уровней.
Аналоговый выход датчика на 5 В — прямо на вход АЦП. Больше 3,3 В на вход АЦП нельзя; нужен делитель.
Нет общей земли. Уровни не значат ничего, датчик «отвечает мусором».
95.10 Итоги
- Модуль — это датчик плюс обвязка: до подключения найти подтяжки и понять, к какому питанию они идут.
- Лучший случай — датчик на 3,3 В; модулю на 5 В нужен делитель, вывод FT или преобразователь уровней.
- Фронт I²C растёт за 0,8473·R·C и должен уложиться в 1000 нс на 100 кГц и 300 нс на 400 кГц; подтяжка — между (питание − 0,4 В) / 3 мА и t / (0,8473·C).
- Подтяжки модулей складываются: пять по 4,7 кОм выводят ток за 3 мА.
- Провод — ёмкость: на 400 кГц с 2,2 кОм — 1,71 м при 70 пФ/м.
- Двунаправленный преобразователь — полевой транзистор на линию, затвор на 3,3 В.
- У каждого модуля — 100 нФ, земля одна, сильноточная нагрузка — своим проводом.
Дальше: раздел 95а «Преобразователи уровней: транзистор с подтяжками, TXB и TXS — почему модуль не работает с I²C и длинным проводом» — готовые модули на TXB и TXS, почему они не дружат с подтяжками I²C и длинным проводом, и когда вывод FT обходится без преобразователя.