
Po co? Bo potrzebowałem zastąpić taki zestaw urządzeń:

Czyli switcha 100M, ładowarkę USB, rozdzielacz, dwa 3 portowe (używane 4 porty w sumie) "wstrzykiwacze" PoE (jednego nie ma na zdjęciu) jednym urządzeniem, bo schludniej. Poza tym była okazja, żeby zbudować switcha, tego jeszcze nie robiłem. A, że posiadanie w domu szyny 12V DC jest wygodne, można nią zasilać różne czujniki, switche, access pointy, ładowarki do telefonów, etc - wszystko jednym zasilaczem, buforowym, energetyka czasem daje ciała. Jak się do tego jeszcze dorzuci ethernet, to w większości wypadków wystarczy tylko jeden kabelek podłączyć do urządzenia i po kłopocie. Jedyny problem z pasywnym PoE jest taki, że jak się podłączy "przewód z prądem" do urządzenia, które nie obsługuje zasilania w ten sposób i ma tylko jeden kondensator od EMI przy transformatorze (chyba 99,9% wszystkich konstrukcji) - spalimy transformator, kiedyś wypadało będzie zastąpić wszystkie kable "pod prądem" takimi w kolorze czerwonym.
W efekcie powstał switch, potrafiący serwować zasilanie do 4 urządzeń eth (4x1A max) i 4 USB (4x2,5A) z opcją rozszerzania go o różne dodatki, bo przecież żadna nóżka MCU nie może się zmarnować.
Główne cechy:
* 4 porty 100Mbps (piąty zajmuje STM32F107)
* Pomiar napięcia i prądu na każdym porcie, automatyczne odłączanie przy przeciążeniu
* Każdy port posiada:
** Konfigurowalny próg ich automatycznego odłączenia
** Opcję zdalnego włączenia i wyłączenia
** Wykrywają sytuację kiedy sam switch jest zasilany przez port eth a nie z zewnętrznego zasilacza
** Sygnalizację stanu zasilania na porcie
* Porty 1 i 4 mają zabezpieczone linie danych transilami
* Wyświetlacz LCD
Budowa całości nie jest jakoś bardzo skomplikowana, zacznijmy zatem od zasilania:

Nic szczególnie nietypowego, płytka przystosowana do obsługi głownie EUP3458 (30V/1,2A), ale jakby nie było to można zainstalować także MP2359 (24V/1,2A) albo SX2106 (21V/2A). Zasilanie przystosowane do max 25V, ograniczone przez mosfety (AO4407) mające maksymalnie Vgs +-25V. 1V2 potrzebne dla układu switcha "produkowane" jest przez regulator liniowy TPS76312. Switch posiada co prawda swój regulator 1V2, ale żeby z niego skorzystać trzeba dołożyć więcej elementów niż dając zewnętrzny regulator. Do tego klika dzielników rezystorowych do monitorowania napięć systemowych. Jeśli chcemy zasilać układ przez port eth, trzeba połączyć wejście B+ (zasilanie "systemowe") razem z VIN (wejście zasilania dla urządzeń zewnętrznych).

Zastosowałem gniazda RJ45 bez transformatora, ciężko dostać takie, które obsługują POE i nie kosztują fortuny. A tak można zastosować tanie i powszechne 4 portowe złącze + popularny transformator HR601680. Każdy port posiada swój mosfet odcinający prąd (AO4407), rezystor pomiarowy (0R082) podłączony do jednego z 2 INA3221, oraz warystor mający chronić wyjścia przed skokami napięcia. W końcu jedno urządzenie (stacja meteo) znajduje się na zewnątrz budynku. Poza funkcją odcinania zasilania, mosfety chronią także switcha przed podłączeniem zasilania przez port ethernetu z odwrotną polaryzacją, a jeśli MCU wykryje, że jest zasilany przez jeden z portów, to automatycznie otwiera dany mosfet i wyłącza jego ręczne sterowanie. Każdy port ma swoją konfiguracje zapisaną w EEPROMie (pin sterujący, limit prądu, adres i typ urządzenia pomiarowego) i może być niezależnie od reszty włączany i wyłączany. Cztery z 8 ledów w portach (Link) są podłączone do układu switcha. Pozostałe cztery do STM32 i sygnalizują stan zasilania:
* 100ms puls co 1s - brak poboru prądu zasilanie włączone
* Ciągle włączone - pobór prądu powyżej 10mA
* 4 100ms błyski na sekundę - błąd, przeciążenie
* Wyłączone - port odłączony od zasilania

Sercem układu jest zarządzalny 5 portowy switch KSZ8895RQX produkcji Micrela (Microchip), połączony przez RMII/MDIO z nadzorującym go STM32F107VC. Generatorem zegara jest zewnętrzny 50MHz układ, SG7050CAN-50. Co prawda zegar 50MHz da się wydobyć z układu switcha po podłączeniu doń 25MHz kryształu, ale że potrzebowałem zrobić coś z generatorami, które od lat leżały kurzyły się oczekując na jakąś okazję, no to wykorzystałem je zamiast kryształu. Ten sam zegar jest podstawą taktowania głównego zegara MCU i interfejsu RMII. Dodatkowo na pokładzie znajduje się standardowy 32KHz kryształ dla zegara RTC i wyprowadzenia dla baterii/superkondensatora podtrzymującego domenę RTC.


Aby dało się switcha rozszerzyć, na złącza micro-JST wyprowadzona jest: magistrala I2C wraz z pinami portów UART, SPI, piny analogowe (pomiar napięcia sieciowego w UPS), SWD, USB-OTG (obecnie nieużywane) i OneWire. Jeśli dane złącze UART/I2C nie jest skonfigurowane jako port szeregowy piny używane są jako standardowe GPIO, do sterowania ledem czy włączenia układu ładowarki. Magistrale SPI i I2C skonfigurowane i włączone są zawsze. Switch z dostępnych dodatków wykorzystuje jeden port I2C na potrzeby ładowarki USB oraz jeden port SPI dla wyświetlacza LCD.


Wyświetlacz bazuje na UC1601 i może być podłączony do płytki zarówno przez I2C jaki przez SPI, przy czym przez I2C jest rozpoznawany automatycznie, poprzez SPI musi byc skonfigurowany w EEPROMie. Aktualnie brakuje jeszcze klawiatury, ale jak tylko będę miał chwilkę, to switch dostanie taką samą klawiaturę na i2c jaka jest w monitorze moich UPSów:

Na pokładzie znajdują poza tym, wspomniany wcześniej EEPROM (8kiB) - konfiguracja oraz DataFlash (8MiB) - pliki potrzebne dla interfejsu WWW.
Aktualnie switch pokazuje na wyświetlaczu Aktualne obciążenie ładowarki USB, ilość przesyłanych danych na sekundę dla każdego portu (i całości), sumaryczną wielkość danych otrzymanych oraz aktualne obciążenie każdego z portów. Konfiguracja portów w sofcie:

I stan switcha:

Z uwagi na to, że UPS podaje informacje po sieci, że utracono zasilanie sieciowe porty mogą być odłączne w zależności od tego czy sieć pracuje na bateriach czy nie, lub w zależności od poziomu napięcia zasilania/akumulatorów. Całość dodatkowo zabezpieczona 8A bezpiecznikiem na wejściu głównego zasilania. I tak oto switch zasila zegar, panel wyświetlaczy, switcha, dwa access pointy i kilka czujników rozsianych po mieszkaniu.
Cool? Ranking DIY