Физические аппаратные модули (PCB Architecture)
Переход на децентрализованную шинную архитектуру означает, что вместо одной гигантской платы, к которой тянутся десятки проводов, система разбивается на несколько компактных, стандартизированных и заменяемых узлов (плат).
В итоге нам предстоит спроектировать и произвести (или собрать из модулей) 3 типа физических плат:
Модуль 1: Главная материнская плата (Main Controller Board)
Это "Мозг" системы, устанавливаемый на лицевой панели фермы или в удобном месте.
Ключевые компоненты на плате:
- Ядро: Raspberry Pi Pico (или чип RP2040 напрямую распаянный на плате).
- Питание (DC-DC): Понижающий преобразователь с 12V (от блока питания ATX) до 5V и 3.3V для питания всей логики.
- Шинные драйверы:
- Терминал и трансивер RS-485 (например, микросхема MAX485 или изолированный ADM2483) для отправки данных на помпы.
- Разъем 1-Wire с подтягивающим резистором 4.7K для шлейфа датчиков термометрии и потока.
- Интерфейсы:
- Разъем FPC/SPI для подключения дисплея 1.3" - 2.8".
- Порт USB-C для связи с Linux-демоном сервера.
- Клеммы для кнопок навигации и ленты WS2812B.
- Силовая часть (Защита): Транзистор/Оптопара для замыкания
Power_SW(мягкий старт серверов) и мощное реле/контактор для обрываPS_ON(аппаратное выключение БП фермы).
Выходящие провода: Всего 2 витые пары (Шлейф 1-Wire и Шлейф RS-485), плюс шлейф к материнской плате сервера (reset_sw, power_sw).
Модуль 2: Умный узел помпы (Smart Pump RS-485 Node)
Если мы используем стандартные помпы (D5, автомобильные CWA50), которые управляются обычным ШИМ и отдают Тахометр, им нужен "переводчик" с языка RS-485 на их родной язык. Эта маленькая плата ставится рядом с каждой помпой.
Если же мы купим промышленные помпы со встроенным Modbus, этот модуль не нужен вообще — витая пара втыкается прямо в помпу.
Ключевые компоненты на плате:
- Маленький MCU: Дешевый микроконтроллер (CH32V003).
- RS-485 Трансивер (MAX485): Для общения с Master-платой.
- Вход/Выход: Аппаратный ШИМ (25 кГц) для помпы и вход прерывания для чтения Тахометра.
- Хардверная Адресация (DIP-переключатели): Это критически важно! Чтобы платы были взаимозаменяемыми, на них устанавливается DIP-переключатель на 3 или 4 позиции (Jumper Switch).
- Как это работает: При установке платы вы переключаете рычажки отверткой (например,
001- Помпа №1,010- Помпа №2). Микроконтроллер при загрузке считывает эти перемычки и назначает себе Modbus адрес в сети (от 1 до 8). Таким образом, нам нужна только одна прошивка для всех узлов помп. Достаньте сгоревшую плату, поставьте новую, скопируйте положение джамперов — и всё работает.
- Как это работает: При установке платы вы переключаете рычажки отверткой (например,
Модуль 3: Умный модуль потока и термометрии (Smart Temp/Flow 1-Wire Node)
Это крошечная плата (буквально размером с монету 10х10 мм), которая монтируется внутрь вашей 3D-печатной воронки-счетчика, описанной в flow_meter_module.md.
Ключевые компоненты на плате:
- Маленький MCU: (CH32V003 или совместимый) для чтения аналогового вольтажа.
- Датчики:
- Линейный датчик Холла SS49E (припаян прямо на плату так, чтобы смотреть на шторку).
- Контакты для припаивания "ножек" стальной гильзы DS18B20.
- Адресация:
- Протокол 1-Wire уникален тем, что каждый чип (например, оригинальный DS18B20) имеет зашитый на заводе уникальный 64-битный ROM-код.
- Для нашего локального микроконтроллера мы можем либо программно сгенерировать уникальный 1-Wire ROM при первой прошивке, либо использовать I2C/SPI микросхему уникального серийного номера (например, DS2401).
- DIP-переключатели здесь не нужны: Главная плата RP2040 выполняет команду
Search ROMна шине 1-Wire, находит все подключенные чипы потока и термометры, и вы (через конфигурацию в Linux-демоне) один раз "привязываете" найденный адрес к конкретному резервуару или GPU.
Итоговая топология
graph TD
Daemon[Linux Daemon] <-->|USB Serial| RP2040(Main RP2040 Controller)
RP2040 <-->|SPI| Display[TFT Display]
RP2040 <-->|Relay| ATX[ATX Power / Server MB]
RP2040 <-->|RS-485 Bus| PumpNode1("Pump Node [DIP:001]")
PumpNode1 -->|PWM/Tacho| Pump1[(Pump 1)]
RP2040 <-->|RS-485 Bus| PumpNode2("Pump Node [DIP:010]")
PumpNode2 -->|PWM/Tacho| Pump2[(Pump 2)]
RP2040 <-->|1-Wire Bus| FlowNode1(Smart Flow Node 1)
RP2040 <-->|1-Wire Bus| FlowNode2(Smart Flow Node 2)
Такая архитектура — это уровень профессионального промышленного оборудования (PLC). Вы можете гирляндами наращивать помпы и датчики, просто подключая их параллельно к соответствующей шине и выставляя адреса джамперами.