C# - stepper motor vezérlés

Válasz küldése
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Üdv Mindenkinek!

A mai nap regisztráltam ide, mert rengeteg információt találtam, ami számomra igen hasznosnak bizonyultak, DE....
Sajnos nem vagyok járatos a C/C++ programozási nyelvben, és a c#-ot tanultam "önfejlesztéssel" (messze nem vagyok profi, de azért jó pár dolgot sikerült már megoldanom :) ), és ehhez hasonló témát nem találtam.

A fejembe vettem egy projektet, amit szeretnék megvalósítani, és ebben kérném a türelmes, segítőkész emberek segítségét:
Egy robotkart szeretnék megcsinálni úgy, hogy egy kesztyű segítségével, ami beolvassa a jeleket, egy robot kezet mozgatok valós időben, LPT porton, és game porton keresztül. A program "makró" felvételére is alkalmas, így előre felvehető mozdulatokat is le lehetne vele "játszatni".
Először 5 tengelyes léptetőmotor driverekkel gondoltam, amikor rátaláltam az ARDUINO rendszerre, és nagyon megtetszett! Egyszerűen fantasztikus!
Nos, a "kesztyűt" C# nyelven meg is írtam, ami rádiós rendszerrel viszi a jeleket a gépbe. bár még finomítanom kell egy két apróságon, az igényeknek, és a változó körülményeknek megfelelően, de tökéletesen működik.

A kéz mechanikáját meg nem kezdtem el, csak "fejben" van meg, attól függően, hogy milyen motorral fogok tudni dolgozni.

Amiben segítséget szeretnék kérni az az, hogy ha a mozgatáshoz kell ujjanként 2 irány (ökölbeszorítás, vissza mozgatás), vagyis 10, amit később, az élethűbb mozgatás miatt ujjankét 2 különálló perc-mozgatás 2 irányba, plusz a csukló 4 irányú mozgatása, vagyis 24 különálló mozgatást kellene megvalósítani léptető motorral (esetleg ki fordulatú DC motorral, amivel "egyszerűbb" megoldani)...
Kérdés az, hogy a vezérlőn pl lehetséges-e megoldani két kivezetés polaritás váltását.

Előre is bocsánatot kérek, ha butaságokat, vagy állandó visszatérő kérdéseket tettem fel! És persze folyamatosan olvasom a letöltött leírásokat.

Ehhez szeretnék tanácsot kérni, hogy milyen Arduino vezérlőt (és esetleg hány darabot) kellene beszerezni.
A válaszokat, kritikákat, és az ötleteket előre is köszönöm.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: csabeszq »

Polaritásról: lehet LED-eket kapni, amik egyik irányból pirosan világítanak, a másikból zölden.

Ha az arduino 2 pinjére (D4-D5) ráraksz egy ilyen LED-et 220 ohm előtéttel, akkor kapcsolhatod mindkét színt.
D4 0 - D5 1 zölden világít
D4 1 - D5 0 pirosan világít

PWM-mel kombinálva (négyszögjel) a fényerősséget is tudod szabályozni.

A DC motor majdnem ugyanez a felállás, a gond pusztán az, hogy az IC lábaival nem tudsz közvetlenül DC motort meghajtani, mert nem képes annyi kakaót leadni.
Ehhez kell erősítés, amit H hídnak, angolul H bridge-nek hívnak.

Az összes Arduinos analóg terepasztal vezérlő H híddal irányítja a mozdonyt.
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Az jutott még eszembe, hogy meg lehet-e olyat csinálni, hogy ha pl. D3ra jelet adok, akkor a D11-D12-re kötött motor forog, ha a D4-re, akkor a D13-D14 re kötött motor forog, ha pedig a D3-D4-re egyidejűleg adok jelet, akkor mindkét motor forog. Ezt programban meg leget oldani?
(remélem érthető volt a kérdés...)
Mert akkor az LPT porton lévő 8 PIN-en 36 különböző parancsot tudnék küldeni, és akkor még nem beszéltem a többi kimenetről, és így csak egy LPT portot kellene használni a jelátvitelre...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Robert »

Hogy jön ide az LPT?
Nem Arduino játszik?

Abból a nagy (Mega) 51+16 kimenettel bír....
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Robert: A "kesztyű" adatait a GAME porton keresztül olvastatom be, és az általam C#-ban írt program kezeli, majd LPT porton keresztül az Arduinoval akarom a motorokat működtetni.
Lehet, hogy ez elsőre túlkomplikálásnak tűnik, de így a programom segítségével szinte bármilyen mozgást rögzíteni tudok, ha az LPT 8 PIN-jén keresztül a fent leírt kombinációkat tudnám használni.
Nekem ezzel az lenne a célom, hogy ne kelljen teljes mélységeibe belemenni, és megtanulni még egy programozási nyelvet, hanem ha lehet, akkor minimális beállításokkal, és összehangolással a szerkezet "agya" a PC lenne.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Robert »

LPT és Arduino nem igazán lehetséges. Miért nem sorosporton/USB-n át kötöd a PC-re az arduino-t?
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Robert írta:LPT és Arduino nem igazán lehetséges. Miért nem sorosporton/USB-n át kötöd a PC-re az arduino-t?
Sajnos nem vagyok még tisztában az arduino adta lehetőségekkel, pontosan ezért kértem tanácsokat... :)
Mi van akkor, ha egy relésoron viszem át az LPT port jeleit az arduinoba, mint zárt-nyitott jeleket?
Bár ez az ötlet abból indul ki, hogy ha pl. adok a 3-4 lábra egy zárt kontaktot 5mp-ig, akkor az a arduino"tudja", hogy a 11-12 lábon lévő motort 5 mp-ig jobbra kell forgatnia...
Ez megoldható elmélet?
Vagy térjek vissza inkább 5 tengelyes léptetőmotor vezérléshez, és azzal gondoljam tovább?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Robert »

