• Ten serwis używa "ciasteczek" (cookies). Korzystając z niego, wyrażasz zgodę na użycie plików cookies. Learn more.
  • Szanowny Użytkowniku, serwisy w domenie modelarstwo.info wykorzystują pliki cookie by ułatwić korzystanie z naszych serwisów. Jeśli nie chcesz, by pliki cookies były zapisywane na Twoim dysku zmień ustawienia swojej przeglądarki.

Układ sterowania semafora KLUBA z Arduino UNO

MarGe

Aktywny użytkownik
#1
Cześć, chciałbym zrobić układ sterowania semaforem KLUBA za pomocą Arduino UNO. Niestety problemem (być może nie jedynym) jest fakt, że Arduino daję max. napięcie 5V DC zaś semafory KLUBA są zasilane napięciem ~16V (DC?). Czy ktoś z Was ma pomysł jak można to rozwiązać?
 

Marqus

Moderator Poznańskiego Klubu Modelarzy Kolejowych
PKMK
#2
Nic nie stoi na przeszkodzie, by zasilać je z 5V.
Stosując zasilanie 12V zmieniałem rezystory na większą rezystancję, bo przy oryginalnych miałem wrażenie, że świecą za mocno.
A jak przy 5V będą świecić za słabo, to wymienisz na rezystory o mniejszej rezystancji.
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
#3
ah rzeczywiście, nie pomyślałem, że mniejszy prąd będzie związany z jasnością - tym bardziej, że dla mnie również oryginalnie te diody świecą za mocno.
 
#5
Iloma semaforami ma sterować UNO?
Czy UNO to nie rozrzutność? Ma mostek USB-UART, stabilizator 3,3V, kwarc. Te elementy wydają się być niepotrzebne chyba, że je wykorzystujesz w jakiś sposób. W jaki?
 
#7
5-6 semaforów po 5 komór, to 25 lub 35 GPIO na same semafory, UNO ma za mało GPIO.
Sterowanie przeglądarką? Dokładniej jak? UNO ma być serwerem HTTP?
 
OP
OP
MarGe

MarGe

Aktywny użytkownik
#8
UNO tylko pośredniczy, serwerem jest komp a przeglądarka klientem. Teraz muszę znaleźć info jak potroić ilość wyjść PWA na płytce i gotowe :)
 
#10
UNO tylko pośredniczy, serwerem jest komp a przeglądarka klientem.
UNO pośredniczy a jak odbiera dane z serwera? DCC?

Teraz muszę znaleźć info jak potroić ilość wyjść PWA na płytce i gotowe :)
Można programowo ale ma to swoje ograniczenia. Jeśli sterownik ma dekodować DCC to programowe PWM beda miały swoje ograniczenia. Najlepiej wybrać uC z większą liczbą wyjść PWM.
 

Mateusz B

Moderator Grupy KKMK
Zespół forum
KKMK
H0e
#11
Układy PCF8574 sterowane magistralą I2C pozwalają zwiększyć ilość pinów cyfrowych o 8, a układy PCA9685 dają 16 wyjść PWM. Na Arduino są dostępne wygodne biblioteki do ich obsługi, a w internecie jest pełno tutoriali. Układy PCA9785 mają minimalną częstotliwość 40Hz, więc miganie zielonego i pomarańczowego sygnału trzebaby rozwiązac programowo.
 
