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

Jak zrobić sterownik do silnika krokowego z pilotem do regulacji prędkości?

Kamil53324 08 Lut 2024 19:09 1170 35
Najlepsze odpowiedzi

Jak podłączyć pilot do Arduino, aby sterował sterownikiem silnika krokowego tak, by przyciski zmieniały prędkość, kierunek i włączały lub wyłączały silnik?

Podłącz do Arduino odbiornik IR albo radiowy i w programie dekoduj kody przycisków; do takiego zadania wystarczy Nano [#20952727][#20952639] Do sterownika silnika krokowego podawaj osobno sygnał DIR oraz impulsy STEP, bo prędkość obrotów zależy od częstotliwości impulsów, a przyciskami możesz zmieniać stan licznika/prędkość, kierunek i stop [#20952318][#20952365] Jeśli używasz pilota 433 MHz z modułem przekaźników, Arduino nie „czyta pilota” bezpośrednio, tylko stan wyjść przekaźników, więc trzeba uwzględnić to w połączeniach i nie łączyć NO z NC bez COM [#20958340][#20952822] W praktyce najwygodniej zrobić w kodzie zmienną `motorRunning`, która przełącza się po wciśnięciu przycisku POWER, a inne przyciski zmieniają szybkość (np. zwiększają lub zmniejszają opóźnienie między impulsami) [#20961198][#20961676] Do generowania impulsów można użyć `tone()` albo własnego odmierzania czasu; przy większych prędkościach lepiej opierać się na `micros()` niż `millis()` [#20952365][#20952677]
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
  • #1 20951908
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    witam ja jestem nowy w sterownikach ale mam zamiar zrobić sterownik do silnika krokowego (zdj1) z sterownikiem i pilotem, i jak to zrobić ma to działać tak że jak nacisne na pilocie np A to silnik kręci się wolno a jak klikne znowu to szybciej a jak klikne B to na odwrót a C wyłączyć

    Moduł z przekaźnikami i dwa piloty do sterowania Sterownik do silnika krokowego HY-DIV268N-5A Silnik krokowy Usongshine z przewodami
  • #2 20952318
    adam_es
    Poziom 30  
    Posty: 956
    Pomógł: 175
    Ocena: 185
    Zależy, jaki jest poziom Twojej wiedzy i umiejętności. Można to zrobić na mikrokotrolerze, programowo (na przykład na Arduino) lub na układach cyfrowych.
    Z grubsza potrzebujesz licznika rewersyjnego (na przykład 74hc193) i generatora częstotliwości sterowanego z licznika. Przycisk A będzie zwiększał stan licznika (częstotliwość), B zmniejszał, a C zatrzymywał generator. Najstarszy bit licznika zmieni kierunek ruchu (DIR), jeśli wymagana jest zmana kierunku.
  • #3 20952365
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Ten silnik (NEMA 23HS7628) ma 4 przewody, czyli jest do sterowania bipolarnego - ten sterownik z drugiego zdjęcia powinien pasować.

    Takie sterowniki zwykle działają tak, że podanie impulsu powoduje wykonanie jednego kroku (albo mikrokroku - wielkość mikrokroku jest nastawiana tym czerwonym mikroswitchem) przez silnik, i mają trzy wejścia do sterowania: jedno włącza prąd (i przy pracy silnika prąd jest włączony stale, nawet kiedy silnik stoi - po to, by trzymał pozycję), drugie określa kierunek, na trzecie podaje się te impulsy, które powodują wykonywanie kroków. Jeśli silnik ma się obracać, trzeba stale podawać te impulsy - szybkość obrotu będzie proporcjonalna do częstotliwości impulsów.

    Nie wiem, jaki masz odbiornik do tego pilota, jakie sygnały on daje na wyjściu. Do obsługi logiki sterowania (zmiany kierunku i szybkości przy naciskaniu przycisków) wygodnie byłoby użyć mikrokontrolera, np. Arduino - pytanie, czy jest wystarczająco szybkie, jak szybko silnik ma się kręcić?
  • #4 20952503
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1

    Witam i zapoznałem się z waszymi odpowiedziami. Jeśli miałbym zrobić to na Arduino, to jak zrobić do niego program?

    Dodano po 3 [minuty]:

    Sterownik tworzę do fotobudki 360°. No, silnik ma się poruszać ze średnią prędkością.

    Dodano po 2 [minuty]:

    Jakie Arduino będzie najlepsze pod ten sterownik?
  • #5 20952574
    Mlody_Zdolny
    Poziom 31  
    Posty: 1439
    Pomógł: 109
    Ocena: 644
    Kamil53324 napisał:
    Witam i zapoznałem się z waszymi odpowiedziami. Jeśli miałbym zrobić to na Arduino, to jak zrobić do niego program?

    Najlepiej poszukaj czegoś gotowego i ewentualnie przerób na swoje potrzeby.
    Ogólnie program ma obsłużyć interfejs IR/radiowy i wysterować driverem silnika w odpowiedni sposób zależny od tego co to za silnik, ile ma faz itd.
    Są gotowe drivery mające jakiś tam interfejs wystawiony na zewnątrz, I2C czy PWM.
  • #6 20952606
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    A jakie ardulino najlepiej wybrać
  • #7 20952639
    Mlody_Zdolny
    Poziom 31  
    Posty: 1439
    Pomógł: 109
    Ocena: 644
    Wystarczy nano
  • #8 20952657
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    A teraz pytanie jak podłączyć pilot do tego by działał tak jak ja chce
  • #9 20952677
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Kamil53324 napisał:
    No, silnik ma się poruszać ze średnią prędkością.

    Jak to przeliczyć na liczbę kroków na sekundę?

    Funkcja millis() może się okazać za mało dokładna (ona czasem przeskakuje o 2) - chyba wypadnie używać micros().

    Ja do wysyłania impulsu do sterownika używałem portu szeregowego - żeby to nie program pilnował czasu podawania kolejnych impulsów. Ale to było na PC (a ściślej, na minikomputerze nazywanym terminalem i zgodnym z PC), gdzie system mógł zakłócać odmierzanie czasu. Na Arduino nie ma tego problemu, byleby nadążyć i precyzyjnie mierzyć.

    Nie mam pod ręką Arduino - ktoś może wie, jaki jest czas wykonania pętli wywołującej funkcję micros() ?
    Tu coś podają: Why is micros() so much slower than millis()?. Wychodzi poniżej 6µs.

    Kamil53324 napisał:
    Jeśli miałbym zrobić to na Arduino, to jak zrobić do niego program?

    Poczytaj, co na forum o tym napisano. Ja coś pisałem o strukturze programu, może ktoś inny napisał o środowisku do jego tworzenia.

    A inne rozwiązanie zmieniania szybkości, to np. użycie przetwornika V/f, albo przełączania wyjścia zegara na CD4060.

    Kamil53324 napisał:
    A teraz pytanie jak podłączyć pilot do tego by działał tak jak ja chce

    Nie odpowiedziałeś na pytanie dotyczące pilota. A mi szklana kula nie pokaże, bo jej nie mam.
  • #10 20952727
    Mlody_Zdolny
    Poziom 31  
    Posty: 1439
    Pomógł: 109
    Ocena: 644
    Kamil53324 napisał:
    A teraz pytanie jak podłączyć pilot do tego by działał tak jak ja chce

    Podłączasz do Arduino odbiornik IR albo radiowy,
    i obslugujesz go w programie pod kątem kodowania.
  • #11 20952822
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Pewnie ta płytka z przekaźnikami, to odbiornik do pilota: naciskasz przycisk, to odpowiedni przekaźnik jest w stanie aktywnym (nie mogę odczytać oznaczeń, więc nie wiem, jakie on ma styki - NO, NC, czy może NC-COM-NO? są do tego noty katalogowe, autor może poczytać).
  • #15 20958172
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    witam
    przyszły mi rzeczy podłączyłem wszystko i teraz jak napisać program


    Czy Wszystko Dobrze Podłączyłem ?




    Schemat połączeń Arduino z innymi komponentami: sterownikiem i pilotem.
  • #17 20958348
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    podłączyłem i co teraz
  • #19 20959897
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    Poprawiłem i pilot jest czytany przez Arduino, ale jest taka sprawa, że silnik nie startuje. Gdy podłączam go do prądu, lekko piszczy. Zasilanie ma 19V.
  • #21 20960031
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    dobra działa czy dało by rade pomóc przy kodzie mam taki kod


    void setup() {
    Serial.begin(9600);
    pinMode(A2, INPUT_PULLUP); // Ustawienie pinu A2 jako wejście z wewnętrznym pull-up
    }

    void loop() {
    static unsigned long lastPressTime = 0; // Czas ostatniego naciśnięcia
    static bool buttonState = HIGH; // Stan przycisku

    int valueA2 = digitalRead(A2); // Odczyt stanu pinu A2

    if (valueA2 == LOW && buttonState == HIGH && (millis() - lastPressTime > 500)) {
    Serial.println("Naciśnięto przycisk 4");
    // Tutaj możesz dodać dowolne działania związane z naciśnięciem przycisku na kanale 4
    lastPressTime = millis(); // Zapisanie czasu naciśnięcia
    buttonState = LOW; // Ustawienie stanu przycisku
    } else if (valueA2 == HIGH) {
    buttonState = HIGH; // Zresetowanie stanu przycisku
    }

    delay(100); // Opóźnienie dla stabilności odczytu
    }

    I ON MI WYKRYWA PILOTA

    A TEN KOD JEST TO SILNIKA Z POTENCJOMETREM
    #define DIR 11
    #define STP 10
    #define MAX 7000
    // int delayTime = 20;

    void setup() {
    // put your setup code here, to run once:
    pinMode(DIR, OUTPUT);
    pinMode(STP, OUTPUT);
    digitalWrite(DIR, LOW);
    }

    void loop() {
    // put your main code here, to run repeatedly:
    // digitalWrite(STP, HIGH);
    // delay(delayTime);
    // digitalWrite(STP, LOW);
    // delay(delayTime);
    unsigned int speedRotation = map(analogRead(A2), 0, 1023, 0, MAX);
    tone(STP, speedRotation);
    }

    I CHCE TAK BY POTENCJOMETR WYWALIC Z KODU I ZASTĄPIĆ GO PRZYCISKIEM Z PILOTA I JAK KLIKNE PRZYCISK TO SIE SILNIK WŁĄCZY A JAK PONOWNIE WCISNE TO SIĘ WYŁĄCZY
  • #22 20961198
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Skoro możesz ustawiać częstotliwość przez tone(), rób to po wykryciu wciśnięcia przycisku.

    Pytanie: czy można tak skonfigurować nadajnik, aby po wciśnięciu każdego przycisku dawał impuls o określonym czasie trwania, innym dla każdego przycisku - tak, by Arduino mogło odróżniać przyciski po czasie trwania impulsu?
  • #23 20961617
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    Jak napisać ten kod liczę na pomoc
    pozdrawiam
  • #24 20961676
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    A co i jak chcesz odróżniać przy naciskaniu przycisków? Pewnie przydałoby się odróżniać przynajmniej: "zmień kierunek i ustaw minimalną szybkość", "przyśpiesz", "zatrzymaj" - a może jeszcze "wolniej"?

    Zmienna speedRotation powinna być na zewnątrz funkcji, albo przynajmniej static - powinna pamiętać, co do niej ostatnio wpisane i być zmieniana tylko na naciśnięcie przycisku.

    enum { a_nic, a_zmiana, a_szybciej, a_zatrzymaj, a_wolniej } akcja;
    /* tu sprawdzanie, czy wciśnięto przycisk - jeśli wykryjesz wciśnięcie przycisku, ustawiasz odpowiednią wartość "akcja" */
    ...
    /* a tu wykonywanie akcji */
    switch(akcja) {
    case a_szybciej: speedRotation *= 2; break;
    case a_zatrzymaj: speedRotation = 0; break;
    case a_wolniej: speedRotation /= 2; break;
    case a_zmiana: tone(STP,0); speedRotation = minimalSpeed;
    digitalWrite(DIR, LOW^HIGH^(digitalRead(DIR)); break;
    default:;
    } if (akcja != a_nic) { akcja =a_nic; tone(speedRotation); }
  • #25 20962181
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1

    Pomoże ktoś to naprawić, bo chodzi o to, że silnik chodzi na pilota i jak włączyć się zasilanie, to zamiast silnik stać, wibruje i lekko się obraca.



    Załączniki:
    • 20240214_235309.mp4 (34.22 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #27 20962340
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    Znalazłem program że silnik jest potencjometrem sterowany dodałem digitalRead(A0) i zaczęło to działać ale jest taki problem że to co jest na filmiku
  • #28 20962412
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Piszesz tak niejasno, że nie wiem, o co chodzi, i pewnie inni też nie wiedzą. Nie odpowiedziałeś na pytania. W ten sposób nic z tego nie wyjdzie.

    Najwyraźniej chcesz, żeby pomóc ci coś naprawić. Ale nie wiadomo, co to jest, i w jakich warunkach to coś działa nieprawidłowo. Opisz to jasno.

    regulamin forum napisał:
    3.1. Zabronione jest w szczególności: (...)
    3.1.15. Publikowanie wpisów przedstawiających problem, bez podania wystarczającej liczby informacji umożliwiającej zajęcie merytorycznego stanowiska przez innych Użytkowników forum.
  • #29 20963047
    Kamil53324
    Poziom 3  
    Posty: 81
    Ocena: 1
    To jest program wgrany do arduino i on powoduje to co jest na filmiku a ja chce tak żeby on tak nie buczał jak nie jest włączony przycisk


    #include <IRremote.h>

    #define DIR_PIN 11
    #define STEP_PIN 10
    #define IR_RECEIVER_PIN A0
    #define POWER_BUTTON_CODE 0xFD00FF // Kod przycisku włączania na pilocie IR
    #define SPEED_UP_BUTTON_CODE 0xFD08F7 // Kod przycisku zwiększania prędkości na pilocie IR
    #define MOTOR_START_THRESHOLD 100 // Próg wartości na pinie A0, powyżej którego silnik się włączy
    #define DEAD_ZONE 100 // Wartość martwej strefy

    IRrecv irrecv(IR_RECEIVER_PIN);
    decode_results results;

    bool motorRunning = false;
    int speed = 0; // Początkowa prędkość silnika

    void setup() {
    pinMode(DIR_PIN, OUTPUT);
    pinMode(STEP_PIN, OUTPUT);
    digitalWrite(DIR_PIN, LOW);
    irrecv.enableIRIn();
    }

    void loop() {
    if (irrecv.decode(&results)) {
    if (results.value == POWER_BUTTON_CODE) {
    motorRunning = !motorRunning; // Przełączanie stanu silnika
    } else if (results.value == SPEED_UP_BUTTON_CODE) {
    speed += 500; // Zwiększanie prędkości po naciśnięciu przycisku
    }
    irrecv.resume();
    }

    if (analogRead(IR_RECEIVER_PIN) > MOTOR_START_THRESHOLD) {
    motorRunning = true; // Włączanie silnika na podstawie wartości na pinie A0
    }

    if (motorRunning) {
    int mappedValue = map(analogRead(IR_RECEIVER_PIN),0 , 1023, 0 , 10000); // Mapowanie wartości na zakres prędkości
    if (mappedValue > DEAD_ZONE) {
    speed = mappedValue; // Ustawianie prędkości, gdy wartość przekroczy martwą strefę
    } else {
    speed = 0; // Ustawianie prędkości na 0, gdy wartość znajduje się w martwej strefie
    }
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(speed);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(speed);
    }
    }
  • #30 20963070
    sp3ots
    Poziom 38  
    Posty: 3069
    Pomógł: 523
    Ocena: 673
    Witam !
    Kamil, zapytaj elektroda bot, kliknij poniżej tego okna do pisania jest elektroda bot.
    To robot który pomaga.

Podsumowanie tematu

✨ Użytkownik planuje stworzyć sterownik do silnika krokowego z pilotem do regulacji prędkości. W dyskusji poruszono różne metody realizacji projektu, w tym wykorzystanie mikrokontrolera Arduino oraz odpowiednich układów sterujących. Zasugerowano użycie licznika rewersyjnego i generatora częstotliwości do kontroli prędkości silnika. Użytkownik zadał pytania dotyczące podłączenia pilota oraz programowania Arduino, a także problemów z działaniem silnika, który wibruje zamiast stać w miejscu. Wskazano na konieczność poprawnego podłączenia odbiornika IR oraz dostosowania kodu do sterowania silnikiem za pomocą pilota.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA