Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Switch z pasywnym PoE na STM32F107

Sareph 10 Feb 2019 15:42 6036 12
Suntrack
  • Switch z pasywnym PoE na STM32F107

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

    Switch z pasywnym PoE na STM32F107

    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:

    Switch z pasywnym PoE na STM32F107

    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).

    Switch z pasywnym PoE na STM32F107

    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

    Switch z pasywnym PoE na STM32F107

    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.

    Switch z pasywnym PoE na STM32F107 Switch z pasywnym PoE na STM32F107


    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.

    Switch z pasywnym PoE na STM32F107 Switch z pasywnym PoE na STM32F107

    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:

    Switch z pasywnym PoE na STM32F107

    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:

    Switch z pasywnym PoE na STM32F107

    I stan switcha:

    Switch z pasywnym PoE na STM32F107

    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
    About Author
    Sareph
    Level 24  
    Offline 
    Sareph wrote 620 posts with rating 337, helped 65 times. Been with us since 2004 year.
  • Suntrack
  • #2
    paluszasty
    Level 25  
    Świetny projekt. Gratuluje.
    Czy ja dobrze rozumiem ze ukłaad KSZ8895RQX to komplenty układ 5 portowego Switcha?
    Ilu warstwowe PCB udało się zmieścić na 2 warstwach czy 4?
  • #3
    Sareph
    Level 24  
    paluszasty wrote:
    Czy ja dobrze rozumiem ze ukłaad KSZ8895RQX to komplenty układ 5 portowego Switcha?

    Dokładnie tak. Nawet z wbudowaną terminacją. Tylko transformatorów, zasilania, gniazd i źródła zegara brakuje.

    paluszasty wrote:
    Ilu warstwowe PCB udało się zmieścić na 2 warstwach czy 4?

    2 warstwy, i nawet wrzucę pcb, bo zapomniałem o nim. ;)
    Switch z pasywnym PoE na STM32F107
  • Suntrack
  • #4
    voltbolt
    Level 13  
    Super projekt. Moim zdaniem jeśli by rozszerzyć konstrukcję do 8 portów to spokojnie znalazł byś na to nabywców. Jak by jeszcze giga lan był ... :)
  • #5
    Sareph
    Level 24  
    voltbolt wrote:
    Super projekt. Moim zdaniem jeśli by rozszerzyć konstrukcję do 8 portów to spokojnie znalazł byś na to nabywców.
    To by się dało zrobić, ale...

    voltbolt wrote:
    Jak by jeszcze giga lan był ... :)
    ... z tym jest większy problem. Głownie w złączach/transformatorach. Dla przykładu, złącz 8 port ze wsparciem PoE nie ma (przynajmniej w TME), za to 12 portowe kosztuje bagatelka 538,69zł/szt netto przy zakupie minimum 36 sztuk, toż to za same złącza wyjdzie n razy więcej niż za elektronikę. :D (a farnell ma za durna wyszukiwarkę żeby tam coś znaleźć) Pojedyncze sa za około 20... ale ten switch musiałby finalnie kosztować z 800zł żeby być jako tako opłacalnym przy niskiej produkcji. A za jakieś 400 to już znajdziesz 8 portowego, gigabitowego switcha z "prawdziwym" PoE. ;)
  • #7
    voltbolt
    Level 13  
    Sareph wrote:
    voltbolt wrote:
    Super projekt. Moim zdaniem jeśli by rozszerzyć konstrukcję do 8 portów to spokojnie znalazł byś na to nabywców.
    To by się dało zrobić, ale...

    voltbolt wrote:
    Jak by jeszcze giga lan był ... :)
    ... z tym jest większy problem. Głownie w złączach/transformatorach. Dla przykładu, złącz 8 port ze wsparciem PoE nie ma (przynajmniej w TME), za to 12 portowe kosztuje bagatelka 538,69zł/szt netto przy zakupie minimum 36 sztuk, toż to za same złącza wyjdzie n razy więcej niż za elektronikę. :D (a farnell ma za durna wyszukiwarkę żeby tam coś znaleźć) Pojedyncze sa za około 20... ale ten switch musiałby finalnie kosztować z 800zł żeby być jako tako opłacalnym przy niskiej produkcji. A za jakieś 400 to już znajdziesz 8 portowego, gigabitowego switcha z "prawdziwym" PoE. ;)


    Ja jeśli mam pomysł na narzędzie które przyda mi się, lub ułatwi pracę to je wykonuje, nawet jeśli czasem nakład pracy jest znaczny. Plus jest taki, że mam coś dopasowanego dokładnie do swoich potrzeb. Poza tym mamy ogromną satysfakcję jeśli na co dzień korzystamy z czegoś własnoręcznie wykonanego.
  • #9
    Sareph
    Level 24  
    morswin89 wrote:
    Pojedyncze złącza RJ45 z wbudowanym transformatorem i obsługą PoE można nabyć na alliexpress
    I to w sumie interesująca opcja do moich zabawek pobierających zasilanie po eth. Tylko do dostarczania prądu się nie nadają, bo mają wbudowane mostki diodowe uniemożliwiające wypływ prądu na zewnątrz. Ale widać czas ponownie przebadać ofertę HanRun i AliExpress.

    Dopisane: Ale znalazłem nadające się, HR971169C ;)
  • #10
    Ondo
    Level 11  
    Pytanko jak sobie radzą te klucze mosfet i logika wykrywania przeciążania konkretnego wyjścia? Pytam bo chciałbym zrobić podobne zasilanie do swojego systemu czujników (nie ethernet). Czy nie ma ryzyka że przypadku zwarcia jednego wyjścia napięcie zdąży tak spaść żeby zresetować cały układ sterujący? Czy może lepiej zrobić to "analogowo" i obsługę czyli nadzorowanie i "resetowanie" bezpiecznika w procesorze?
  • #11
    Sareph
    Level 24  
    Ondo wrote:
    Pytanko jak sobie radzą te klucze mosfet i logika wykrywania przeciążania konkretnego wyjścia?
    Ale o co pytasz? Bo klucze są przewymiarowane, że hej - nie ma opcji żeby sobie nie poradziły (skrętka zniesie maks około 1A, te mosfety tolerują z 10A). Limity są wpisane do INA3221, jak ten układ wykryje przekroczenie któregoś limitu, ciągnie pin przerwania, wtedy CPU sprawdza o który port chodzi i odłącza wtedy go. Reset tylko ręczny.

    Ondo wrote:
    Czy nie ma ryzyka że przypadku zwarcia jednego wyjścia napięcie zdąży tak spaść żeby zresetować cały układ sterujący?
    Prędzej bym się obawiał, że zasilacz wykryje zwarcie i wyłączy wszystko. Ale nie, mogę sobie robić zwarcia i wszystko działa poprawnie, kondensatory przy zasilaniu mają najwyraźniej wystarczającą pojemność na kilka ms podtrzymania pracy całości.

    Ondo wrote:
    Czy może lepiej zrobić to "analogowo" i obsługę czyli nadzorowanie i "resetowanie" bezpiecznika w procesorze?
    Jak Ci wygodnie w sumie, cyfrowy układ jest prostszy i możesz zmienić jego zachowanie jeśli potrzebujesz. Generalnie to zależy jakie masz wymagania.
  • #12
    Ondo
    Level 11  
    Sareph wrote:
    Ondo wrote:
    Pytanko jak sobie radzą te klucze mosfet i logika wykrywania przeciążania konkretnego wyjścia?
    Ale o co pytasz? Bo klucze są przewymiarowane, że hej - nie ma opcji żeby sobie nie poradziły (skrętka zniesie maks około 1A, te mosfety tolerują z 10A). Limity są wpisane do INA3221, jak ten układ wykryje przekroczenie któregoś limitu, ciągnie pin przerwania, wtedy CPU sprawdza o który port chodzi i odłącza wtedy go. Reset tylko ręczny.

    Ondo wrote:
    Czy nie ma ryzyka że przypadku zwarcia jednego wyjścia napięcie zdąży tak spaść żeby zresetować cały układ sterujący?
    Prędzej bym się obawiał, że zasilacz wykryje zwarcie i wyłączy wszystko. Ale nie, mogę sobie robić zwarcia i wszystko działa poprawnie, kondensatory przy zasilaniu mają najwyraźniej wystarczającą pojemność na kilka ms podtrzymania pracy całości.

    Ondo wrote:
    Czy może lepiej zrobić to "analogowo" i obsługę czyli nadzorowanie i "resetowanie" bezpiecznika w procesorze?
    Jak Ci wygodnie w sumie, cyfrowy układ jest prostszy i możesz zmienić jego zachowanie jeśli potrzebujesz. Generalnie to zależy jakie masz wymagania.

    MOSFETy mnie nie martwią (do pewnego poziomu), bardziej chodziło mi o ryzyko że jednym kanałem można całość zresetować. Czyli jak mam rozumieć że nawet w przypadku zwarcia "metalicznego", jeśli procesor zareaguje w ciągu kilkudziesięciu milisekund i wyłączy MOSFET to nadal nie przeciąża zasilacza głównego?
  • #13
    Sareph
    Level 24  
    Ondo wrote:
    MOSFETy mnie nie martwią (do pewnego poziomu), bardziej chodziło mi o ryzyko że jednym kanałem można całość zresetować. Czyli jak mam rozumieć że nawet w przypadku zwarcia "metalicznego", jeśli procesor zareaguje w ciągu kilkudziesięciu milisekund i wyłączy MOSFET to nadal nie przeciąża zasilacza głównego?
    Nie tego, który mam. Ale rezultaty mogą być różne w zależności od zasilacza. Ten konkretny, o ile pamiętam, potrzebował coś 80ms+ aby zaczęło mu coś nie pasować.