Az LPT portot kell elfelejteni.
Sorosporti komunikáció a kulcs.
Arduino oldalon a firmata a kulcsszó. Ezzel lehet mindent _készen_ megvalósítani.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: kapu48 »

Esetleg további ismeretek keresése:

Google: arduino pc serial communication
8)

Arduino Libraries:
http://arduino.cc/en/Reference/Libraries
Standard Libraries:

Stepper - for controlling stepper motors
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Üdv a segítőknek!

Megkaptam végra a Mikulás postásától az Andruino Mega 2560 -at.
Elkezdtem az első lépéseket a szerkezettel. mivel erősen emlékeztet a C# nyelv a C++ ra, ezért elkezdtem azzal bűvészkedni.
És láss csodát valami nem stimmel... :D

A következő kódot írtam, ami egy léptetőmotor vezérlést hajt (UNL2003):

int lepes_kesleltetes = 2;
int lepes_szam = 1;
int i = 0;
void setup()
{
Serial.begin(9600);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(13, INPUT);
pinMode(12, INPUT);

}

void loop()
{

digitalRead(13);
digitalRead(12);

if(digitalRead(13) == true)
{
for(i= 0; i< lepes_szam; i++) //lépés jobbra
{
digitalWrite(7, HIGH);
delay(lepes_kesleltetes);
digitalWrite(7, LOW);

delay(lepes_kesleltetes);
digitalWrite(6, HIGH);
delay(lepes_kesleltetes);
digitalWrite(6, LOW);

delay(lepes_kesleltetes);
digitalWrite(5, HIGH);
delay(lepes_kesleltetes);
digitalWrite(5, LOW);

delay(lepes_kesleltetes);
digitalWrite(4, HIGH);
delay(lepes_kesleltetes);
digitalWrite(4, LOW);
}
}
if(digitalRead(12) == true)
{
for(i= 0; i< lepes_szam; i++) //lépés balra
{
digitalWrite(4, HIGH);
delay(lepes_kesleltetes);
digitalWrite(4, LOW);

delay(lepes_kesleltetes);
digitalWrite(5, HIGH);
delay(lepes_kesleltetes);
digitalWrite(5, LOW);

delay(lepes_kesleltetes);
digitalWrite(6, HIGH);
delay(lepes_kesleltetes);
digitalWrite(6, LOW);

delay(lepes_kesleltetes);
digitalWrite(7, HIGH);
delay(lepes_kesleltetes);
digitalWrite(7, LOW);
}
}
}


A gondjaim a következőek:
-a fordulatszám nagyon lassú, mintha nem tudná a motor tartani a tempót,
-ha nem adok jelet semminek, akkor is elindul a motor jobbra, mintha jelet látna a 13. porton,
-ha ezt a ciklust kiktatom, és csak a 12. pin él, akkor ha jelet adok neki, még kb. 2-3 másodpercig fut a motor.

kérek mindenkit, hogy csak finoman a kritikákkal, a tudásom órákban és nem években mérhető.
előre is köszönöm
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: kapu48 »

Mivel nem tudjuk mit, hova kötöttél így teljesen tanácstalanok vagyunk!

Bekötés példa kellene (valami hasonló: http://forum.cxem.net/index.php?showtopic=77317 )

Lépés sorrend vezérlések : http://qtp.hu/elektro/leptetomotor_mukodese.php

8)
Lardino
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2013. december 22. vasárnap, 22:22

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: Lardino »

Bocsánat, jogos.

http://www.eleccircuit.com/uln2003-cont ... llel-port/

A harmadik képen szereplő vezérlésem van, és a felső képen látható módon van bekötve, csak az LPT port helyett, a Mega 4-5-6-7 kivezetésekre van téve a vezérlés.
a jeleket a 12-13 pinen adom a vezérlésnek.
jelen állás szerint 6 mp alatt tesz meg egy fordulatot.
Megnéztem az arduino szimulátorban ( http://virtronics.com.au/Simulator-for-Arduino.html ) szereplő mintaprogrammal is, és 180 RPM esetében ugyanez a sebesség (a stepper.h használatával), azonban ha feljebb veszem, akkor csak morog a motor, de nem üzemel.

Tisztában vagyok azzal, hogy ez nem a jó megoldás, de a matematikában is először a négy alapműveletet kell tudni alkalmazni, és én bátorkodtam önálló elképzelés után menni, aminek azonban szerintem életképesnek kellene lennie. //kicsit savanyú, de az én citromom! :D
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: C# - stepper motor vezérlés

Hozzászólás Szerző: kapu48 »

Rosszul osztod el a várakozást, és a vezérlés sem tűnik jónak!

Minta: http://arduino.cc/en/Tutorial/StepperUnipolar

Example 1: 4 lépéses mód

Előző linkem:
Teljes léptetéses (egyfázisú) mód
Természetesen a forgásirány megfordítható, ehhez csupán a vezérlés sorrendjén kell változtatni. (egyszerűen fordított sorrendben kapcsolgatod.)

Táblázat szerint.
Válasz küldése