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

[Rozwiązano] Woltomierz z silnikiem krokowym 28BYJ-48 sterowany Atmega8: reagowanie na zmiany napięcia

Totalniezielony 23 Lut 2022 19:20 552 5
REKLAMA
  • #1 19901683
    Totalniezielony
    Poziom 5  
    Witam
    Aktualnie konstruuję prosty woltomierz (0-5V) w którym silnik krokowy napędza wskazówkę. Po zadaniu określonego napięcia silnik wykonuje obrót o odpowiedni kąt, ale nie reaguje na zmiany napięcia, w trakcie trwania ruchu. Np. po nastawieniu 4V wskazówka obraca się w prawo, i gdy dotrze do miejsca na skali 3V i w tym momencie zadałbym 1V, to najpierw dojdzie do pozycji odpowiadającej 4V, a dopiero potem wróci na 1V. Próbowałem wyjść z pętli FOR ale nie działało, próbowałem też zrobić to w pętli WHILE ale również nic z tego. Będę wdzięczny za pomysły jak można by to zrobić, bo totalnie utknąłem. Za wszystkie podpowiedzi będę wdzięczny
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    .
    Silnik krokowy z przekładnią 28BYJ-48 5V/0,1A/0,03Nm , Sterownik ULN2003.
    Program z FOR:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Program z while:

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 19901711
    Szymson96
    Poziom 1  
    A próbowałeś umieścić w pętli FOR wczytywanie napięcia i przeliczanie go na kroki?
  • REKLAMA
  • Pomocny post
    #3 19902298
    szelus
    Poziom 34  
    Program z while idzie w pewnym sensie w dobrym kierunku, ale...
    Powinna być tylko jedna pętla i powinieneś śledzić pozycję wskazówki, a nie napięcie - będzie łatwiej.
    W skrócie:
    - masz zmienną wskazującą bieżącą pozycję wskazówki, jako bezwzględną pozycję wskazówki w krokach,
    - w pętli:
    1. Czytasz aktualne napięcie i przeliczasz na wymagane, bezwzględne położenie wskazówki.
    2. Wykonujesz krok we właściwą stronę.
    3. Uaktualniasz zmienną śledzącą położenie.
    To wszystko.

    PS. Napięcie elektryczne to po angielsku "voltage", "tension" to naprężenie (mechaniczne).
  • REKLAMA
  • #4 19902599
    Totalniezielony
    Poziom 5  
    W całym programie powinna być tylko jedna pętla DO LOOP, czy jeszcze w jej wnętrzu pętla while?
  • REKLAMA
  • Pomocny post
    #5 19902656
    bart-projects
    Poziom 29  
    Ten silnik ma przekładnię i dla operacji pełnych kroków ma ich 2048 na pełen obrót a dla kroków "połówkowych" to już nawet 4096. To jest prosta wielokrotność rozdzielczości ADC (1024) więc nawet przeliczanie tego na volty jest niepotrzebne.
    Nie wiem jaki zakres potrzebujesz, ale jak wykonasz dwa kroki na każdy punkt ADC to od 0V do 5V to będzie pełen obrót. (2048/1024=2). Jeden krok da pół obrotu na pełen zakres ADC.
    Ten kod będzie być może za szybki dla bezwładności tego silnika i może trzeba dodać w pętli opóźnienie typu Waitms 5 lub podobne.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • #6 19921263
    Totalniezielony
    Poziom 5  
    Zamieniłem punkt odniesienia z różnicy napięcia -c , na napięcie - tension.
REKLAMA