Embedded HandbookПриложения
Все разделы › XI. Датчики: подключение, схемы, драйверы
STM32F103, STM32F407 · уровень средний · 10 мин чтения
Открыть в интерактивном справочнике

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 В, — и тогда вопрос в том, что приходит обратно на вход:

Общая земля обязательна: без неё уровни «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 Несколько модулей: подтяжки складываются

Три датчика на одной шине I²C: подтяжки модулей стоят параллельно общим

Каждый модуль приносит свои подтяжки, и на шине они стоят параллельно. Сколько тока приходится утягивать выводу в нуле при питании 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 и аналоговые датчики


95.8 Развязка и земля

Развязка и земля: 100 нФ у каждого датчика, дальнему — конденсатор побольше, нагрузке — свой провод земли


95.9 Грабли

Шина работает с одним модулем и перестаёт с тремя. Подтяжки модулей складываются: пять по 4,7 кОм — уже 940 Ом и больше 3 мА через вывод. Оставить подтяжки на одном модуле.

Шина работает на столе и сбоит на проводе. Ёмкость провода съела запас фронта: на 400 кГц с подтяжкой 2,2 кОм — всего 1,71 м. Снизить скорость, пересчитать подтяжку, поставить буфер.

Встроенной подтяжки «хватает» — пока провода короткие. Десятки килоом дают фронт в микросекунды, и шина то работает, то нет. Для I²C — только внешние резисторы.

Модуль на 5 В подтягивает шину к пяти вольтам. Вход без допуска 5 В получает ток через свои защитные диоды (раздел 62). Снять подтяжки модуля или поставить преобразователь уровней.

Аналоговый выход датчика на 5 В — прямо на вход АЦП. Больше 3,3 В на вход АЦП нельзя; нужен делитель.

Нет общей земли. Уровни не значат ничего, датчик «отвечает мусором».


95.10 Итоги

Дальше: раздел 95а «Преобразователи уровней: транзистор с подтяжками, TXB и TXS — почему модуль не работает с I²C и длинным проводом» — готовые модули на TXB и TXS, почему они не дружат с подтяжками I²C и длинным проводом, и когда вывод FT обходится без преобразователя.

Открыть в интерактивном справочнике