logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Czy przerwania wpłyną na szybkość przetwarzania danych z portu LPT w CNC?

maciek_w11 08 Lis 2014 17:09 1053 5
  • #1 14113059
    maciek_w11
    Poziom 9  
    Witam
    Składam małymi kroczkami ploter/mini frezarkę CNC. Będzie ona sterowania poprzez port LPT, ale będzie też możliwość ręcznego serowania bez podłączania do komputera. Zaczynając dzisiaj pisać program do sterownika natknąłem się na pewien dylemat. Jaki wpływ na ciągłe przetwarzanie informacji mają przerwania? Sterownikiem sterować będę poprzez klawiaturę opartą na przetworniku ADC. Wątpię, że da się to zrobić w miarę optymalnie bez użycia przerwań. Czy te przerwania będą znacząco wpływały na szybkość przetworzenia i wysłania dalej sygnału z portu LPT? Możliwe, że moje pytanie jest wręcz śmieszne, ale w zasadzie niedawno zacząłem zajmować się AVR'ami i wolę dmuchać na zimne. Nie chcę poznać odpowiedzi jak maszynka już będzie złożona.

    A jeśli AVR jest wystarczająco szybki na to, to czy mogę obsłużyć wszystkie 3 silniki na jednym procku za pomocą przerwań? Przerwanie byłoby inicjowane zboczem narastającym na linii STEP. Jest to chyba optymalne rozwiązanie, tylko czy w przypadku stanu wysokiego na oby liniach procek obsłuży to wystarczająco szybko?

    Z góry dziękuję za pomoc i przepraszam jeśli moje wątpliwości są śmieszne ;d[/b]
  • #2 14113093
    BlueDraco
    Specjalista - Mikrokontrolery
    Posumujmy: mamy ocenić, czy narzut czasowy na obsługę przerwań w nieznanym urządzeniu o nieznanym schemacie i nieznanym oprogramowaniu o nieznanej funkcjonalności i strukturze nie będzie przeszkadzał w tej nieznanej funkcjonalności. Proponuję udać się do wróżki - inżynier tutaj nie pomoże.
  • #3 14113198
    maciek_w11
    Poziom 9  
    W takim razie postaram się jak najdokładniej opisać działanie sterownika. Programu nie napisałem z prostej przyczyny - wolę najpierw się dowiedzieć, czy moja wizja ma sens, zamiast tracić czas na coś co nie ma prawa zadziałać.

    Sterownik dostaje z portu LTP sygnał STEP/DIR. Mikrokontroler ma za zadanie przetworzyć ten sygnał na sygnał sterujący mostkiem H, który będzie sterował silnikiem krokowym. Będzie się to odbywało albo w pętli głównej, albo w przerwaniu inicjowanym poprzez zbocze narastające. To zależy od tego co będzie szybsze. Z tego co wiem to gdy procek dostanie sygnał o przerwaniu w trakcie wykonywania innego tworzy się kolejka, więc wydaje mi się, że zrobienie tego w pętli głównej będzie miało takie same opóźnienia, jednak mogę się mylić.

    Poza trybem sterowania poprzez port LTP planuje zrobić sterowanie ręczne. Wymaga to klawiatury. Z powodu ograniczonej ilości portów zdecydowałem się na klawiaturę, która wykorzystuje dzielnik napięciowy. Przetwornik ADC mierzy napięcie i dzięki temu mogę zidentyfikować konkretny przycisk. Najpierw planowałem stale mierzyć napięcie i sprawdzać, czy jakiś przycisk nie jest wciśnięty. Po przemyśleniu wpadłem na pomysł, żeby zaprogramować wyzwalanie pomiaru co 10-100ms (wybrane doświadczalnie) za pomocą timera0, który też wymaga do działania przerwań, jednak działoby się to dużo rzadziej. Wyczytałem też, że pomiar ADC może być wyzwolony bezpośrednio przepełnieniem rejestru timera, jednak trudno byłoby mi w taki sposób osiągnąć to 10ms (przynajmniej z obecną wiedzą). Właśnie to przerwanie mnie martwi. Wyglądałoby ono mniej więcej tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Zmienna key_mode odpowiada za to, czy obecnie można używać klawiatury (nie można gdy sterownik jest zajęty np. podczas wykonywania poleceń z portu LPT). Funkcja keyboard wykonywałaby pomiary aż ustaną drgania styków a następnie wykonywała odpowiednią funkcję.

    Do taktowania procka używam kwarcu 12MHz.
  • #4 14114658
    BlueDraco
    Specjalista - Mikrokontrolery
    maciek_w11 napisał:

    Sterownik dostaje z portu LTP sygnał STEP/DIR. Mikrokontroler ma za zadanie przetworzyć ten sygnał na sygnał sterujący mostkiem H, który będzie sterował silnikiem krokowym.


    Sygnał STEP/DIR steruje bezpośrednio mostkiem H (np. A4988) Co chcesz przetwarzać, jak i po co. A, i skąd weźmiesz komputer z portem drukarki?

    maciek_w11 napisał:

    Będzie się to odbywało albo w pętli głównej, albo w przerwaniu inicjowanym poprzez zbocze narastające. To zależy od tego co będzie szybsze. Z tego co wiem to gdy procek dostanie sygnał o przerwaniu w trakcie wykonywania innego tworzy się kolejka, więc wydaje mi się, że zrobienie tego w pętli głównej będzie miało takie same opóźnienia, jednak mogę się mylić.


    Przerwanie nie służy do tego, żeby coś było szybciej lub wolniej, a do tego, by obdłużyć zdarzenie wtedy, kiedy ono wystąpi, a nie np. po wykonaniu jakichś obliczeń, nad którymi akurat pracujemy.

    maciek_w11 napisał:

    Poza trybem sterowania poprzez port LTP planuje zrobić sterowanie ręczne. Wymaga to klawiatury. Z powodu ograniczonej ilości portów zdecydowałem się na klawiaturę, która wykorzystuje dzielnik napięciowy.


    Mikrokontroler dobiera się do wymagań projektowych,a nie odwrotnie. Najpierw określ, jakie potrzebujesz mieć wejścia/wyjścia, timery, interfejsy, a potem szukaj mikrokontrolera, który spełnia zadane warunki. 32-bitowy uC z np. 50 liniami portów i o częstoliwości pracy do 50 MHz kosztuje < 10 zł.

    maciek_w11 napisał:

    Przetwornik ADC mierzy napięcie i dzięki temu mogę zidentyfikować konkretny przycisk. Najpierw planowałem stale mierzyć napięcie i sprawdzać, czy jakiś przycisk nie jest wciśnięty. Po przemyśleniu wpadłem na pomysł, żeby zaprogramować wyzwalanie pomiaru co 10-100ms (wybrane doświadczalnie) za pomocą timera0, który też wymaga do działania przerwań, jednak działoby się to dużo rzadziej. Wyczytałem też, że pomiar ADC może być wyzwolony bezpośrednio przepełnieniem rejestru timera, jednak trudno byłoby mi w taki sposób osiągnąć to 10ms (przynajmniej z obecną wiedzą). Właśnie to przerwanie mnie martwi. Wyglądałoby ono mniej więcej tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Zmienna key_mode odpowiada za to, czy obecnie można używać klawiatury (nie można gdy sterownik jest zajęty np. podczas wykonywania poleceń z portu LPT). Funkcja keyboard wykonywałaby pomiary aż ustaną drgania styków a następnie wykonywała odpowiednią funkcję.

    Do taktowania procka używam kwarcu 12MHz.


    Zaczynasz dobrze kombinować. Bazą wszystkiego jest przerwanie timera zgłaszane z określoną, stałą częstotliwością. Co ileś przerwań wykonujesz poszczególne czynności, np. skanowanie klawiatury. Pomysł z ADC do klawiatury uważam jednak za mało rozsądny - zbędna i sztuczna komplikacja.

    I nie zaczynaj projektowania od narzucenia typu uC i częstotliwości kwarcu - to ma wynikać z funkcjonalności.
  • #5 14115197
    maciek_w11
    Poziom 9  
    BlueDraco napisał:
    Sygnał STEP/DIR steruje bezpośrednio mostkiem H (np. A4988) Co chcesz przetwarzać, jak i po co. A, i skąd weźmiesz komputer z portem drukarki?
    Wiem, że można bezpośrednio, jednak wtedy nie będę miał możliwości w miarę rozwiniętego sterowania ręcznego, o którym już pisałem. Komputer z takim portem wezmę z mojej szafy :D

    BlueDraco napisał:
    Mikrokontroler dobiera się do wymagań projektowych,a nie odwrotnie. Najpierw określ, jakie potrzebujesz mieć wejścia/wyjścia, timery, interfejsy, a potem szukaj mikrokontrolera, który spełnia zadane warunki. 32-bitowy uC z np. 50 liniami portów i o częstoliwości pracy do 50 MHz kosztuje < 10 zł.
    BlueDraco napisał:
    Pomysł z ADC do klawiatury uważam jednak za mało rozsądny - zbędna i sztuczna komplikacja.
    Dopiero zaczynam swoją naukę z mikrokontrolerami i zacząłem od tego co w miarę znam i na co mnie stać. Na razie do czynienia miałem tylko i wyłącznie z AVR'ami a ATmega16 leżała na półce. Poza tym mam dość mocno ograniczone możliwości finansowe (jestem uczniem technikum) a wykonywania PCB uczę się na błędach (nie wiem jak innym, ale mi nie wyszło za pierwszym razem) i aktualnie nie byłbym w stanie wykonać płytki pod elementy SMD. Uczę się w miarę możliwości, mam zamiar się rozwijać, jednak nie będę się rzucał na głęboką wodę. Jednak jeśli mój tok myślenia jest zły to prosiłbym o poprawienie, może rzeczywiście lepiej zacząć od czegoś mocniejszego. Doświadczenia nie mam, więc opieram się nna przypuszczeniach i 'mądrościach z Internetu'.
    BlueDraco napisał:
    I nie zaczynaj projektowania od narzucenia typu uC i częstotliwości kwarcu - to ma wynikać z funkcjonalności.
    Kwarc również wziąłem taki jaki miałem na półce, poczytam trochę o doborze częstotliwości.
  • #6 14115252
    BlueDraco
    Specjalista - Mikrokontrolery
    Na Twoim miejscu wziąłbym najtańszą płytkę DISCOVERY lub NUCLEO z STM32 (<50 zł) i zrobił do niej drugą płytkę z pozostałymi elementami. Na płytce masz uC, przycisk, 2 x LED i interfejs do programowania/debugowania (tego ATmega nie potrafi - błędów w programie musisz szukać wpatrując się w kod i zgadując, co jest nie tak), a na NUCLEO - również port szeregowy uC dostępny przez USB - do komunikacji z PC. Płytka pod SMD jest łatwiejsza do wykonania niż pod przewlekane, bo nie trzeba tyle wiercić. Elementy dyskretne SMD łatwiej też lutować niż przewlekane (i szybciej). Z kolei sterownik z A4988 możesz kupić gotowy za < 10 zł.
REKLAMA