Ostatnio edytowane:
#12
Układy PCF8574 sterowane magistralą I2C pozwalają zwiększyć ilość pinów cyfrowych o 8
Pokaż soft, który realizuje PWM na PCF8574, napisz jakie ma parametry (rozdzielczość i częstotliwość) i jak obciąża mikrokontroler. To, że sie da wycisnąć ponad 40Hz przy 8-bit PWM to ja wiem. Pytam jednak o gotowca, bo obsługa I2C w Arduino na przerwaniach jest dla wielu ściana nie do przebicia. Inna sprawa, dlaczego używać archaicznego PCF8574 skoro sa nowsze, lepsze układy? Mają 16-wyjśc, pracują na 400kHz a nie na 100. Mają wyjścia PP a nie pseudo dwukierunkowe jak w 8051 gdzie podłączenie np ULN2803 wymaga dodatkowych elementów. Przy 400kHz i ośmiu wyjściach uzyskam nie 43Hz a ponad 170 lub 43Hz ale 12-bit.
40Hz to trochę za mało na PWM dla LED, min to 80...100Hz nieosiągalne dla PCF8574 , chyba, że zmniejszy się rozdzielczość to np 6-bit, wtedy PCF wyciągnie ponad 170Hz. 6-bit dla LED przy płynnej zmianie intensywności świecenia to w zasadzie dolna granica, poniżej zmiany będą w pewnym zakresie skokowe, co wynika z nieliniowej charakterystyki oka ludzkiego i nieliniowej zależności prądu LED do intensywności świecenia.
Ostatecznie można użyć PCF ale to tak jakby używać Z-80 z EEPROM/RAM/CTC/ zamiast AVR lub ARM.
Na przyszłość proponowałbym przeprowadzić podstawowe obliczenia zanim zaproponuje się jakieś rozwiązanie popularne w "sieci" to sterowania przekaźników w roli PWM.

Układy PCA9785 mają minimalną częstotliwość 40Hz, więc miganie zielonego i pomarańczowego sygnału trzebaby rozwiązac programowo.
Co ma miganie do częstotliwości PWM? Jeśli PWM-em chcesz zrealizować miganie światła, to chyba nie wiesz co to jest, do czego służy i jak działa PWM. Teoretycznie, ustawiając PWM na 50% i częstotliwość na np 1Hz uzyska się efekt migania światła, ale będą to dwa stany, świeci/nie świeci a powinno być rozjaśnia się, świeci, ściemnia się, jest wygaszone, itd.

Płynne rozjaśnianie i ściemnianie świateł trzeba zrealizować programowo. Sprzętowo to można zrobić na mikrokontrolerze, który ma DMA. Zewnętrzne PWM jak PCA9785, nie mają mikrokontrolera, tym samym DMA. Ich budowa jest dość prosta i sprzętowo potrafią wygenerować PWM o zadanych parametrach. Jeśli ma sie on zmieniać w czasie, to trzeba do PCA9785 wysyłać zmienne w czasie nastawy. W sumie jest to proste (np dla mnie) ale dla wielu ściana nie do przebicia, wysyłać na przerwaniach dane do PCA9785 a w innym przerwaniu realizować płynne rozjaśnianie i ściemnianie. Może zaproponujesz RTOS? Jest na Arduino, tyle, że pisanie na RTOS tylko pozornie jest łatwe. Semafory, mutexy itp wymagają pewnego sposobu pisania softu, gdzie tylko można trzeba zwalniać czas CPU dla innych zadań a i tak pewnie nie uniknie się napisania obsługi I2C na przerwaniach zwłaszcza na AVR, bo na ARM może by się nawet to udało, tyle, ze dla ARM, npSTM32, CubeMX wygeneruje gotowy kod do komunikacji po I2c na przerwaniach a nawet i na DMA więc problemu nie ma.

Inna sprawa, to po co dodawać zewnętrzny układ zamiast dać inny mikrokontroler z większą liczbą PWM? Kombinacja mikrokontroler + PCA9785 wyjdzie drożej niż mikkrokontroler z większą liczba PWM. Program na "większy" mikrokontroler pisze się łatwiej i szybciej niż na mikrokontroler + PCA9785.


Podsumowując:
Hasło "weź PCF8574, pełno przykładów w Internecie", to porada jak zbuduj wielki piec i wypal sobie żeliwo. Nie sądzę aby autor wątku był ekspertem od mikrokontrolerów skoro pisze o Arduino. Stara sie pomagać osoba, też nie za bardzo znająca mikrokontrolery. W takiej sytuacji jedynym wyjściem jest konkretny link do rozwiązania.
 
Ostatnio edytowane:

Mateusz B

Moderator Grupy KKMK
Zespół forum
KKMK
H0e
#13
Przepraszam za moją mało profesjonalną wypowiedź, ale z tych kilku postów nie domyśliłem się że chodziło o rozjaśnie i ściemnie. W tym kontekście moja wypowiedź nie jest użyteczna. Spodziewałem się że chodzi o podstawową funkcjonalność wyświetlania poprawnych sygnałów(w tym migające).

