-
1. Data: 2017-03-07 19:58:36
Temat: dziwny problem
Od: sundayman <s...@p...onet.pl>
Potrzebuję takie dziwne coś...może podpowiecie.
Otóż - MCU ma włączać lub wyłączać przekaźnik.
Ale nie może to być zrobione po prostu w ten sposób, że jakiś port
steruje tym przekaźnikiem, włączając go na określony czas.
Dlaczego ? Ano dlatego, że chodzi o bezpieczeństwo. W razie np. awarii
samego MCU, albo chociażby zawieszenia MCU mogłoby się zdarzyć, że ten
port mógłby pozostać włączony dłużej niż trzeba. A to się nie ma prawa
wydarzyć.
Obecnie jest to rozwiązane w taki sposób, że w układzie są dwa MCU.
Jeden nadzoruje drugi i jeżeli wykryje, że ten drugi coś robi nie tak -
odłącza ten przekaźnik (oba muszą go uruchomić, żeby się włączył).
Ale jest to nieco upierdliwe - trzeba oprogramować oba MCU itp.
Zatem - chciałbym pozostawić jeden MCU.
Ale - zamiast sterować jednym portem - zastosować np. 3 linie.
Aby przekaźnik został włączony - musi pojawić się określona sekwencja na
tych 3 liniach. Znaczy - musi ona się tam pojawiać cały czas, z
określonym okresem.
Jeżeli ta sekwencja zostanie zakłócona jakkolwiek - przekaźnik zostaje
wyłączony i dodatkowo zostaje wygenerowany sygnał resetujący MCU.
Od strony programu, sekwencja będzie generowana równocześnie w kilku
miejscach programu - osobno dla każdej "linii" - aby jak najmniejsze
było ryzyko, że program się "zapętli", a sekwencja nadal jest generowana
poprawnie.
Pytanie jest - jak możliwie prosto zrobić ten zewnętrzny układ ?
No bo zastosowanie w jego roli MCU jest bez sensu w stosunku do obecnego
rozwiązania.
Układ musi być jak widać sekwencyjny, ale też z "pomiarem czasu", żeby
jakieś zmiany poprawnego czasu było wykrywane. Czyli chyba żadne proste
układy logiczne się nie nadadzą, zwłaszcza że nie chcę dodawać x elementów.
Użycie jakichś wyrafinowanych układów typu FPGA czy nawet układów
logicznych o "dużej mocy" też jest jakby nie na miejscu - bo to będzie w
sumie bardziej kłopotliwe niż drugi MCU.
Może podpowiecie, jakie układy programowalne będą "w sam raz" ?
Cena do kilkunastu zł ma sens. Obudowa SMD. Może być jednokrotnie
programowalne, czy wielokrotnie - nie ważne.
A może jest jakiś wynalazek, który do czegoś takiego służy (wątpię) ?
PS; oczywiście oprogramowanie wykorzystuje watchdogi. Ale
to niestety nie jest zabezpieczenie przed nietypowymi zachowaniami
programu - nie zapewnia bezpieczeństwa.
Jednak kiedy program się wykrzaczy w "idle", to pół biedy.
Przekaźnik musi być w 100% włączany przy "pełnej świadomości" programu -
stąd konieczność takiego zabezpieczenia.
-
2. Data: 2017-03-07 20:27:48
Temat: Re: dziwny problem
Od: Sebastian Biały <h...@p...onet.pl>
On 2017-03-07 19:58, sundayman wrote:
> PS; oczywiście oprogramowanie wykorzystuje watchdogi. Ale
> to niestety nie jest zabezpieczenie przed nietypowymi zachowaniami
> programu - nie zapewnia bezpieczeństwa.
Niby dlaczego? Watchdog strzela resetem, przekaźnik jest wyłączony w
procedurze resetu i nie włączy się do aż oprogramowanie się nie odnajdzie.
Jesli zapętli się z popychaniem watchdoga to przecież to samo co
zapętlenie z popychaniem magicznego scalaka. Ryzyko takie samo.
-
3. Data: 2017-03-07 20:28:12
Temat: Re: dziwny problem
Od: "J.F." <j...@p...onet.pl>
Użytkownik "sundayman" napisał w wiadomości grup
dyskusyjnych:o9mvt3$tsf$...@n...news.atman.pl...
>Zatem - chciałbym pozostawić jeden MCU.
>Ale - zamiast sterować jednym portem - zastosować np. 3 linie.
>Aby przekaźnik został włączony - musi pojawić się określona sekwencja
>na tych 3 liniach. Znaczy - musi ona się tam pojawiać cały czas, z
>określonym okresem.
Jakis port I2C/SPI ... sterujacy 74123.
I programowo musisz wachlowac pinem portu, bo inaczej to po chwili 123
przestanie sie wyzwalac.
J.
-
4. Data: 2017-03-07 20:47:05
Temat: Re: dziwny problem
Od: Jakub Rakus <s...@o...pl>
W dniu 07.03.2017 o 19:58, sundayman pisze:
>
> Użycie jakichś wyrafinowanych układów typu FPGA czy nawet układów
> logicznych o "dużej mocy" też jest jakby nie na miejscu - bo to będzie w
> sumie bardziej kłopotliwe niż drugi MCU.
>
> Może podpowiecie, jakie układy programowalne będą "w sam raz" ?
> Cena do kilkunastu zł ma sens. Obudowa SMD. Może być jednokrotnie
> programowalne, czy wielokrotnie - nie ważne.
CPLD?
--
Pozdrawiam
Jakub Rakus
-
5. Data: 2017-03-07 21:02:43
Temat: Re: dziwny problem
Od: g...@s...invalid (Adam Wysocki)
Sebastian Biały <h...@p...onet.pl> wrote:
> Niby dlaczego? Watchdog strzela resetem, przekaźnik jest wyłączony w
> procedurze resetu i nie włączy się do aż oprogramowanie się nie odnajdzie.
Chyba że upali się port (ale tak samo może się upalić i w innym scalaku),
pytanie jakiego rodzaju zakłócenia to ma wytrzymać.
Poza tym - czy styki przekaźnika mogą się skleić? Jeśli tak to może warto
dać drugi przekaźnik, szeregowo, rozłączany po tym pierwszym i załączany
przed nim...
A może jakiś układ, który wywali bezpiecznik, jak przekaźnik będzie za
długo włączony?
> Jesli zapętli się z popychaniem watchdoga to przecież to samo co
> zapętlenie z popychaniem magicznego scalaka. Ryzyko takie samo.
Chyba że soft w ogóle nie wystartuje. Ale (przynajmniej w AVR-ach) reset
powoduje przejście wyjścia w stan wysokiej impedancji - elektronika musi
to podciągnąć pod jakiś właściwy stan i zinterpretować jako "przekaźnik
wyłączony" (bez podciągnięcia zakłócenia mogłyby wyzwalać przekaźnik).
--
http://www.chmurka.net/
-
6. Data: 2017-03-07 21:10:38
Temat: Re: dziwny problem
Od: g...@s...invalid (Adam Wysocki)
sundayman <s...@p...onet.pl> wrote:
> Obecnie jest to rozwiązane w taki sposób, że w układzie są dwa MCU.
> Jeden nadzoruje drugi i jeżeli wykryje, że ten drugi coś robi nie tak -
> odłącza ten przekaźnik (oba muszą go uruchomić, żeby się włączył).
Gorzej jak oba się zawieszą, bo zakłócenie pójdzie na oba.
> Ale - zamiast sterować jednym portem - zastosować np. 3 linie.
> Aby przekaźnik został włączony - musi pojawić się określona sekwencja na
> tych 3 liniach. Znaczy - musi ona się tam pojawiać cały czas, z
> określonym okresem.
Z jedną linią wydaje się proste - układ różniczkujący RC.
A może jakiś expander I2C i za nim układ różniczkujący? Procek musiałby
machać pinem expandera, czyli wykonać dosyć złożoną sekwencję.
A może NE555? Procesor musi resetować timer co jakiś czas, żeby utrzymać
stan umożliwiający włączenie przekaźnika drugim portem...
> PS; oczywiście oprogramowanie wykorzystuje watchdogi. Ale
> to niestety nie jest zabezpieczenie przed nietypowymi zachowaniami
> programu - nie zapewnia bezpieczeństwa.
Coś mi mówi, że zapewnienie 100% bezpieczeństwa elektronicznie może nie
wystarczyć. Masz (Ty lub osoba odpowiedzialna) ubezpieczenie na wypadek
skutków zbyt długiego włączenia przekaźnika? Może warto o tym pomyśleć,
szczególnie jeśli straty mogą być nie tylko finansowe...
> Przekaźnik musi być w 100% włączany przy "pełnej świadomości" programu -
> stąd konieczność takiego zabezpieczenia.
Generalnie poczytałbym o zasadach MISRA C i skupił się na tym, żeby
program (przynajmniej część odpowiedzialna za logikę przekaźnika) był
jak najprostszy. Im bardziej coś przekombinowane, tym więcej miejsca
na pomyłki...
--
http://www.chmurka.net/
-
7. Data: 2017-03-07 21:38:05
Temat: Re: dziwny problem
Od: Sebastian Biały <h...@p...onet.pl>
On 2017-03-07 21:02, Adam Wysocki wrote:
>> Niby dlaczego? Watchdog strzela resetem, przekaźnik jest wyłączony w
>> procedurze resetu i nie włączy się do aż oprogramowanie się nie odnajdzie.
> Chyba że upali się port (ale tak samo może się upalić i w innym scalaku),
> pytanie jakiego rodzaju zakłócenia to ma wytrzymać.
Jeśli spore to pozostaje być może zrobienie na 74123 lub całkowicie
analogowo.
Tylko że spore zakłucenia propagują sie na logikę. Może trzeba wziąć uC
przeznaczony do pracy w cieższych warunkach (np PIC zamiast ARV).
Tak czy inaczej jesli watchdogowi ufać nie można to chyba nic sie nie da
zrobić od strony cpu a wymyslanie magicznych sekwencji zakończy się tym
że procesor wygeneruje randomiczne szumy na pinach po awarii i będa
pasować ...
> Poza tym - czy styki przekaźnika mogą się skleić? Jeśli tak to może warto
> dać drugi przekaźnik, szeregowo, rozłączany po tym pierwszym i załączany
> przed nim...
Mam piec weglowy z podejnikiem węgla sterowany z jednego przekaźnika.
Kilkukrotnie sterownik szlag trafił. Albo nie łączy albo skleja. Jak
sklei to po kilkudziesieciu minutach mam pożar. Autor software i
hardware nie przejmował się tym jednak jak widać za bardzo :D Ot,
tranzystor na port i reszta dnia wolne.
> A może jakiś układ, który wywali bezpiecznik, jak przekaźnik będzie za
> długo włączony?
Dokładnie tak załatwiłem ten sterownik. Między nim a silnikiem podajnika
jest układ czasowy, ktory bezlitośnie odcina silnik dwoma przekaźnikami
jak przekroczy limit jednorazowej pracy. Być może uratowało mi to dom.
>> Jesli zapętli się z popychaniem watchdoga to przecież to samo co
>> zapętlenie z popychaniem magicznego scalaka. Ryzyko takie samo.
> Chyba że soft w ogóle nie wystartuje.
Każdy cpu ma stabilny stan resetu. Mimo to osoboście wstawiłbym nie dośc
że dwa przekaźniki szeregowo to jeszcze dodatkowy cpu z asercją czasową
lub jakąs inną zależna od sytuacji. Jego programuje się *jeden* raz na
caly proces developingu software w głownym cpu. Program tego pomocnika
bedzie miał 10 linijek.
-
8. Data: 2017-03-07 21:50:26
Temat: Re: dziwny problem
Od: Dariusz Dorochowicz <_...@w...com>
W dniu 2017-03-07 o 19:58, sundayman pisze:
> Potrzebuję takie dziwne coś...może podpowiecie.
>
> Otóż - MCU ma włączać lub wyłączać przekaźnik.
> Ale nie może to być zrobione po prostu w ten sposób, że jakiś port
> steruje tym przekaźnikiem, włączając go na określony czas.
>
> Dlaczego ? Ano dlatego, że chodzi o bezpieczeństwo. W razie np. awarii
> samego MCU, albo chociażby zawieszenia MCU mogłoby się zdarzyć, że ten
> port mógłby pozostać włączony dłużej niż trzeba. A to się nie ma prawa
> wydarzyć.
>
> Obecnie jest to rozwiązane w taki sposób, że w układzie są dwa MCU.
> Jeden nadzoruje drugi i jeżeli wykryje, że ten drugi coś robi nie tak -
> odłącza ten przekaźnik (oba muszą go uruchomić, żeby się włączył).
> Ale jest to nieco upierdliwe - trzeba oprogramować oba MCU itp.
>
> Zatem - chciałbym pozostawić jeden MCU.
> Ale - zamiast sterować jednym portem - zastosować np. 3 linie.
> Aby przekaźnik został włączony - musi pojawić się określona sekwencja na
> tych 3 liniach. Znaczy - musi ona się tam pojawiać cały czas, z
> określonym okresem.
Zewnętrzny watchdog powinien tu wystarczyć. Może być ich kilka jak
chcesz bardzo się zabezpieczyć - każdy odpalany inną linią.
> Jeżeli ta sekwencja zostanie zakłócona jakkolwiek - przekaźnik zostaje
> wyłączony i dodatkowo zostaje wygenerowany sygnał resetujący MCU.
Czyli potrzebujesz sterować przekaźnikiem z obu stron - watchdogi
trzymają jedną stronę, a sam procek drugą.
> Od strony programu, sekwencja będzie generowana równocześnie w kilku
> miejscach programu - osobno dla każdej "linii" - aby jak najmniejsze
> było ryzyko, że program się "zapętli", a sekwencja nadal jest generowana
> poprawnie.
>
> Pytanie jest - jak możliwie prosto zrobić ten zewnętrzny układ ?
> No bo zastosowanie w jego roli MCU jest bez sensu w stosunku do obecnego
> rozwiązania.
Bramka AND/NAND/OR/NOR z odpowiednią liczbą wejść. A jeżeli chcesz to
zapamiętać, no to dajesz klasyczny przerzutnik (D albo JK, bo one się do
tego nadają). A w sumie to zamiast bramek możesz poszukać czegoś z
otwartym kolektorem.
> Układ musi być jak widać sekwencyjny, ale też z "pomiarem czasu", żeby
> jakieś zmiany poprawnego czasu było wykrywane. Czyli chyba żadne proste
> układy logiczne się nie nadadzą, zwłaszcza że nie chcę dodawać x elementów.
A co to są zmiany poprawnego czasu? Jak to sobie wyobrażasz? Że watchdog
zadziała ale nie zadziała? To tak nie może być z zasady.
Czy chcesz mierzyć czas co jaki wystawiasz impulsy do watchdoga? No to
nie jest jakieś wielkie wyzwanie o ile masz dość liczników.
> Użycie jakichś wyrafinowanych układów typu FPGA czy nawet układów
> logicznych o "dużej mocy" też jest jakby nie na miejscu - bo to będzie w
> sumie bardziej kłopotliwe niż drugi MCU.
>
> Może podpowiecie, jakie układy programowalne będą "w sam raz" ?
> Cena do kilkunastu zł ma sens. Obudowa SMD. Może być jednokrotnie
> programowalne, czy wielokrotnie - nie ważne.
>
> A może jest jakiś wynalazek, który do czegoś takiego służy (wątpię) ?
>
> PS; oczywiście oprogramowanie wykorzystuje watchdogi. Ale
> to niestety nie jest zabezpieczenie przed nietypowymi zachowaniami
> programu - nie zapewnia bezpieczeństwa.
Bo pewnie masz watchdogi programowe? A to trzeba dać hardware. Jak
najprostszy.
> Jednak kiedy program się wykrzaczy w "idle", to pół biedy.
> Przekaźnik musi być w 100% włączany przy "pełnej świadomości" programu -
> stąd konieczność takiego zabezpieczenia.
Piszesz o jakimś niebezpieczeństwie. Może podchodzisz do tematu z
niewłaściwej strony? Jedna z zasad zabezpieczeń zapalników bomb
lotniczych mówi, że zabezpieczenia muszą wykorzystywać różne zjawiska
fizyczne (opór powietrza, bezwładność itd). Nie wiem z jakiego rodzaju
niebezpieczeństwem masz do czynienia, ale może po prostu potrzebujesz
analogową/dodatkową/zewnętrzną kontrolę stanu? Np. ustawiasz "normalną"
czułość układu regulacji na jakimś poziomie (przy poprawnym sterowaniu),
a po przekroczeniu parametru (ale jeszcze na poziomie bezpiecznym)
dodatkowy układ rozłącza np zasilanie przekaźnika (od drugiej strony)
itd. i robi reset procka. Może też jest możliwość pomiaru jakiegoś
innego parametru?
Pozdrawiam
DD
-
9. Data: 2017-03-07 21:52:24
Temat: Re: dziwny problem
Od: Zbych <a...@o...pl>
W dniu 07.03.2017 o 19:58, sundayman pisze:
> Potrzebuję takie dziwne coś...może podpowiecie.
>
> Otóż - MCU ma włączać lub wyłączać przekaźnik.
> Ale nie może to być zrobione po prostu w ten sposób, że jakiś port
> steruje tym przekaźnikiem, włączając go na określony czas.
Odetnij składową stałą sygnału sterującego podobnie jak to się robi w
podwajaczach napięcia. Żeby trzymać włączony przekaźnik uC będzie musiał
machać pinem. Jak się zawiesi na 1, to po jakimś czasie przekaźnik się
wyłączy.
http://www.nutsvolts.com/uploads/wygwam/NV_0198_Mars
ton_Figure03.jpg
-
10. Data: 2017-03-07 22:10:07
Temat: Re: dziwny problem
Od: Piotr Wyderski <n...@m...com>
sundayman wrote:
> Dlaczego ? Ano dlatego, że chodzi o bezpieczeństwo. W razie np. awarii
> samego MCU, albo chociażby zawieszenia MCU mogłoby się zdarzyć, że ten
> port mógłby pozostać włączony dłużej niż trzeba. A to się nie ma prawa
> wydarzyć.
No to proponuję sterować przekaźnikiem przez tranzystor z prostownikiem
diodowym na wejściu, a z MCU sprzężyć go pojemnościowo. Dowolne stany
stałe na portach się przez kondensator nie przeniosą, więc w przypadku
zawieszenia układ się automatycznie wyłączy.
Przebieg sterujący generuj sobie SPI albo UARTem, jeśli ma być
naprawdę failsafe, to na pollingu, a nie przerwaniach. Jak nie
zdążysz, to Ci się bajt skończy transmitować i przekaźnik znów
się wyłączy.
Czyli wychodzi kondensator, dioda, rezystor bramkowy i MOSFET.
Pozdrawiam, Piotr