1. Тема дня
Выбор входного фронт-энда: оптопара -> GPIO, оптопара -> GPIO-расширитель, оптопара -> ADS1115, оптопара -> компаратор/Schmitt trigger -> GPIO. Главная мысль: ADS1115 измеряет, GPIO-расширитель расширяет, компаратор/Schmitt очищает сигнал.
2. Зачем это нужно в проектах
Для фаз светофора надо получить не красивое аналоговое значение, а надёжный факт: RED/YELLOW/GREEN есть или нет, есть ли конфликт, обрыв, шум, деградация входа. Вход может быть 220 В AC, 24 В DC, 12 В DC, длинный кабель, грязный фронт или медленная оптопара.
3. Теория
Перед выбором микросхемы ответь: нужен быстрый 0/1, аналоговая диагностика, точный timestamp, много каналов, обнаружение AC по импульсам или контроль серой зоны?
- GPIO напрямую хорош, если сигнал уже чистый и каналов мало.
- GPIO-расширитель MCP23017/TCA9555 хорош для большого количества уже чистых дискретных входов. Он не фильтрует грязный сигнал.
- ADS1115 хорош для медленной диагностики: min/max/avg, напряжение после оптопары, питание, токи, уверенность HIGH/LOW. Но 860 SPS и мультиплексирование каналов делают его слабым кандидатом для быстрого phase timestamp.
- Компаратор/Schmitt trigger нужен, когда после оптопары уровень медленный, шумный или пульсирующий.
Хорошая архитектура:
fast path:
оптопара -> pull-up/RC -> Schmitt/comparator -> GPIO/expander -> input_filter -> phase_detector
slow diagnostics:
аналоговая точка -> ADS1115 -> analog_diag_task -> CLI/log/MQTT4. Типичные ошибки
- Использовать ADS1115 как основной быстрый детектор фаз.
- Думать, что GPIO-расширитель очистит грязный сигнал.
- Сажать ADS1115 и расширитель на I2C без единого владельца шины и timeout.
- Не использовать INT-пин расширителя там, где сигнал уже чистый.
- Не вести счётчики i2c_nack, i2c_timeout, bus_reset.
- Заставлять phase_event ждать медленный ADC.
5. Практическое задание
Создай INPUT_FRONTEND_DECISION.md с правилами:
# Input frontend decision
Fast path:
opto -> pull-up/filter -> Schmitt/comparator -> MCU GPIO
Alternative for many channels:
opto -> pull-up/filter -> Schmitt/comparator -> GPIO expander -> I2C -> MCU
Slow diagnostics:
analog node -> ADS1115 -> min/max/avg -> CLI/telemetry
Rules:
1. Dirty analog signals must be cleaned before digital expanders.
2. Fast phase timestamp must not depend on slow ADC scan.
3. I2C errors must be visible in diagnostics.6. Что почитать или попробовать дальше
ESP-IDF I2C master driver, TI ADS1115 datasheet, MCP23017/TCA9555 datasheets, основы Schmitt trigger/comparator/open collector.
Задание
В идеализированной модели ADS1115 работает на 860 SPS. Сколько длится одна конверсия, и какова максимальная частота полного обхода 4 каналов, если игнорировать I2C и время переключения? Почему это не гарантия быстрого timestamp?
Критерии самопроверки: Укажите единицы, оба расчёта и хотя бы один источник дополнительной задержки.
Показать ответ автора
1/860 с ≈ 1.163 мс; 860/4 = 215 обходов/с, около 4.651 мс на обход. Реальные обмены, переключение и обслуживание добавляют задержку; измерение ADC не является аппаратным capture фронта.