Pokaż soft, który realizuje PWM na PCF8574, napisz jakie ma parametry (rozdzielczość i częstotliwość)
Kiedyś coś podobnego pisałem, ale korzystając ze wspomagania sprzętowego(czyli łatwo). Osiągnałem czestotliwość zmiany sygnału 50Hz, a po podniesieniu częstotliwości do 400kHz(archaiczne PCF8574 taką obsługują), udało mi się wyciągnąć zaledwie 83Hz. Do sterowania jasnością diody to za mało, do generowania sygnału migającego by wystarczyło.

Co ma miganie do częstotliwości PWM? Teoretycznie, ustawiając PWM na 50% i częstotliwość na np 1Hz uzyska się efekt migania światła.
No właśnie tak chciałem zaproponować światło migające, Wypełnienie na 50% i częstotliwość np. 1Hz. Faktycznie, brak tu modulacji szerokości, więc nie jest to czysty PWM.

Inna sprawa, to po co dodawać zewnętrzny układ zamiast dać inny mikrokontroler z większą liczbą PWM?
Choćby po to, żeby każdy taki zewnętrzy układ umieścić pod makietą zaraz pod semaforem. Zamiast ciągnąć pod makietą przewody do każdej komory świetlnej, pociągnąć magistralę I2C. U kolegi MarGe mamy 5 semaforów po 5 komór, co daje 25 przewodów, magistrala I2C to 2 przewody. Na makiecie modułowej to kolosalna różnica.
 
Ostatnio edytowane:
#14
Choćby po to, żeby każdy taki zewnętrzy układ umieścić pod makietą zaraz pod semaforem. Zamiast ciągnąć pod makietą przewody do każdej komory świetlnej, pociągnąć magistralę I2C. U kolegi MarGe mamy 5 semaforów po 5 komór, co daje 25 przewodów, magistrala I2C to 2 przewody. Na makiecie modułowej to kolosalna różnica.
Jaka max dopuszczalna jest długość I2C przy 400kHz bez dodatkowych, drogich driverów?
Skoro po obliczeniach wiadomo, że nawet na jeden moduł makiety I2C to za dużo (o argumentach u mnie działa na 3 metry, napiszę później) to jedyne wyjście magistrala DCC i jedne przewód a nie dwa jak w I2C.
Jeśli już kombinować odbiór DCC i kilka "satelitów", to nie I2C, która się do tego bez drogich driverów nie nadaje, tylko prędzej:
- OneWire
- UART z pętlą prądową
- RS485
Można rozpatrzyć drivery SPI i transmisję driverami od RS485/422 ale albo kilka tanich układów kompatybilnych z MAX485 albo drogie oryginały MAX-ima (np 4 nadajniki 2 odbiorniki w jednej obudowie). Obawiam się jednak, że w końcowym rozliczeniu, będzie to droższe niż osobny sterownik do każdego semafora.

Najrozsądniej jest dać jeden, dwa lub kilka sterowników semaforów na jeden moduł, każdy obsługujący kilka semaforów, taki kompromis cena/ilość przewodów.
Właściwie, to nie wiem czy jest sens kombinować z Arduino skoro w necie są rozwiązana sterowników 4x2-komory, 2x3, 2x4, 1x5 + tarcza. Są też uniwersalne sterowniki semaforów 8 wyjść (5komór+tarcza, 5komór + pas + dodatkowe sygnały, itp), wszystko na stronie PACO.


PS
Argumenty, w stylu "PCF8574 działa także na 400kHz" są tak samo dobre, jak zmuszanie pracowników do pracy 80 godzin tygodniowo albo promowanie przechodzenia na czerwonym świetle "bo mnie się udaje". Prędzej czy później pojawi sie problem, choćby inna seria układów. W konsekwencji takie 400kHz dla PCF zadziała u jednej osoby, u innej już nie. Może nawet być tak, że podłączamy taki wynalazek do innej makiety i przestaje działać, bo temperatura w pomieszczeniu inna, bo napięcie zasilania trochę inne.
 

Podobne wątki