Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

VolKhen 15 Mar 2013 10:29 60030 143
  • #91 15 Mar 2013 10:29
    VolKhen
    Poziom 13  

    Tak też zrobię, myślałem też o opcji podłączenia rezystora pomiarowego do nóżki CURRENT SENSING scalaka końcówki mocy L298. Tak chyba będzie najłatwiej na początek.

    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • Sklep HeluKabel
  • #92 15 Mar 2013 19:32
    VolKhen
    Poziom 13  

    Code:

    SIGNAL (INT0_vect)      //obsługa przerwania INT0
    {
      unsigned char encoderDir;

      // Odczyt portu i przesuniecie bitow na prawo
      // Sprawdzenie kierunku obrotu - dzialanie XOR                 pin 7654 3210
      encoderDir = ((ENC_PORT & 0x08) >> 3) ^ ((ENC_PORT & 0x04) >> 2);   //  0000 1000  0x08  B
                                                         //  0000 0100  0x04  A
      if(encoderDir == 0)
      // Kierunek obrotu w prawo: dodaj
      {
        encoderPos++;
      }
      else
      // Kierunek obrotu w lewo: odejmij
      {
        encoderPos--;              
      }
    }


    Jak skrócić czas wykonywania tego kodu? Da się to jeszcze jakoś zoptymalizować?
    Przy dekodowaniu 4 krotnym i obsłudze 3 przerwań (INT0 ENCA, INT1 ENCB, INT2 STEP) procesor nie daje rady przy wyższych prędkościach.

  • #93 15 Mar 2013 22:03
    Hoptymista
    Poziom 13  

    Może zastanów się nad zmianą mikrokontrolera, atmega 640 bodajże ma 20Mhz.

  • #94 15 Mar 2013 23:30
    Gizmoń
    Poziom 28  

    Może warto rozpoznawanie kierunku przerzucić na hardware. Najprostsze rozwiązanie to jeden przerzutnik D i jedna bramka EX-OR. Wejście D przerzutnika i jedno z wejść bramki należy podłączyć do wyjścia A enkodera. Wejście C przerzutnika i drugie wejście bramki do wyjścia B. Wyjście przerzutnika przyjmuje stan zależnie od kierunku, a na wyjściu bramki są impulsy odpowiadające kątowi obrotu. Dokładność jest w tym przypadku dwa (a nie 4) razy większa niż ilość prążków na tarczce, ale powinna wystarczyć. Ciekawe, czy da się zrobić w podobny sposób układ wykrywający wszystkie 4 zbocza sygnałów, muszę się zastanowić :)

  • Sklep HeluKabel
  • #95 16 Mar 2013 13:24
    VolKhen
    Poziom 13  

    Spróbuję zaprogramować ATMEGĘ8 tak aby na dwóch przykładowych pinach pojawiały się impulsy STEP_UP, STEP_DOWN, wtedy główny MCU (ATMEGA32) będzie musiał w przerwaniu tylko zmniejszyć lub zwiększyć licznik pozycji silnika.Powinno być sporo szybciej.

  • #96 16 Mar 2013 19:35
    VolKhen
    Poziom 13  

    Niestety nic to nie dało.

    Kod ATMEGI8 (16MHz):

    Code:


    #include <avr/io.h>
    #include <stdint.h>
    #include <stddef.h>
    #include <util/delay.h>
    #include <inttypes.h>
    #include <avr/interrupt.h>


    #define LED_PORT  PORTD
    #define LED_DDR   DDRD
    #define ENC_PORT  PIND
    #define STEPUP_PULSE_ON      PORTC |=  _BV(1)
    #define STEPUP_PULSE_OFF     PORTC &= ~_BV(1)
    #define STEPDOWN_PULSE_ON    PORTC |=  _BV(0)
    #define STEPDOWN_PULSE_OFF   PORTC &= ~_BV(0)

    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))


    void IOinit()
    {
      DDRD=0x00;          //b1111 0011  INT0, INT1 in
      PORTD=0xFF;         //podciągnięcie do 1
      DDRC=0xFF;
      PORTC=0x00;
    }

    void encoderAInit(void)
    {
      sbi(MCUCR,ISC00);                // Ustawienie INT0
      cbi(MCUCR,ISC01);                // na zbocze rosnace i opadające
      sbi(GICR,INT0);                    // Wlaczenie przerwania INT0
      sei();
    }

    void encoderBInit(void)
    {
      sbi(MCUCR,ISC10);                // Ustawienie INT1
      cbi(MCUCR,ISC11);                // na zbocze rosnace i opadające
      sbi(GICR,INT1);                    // Wlaczenie przerwania INT1
      sei();
    }

    /* Obsługa przerwania INT0 Kanał A enkodera
    pin 7654 3210
        0000 0100  0x04  A
        0000 1000  0x08  B
    */

    ISR (INT0_vect, ISR_BLOCK)               //obsługa przerwania INT0
    {
      if((((ENC_PORT & 0x08) >> 3) ^ ((ENC_PORT & 0x04) >> 2)) == 0) 
      // Kierunek obrotu w prawo: dodaj
      {
        sbi(PORTC,PC0);
       cbi(PORTC,PC0);
      }
      else
      // Kierunek obrotu w lewo: odejmij
      {
        sbi(PORTC,PC1);
       cbi(PORTC,PC1);




      }
    }

    /* Obsługa przerwania INT1 Kanał B enkodera
    pin 7654 3210
        0000 0100  0x04  A
        0000 1000  0x08  B
    */

    ISR (INT1_vect, ISR_BLOCK)               //obsługa przerwania INT1
    {
      if((((ENC_PORT & 0x04) >> 2) ^ ((ENC_PORT & 0x08) >> 3)) == 0) 
      // Kierunek obrotu w prawo: dodaj
      {
        sbi(PORTC,PC1);
       cbi(PORTC,PC1);
      }
      else
      // Kierunek obrotu w lewo: odejmij
      {
        sbi(PORTC,PC0);   
       cbi(PORTC,PC0);
      }
    }

    int main(void)
    {

      IOinit();
      encoderAInit();
      //encoderBInit();

      while(1)
      {
      //PORTC=0x00;
      }
      return 0;
    }



    A sterownik z PIDem ma:
    Code:

    /*************** Obsluga enkodera *********************/
    //Obsługa enkodera poprzez Atmega8 STEPDOWN / STEPUP
    ISR (INT0_vect, ISR_BLOCK)               //obsługa przerwania INT0
    {
      //ENC_LED_OFF;
      encoderPos++;
      //ENC_LED_ON;
    }


    /*************** Obsluga rozkazów *********************/
    ISR (INT1_vect, ISR_BLOCK)               //obsługa przerwania INT1 na sygnał B
    {
      //ENC_LED_OFF;
      encoderPos--;
      //ENC_LED_ON;
    }


    Dodatkowo nie wiem dlaczego, ale z dwoma procesorami gubi kroki gdy steruję z LinuxCNC
    Jakieś pomysły?

    EDIT, gubił kroki z uwagi na brak ekranu na przewodach od enkodera. Zastosowałem kable oryginalne z plotera i działa. Dziwne jest tylko to, że wcześniej działało to ok nawet bez ekranowania...

  • #97 17 Mar 2013 14:14
    VolKhen
    Poziom 13  

    Udało mi się opanować temat zakłóceń i gubienia kroków.

    Teraz zajmuję się tematem wizualizacji ruchu bo polepszanie parametrów serwa na ślepo stało się już niemożliwe.
    Poniżej wykres ruchu karetki:
    V=50mm/s
    A=5000mm/s
    S=1mm
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Jak widać serwo podąża za rozkazem z pewnym opóźnieniem i stąd powstający błąd. Będę starał się to skompensować drugą pochodną prędkości (przyspieszeniem), która nie opóźnia ruchu przy większych prędkościach. A robi to z uwagi na ujemne sprzężenie, które ogranicza wyjście. Druga opcja to sterowanie feed-forward. Póki co tylko psuje mi to odpowiedź serwa, ale jak będę miał wgląd w wykresy to się w wszystko wyjaśni dlaczego.

    I tutaj konkretne pytanie, walczę z brakiem pamięci do zapisania tablic z parametrami serwa. Jak zapisać je w pamięci Flash? Czy zapis do flasha jest dużo dłuższy od normalnego? Pytam bo nie wiem czy zdąży procek to zrobić w pętli.

    Drugie pytanie, czy jest możliwa transmisja takich parametrów w czasie rzeczywistym? W tej chwili gdy dostaję przerwanie od USARTu to muszę wyłączać silnik bo wariuje (przerwanie PID jest zatrzymane na czas transmisji). Jak transmisja ustępuje to PID ma duży błąd, który wyłącza serwo (zabezpieczenie).

    Poniżej wyjście PIDa. Zastanawiam się czy jakiś filtr dolnoprzepustowy nie uspokoiłby napędu...
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

  • #98 17 Mar 2013 16:10
    RalfPi86
    Poziom 12  

    VolKhen napisał:
    Poniżej wyjście PIDa.

    Myślę, że ostatania literka jest problemem - tzn. część różniczkująca (Derivative).
    Ona zbiera wszystkie zakłócenia i jest wzmacnia..
    A jak dasz dolnoprzepustowy filtr, to IMO pogorszysz dynamikę odpowiedzi.
    A może spróbuj sam PI?

  • #99 17 Mar 2013 17:42
    VolKhen
    Poziom 13  

    tak myślałem, że filtr pogorszy dynamikę bo wprowadza opóźnienie. Bez D ciężko ustabilizować napęd... spróbuję podać na D pozycję enkodera a nie błąd.

  • #100 17 Mar 2013 18:00
    RalfPi86
    Poziom 12  

    VolKhen napisał:
    Bez D ciężko ustabilizować napęd...

    Nie zajmowałem się serwosilnikami, ale mam wrażenie, że jak wprowadzisz kaskadę.. to napęd będzie hulał jak się patrzy - kiedyś kolega z pracy robił sterowanie pozycją podwieszanej elektromagnetycznie płytki (taka "lewitacja magnetyczna") i też miał problemy ze stabilizacją..
    wiem, że to inne zagadnienie, ale tam trzeba było zastosować kaskadę.
    Pozdrowienia ze Szczecina!

  • #102 17 Mar 2013 18:43
    VolKhen
    Poziom 13  

    Gizmoń, schodki się biorą stąd, że błąd jest próbkowany z częstotliwością 1kHz (jak w większości serwonapędów) a że przebieg jest szybko zmienny to stąd takie schodki.
    Dodatkowo błąd jest na prawej osi Y czyli oczywiście nie może być mniejszy niż 1, znaczy są to liczby całkowite, więc muszą być schodki.
    Podsumowując małe schodki, przez to, że są to liczby całkowite i nie ma mniejszych kawałków błędu, duże schodki, częstotliwość próbkowania.

    Błąd ma zupełnie inną skalę na tym wykresie. Gdybym powiększył przebieg feedback, command to tak samo byłyby schodki.

    Właśnie piszę algorytm mojego PIDa w Excelu, na podstawie, wyjścia i błędu można odtworzyć wartości poszczególnych członów z równania:

    output(n) = Pgain * error(n) + Igain * suma(error) + Dgain * (error(n)-error(n-1)
    Znam output, człon P można wyliczyć w Excelu, tam samo człon D, więc to co zostanie musi być członem I. Zaraz wrzucę wykres.

  • #104 17 Mar 2013 18:56
    VolKhen
    Poziom 13  

    Po lewej jest pozycja jednostka [kroki], po prawej jest błąd jednostka [kroki]

    Jeśli błąd wyniesie 100 to będzie 200 poziomów kwantyzacji? (-100;100). Nie o to chodzi.

    To jest ruch silnika, prawo / lewo.

    OK, teraz jak na dłoni widać to co piszą w książkach. Czyli akcja różniczkująca wzmacnia szum i to, że akcja całkująca jako, że uśredniająca to ma w sobie filtr dolnoprzepustowy, a właściwie nim jest... Poprawcie mnie jak głupoty piszę.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder
    Feedback, position, Output odebrane z mikroprocesora. Error, P, I, D obliczone w Excelu wg formułki z poprzedniego posta.

    Fajnie, bo teraz mam narzędzie, które po wrzuceniu danych pokazuje wszystko jak na dłoni. Tuning powinien być dużo łatwiejszy.
    Teraz jeszcze dodać feedforward control i może będzie hulać jak trzeba.
    Autor UHU servo pisał, że warto dodać drugą pochodną błędu - przyspieszenie zmian błędu, ale z takim szumem to będzie jeszcze większe wzmocnienie szumu. Dziwne bo jego serwo działa z tą samą prędkością.

    Jakieś pomysły na zmniejszenie szumu?

  • #106 17 Mar 2013 19:33
    VolKhen
    Poziom 13  

    Racja, powinienem zrobić opisy, ale czas goni! Do 30 marca termin... Chyba będzie trzeba przedłużyć...
    OpenOffice nie jest idealnym narzędziem do wykresów, ale się sprawdza.

    Wczoraj nawet odkurzyłem książkę, "Wprowadzenie do cyfrowego przetwarzania sygnałów" Lyonsa, czasem jak ją czytam to mam wrażenie, że głupi jestem ;) (edit: znaczy to nie wrażenie) Ale coś sobie chociaż przypomniałem o filtrach i próbkowaniu.

  • #107 16 Kwi 2013 08:58
    VolKhen
    Poziom 13  

    Co do członu D mam w planie zrobić na nim mały filtr dolnoprzepustowy. Jestem ciekaw czy wyeliminuje to problem szumu. Może jednak popsuć prędkość odpowiedzi a więc pasmo... Zobaczymy.

    Drugie moje pytanie jest takie.
    Mam problemy z mostkiem L298. Zaczął mi pobierać 2A w czasie spoczynku silnika, prawdopodobnie są otwarte 3 tranzystory zamiast 2... Praca układu stała się narowista i trzeszcząca, wcześniej tego nie było gdy L298 był zmostkowany na 4A.
    W planach mam zmianę mostka na L6203. Jakie są wasze doświadczenia i co polecanie zamiast tych dwóch wymienionych?

    Jakość jest zła z uwagi na uszkodzony mostek...

    Link

    Drugie moje pytanie to jak zwiększyć prędkość pracy? W konfiguracji osi podałem 500mm/s i 2000mm/s^2 a mimo to maszyna pracuje bardzo wolno. Czy prędkość jest też ustalona w G-kodzie?

    Oprogramowanie LinuxCNC

  • #108 16 Kwi 2013 09:02
    RalfPi86
    Poziom 12  

    ja bym osłabił wzmocnienia i wprowadził ograniczenie w kodzie co do prądu i filtrował sygnał od pozycji jakimś filtrem dolnoprzepustowym (+ dyskryminator progowy).

  • #109 16 Kwi 2013 10:16
    Gizmoń
    Poziom 28  

    Prędkość jest ustalana w G-kodzie parametrem F oraz za pomocą G94 (jednostki na minutę) lub G95 (jednostki na obrót). Jednostkę wybiera się za pomocą G20 (cale) lub G21 (milimetry).

    Dobrym zwyczajem jest umieszczanie tych komend zawsze na początku programu, a więc:

    N10 G21 G94 F500

    da 500mm/min w ruchach roboczych. Dodatkowo w samym LinuxCNC jest pasek skali prędkości, F%, którym można zmieniać ją od jakiegoś ułamka do 120% w czasie biegu. Domyślnie ustawiony na 100%.

    Jakbyś później robił frezarkę, to prędkość wrzeciona również jest określona w G-kodzie parametrem S ;)

    PS
    Pół metra na minutę do nie tak dużo, wydaje mi się że na filmiku w czasie przejazdów (G0) maszyna rusza się o wiele szybciej... (Ruch G0 odbywa się zawsze z maksymalną prędkością maszyny).

  • #110 16 Kwi 2013 18:38
    VolKhen
    Poziom 13  

    Ja mam pół metra na sekundę! To jest ploter tnący i temat prędkości skrawania przez frez nie istnieje bo po prostu tutaj tego nie ma.

    Dzięki za odpowiedź, bardzo mi pomogła, idę testować... :)

  • #112 16 Kwi 2013 20:44
    Gizmoń
    Poziom 28  

    Aaa, to wszystko wyjaśnia :D W takim razie maksymalne F będzie 30000mm/min (F30000).

    Jeżeli na rysunkach zamiast ostrych załamań linii (np. rogi prostokąta) będą małe łuki, włącz tryb dokładnego odwzorowania G61. Czyli:

    N10 G21 G54 G61 G94 F30000 (ale jazda!)

    G54 to wybór miejsca zerowego, LinuxCNC domyślnie wybiera właśnie G54, ale ogólnie zaleca się wpisywać tą komendę na początku. Można zmienić na G55...G59, jednak to już zaawansowane programowanie ;)

  • #113 16 Kwi 2013 23:42
    VolKhen
    Poziom 13  


    Link


    filmik z testowania. Rzeczywiście było tak jak pisałeś. Przed zmianą kodu g rogi były zaokrąglone.

    Muszę naprawić końcówkę mocy gdyż wcześniej nawet na prędkościach rzędu 1 metr na sekundę napęd zachowywał się płynnie. Nie było efektu szarpania i mrowienia podczas ruchu.

    Wcześniej miałem zmostkowany układ L298 na 4A. Na dwa ampery sobie nie radzi i szybko sie uszkadza.

    ka_3 napisał:
    na jakim kierunku/specjalności ta praca?
    Elektronika i telekomunikacja, dlaczego dla Ciebie jest to istotne?

  • #114 28 Kwi 2013 14:20
    VolKhen
    Poziom 13  

    Witam ponownie,

    Poświecając każdą wolną chwilę (nie ma ich zbyt wiele) temat idzie powoli do przodu. Z powodu wielu problemów z końcówką mocy na L298 postanowiłem zaprojektować coś mocniejszego. Wybór padł na L6203, ponieważ większość producentów ploterów tnących wybiera ten układ na końcówkę mocy.

    Poniżej schemat i płytka. Jutro będę wytrawiał. Przy okazji pokaże jak można zrobić PCB przy użyciu plotera drukującego UV.

    Jeśli ktoś ma jakieś uwagi co można poprawić proszę pisać zanim będzie za późno... :)
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Oraz PCB:
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

  • #115 28 Kwi 2013 14:47
    Hoptymista
    Poziom 13  

    Sterownik 2 osiowy, tak? A co z 3 osią?

  • #116 28 Kwi 2013 22:31
    VolKhen
    Poziom 13  

    3 oś to opuszczanie podnoszenie noża lub pisaka. Głowica, którą widać na filmach będzie opuszczana i podnoszona z funkcją miękkiego lądowania. Jako końcówkę mocy wykorzystam płytkę z L298, którą teraz steruję silniki.

    Dodano po 3 [godziny] 4 [minuty]:

    Tak wygląda płytka po przeróbkach mających na celu zmniejszenie długości linii sterujących.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Gdyby ktoś miał jeszcze jakieś sugestie to proszę pisać...

    Dodano po 3 [godziny] 1 [minuty]:

    Ostatnia wersja - zaszalałem z masą...
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

  • #117 29 Kwi 2013 19:27
    VolKhen
    Poziom 13  

    Płyteczki zrobione :)

    Do zrobienia płytek wykorzystałem ploter Roland VersaUV LEF-12. Maszyna jest w stanie drukować kolorami CMYK + Biały i lakier, więc właściwie można nią stworzyć dowolną płytkę PCB z opisem i maskami.

    Super sprawa - wsadzamy płytkę do plotera, drukujemy i już... Niestety opcja dla zwykłego śmiertelnika niedostępna gdyż maszyna kosztuje około 20000€... :]

    Chciałbym tutaj nadmienić, że normalnie służy do druku gadżetów a druk płytek PCB to mój wymysł :). Tak czy siak poszło świetnie i dopóki będę miał tą maszynę pod ręką będę na niej drukował płyteczki.

    Trochę zdjęć aby pokazać jak to wyglądało:

    Najpierw próba na płytce PCV jak wychodzi wydruk i czy jakość jest wystarczająca. Roland drukuje z rozdzielczością 1440dpi, więc musiało być ok.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Wsadzamy laminat ustawiamy wysokość i drukujemy:
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Zrobiłem dwie wersje, zadruk podwójnej grubości i pojedynczej okazało się, że zadruk pojedynczy był wystarczający.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Trawienie:
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Po wytrawieniu farbę UV można usunąć poprzez odparzenie farby gorącą wodą.
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Tak wygląda efekt końcowy:
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder

    Jak oceniacie efekt końcowy?
    Jutro druknę jakąś płytkę z malutkimi padami od scalaka powierzchniowego.

    Zamieściłem tutaj ten opis jako ciekawostkę gdyż w ten sposób nikt raczej płytek nie wytwarzał... a na pewno nie na takim ploterze.

  • #118 19 Maj 2013 13:01
    VolKhen
    Poziom 13  

    Po początkowych porażkach w końcu końcówka mocy działa przyzwoicie.

    Mam nadzieję, że moje doświadczenie przyda się innym.

    Otóż układ L298 sterowałem w ten sposób, że and wejście ENABLE podawany był sygnał PWM a na IN1, IN2 przeciwne sygnały sterujące kierunkiem. Działało to dobrze, z wyjątkiem, że układ czasem lubił się upalić czy to dlatego - nie wiem. Takie podłączenie było podane w datasheet.

    Gdy zbudowałem końcówkę mocy na L6203 i podłączyłem w ten sam sposób co L298 układ działał jednak w sposób bardzo niestabilny, silnika szarpał jak cholera, nie dało się znaleźć "spokojnych" ustawień PIDa.
    Walczyłem z tym cały dzień. W końcu postanowiłem wysterować układ tak jak to robią producenci ploterów czyli +PWM na IN1 i -PWM na IN2. Na ENABLE natomiast sygnał wyłączający silnik w razie przeciążenia.

    Jakież było moje zdziwienie gdy po zmianach w programie aby uzyskać dwa przebiegi PWM (odwrócone wypełnieniem) i podłączeniu układu - układ zadziałał wyśmienicie!

    Od razu zauważyłem, że serwo jest sztywniejsze - błąd nie przekraczał 5 imp gdy próbowałem przesunać oś ręcznie. Okazało się, żę ustawienia PIDa wymagają regulacji, zmniejszyłem P i D o połowę i układ zaczął pracować jeszcze lepiej. Błąd podczas ruchu jest dwa razy mniejszy niż na L298 i silnik pracuje dużo płynniej i ciszej.

    Koniec pisania wracam do roboty.

    Dodano po 57 [minuty]:

    Napotkałem jednak na problem z zakłóceniami na wejściach przy zależności, że im większe napięcie zasilające silnik to większe zakłócenia - logiczne. Okazało się, że silnik generuje takie zakłócenia, że napięcie indukowane w przewodach od enkodera wyzwala niechciane przerwania. Po założeniu dławika ferrytowego na przewody nastąpiła diametralna poprawa jednak nie jest to jeszcze idealnie.
    Biały krążek ferrytowy na zdjęciu poniżej. Ile razy przewód powinien być okręcony?
    [C] Serwonapęd - silnik DC, Atmega32, PWM, PID, Enkoder
    Widać, że mści się robienie układu na pająka, ale na robienie płytki na każdą wersję nie ma czasu.

    Jakie są inne sposoby filtracji wejścia?
    Może powinienem dać jakieś kondensatory (np. 1nF?)? na wejścia uP.

  • #119 25 Maj 2013 21:15
    VolKhen
    Poziom 13  

    Udało się opanować zakłócenia gdy wróciłem do układu L298. Z nowym sterowaniem działa wyśmienicie nawet bez zmostkowania czyli na jednym układzie wysteruję 2 osie.

    Link

  • #120 02 Cze 2013 15:08
    VolKhen
    Poziom 13  

    Poradziłem sobie z zakłóceniami w następujący sposób:

    - Na kablach do silnika umieściłem krążki ferytowe - widać je na filmie
    - Na kablach sterujących z komputera - krążki ferrytowe, tak samo na kabelkach z enkodera do mikroprocesora.
    - Największą róźnicę zrobiła zamiana układu 74HCT14 na 74LS14 (układzik wyciągnąłem z urządzenia, które miało rok produkcji 1986 ;) tyle lat co ja) problem zniknął jak ręką odjął.

    W tej chwili uzyskuję błąd 5 impulsów z enkodera przy zastosowaniu predykcji 1 i 2 rzędu (prędkość i przyspieszenie) przy prędkości 30000mm/min (500mm/s) i przyspieszeniu 3000mm/s2. Silniki przy takich parametrach pracują dość głośno, Jeśli zmniejszę P i D to silniki są prawie bezgłośne, ale błąd rośnie 3 krotnie.


    Link



    Link