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

Regulator obrotów ESC - jak sterować?

neversoft 14 Feb 2013 09:34 13425 18
Computer Controls
  • #1
    neversoft
    Level 10  
    Witam,

    trochę poczytałem o regulatorach. Natomiast nie dowiedziałem się jednej kwestii.
    Przykładowo mamy taki regulator:

    http://abc-rc.pl/p/146/600/-esc-h20a-regulato...-silnikow-bezszczotkowych-regulatory-esc.html

    podłączam silnik z jednej strony, z drugiej baterie. Jakoś jeszcze trzeba tym sterować. Są wyprowadzone 3 kable, na 2 żyłach jest zasilanie do odbiornika, 1 żyła odpowiada za sterowanie obrotami z tego co wiem.

    czy "odbiorniki" sterują tymi obrotami za pomocą PWMa? a jeżeli nie to w jaki sposób te obroty są wysterowane? na stronie sklepu w opisie produktu jest pozycja: PWM: brak

    bardzo proszę o pomoc i objaśnienie jak to działa..
  • Computer Controls
  • Helpful post
    #2
    Madrik
    moderator of Robotics
    Sterowanie jest sygnałem PWM/PPM - standard w komunikacji podzespołów modelarskich RC.
    Reszta tak jak napisałeś.
  • #3
    neversoft
    Level 10  
    czyli jak podepnę kabelek odpowiedzialny za sterowanie obrotami pod RaspberryPi na odpowiednio skonfigurowany port GPIO, na którym sterowałem serwomechanizmem za pomocą PWMa to wszystko będzie hulało? :)

    żyła + i - zostanie w tym przypadku wolna. Bo sam regulator jest zasilany z akumulatora. A Raspberry ma własne zasilanie.
  • #5
    neversoft
    Level 10  
    dziękuje za podpowiedź, bo pewnie bym się męczył, że nie działa

    Czy w szkole zapomnieli wspomnieć, że w języku polskim zdania zaczynamy dużą literą, a kończymy kropką?
    Jeżeli nie zaczniesz zwracać uwagi na pisownię, otrzymasz ostrzeżenie.
  • Computer Controls
  • #6
    MaciejGK
    Level 11  
    Witam:)
    Mamy pytanie ponieważ potrzebuję zakupić regulator do silnika bezszczotkowego, przykładowo regulator Turnigy Plush, parametry nie są tutaj istotne. Przeczytałem tutaj że regulator dwa kable podpina się w zasilanie a trzeci w PWM. I yu jest moje pytanie: Jak podłączyć regulator w PWM jak oprócz zasilania z regulatora wychodzą jeszcze 3 czasem 2 cienkie kable.
  • #7
    Madrik
    moderator of Robotics
    Dwa grube - zasilanie z pakietu głównego, odpowiednie dla silnika.
    Trzy grube - wyjście zasilania silnika.
    trzy cienkie - Sygnał sterujący regulatorem (biały/żółty/pomarańczowy) + zasilanie odbiornika z BEC regulatora (czerwony i czarny/brązowy).
    Czerwony to oczywiście biegun dodatni.
  • #8
    MaciejGK
    Level 11  
    Czyli cienki czarny i czerwony pod zasilanie np 5v z Arduino a cienki biały pod PWM?
  • #9
    miroskop
    Level 23  
    Czerwonego nie podpinaj bo na nim już jest napięcie 5V. Podłącz tylko czarny (masa) i biały (sygnał).
  • #10
    MaciejGK
    Level 11  
    Witam! Zakupiłem regulator ESC HobbyKing podłączyłem tak jak wcześniej mowa. Biały od sterowania pod pin z arduino. Żeby nie było poczytałem wcześniej na ten temat, niestety na polskich stornach mało informacji na ten temat. Problem polega na tym że silnik dziwnie pika kilka razy. Wiem ze jeżeli będą trzy szybkie sygnały to silnik gotowy do rozruchu. Wgrywam kilka razy ten sam program i czasem silnik ruszy a czasem nie, miał ktoś styczność z takim problemem? Znalazłem kilka skryptów na ten temat ale żaden nie zadziałał pod Arduino. Szukam dalej ale mam nadzieje ze ktoś mi pomoże:)
    Pozdrawiam
  • #11
    miroskop
    Level 23  
    Zanim włączysz regulator to musisz dać sygnał na minimum. Inaczej silnik nie ruszy, to takie zabezpieczenie przed niekontrolowanym startem silnika. Poczytaj też o programowaniu regulatora.
  • #12
    MaciejGK
    Level 11  
    Tak wiem ustawiam w setup void ze ma być zero a potem powoli wzrasta sygnał. Ciężko znaleźć informacje na temat temat.
  • #13
    miroskop
    Level 23  
    Niestety nie znam tego programu. Sygnał minimum to impuls o długości 1ms a maksimum 2ms, powtarzany co ok. 20ms. Czy ten program generuje impulsy w takim przedziale?
  • #14
    MaciejGK
    Level 11  
    Regulator obrotów ESC - jak sterować?

    Powyżej jest tabelka ze starowaniem PWM. Jak widać można zmienić szerokość, nie wiem tylko jednej rzeczy jak się ma do czasu ta szerokość bo jak wpisze połowę wartości czyli 127 to nie wiem z ilu jest ta połowa, znając to mógłbym wpisać odpowiednią wartość która oznaczała by 1ms zrobić pętle z delay'em co 20ms a potem zwiększyć z 1ms do 2ms, dobrze myśle?

    Dodano po 11 [minuty]:

    Problem polega jeszcze na tym że uruchamiam różne programy a silnik niekoniecznie chce ruszyć oddaje różne odgłosy ale nie wiem o co chodzi. Jak pytałem w innych tematach to oczywiście wszyscy pisali ze trzeba poszukać w google na temat PWM. Lecz poszukałem znalazłem nawet inne kody które działają podobno i nic.

    Dodano po 1 [godziny] 30 [minuty]:

    Napisałem taki program :

    int b=1;
    void setup()
    {
    pinMode(9,OUTPUT);
    pinMode(7,INPUT);
    for (int a=1;a<50;a++)
    {
    digitalWrite(9,0);
    for (int i=1;i<100;i++)
    {
    digitalWrite(9,HIGH);
    delay(1);
    digitalWrite(9,LOW);
    delay(1);
    }
    }
    }


    void loop()
    {

    int pwm=255 ;
    for (int a=1;a<50;a++)
    {
    digitalWrite(9,0);
    for (int i=1;i<100;i++)
    {
    digitalWrite(9,HIGH);
    delay(1);
    digitalWrite(9,LOW);
    delay(1);

    digitalWrite(9,0);
    for (int i=1; i<10000; i++)
    {
    digitalWrite(9, pwm);
    delay(2);
    digitalWrite(9, LOW);
    delay(20);
    }
    }
    }

    }


    Program był napisany metodą prób i błędów, wystarczy zmienić wartość a w void loopie i już nie działa (np. zmienic na 2, czasem działa na 10 a czasem nie). Jak widac jest sterownie przez pwm ale jak jest 10 to kręci się tak samo jak przy 255

    Dodano po 1 [minuty]:

    Bardzo by mi ułatwiło jakbym wiedział co znaczą sygnały dźwiękowe wydawane przez silnik
  • #15
    zdziwiony
    Level 25  
    Zamiast regulatora podłącz serwo, a jeszcze lepiej oscyloskop i będziesz wiedział czy program działa.
    Na temat sygnału wejściowego do regulatora (serwa) wszystko napisał miroskop w #13 i #11.
    Nie znam arduino, ale z ciekawości zajrzałem doLink i Twój program to delikatnie mówiąc jakiś niewypał.
    O tutaj masz Servo library.
  • #16
    MaciejGK
    Level 11  
    Pod twoim linkiem znajdują się tylko polecenia i funkcje więc nie wiem jak na podstawie tego mogłeś wywnioskować że program jest lipny. Mój program był pisany metodą prób i błędów tak żeby tylko zastartować silnik i jestem świadomy że jest on daleki od ideałów. Jeżeli chodzi o servo to jest wiele programów opartych na bibliotece servo ale żaden nie działa i z żadnego wynika to że najpierw jest podawany sygnał 1ms a potem 2ms.
  • #17
    zdziwiony
    Level 25  
    Regulator wymaga takiego samego sygnału sterującego jak serwo modelarskie.Link
    Wątpię aby biblioteka Servo library podana na stronie Arduino nie działała,
    ale kto wie? Tutaj przykładowy program do sterowania serwem za pomocą potencjometrulink.
    Piszesz programy przy pomocy prób i błędów? :D
  • #18
    miroskop
    Level 23  
    A kto pisał, że na serwo ma być wysłany najpierw sygnał 1ms a potem 2ms? Dla serwa "normalnym" sygnałem jest 1,5ms czyli "Neutrum". Pełny ruch serwa zapewnia zmiana szerokości impulsu od 1ms do 2ms. Impuls wysyłany co 20ms. Z regulatorem jest trochę inna sprawa dlatego miałeś przeczytać jego instrukcję. Jeżeli na starcie podasz sygnał maksymalny (2ms) to regulator przechodzi w tryb programowania, o czym informuje stosowną melodyjką, i jeżeli potem zaczniesz przypadkowo zmieniać wartości impulsu, to możesz niechcący zmienić ustawienia regulatora, np. wyłączyć rotację, włączyć hamulec itd. Z kolei jak impuls będzie miał wartość inną niż minimum lub maximum to regulator wyśle sygnał ostrzegawczy, wtedy trzeba "zjechać" na minimum. Najlepiej kup sobie jakieś tanie serwo i na nim testuj program bo z regulatorem to zły pomysł. Możesz też zrobić sobie "serwotester" na NE555 i na nim zacząć eksperymenty.
  • #19
    MaciejGK
    Level 11  
    Mam taki program:
    #include <Servo.h>

    Servo myservo;

    void arm(){
    // arm the speed controller, modify as necessary for your ESC
    setSpeed(0);
    delay(1000); //delay 1 second, some speed controllers may need longer
    }

    void setSpeed(int speed){
    // speed is from 0 to 100 where 0 is off and 100 is maximum speed
    //the following maps speed values of 0-100 to angles from 0-180,
    // some speed controllers may need different values, see the ESC instructions
    int angle = map(speed, 0, 100, 0, 180);
    myservo.write(angle);
    }

    void setup()
    {
    myservo.attach(9);
    arm();
    }


    void loop()
    {
    int speed;

    // sweep up from 0 to to maximum speed in 20 seconds
    for(speed = 0; speed <=50; speed += 5) {
    setSpeed(speed);
    delay(1000);

    }

    // sweep back down to 0 speed.
    for(speed = 95; speed > 0; speed -= 5) {
    setSpeed(speed);
    delay(1000);
    }
    setSpeed(0);
    delay(5000); // stop the motor for 5 seconds
    }


    silnik rozpędza się i hamuje ale nie wiem jak zrobić aby silnik kręcił się za stałą prędkością przez określony czas. Czytałem wiele na temat serwomechanizmów, wiem jak go ustawić w określonej pozycji ale nie mam pojęcia jak to interpretuje regulator ESC.