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

Programowalny sterownik zupełnie inaczej

wniedzie 06 Sep 2017 17:16 11901 38
Suntrack
  • Programowalny sterownik zupełnie inaczej
    Celem projektu było stworzenie amatorskiego programowalnego sterownika logicznego.

    Motywacją do stworzenia tego sterownika była potrzeba posiadania uniwersalnego urządzenia pozwalającego w warunkach laboratoryjnych na szybkie przetestowanie różnych algorytmów sterowania przy przebiegach szybkozmiennych. Zakładana częstotliwość przetwarzania musi wynosić co najmniej 10kHz, aby układ można było wykorzystać do sterowania np. silnikami bezszczotkowymi lub wtryskiem paliwa w silnikach spalinowych.
    Innymi słowy, sterownik ma być rozwiązaniem pośrednim pomiędzy komercyjnym sterownikiem PLC a dedykowanym układem sterującym, eliminującym pewne ograniczenia obydwu, np.:
    1. Małą częstotliwość przetwarzania w przypadku sterowników PLC,
    2. Brak możliwości szybkiej rekonfiguracji lub rozbudowy sterownika dedykowanego.

    Podstawowe założenia projektu to:

    1. Prosta i tania konstrukcja umożliwiająca wykonanie w warunkach amatorskich
    2. Programowanie za pomocą schematu blokowego w środowisku Microsoft Windows
    3. Obsługa modułu za pomocą jednej aplikacji ? możliwość zapisania konfiguracji do modułu jako funkcja edytora programu
    4. Wykorzystanie darmowych rozwiązań software?owych
    5. Modułowa konstrukcja
    6. Uniwersalność
    7. Możliwość przetwarzania sygnałów analogowych (podstawowe funkcje DSP)
    8. Możliwość rozbudowy o nowe funkcjonalności
    9. Wysoka wydajność ? jak najwyższa częstotliwość przetwarzania

    Podstawą pierwszej wersji sterownika było zastosowanie płyty głównej komputera PC jako modułu sterującego oraz podłączonego do niej za pomocą portu równoległego LPT modułu we/wy.

    Programowalny sterownik zupełnie inaczej

    Takie rozwiązanie pozwala na:
    1. Wykorzystanie dużej mocy obliczeniowej procesora x86
    2. Wykorzystanie wbudowanych interfejsów, w szczególności portów szeregowych, USB, VGA oraz Ethernet. Dzięki temu można zbudować system wyposażony w rozbudowany interfejs użytkownika, w tym graficzny, oraz łatwo integrować się z innymi systemami przy pomocy protokołów RS232 lub ModBus over TCP/IP.

    Ze względu na to, że sterownik musi pracować jako system czasu rzeczywistego (dające się przewidzieć czasy przetwarzania i reakcji), został uruchomiony pod kontrolą systemu DOS (FreeDOS). Wynikają z tego pewne implikację, m.in.:
    1. pełna kontrola wykonywania programu, w szczególności wykorzystanie przerwań sprzętowych i timerów,
    2. szybki dostęp do portu równoległego
    3. Możliwe jest wykorzystanie usług systemu operacyjnego, np. obsługa systemu plików FAT.

    Płyta PC

    Aby zapewnić możliwe kompaktowe rozmiary całego sterownika na płytę główną została wybrana płyta z terminala HP T5000. Główne cechy tej płyty to:
    1. Małe rozmiary (17cmx17cmx5cm),
    2. Energooszczędny procesor taktowany z częstotliwością 500MHz,
    3. Brak konieczności używania wentylatorów,
    4. Zasilanie z pojedynczego źródła 12V,
    5. Złącza ATA 44-pin pozwalające na podłączenie modułu DOM lub karty Compact-Flash jako podstawowego dysku z systemem operacyjnym,
    6. Wbudowane porty USB, VGA, RS-232, LPT, Ethernet.

    System powinien być jak najbardziej odporny na wstrząsy, dlatego system operacyjny został zainstalowany na karcie Compact-Flash. Możliwe jest też uruchomienie systemu z pamięci USB.


    Obudowa

    Płyta główna wraz z modułem we/wy została umieszczona w uniwersalnej obudowie plastikowej Z26 o wymiarach 22x22x6cm.

    Płyta PC znajduje się nad płytą we/wy i jest do niej przytwierdzony za pomocą gwintowanych tulei dystansowych. Rozkład otworów montażowych w płycie PC narzucił taki sam rozkład otworów w płycie we/wy.

    Całość zasilana jest zewnętrznym zasilaczem 12V.



    Moduł We/Wy

    Podstawowe wymagania na płytę wejścia/wyjścia to:
    1. Podłączenie do płyty głównej za pomocą portu LPT,
    2. Zasilenie z pojedynczego źródła 5V, np. z portu USB płyty głównej,
    3. Co najmniej 16 wejść cyfrowych akceptujących sygnał napięciowy o wartości 5-24V i dowolnej polaryzacji
    4. Co najmniej 16 wyjść cyfrowych o obciążalności do 2A,
    5. Możliwie jak najszybsze wykonywanie cykli odczytu wejść i zapisu wyjść.
    6. Wymienne moduły wyjściowe typu otwarty kolektor lub push-pull.


    Magistrala danych
    Biorąc pod uwagę, iż system musi umożliwiać wykorzystanie do 16 wyjść typu push-pull, a każde z nich może być w jednym z trzech stanów (wysoki, niski lub wysokiej impedancji) ilość wewnętrznych sygnałów wyjściowych musi wynosić nawet 32 (po dwie linie sterujące na wyjście). Dodatkowo system musi obsłużyć 16 linii wejściowych. W sumie daje to 48 linii sygnałowych.

    Ze względu na to, że port LPT posiada tylko 8 dwukierunkowych linii komunikacyjnych (D0-D7), sygnały wejściowe i wyjściowe muszą być multipleksowane i de multipleksowane z magistrali. Przy wykorzystaniu linii D0-D7 jako magistrali wspólnej dla adresów i danych teoretycznie można zaadresować 65536 linii wejścia/wyjścia.

    Mając na uwadze powyższe, na płycie we/wy został więc zastosowany zestaw dwóch ośmiobitowych buforów wejściowych, czterech ośmiobitowych zatrzasków wyjściowych oraz dekoder adresowy.

    Odczyt stanu wejść przebiega następująco:

    1. Przestawienie magistrali w tryb wyjścia
    2. Wystawienie na magistrali adresu jednego z dwóch buforów wejściowych
    3. Zatrzaśnięcie adresu w zatrzasku adresowym
    4. Przestawienie magistrali w tryb wejścia
    5. Aktywacja bufora
    6. Odczyt wartości z magistrali
    7. Zwolnienie magistrali
    8. Powtórzenie powyższych kroków dla drugiego bufora wejściowego

    Zapis stanu wyjść przebiega następująco:
    1. Przestawienie magistrali w tryb wyjścia
    2. Wystawienie na magistrali adresu jednego z czterech zatrzasków wyjściowych
    3. Zatrzaśnięcie adresu w zatrzasku adresowym
    4. Wystawienie na magistrali danych wyjściowych
    5. Zatrzaśnięcie danych w odpowiednim zatrzasku
    6. Powtórzenie powyższych kroków dla pozostałych trzech buforów wyjściowego


    Wejścia
    Wszystkie wejścia cyfrowe są galwanicznie odizolowane od reszty układu. Dzięki zastosowaniu układu TLP620-4, który składa się z czterech transoptorów posiadających po dwie diody świecące spolaryzowane przeciwnie, wejście cyfrowe może być aktywowane dowolną polaryzacją. Ponadto układ ten może być zastąpiony dwoma układami TLP620-2 lub czterema układami TLP620-1.

    Wyjścia transoptorów podłączone są do magistrali poprzez bufory 74245. Ze względu na to, że bufory te posiadają wejścia bez wewnętrznych rezystorów podciągających a podłączone są od strony wejścia do układu typu otwarty kolektor konieczne jest dodanie zewnętrznej drabinki rezystorów. Fakt ten nie został wychwycony w fazie projektowania płytki, dlatego drabinki rezystorowe zostały dodane później.

    Początkowo moduł we/wy miał zawierać ośmiokanałowy przetwornik analogowo-cyfrowy, jednak docelowo nie został on zamontowany i w kolejnych wersjach systemu zostanie pominięty.



    Wyjścia

    Moduły wyjściowe zostały zaprojektowane w formie wymiennych płytek z zaciskami. Umożliwia to dopasowanie sterownika do różnego typu elementów wykonawczych, bez konieczności stosowania dodatkowych układów pośredniczących. Płytki te połączone są do kontrolera za pomocą taśmy ze stykami.

    W chwili obecnej są zaprojektowane dwie wersje modułów wyjściowych: typu otwarty kolektor oraz push-pull. Każdy z typu modułu obsługuje 8 wyjść cyfrowych, dzięki czemu możliwe jest zamontowanie ich w trzech konfiguracjach:

    1. 16 wyjść otwarty kolektor
    2. 8 wyjść otwarty kolektor i 8 wyjść push-pull
    3. 16 wyjść push-pull

    Moduł wyjściowy typu otwarty kolektor został oparta na dwóch układach MP4102 (wymontowane z drukarki igłowej, gdzie sterowały głowicą) i wymaga ośmiu linii sterujących.

    Moduł typu push-pull zawiera dwa popularne układy L298. Każdy z nich składa się z dwóch kompletnych mostków H. Dzięki swojej konstrukcji może zostać użyty jako sterownik czterech niezależnych linii z zastrzeżeniem, iż sygnały sterujące EnableA i EnableB są wspólne dla dwóch linii. W związki z tym, że pożądane jest aby wykorzystać możliwość przestawienia wyjścia w stan wysokiej impedancji, cały moduł wymaga dwunastu linii sterujących.

    Uwaga. Moduł push-pull nie zawiera diod zabezpieczających wyjścia układów L298, co jest niezgodne ze sztuką i może doprowadzić do uszkodzenia układu.

    Aby zapewnić odpowiednią ilość sygnałów sterujących dla obu typów modułów wraz z zasilaniem 5V minimalna ilość linii wynosi 14. Z tego powodu użyto taśm i konektorów 16-pinowych.



    Komunikacja LPT

    W pierwotnej wersji płyty we/wy komunikacja przez port LPT odbywała się w trybie SPP, co oznacza, że linie sterujące zatrzaskami i buforami musiały być obsłużone programowo. W efekcie tego cykl odczytu wejść wymagał 12 operacji na porcie LPT a cykl zapisu wyjść 24 operacji. W sumie odczyt i zapis stanu wejść i wyjść wymagał 36 operacji na porcie LPT.

    W związku z ograniczoną prędkością magistrali ISA, do której podłączony jest port LPT, częstotliwość przetwarzania sygnałów wyniosła około 10 kHz, przy czym faza obliczeniowa miała znikomy wpływ na częstotliwość przetwarzania.

    Aby zwiększyć częstotliwość przetwarzania system został przekonfigurowany na komunikację przy sprzętowym wsparciu trybu EPP. Wymagało to drobnych zmian w części dekodera adresowego (inne podłączenie linii sterujących) oraz sprzętowego generowania sygnału /WAIT, np. jako prostej funkcji logicznej:
    /WAIT = /(ADDRESS_STROBE * DATA_STROBE)

    Funkcję tę można zrealizować na jednej bramce NAND lub jej równoważniku, np. bramkach NOT z wyjściami typu otwarty kolektor (tzw. ?iloczyn na drucie?).

    Dzięki komunikacji EPP ilość wszystkich operacji na porcie LPT zmniejszyła się trzykrotnie, co spowodowało wzrost częstotliwości przetwarzania do około 40 kHz.

    Początkowo częstotliwość przetwarzania miała być synchronizowana generatorem opartym na układzie NE555 wysyłającym do portu LPT sygnał przerwania. Nie został on jednak zainstalowany i został zastąpiony timerem na płycie PC.



    Oprogramowanie - opis


    Bloki

    Podstawowa funkcja oprogramowania to realizacja algorytmu sterowania, który zapisany jest jako struktura bloków realizujących różne algorytmy obliczeniowe, połączonych między sobą wirtualnymi przewodami. Aby zapisać taką strukturę w postaci programu komputerowego naturalne jest wykorzystanie programowania obiektowego.

    W związku z powyższym każdy blok jest obiektem klasy dzierżawiącej po wspólnej klasie BLOCK. Klasa ta zakłada, że każdy blok będzie posiadał:
    1. do pięciu wejść typu zmiennoprzecinkowego,
    2. jedno wyjście typu zmiennoprzecinkowego,
    3. zdefiniowaną funkcję CALC służącą do obliczenia wartości wyjścia bloku.

    Połączenia pomiędzy blokami są realizowane za pomocą wskaźników na obiekty klasy BLOCK, tzn. każde wejście bloku jest wskaźnikiem na inny blok. W ten sposób budowana jest struktura przepływu sygnałów od wejść sterownika, poprzez bloki funkcyjne, do wyjść sterownika.

    Aby ujednolicić strukturę programu, wejścia kontrolera również odwzorowane są jako bloki.

    Każde wyjście kontrolera odwzorowane jest jako wskaźnik na blok.

    Dzięki temu, że wejścia i wyjścia bloków są typu zmiennoprzecinkowego, sterownik może wewnętrznie przetwarzać wartości analogowe, jak na przykład: czas, częstotliwość, wypełnienie sygnału okresowego, itp. Ponadto sterownik może przetwarzać sygnały analogowe z zewnątrz o ile zostaną przetworzone na postać cyfrową, np. za pomocą konwertera NAPIĘCIE-->PWM.

    Wartości binarne są przetwarzane w ten sposób, że wartość sygnału 0 odpowiada logicznemu fałszowi, a inna wartość odpowiada logicznej prawdzie.

    Przykładowe typy bloków to:
    1. pojedyncze bramki logiczne,
    2. złożone układy logiczne (np.: przerzutniki, liczniki, kodery)
    3. operatory i funkcje arytmetyczne
    4. operacje porównania
    5. wartości stałe

    Oprogramowanie jest bardzo elastyczne i pozwala na tworzenie własnych bloków realizujących właściwie dowolne funkcje. Głównym ograniczeniem bloku jest tylko jedno wyjście, co wynika z architektury oprogramowania.



    Algorytm przetwarzania

    Główny pętla programu wykonuje następujące czynności:
    1. Odczytania stanu wejść
    2. Obliczenie stanu wyjść
    3. Zapisanie stanu wyjść

    Ze względu na to, że maksymalna możliwa prędkość przetwarzania tej pętli wynosi około 40 kHz, główna pętla została zaprogramowana tak, aby wykonywała się około 30 tysięcy razy na sekundę. Osiągnięto to poprzez wstawienie głównej pętli w procedurę obsługi przerwania sprzętowego timera na płycie głównej. Timer ten dostaje sygnał wejściowy o częstotliwości 1193182Hz, który poprzez programowalny dzielnik częstotliwości może być źródłem przerwania. Po zaprogramowaniu dzielnika na wartość 40 uzyskujemy częstotliwość wywołania przerwania wynoszącą 29830Hz. Przy założeniu, że jest to wartość dostatecznie zbliżona do 30000 Hz, osiągnięto dwa cele:
    1. pętla główna może zostać w prosty sposób wykorzystana do zliczania czasu z dokładnością około 33us i błędem około 0,5%.
    2. Procesor posiada zapas mocy obliczeniowej na poziomie około 25%, co może zostać wykorzystane do zaprogramowania dodatkowych funkcjonalności.

    Ze względu na sposób zapisania programu w postaci łańcucha połączonych bloków (każdy blok ?wie? o bloku poprzednim), obliczenie wartości dowolnego wyjścia sterownika wymaga wywołania jednej funkcji liczącej wartość bloku podłączonego do tego wyjścia. Wartości wszystkich pozostałych bloków są rekurencyjnie obliczane ?wstecz?, aż do sygnałów wejściowych.

    Należy zauważyć, że wyjście dowolnego bloku może być podłączone do wejść wielu bloków. Aby w takim przypadku nie liczyć ponownie wartości takich bloków oraz zapobiegać ewentualnym pętlom, każdy blok posiada flagę informującą, że dany blok został już przetworzony w bieżącej iteracji. Flagi te są czyszczone przed rozpoczęciem kolejnej iteracji.

    W obecnej wersji oprogramowania kontrolera w wersji PC nie ma możliwości zewnętrznego programowania. Program może być zmieniony poprzez uruchomienie go z wymiennej pamięci USB lub edycję i rekompilację bezpośrednio na kontrolerze.


    Oprogramowanie - Kody źródłowe

    Główne pliki programu to:
    Plc.cpp ? program główny. Inicjuje sterownik, zawiera definicję algorytmu sterowania, uruchamia główną pętle przetwarzania.
    Plceng.cpp ? główna klasa programu. Zawiera funkcje inicjujące, odczytujące wartość wejść, obliczające i zapisującej wartość wyjść.
    Block.h ? definicja klasy BLOCK.

    Definicje bloków funkcyjnych znajdują się plikach z nazwami zaczynającymi się od ?GATE?. Są to obecnie bramki logiczne (GATE_AND, OR GATE_, GATE_NOT), blok zwracający dowolną wartość stałą (GATE_CON), bloki zwracające wartość 1 lub 0; (GATE_ZER, GATE_ONE), generator PWM (GATE_PWM). Na bazie tych klas można budować dowolne własne pamiętając, żeby umieścić ich deklaracje w pliku plceng.h


    załączone schematy i rysunki

    Płyta we/wy:
    1. Schemat (pierwsza wersja, SPP)
    2. Rysunek płytki (pierwsza wersja, SPP)
    3. Schemat (druga wersja, EPP) ? bez przetwornika ADC, bez generatora częstotliwości, z dodanymi rezystorami podciągającymi przy buforach wejściowych


    Moduły we/wy:
    1. Schemat modułów we/wy
    2. Rysunek płytki


    Zdjęcia

    Programowalny sterownik zupełnie inaczej
    Płyta we/wy ? widok z góry. W prawym górnym rogu, w miejscu planowanego generatora częstotliwości zamontowany układ 7405 odpowiadający za generowanie sygnału /WAIT. W lewym dolnym rogu niewypełnione miejsca na pierwotnie planowany przetwornik A/C.

    Programowalny sterownik zupełnie inaczej
    Płyta we/wy ? widok od spodu. Widoczne późniejsze modyfikacje płytki (dodatkowe przewody) zapewniające prawidłową transmisję EPP.

    Programowalny sterownik zupełnie inaczej

    Płyta we/wy z modułami wyjściowymi zamontowana w obudowie. W jednym z modułów wyjściowych brak jest rezystorów oraz jednego układu MP4102.

    Programowalny sterownik zupełnie inaczej

    Kompletny sterownik z płytą PC. W górnej części widać taśmę łączącą obie płyty, doprowadzenie zasilania z zewnętrznego zasilacza oraz wyprowadzenie portu VGA na zewnątrz obudowy. W lewym dolnym rogu karta CF podłączona do portu ATA za pomoca przejściówki.

    Programowalny sterownik zupełnie inaczej



    Co dalej?

    Projekt w obecnej formie został zawieszony i nie będzie rozwijany. Tym nie mniej poniżej znajdują się propozycje poprawek i dalszego rozwoju projektu:

    Poprawienie moduł wyjściowy push-pull z uwzględnieniem diod zabezpieczających,
    Wyprowadzenie portów USB na zewnątrz obudowy
    Dodanie diod świecących sygnalizujących stan wejść i wyjść,
    Oznaczenie portów na obudowie,
    Wykorzystanie porty IDE do podłączenia modułu we/wy. Wymagałoby to przeprojektowania moduły we/wy ale umożliwiłoby zwiększenie częstotliwości przetwarzania około czterokrotnie (zmierzona częstotliwość taktowania portu IDE w trybie PIO0 to około 1MHz, przy założeniu sześciu operacji we/wy w każdym cyklu otrzymujemy częstotliwość przetwarzania około 160 kHz).
    Dodanie możliwości wygodnego programowania sterownika, np. przez port szeregowy,
    Rozbudowanie oprogramowania o obsługę bloków w wieloma wyjściami.
    Ostatnie dwa punkty zostały zrealizowane w wersji opartej na module Arduino Nano.





    Uwagi:

    Czym sterownik jest:

    1. dowodem na wykonalność pewnych koncepcji (Proof of Concept)
    2. układem służącym do nauki i zabawy. Projekt pokazuje między innymi, jak można:
    a. wykorzystać płytę komputera PC do sterowania urządzeniami zewnętrznymi przy pomocy protokołu EPP
    b. wykorzystać programowanie obiektowe do zamodelowania procesu sterowania, również w przypadku procesorów AVR
    c. wykorzystać przerwania sprzętowe i timer wbudowany na płycie PC
    d. obsłużyć magistralę danych z dekoderem adresowym
    e. wykorzystać pewne funkcje programu Cadsoft Eagle do tworzenia własnych typów schematów
    f. oskryptować niektóre fazy tworzenia oprogramowania
    3. podstawą do rozbudowy lub tworzenia nowych konstrukcji

    Czym sterownik nie jest:
    1. Gotowym, kompletnym sterownikiem do zastosowań przemysłowych

    Tym samym mam świadomość pewnych niedociągnięć w projekcie, w szczególności w warstwie sprzętowej. Tym nie mniej układ działa i mam nadzieję, że komuś to opracowanie będzie pomocne w nauce lub w budowie własnego układu.

    Miałem jakieś problemy z załączeniem schematów i plików brd, dlatego odsyłam do mojej strony pod adresem http://wniedziel.mooo.com/plc
    About Author
    wniedzie
    Level 14  
    Offline 
    wniedzie wrote 110 posts with rating 60, helped 9 times. Been with us since 2017 year.
  • Suntrack
  • Suntrack
  • #3
    wniedzie
    Level 14  
    michcior wrote:
    Port LPT to wymierająca technologia

    A który inny port zapewni dostęp w czasie rzeczywistym przy takiej przepustowości, wydajności i cenie (terminal HP można kupić za 30 PLN) ?Czekam na propozycje.
    Zgodzę się, że LPT wymarło, ale w sprzęcie konsumenckim. To nie jest sprzęt konsumencki.
    Większość obrabiarek CNC sterowanych z PC-ta jest podłączona właśnie przez LPT.
  • #4
    michcior
    Level 30  
    wniedzie wrote:
    Większość obrabiarek CNC sterowanych z PC-ta jest podłączona właśnie przez LPT.

    I jeszcze używają dyskietek :)
    Jakoś nie spójna ta twoja argumentacja. Z jednej strony masz aspirację na sprzęt "nie konsumencki" a z drugiej stawiasz wymaganie 30zł. Nie, profesjonalne systemy to karty na PCI. National ma swój system operacyjny RT bo to co można wycisnąć z Windowsa czy nawet Linuksa to takie sobie RT.
  • #5
    wniedzie
    Level 14  
    michcior wrote:
    Jakoś nie spójna ta twoja argumentacja

    Jako sprzęt konsumencki rozumiem PC-ty sprzedawane masowo w hipermarkecie. Tam LPT nie ma sensu.
    Moja propozycje jest dla każdego, kto chce się pobawić za parę złotych w domowym zaciszu. Ani Arduino, ani RaspberyPi często nie zrobi tego, co można zrobić na zapomnianym sprzęcie sprzed kilkunastu lat.
  • #7
    Anonymous
    Anonymous  
  • #9
    wniedzie
    Level 14  
    R-MIK wrote:
    Porównujesz ten sprzęt do Arduino, sterowników PLC. Te rozwiązania startują w mniej niż sekundę po włączeniu zasilania
    - Ile czasu startuje twój system?
    - Ile pobiera energi w porównaniu do popularnych PLC?
    - PLC, Arduino, bez problemu można zasilić z akumulatora, jak to będzie w przypadku twojego systemu? Chodzi o czas podtrzymania (o tym, ze Arduino zadziała na jednym LiLon nie będę już pisał).
    - O wymiarach napisałeś (to jest ogromne w porównaniu do PLC), jak do zamontować na szynie DIN?


    Masz rację, to są wszystko rozsądne argumenty. Chciałem stworzyć coś, co nie będzie ani jednym, ani drugim. Wszystko ma swoje plusy dodatnie i ujemne. Biorąc jednak pod uwagę wszystkie moje założenia wierzę, że udało mi się stworzyć coś dość optymalnego.
    Myślę, że dość wyraźnie napisałem, że projekt ma charakter edukacyjny i nie ma ambicji konkurowania z rozwiązaniami komercyjnymi.
    Powstało coś prawie z niczego przy wykorzystaniu paru ciekawych (jak mi się wydaje) pomysłów.
  • #10
    Anonymous
    Anonymous  
  • #11
    michcior
    Level 30  
    R-MIK wrote:
    To jakby teraz uczyć w szkołach programowania Z-80, DOS-owego Pascala, Logo.

    Z80 i dos Pascala miałem na studiach :) w 1997r. Ciekawe ile lat jeszcze tego uczyli. Tragedia.
    Logo dzieci mają teraz w podstawówce, nazywają to Logomocja

    Co do walorów edukacyjnych, to stosowanie klasycznych układów logicznych też nic nie wnosi. To też jest "kamień łupany", no może "epoka brązu". Proste CPLD kosztuje mniej jak 10zł. Programator jak ByteBlaster (dla przykładu Altera) można zrobić samemu, Quartus za darmo. Jak ktoś kocha 74xxx to może nawet narysować schemat z tych bramek. To miało by jakiś element edukacyjny...
  • #12
    wniedzie
    Level 14  
    Macie rację, to są podstawy. Ale podstaw też trzeba się kiedyś nauczyć. Nie wyobrażam sobie, że ktoś programuje CPLD, a w życiu nie zlutował dwóch bramek.
    Swoją drogą to trochę bez sensu, jak ludzie na przykład się rzucili na Arduino i myślą, że robią fajne rzeczy, a nie wiedzą nic o architekturze AVR.

    Co złego jest w programowaniu c++? Język, jak każdy inny. To tylko narzędzie do osiągnięcia celu.

    Idąc dalej waszym tropem można powiedzieć, że użyłem samych przestarzałych technologi (montaż przewlekany, obudowa uniwersalna a nie z drukarki 3D, płytka jednostronna robiona samemu, TTL a nie CMOS). W tym kontekście większość projektów zamieszczonych tutaj jest do bani.

    Podsumowując - układ działa. Wszystkie użyte technologie sprawdzają się w tym przypadku ale nie są celem samym w sobie.
  • #13
    willyvmm
    Level 30  
    Zazwyczaj nie biorę dyskusji w takich tematach.

    Fajnie że projekt działa, spełnia twoje wymagania, i Ci się podoba.

    Ale, ogólnie wziąłeś maszynę o sporej mocy i jej funkcjonalność obciąłeś do nieco lepszego arduino.

    LPT i to multiplexowane? Arduino ma więcej linii IO I zdecydowanie szybszych.

    Obsługa IDE w trybie PIO0(zero)... W takim zastosowaniu aż się prosi o DMA, nie wspominając o tym że są znacznie szybsze tryby. No i arduino też to potrafi.

    Niewykorzystany port PCI. (tu jest nieco trudniej, ale nie jest to niewykonalne ani niedostępne dla amatora). W PCI drzemie tu cały zmarnowany potencjał.

    Powodzenia w przyszłych projektach.
  • #14
    wniedzie
    Level 14  
    willyvmm wrote:
    ogólnie wziąłeś maszynę o sporej mocy i jej funkcjonalność obciąłeś do nieco lepszego arduino.

    Niezupełnie. Moc obliczeniowa jest potrzebna do przetwarzania sygnałów. W prosty sposób można dopisać moduły robiące w zasadzie dowolne obliczenia, nawet zmiennoprzecinkowe czy DSP. Skomplikowany algorytm sterowania nie zrobi na CPU dużego wrażenia. Ograniczeniem prędkości przetwarzania jest tylko szybkość portu LPT.
    Arduino ma szybkie porty, ale nie poradzi sobie z obliczeniami. Przeniosłem ten projekt na AVR i tam prędkość przetwarzania jest mocno ograniczona przez CPU. Nie udało mi się osiągnąć takiej prędkości nawet przy prostym algorytmie. Trwają eksperymenty z STM32.

    Czy jesteś pewien, że można tutaj użyć DMA? Z tego co wiem, można go użyć do hurtowego kopiowania danych, a tu mamy naprzemienne operacje odczyt-zapis w blokach po parę bajtów.
  • #15
    Anonymous
    Anonymous  
  • #16
    willyvmm
    Level 30  
    wniedzie wrote:
    Czy jesteś pewien, że można tutaj użyć DMA? Z tego co wiem, można go użyć do hurtowego kopiowania danych, a tu mamy naprzemienne operacje odczyt-zapis w blokach po parę bajtów.


    Nie zapominaj że urządzenia ATA to urządzenia blokowe, do tego zapis / odczyt do urządzenia odbywa się sekwencyjnie.


    Do tego taka ilość RAM pozwala na zbuforowanie wszystkich potrzebnych danych.
  • #17
    shadoweyes
    Level 20  
    Postawy to 8080(8086), Z80, 6500, 8051, AVR jak wiesz jak działają i umiesz programować w ASM., C ,C++ czy Pascalu to przejście na inne układy mikroprocesorowe nie powinno być problemem bo od tego się zaczęło. Wszytko zależy od tego co potrzebujesz "zrobić". I co ogranicza twój "sterownik", najczęściej są to układy przekaźnikowe(styczniki). Nie zawsze trzeba strzelać z armaty.
  • #18
    dondu
    Moderator on vacation ...
    wniedzie wrote:
    W związku z ograniczoną prędkością magistrali ISA, do której podłączony jest port LPT, ...

    Szkoda, że nie wykorzystałeś bezpośrednio ISA.
    W latach 90-tych wykonałem oscyloskop cyfrowy budując własną uniwersalną kartę do magistrali ISA (mam ją do dzisiaj) i programując w assemblerze.
    Jako przewodnik służyła mi książka:

    Programowalny sterownik zupełnie inaczej
    także mam ją do dzisiaj, a która później miała jakieś dodatkowe wydania.

    Może powstanie kolejna wersja sterownika? :D
  • #19
    wniedzie
    Level 14  
    willyvmm wrote:
    Nie zapominaj że urządzenia ATA to urządzenia blokowe

    Niespodzianka - nie myślałem o wykorzystaniu protokołu Ata, tylko o bezpośrednim dostępie do linii sterujących wyprowadzonych na porcie IDE. Są tam wyprowadzone trzy linie adresowe (8 adresów) do wyboru rejestru konfiguracyjnego dysku. Nie wdając się za bardzo w szczegóły sprawdziłem, że podłączenie się do portu ATA równolegle z dyskiem twardym i zapisywanie/odczytywanie z niektórych z tych rejestrów nie powoduje zaburzenia pracy dysku. Wystarczy przerobić dekoder adresowy w moim projekcie i powinno działać. A port ATA podłączony jest to magistrali PCI, wiec prędkość znacznie większa.

    Jeśli chodzi o bezpośrednie wykorzystanie magistrali ISA to nie zwiększyłoby to przepustowości. W trybie SPP sterownik portu LPT jest tylko buforem magistrali ISA. Ograniczeniem jest taktowanie magistrali ISA i czas na wykonanie instrukcji OUT oraz IN.
  • #20
    dondu
    Moderator on vacation ...
    wniedzie wrote:
    Jeśli chodzi o bezpośrednie wykorzystanie magistrali ISA to nie zwiększyłoby to przepustowości. Ograniczeniem jest taktowanie magistrali ISA i czas na wykonanie instrukcji OUT oraz IN.

    Nie pamiętam już szczegółów projektu, ani magistrali, ale w głowie siedzą mi megabajty.
  • #21
    wniedzie
    Level 14  
    dondu wrote:
    Nie pamiętam już szczegółów projektu, ani magistrali, ale w głowie siedzą mi megabajty

    Mój sprzęt wyciąga około 480 KB/s przy transmisji 8-bitowej. Według Wikipedii można wyciągnąć 8 MB/s przy transmisji 16-bitowej, ale tylko teoretycznie; w praktyce to około 1,6 MB/s , więc powinno u mnie być trochę szybciej. Być może problemem w moim przypadku jest procesor-klon Transmeta.
  • #22
    rb401
    Level 38  
    wniedzie wrote:
    Powstało coś prawie z niczego przy wykorzystaniu paru ciekawych (jak mi się wydaje) pomysłów.


    wniedzie wrote:
    Trwają eksperymenty z STM32.


    Faktycznie ciekawe pomysły.
    Ale o ile użycie płyty z PC jako sterownika to temat zgrany (od wielu, wielu lat) i mało odkrywczy (może jedyną zaletą jest pożyteczne zagospodarowanie złomu), to za naprawdę fascynujące wartościowe i godne uwagi w Twoich projektach uważam tu pewien konkretny kierunek w Twojej pracy, tak w uproszczeniu mówiąc, generowania wsadu sterownika z projektu z algorytmem w postaci graficznej.
    Nie wiem czy kojarzysz projekt Ldmicro, gdzie wsad na AVR generowany jest z projektu w logice drabinkowej. Moim zdaniem Twój kierunek ma znacznie większe perspektywy, szczególnie jeśli pójdziesz w kierunku hardware takiego jak STM32.
    Gratuluję dobrego pomysłu i życzę powodzenia, bo możliwe że tworzysz coś bardzo wartościowego.
  • #23
    Anonymous
    Anonymous  
  • #24
    wniedzie
    Level 14  
    rb401 wrote:
    użycie płyty z PC jako sterownika to temat zgrany (od wielu, wielu lat) i mało odkrywczy

    Przyznaję, że pomysł zrodził się w mojej głowie i został wykonany w obecnej formie jakieś 8 lat temu, kiedy o mikrokontrolerach wiedziałem praktycznie nic. Tym nie mniej nadal uważam to za niezły pomysł biorąc pod uwagę, że zależało mi na sporej mocy obliczeniowej i nie bardzo wiedziałem, w którą stronę pójdę.
    rb401 wrote:
    generowania wsadu sterownika z projektu z algorytmem w postaci graficznej.

    No w końcu ktoś zwrócił uwagę nie tylko na port LPT :) Dla mnie jako laika w dziedzinie PLC programowanie "graficzne" wydaje się bardziej naturalne, a właśnie logika drabinkowa sprawia wrażenie epoki dinozaurów.
    Dodam, że wykorzystane przeze mnie programowania obiektowego umożliwia dynamiczne generowanie programu, a nawet jego zmianę w trakcie wykonywania.
  • #25
    nobanmeplease
    Level 16  
    Witam!
    Projekt jest na prawdę fajny i tani jak barszcz :D
    Ja sam dwa lata temu kupiłem 3 takie terminale po 5zł, w znacznie bardziej okrojonej wersji, która miała tylko:
    - 4 porty USB 1.1.
    - wej/wyj jack.
    - 54mb sdram wlutowane na PCB, bez możliwości rozbudowy.
    - 1xVGA
    - CPU Via 500mhz
    - GPU ATI Mobility 4mb sdram.
    - kartę flash o powalającej pojemności 20mb :D
    Muszę przyznać że ten sprzęt można zasilać z baterii, oraz można zamontować taką płytę bez problemu w obudowie ATX, po czym da się wsadzić dodatkowy dysk twardy, jak i inne peryferia, sterowane za pomocą kontrolera USB.
    Jakiś czas temu odkryłem TinyCore Linux (jest rozwijany cały czas, działa bez problemów i ma najnowszą kompilację kernela z chrootem), który w wersji 10mb spokojne się zmieści na tym sprzęcie bez żadnych modyfikacji, tak aby postawić serwer ssh i kilka innych protokołów (przykładowo USB/IP).
    Zastosowań jest naprawdę wiele, nawet może służyć jako prosta stacja robocza, gdyż TinyCore Linux w wersji 16mb ma zgrabne środowisko graficzne.
    Osobiście wykorzystałem ten sprzęt do nadzorowania komunikacji między serwerem, a sterownikiem silników DC na arduino i kamerami CCIR po ssh.
    Pozdrawiam!
  • #26
    Anonymous
    Anonymous  
  • #27
    wniedzie
    Level 14  
    Piotrus_999 wrote:
    No wiesz jak piszesz że RPI nie ma portów


    Chodziło mi o wątpliwości co do możliwości szybkiego wysterowania tych portów i pracę RT. Jeśli to rzeczywiście ma szansę działać, to być może pokuszę się o eksperymenty.
    znalazłem ciekawy artykuł dot. szybkości GPIO. http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/
    A drugiej strony osiem lat temu to o takich cudach można było sobie tylko pomarzyć.
  • #28
    Anonymous
    Anonymous  
  • #30
    Anonymous
    Anonymous