18
VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS ELEKTRONIKOS FAKULTETAS AUTOMATIKOS KATEDRA ŽINGSNINIAI IR SERVO VARIKLIAI. VALDYMAS SU RASPBERRY PI IR ARDUINO Referatas Atliko: Romualdas Taluntis Tikrino: Doc. Saulius Lisauskas Vilnius, 2014

ŽINGSNINIAI IR SERVO VARIKLIAI. JŲ VALDYMAS SU RASPBERRY … · 2015. 4. 21. · Tam, kad išlaikyti esamą padėtį , servas kas 20 ms turi gauti impulsą. Pav. 2 pateikta centro

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • VILNIAUS GEDIMINO TECHNIKOS UNIVERSITETAS

    ELEKTRONIKOS FAKULTETAS

    AUTOMATIKOS KATEDRA

    ŽINGSNINIAI IR SERVO VARIKLIAI. JŲ VALDYMAS

    SU RASPBERRY PI IR ARDUINO

    Referatas

    Atliko: Romualdas Taluntis

    Tikrino: Doc. Saulius Lisauskas

    Vilnius, 2014

  • Turinys 1.1 Įžanga ........................................................................................................................... 3

    1.2 Servo varikliai ............................................................................................................... 3

    1.2.1 Parallax Standard .................................................................................................. 3

    1.2.2 Parallax Continuous Rotation ............................................................................... 4

    1.2.3 Parallax (GWS) NARO............................................................................................ 5

    1.3 Žingsniniai varikliai ....................................................................................................... 6

    1.3.1 28BYJ-48 5V ir ULN2003 driver board .................................................................. 7

    1.3.2 Mitsumi M42SP-5 ................................................................................................. 8

    1.3.3 Wantai Nema23 57BYGH420 ................................................................................ 9

    1.3.4 Hybrid Linear Actuator 39BYGL ............................................................................ 9

    1.3.5 Žingsninių variklių tobulinimas ........................................................................... 10

    1.4 Žingsninių ir servo variklių palyginimas ..................................................................... 10

    1.5 Variklių valdymas ....................................................................................................... 11

    1.5.1 Parallax Standard ................................................................................................ 11

    1.5.2 28BYJ-48 5V ir ULN2003 driver board ................................................................ 12

    1.6 Išvados ....................................................................................................................... 16

    1.7 Literatūros sąrašas ..................................................................................................... 17

  • 3

    1.1 Įžanga

    Elektriniai varikliai verčia elektros energiją į mechaninę energiją [7]. Įvairūs šių variklių tipai

    veikia skirtingai, tačiau visų veikimo principas yra paremtas tam tikromis

    elektromagnetinėmis savybėmis.

    Šiame darbe bus apžvelgti žingsniniai ir servo varikliai bei jų valdymas Arduino valdikliu ir

    Raspberry Pi mini kompiuteriu. Šių variklių panaudojimas bus svarstomas konstruojant

    objektų atpažinimo ir sekimo sistemą. Svarstomų variklių paskirtis bus priimti signalus iš

    valdančiojo įrenginio ir pasukti konstrukciją su įmontuota vaizdo kamera tam tikru atstumu

    tam tikra kryptimi.

    1.2 Servo varikliai

    Servas yra nedidelis įrenginys, kuris susideda iš dviejų laidų nuolatinės srovės (DC) variklio,

    dantračio, potenciometro, integrinio grandyno ir išėjimo veleno [9]. Iš trijų laidų išeinančių iš

    servo vienas yra skirtas maitinimui, kitas žemei, o trečias signalui. Servo velenas gali būti

    pozicionuojamas reikalingu kampu siunčiant atitinkamą koduotą signalą.

    Servai būna įvairių dydžių, bet visi naudoja panašias kontrolės schemas ir yra ypatingai

    naudingi robotikoje. Varikliai yra nedideli ir palyginus su jų dydžiu – labai galingi. Šių variklius

    galios sunaudojimas yra proporcingas jų mechaninei apkrovai, tad mažai apkrautas servas

    naudoja nedaug energijos.

    1.2.1 Parallax Standard

    Parallax įmonės gamybos Standard modelio servas pavaizduotas Pav. 1.

    Paveikslėlis 1

  • 4

    1.2.1.1 Trumpa specifikacija

    Judesio kampas: 180 ° [1]

    38 oz – in (2,7363 kg – cm) @ 6 VDC sukimo momentas

    Svoris: 44 g

    Galios reikalavimai: 4 – 6 VDC; Maksimali srovė 140 +/- 50 mA @ 6 VDC prie nulinės

    apkrovos, 15 mA statinėje būsenoje

    Komunikacija: impulso pločio moduliacija, 0.75 – 2.25 ms aukšti impulsai, 20 ms

    intervalai

    Išmatavimai: 5,58 x 1,9 x 40,6 cm

    Darbinė temperatūra: -10 – +50 °C

    Gamintojas draudžia šį servą jungti tiesiai prie mikrovaldiklio Vdd, Vss ar Vin išėjimų.

    1.2.1.2 Komunikavimo protokolas

    Parallax Standard servas yra kontroliuojamas impulso pločio moduliacija, servo veleno

    padėtis priklauso nuo impulso trukmės. Tam, kad išlaikyti esamą padėtį , servas kas 20 ms

    turi gauti impulsą. Pav. 2 pateikta centro pozicijos laiko grafikas.

    Paveikslėlis 2

    1.2.2 Parallax Continuous Rotation

    Parallax Continuous Rotation servo (Pav. 3) veikimo principas remiasi impulso su pločio

    moduliacija sukimosi greičiui ir krypčiai reguliuoti.

  • 5

    Paveikslėlis 3

    1.2.2.1 Trumpa specifikacija

    Dvikryptis pastovaus sukimo servas[2]

    0 – 50 RPM su tiesiniu atsaku į PWM

    Svoris: 42,5 g

    38 oz – in (2.7363 kg – cm) @ 6 VDC sukimo momentas

    Galios reikalavimai: 4 – 6 VDC; Maksimali srovė 140 +/- 50 mA @ 6 VDC prie nulinės

    apkrovos, 15 mA statinėje būsenoje

    Komunikacija: impulso pločio moduliacija

    Išmatavimai: 5,58 x 1.9 x 4,06 cm

    Darbinė temperatūra: -10 – +50 °C

    1.2.3 Parallax (GWS) NARO

    (GWS) NARO servas (Pav. 4) yra Parallax gamybos servas su 180 laipsnių posūkio kampu. Šis

    servas pasižymi nedideliu dydžiu, tad yra gerai tinkamas projektams, reikalaujantiems mažo

    komponentų dydžio.

  • 6

    Paveikslėlis 4

    1.2.3.1 Trumpa specifikacija

    Posūkio kampas: 180 ° [3]

    Svoris: 8,8 g

    1,2 kg – cm @ 4,8 V VDC sukimo momentas

    1.3 Žingsniniai varikliai

    Žingsniniai varikliai (Pav. 5) [11] veikia kitaip negu standartiniai varikliai, kurie esant tam

    tikrai įtampai sukasi tolydžiai [10]. Žingsninio variklio velenas sukasi diskrečiu žingsniu esant

    tam tikros sekos elektriniam komandos impulsui. Kiekvienas apsisukimas yra išskaidomas į

    tam tikrą žingsnių skaičių ir variklis turi gauti įtampos impulsą kiekvienam žingsniui. Posūkio

    dydis yra tiesiogiai proporcingas impulsų skaičiui, o sukimosi greitis priklauso nuo tų impulsų

    dažnio. 1 laipsnio per žingsnį variklis reikalaus 360 impulsų, kad apsisuktų vieną kartą.

    Laipsniai per žingsnį vadinami rezoliucija. Sustabdytas žingsninis variklis išlaiko savo poziciją.

  • 7

    Paveikslėlis 5

    1.3.1 28BYJ-48 5V ir ULN2003 driver board

    28BYJ-48 (Pav. 6) yra nedidelis žingsninis variklis tinkamas plačiam panaudojimui.

    Paveikslėlis 6

    1.3.1.1 Trumpa specifikacija

    Įtampa: 5 V [12]

    Fazių skaičius: 4

    Greičio pokyčio koeficientas: 1/64

    Žingsnio kampas: 5,625 °

    Dažnis: 100 Hz

    DC varža: 50Ω +- 7% (25 °C)

    1.3.1.2 ULN2003 driver board

    Pav. 7 pavaizduota schema žingsniniam varikliui valdyti.

  • 8

    Paveikslėlis 7

    Mihaylo Y. Stoychitch savo straipsnyje International Journal of Engineering žurnalui aprašo ir

    įgyvendina algoritmą 28BYJ-48 varikliui su ULN2003 valdymui Arduino valdiklio pagalba[4].

    1.3.2 Mitsumi M42SP-5

    Paveikslėlis 8

    Šis keturfazis variklis (Pav. 8) gali suktis į abi puses kintamais greičiais. Jo žingsnio kampas yra

    7,5 ° ir jis reikalauja 12 V nuolatinės maitinimo įtampos[13].

    1.3.2.1 Trumpa specifikacija

    Įtampa: 12 V [6]

    Srovė/Fazė: 259 mA

    Fazių skaičius: 4

    DC ritės varža: 50 Ω

    Žingsnio kampas: 7,5 ° / fazei

    Sužadinimo metodas: 2 – 2 fazė (vienpolis)

  • 9

    Aukščiau aptarta ULN2003 schema gali būti naudojama šio variklio valdymui.

    1.3.3 Wantai Nema23 57BYGH420

    Wantai Nema23 57BYGH420 (Pav. 9) yra vienpolis 200 žingsnių per pilną apsisukimą

    žingsninis variklis.

    1.3.3.1 Trumpa specifikacija

    Įtampa: 3 V [16]

    4 fazės

    Žingsnio kampas: 1,8 °

    Srovė: 2 A / fazė

    Paveikslėlis 9

    1.3.4 Hybrid Linear Actuator 39BYGL

    Šis žingsninis variklis turi srieginį veleną (Pav. 10), kuris leidžia jį naudoti kaip tiesinę pavarą

    (sukuriamas judesys tiesia linija). Varikliui sukantis sriegė pajuda 1 cm per 5 pilnus

    apsisukimus. 39BYGL variklis yra geras pasirinkimas linijiniam judėjimui, kai tikslumas ir

    pakartojamumas yra svarbūs faktoriai.

    1.3.4.1 Trumpa specifikacija

    Įtampa: 12 V [17]

  • 10

    Žingsnio dydis: 0,01 mm

    Srovė: 0,4 A / fazė

    10 cm ilgio velenas

    Paveikslėlis 10

    1.3.5 Žingsninių variklių tobulinimas

    Vienas praktinis patobulinimas būtų padidinti žingsnių impulsų įtampą, bet tuo pačiu išlaikyti

    saugią srovę pridedant varžas nuosekliai su ritėmis [18]. Našumas padidėja, nes sistemos L/R

    laiko konstanta yra sumažinama, o tai reiškia, kad srovė gali kilti ir slopti greičiau, tad

    pagerėja žingsnio dažnis ir sukimo momentas.

    1.4 Žingsninių ir servo variklių palyginimas

    Žingsniniai varikliai neturi grįžtamojo signalo enkoderio (feedback encoder) – tai įtakoja jų

    patikimumą, nes žingsnis variklis gali sukti tik tam tikrą krūvį, kitaip esant per didelei

    apkrovai jis gali pradėti praleidinėti žingsnius, o tai ves prie pozicionavimo klaidų [5]. Servo

    variklio enkoderis ir valdiklis kainuoja brangiau, bet optimizuoja bendrą sistemos našumą.

    Taip pat didesnėse sistemose, kur galingas variklis sudaro vis didesnę visos sistemos kainos

    dalį, servo varikliai turi pranašumą. Tačiau visumoje žingsniniai varikliai yra pigesni ir yra

    optimalūs naudoti projektuose, kurie reikalauja mažo ar vidutinio pagreičio, aukšto sukimo

    momento ir atviro ar uždaro ciklo operacijos lankstumo [14].

  • 11

    Maži industriniai servo varikliai tipiškai yra elektroniškai komutuojami bešepetėliniai varikliai

    [5].

    1.5 Variklių valdymas

    1.5.1 Parallax Standard

    1.5.1.1 Valdymas su Arduino valdikliu

    Baltas laidas yra signalo laidas ir gali būti jungiamas prie Arduino digital pin. Juodas laidas –

    žemė, raudonas – 5V. Jungimo pavyzdys pateiktas pav. 11.

    Paveikslėlis 11

    Tokį variklį valdančios Arduino programos pavyzdys:

    #include

    Servo myservo;

    int angle = 0;

    void setup() {

    myservo.attach(9);

    }

    void loop() {

    for (angle=0; angle

  • 12

    }

    for (angle=180; angle>=1; angle-=1) {

    myservo.write(angle);

    delay(20);

    }

    }

    1.5.1.2 Valdymas su Raspberry Pi

    Jungimo pavyzdys:

    Paveikslėlis 12

    Servo variklio valdymą atliksime su pigpio C kalbos biblioteka [19]. Jungimo pavyzdyje (pav.

    12) servo signalo laidas prijungtas prie GPIO 23, tad servą sukioti galima su tokia paprasta

    komanda:

    pigs servo 23 n

    n – impulso plotis, aprašomas sveikuoju skaičiumi [500 – 2500] intervalo ribose arba lygiu 0.

    1.5.2 28BYJ-48 5V ir ULN2003 driver board

    1.5.2.1 Valdymas su Arduino valdikliu

    Jungimo pavyzdys:

  • 13

    Paveikslėlis 13

    ULN2003 variklio valdiklio įėjimus IN1, IN2, IN3, IN4 jungiame prie Arduino Digital pin 8, 9,

    10, 11 (atitinkamai), ULN2003 „+“ jungiame prie Power 5V, o „-“ prie GND (pav. 13).

    Valdančios programos pavyzdys:

    int motorPin1 = 8;

    int motorPin2 = 9;

    int motorPin3 = 10;

    int motorPin4 = 11;

    int motorSpeed = 1;

    void setup() {

    pinMode(motorPin1, OUTPUT);

    pinMode(motorPin2, OUTPUT);

    pinMode(motorPin3, OUTPUT);

    pinMode(motorPin4, OUTPUT);

    Serial.begin(9600);

    }

    void loop(){

    clockwise();

    }

    void clockwise(){

    // 1

    digitalWrite(motorPin4, HIGH);

    digitalWrite(motorPin3, LOW);

    digitalWrite(motorPin2, LOW);

    digitalWrite(motorPin1, LOW);

    delay(motorSpeed);

    // 2

  • 14

    digitalWrite(motorPin4, HIGH);

    digitalWrite(motorPin3, HIGH);

    digitalWrite(motorPin2, LOW);

    digitalWrite(motorPin1, LOW);

    delay (motorSpeed);

    // 3

    digitalWrite(motorPin4, LOW);

    digitalWrite(motorPin3, HIGH);

    digitalWrite(motorPin2, LOW);

    digitalWrite(motorPin1, LOW);

    delay(motorSpeed);

    // 4

    digitalWrite(motorPin4, LOW);

    digitalWrite(motorPin3, HIGH);

    digitalWrite(motorPin2, HIGH);

    digitalWrite(motorPin1, LOW);

    delay(motorSpeed);

    // 5

    digitalWrite(motorPin4, LOW);

    digitalWrite(motorPin3, LOW);

    digitalWrite(motorPin2, HIGH);

    digitalWrite(motorPin1, LOW);

    delay(motorSpeed);

    // 6

    digitalWrite(motorPin4, LOW);

    digitalWrite(motorPin3, LOW);

    digitalWrite(motorPin2, HIGH);

    digitalWrite(motorPin1, HIGH);

    delay (motorSpeed);

    // 7

    digitalWrite(motorPin4, LOW);

    digitalWrite(motorPin3, LOW);

    digitalWrite(motorPin2, LOW);

    digitalWrite(motorPin1, HIGH);

    delay(motorSpeed);

    // 8

    digitalWrite(motorPin4, HIGH);

    digitalWrite(motorPin3, LOW);

    digitalWrite(motorPin2, LOW);

    digitalWrite(motorPin1, HIGH);

    delay(motorSpeed);

    }

    1.5.2.2 Valdymas su Raspberry Pi

    Jungimo pavyzdys:

  • 15

    Paveikslėlis 14

    ULN2003 variklio valdiklio įėjimus IN1, IN2, IN3, IN4 jungiame prie Raspberry Pi GPIO jungčių

    – atitinkamai GPIO 17, 18, 19, 21. Tada sujungiame ULN2003 „-“ su Raspberry PI PIN 6

    („žemė“) ir „+“ su PIN 2 (+5 V).

    Tokio sujungimo valdančiosios programos kodo pavyzdys:

    #!/usr/bin/env python

    import time

    import RPi.GPIO as GPIO

    GPIO.setmode(GPIO.BCM)

    StepPins = [17,18,21,22]

    for pin in StepPins:

    print "Setup pins"

    GPIO.setup(pin,GPIO.OUT)

    GPIO.output(pin, False)

    StepCounter = 0

    WaitTime = 0.005

    StepCount1 = 4

    Seq1 = []

    Seq1 = range(0, StepCount1)

    Seq1[0] = [1,0,0,0]

    Seq1[1] = [0,1,0,0]

    Seq1[2] = [0,0,1,0]

  • 16

    Seq1[3] = [0,0,0,1]

    StepCount2 = 8

    Seq2 = []

    Seq2 = range(0, StepCount2)

    Seq2[0] = [1,0,0,0]

    Seq2[1] = [1,1,0,0]

    Seq2[2] = [0,1,0,0]

    Seq2[3] = [0,1,1,0]

    Seq2[4] = [0,0,1,0]

    Seq2[5] = [0,0,1,1]

    Seq2[6] = [0,0,0,1]

    Seq2[7] = [1,0,0,1]

    Seq = Seq1

    StepCount = StepCount1

    while 1==1:

    for pin in range(0, 4):

    xpin = StepPins[pin]

    if Seq[StepCounter][pin]!=0:

    print " Step %i Enable %i" %(StepCounter,xpin)

    GPIO.output(xpin, True)

    else:

    GPIO.output(xpin, False)

    StepCounter += 1

    if (StepCounter==StepCount):

    StepCounter = 0

    if (StepCounter

  • 17

    1.7 Literatūros sąrašas

    [1] Parallax Standard Servo (#900-00005) product documentation v2.2

    [2] Parallax Continuous Rotation Servo (#900-00008) product documentation v2.2

    [3] http://www.parallax.com/product/900-00014 (Žiūrėta 2014 01 11)

    [4] An Algorithm of Linear Speed Control of a Stepper Motor in Real Time, Mihaylo Y.

    Stoychitch, International Journal of Engineering, 2013

    [5] http://en.wikipedia.org/wiki/Servomotor (Žiūrėta 2014 01 11)

    [6] 12-Volt Unipolar Stepper Motor (#27964) product documentation

    [7] Handbook of Small Electric Motors, William H. Yeadon, P. E., Allan W. Yeadon, P. E. ,

    McGraw – Hill, 2001

    [8] Electric Motors and Drives: Fundamentals, Types and Applications, 3rd edition, Austin

    Hughes, Elsevier Ltd., 2006

    [9] http://www.servocity.com/html/what_is_a_servo_.html (Žiūrėta 2014 01 11)

    [10] Electric Motors and Control Systems, Frank D. Petruzella, McGraw – Hill, 2010, p. 84 –

    85

    [11] Stepping Motors a Guide to Theory and Practice, 4rd edition, Paul Acarnley, The

    Institution of Engineering and Technology, 2007, p. 3

    [12] Kiatronics 28BYJ-48 – 5V Stepper Motor Documentation

    [13] Mitsumi M42SP-5 Stepping Motor Documentation

    [14] http://www.amci.com/tutorials/tutorials-stepper-vs-servo.asp (Žiūrėta 2014 01 11)

    [15] http://www.parallax.com/product/750-90002 (Žiūrėta 2014 01 11)

    [16] Wantai Nema23 57BYGH420 Stepper Motor Datasheet

    [17] Hybrid Linear Actuator 39BYGL Datasheet

    http://www.parallax.com/product/900-00014http://en.wikipedia.org/wiki/Servomotorhttp://www.servocity.com/html/what_is_a_servo_.htmlhttp://www.amci.com/tutorials/tutorials-stepper-vs-servo.asphttp://www.parallax.com/product/750-90002

  • 18

    [18] Practical Electric Motor Handbook, Irving Gottlieb, Newnes, 1997, p. 122 – 124

    [19] http://abyz.co.uk/rpi/pigpio/ (Žiūrėta 2014 05 03)

    http://abyz.co.uk/rpi/pigpio/