Upload
others
View
4
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/