[ dr.zmaj @ 22.09.2009. 18:39 ] @
Da li neko moze da mi pomogne da isprogramiram program koji bi pokretao servo motor. Nisam programirao u C jeziku, koristio sam VB6 kod upravljanja interfejsom i obicnim DC motorima. Medjutim kod servo motora potrebno je isprogramirati vremenske impulse koji bi omogucili pokretanje servo motora na jednu i drugu stranu. To sam uspeo cisto elektronski sa tajmerima NE555, ali bi hteo racunarom da upravljam sa 4 servomotora. Podaci za polozaj:Ideja di bila sledeca:
1.5ms sredina
0.6 ms levo
2.4ms desno

Napraviti dva tajmera
Prvi (logicka nula)
da bude 30ms i njega ne moras da diras.
a drugi (logicka jedinica)
da bude 1.5ms

i vrtim tu petlju tako.


Ako hocu da servo ode skroz levo onda
Nula
30ms
Jedinica
0.6ms

Ili ako hocu skroz desno
Nula
30ms
Jedinica
2.4ms
[ Mihajlo Cvetanović @ 22.09.2009. 19:49 ] @
A kako je motor povezan s računarom? Imaš li to već odrađeno, kako se šalju te nule i jedinice?
[ dr.zmaj @ 23.09.2009. 18:17 ] @
Pokusavao sam sa slanjem jedinice i nule preko paralelnog porta. Znaci citav projekat po zamisli bi radio bez upotrebe mikrokontrolera, motori su spojeni na izlaze LPT-a.
[ Mihajlo Cvetanović @ 24.09.2009. 00:05 ] @
Pokušavao si, okej, ali da li si uspeo? Hoću da kažem, šta nam vredi da ovde pričamo o softveru, ako se motor ne vrti.

Inače, imaš neke prilično kratke pauze (0.6ms), koje su možda večnost što se samog procesora tiče, ali Windowsov mehanizam dodeljivanja procesorskog vremena može lako da preskoči tvoj proces baš kad je potrebno završiti rad motora. S tim mora nekako da se računa, ali ja ne znam kako. Windows prosto nije namenjen za programiranje u realnom vremenu. Sad lupam, ali možda drajveri imaju veću kontrolu nad izvršavanjem od običnih korisničkih procesa.

Ako zanemarimo drajvere, možda mogu da ti posluže oni precizni tajmeri, QueryPerformanceCounter/QueryPerformanceFrequency. Vrtiš se u maloj petlji dok ne dođe vreme za drugi signal. Problem sa dodeljivanjem procesorskog vremena možda može da se reši maksimalnim povećanjem prioriteta threada u kritičnom periodu. To znači da nekih tridesetak milisekundi ništa drugo na mašini ne bi radilo osim tvog procesa koji čeka da prođe vreme u maloj petlji.
[ dr.zmaj @ 27.09.2009. 15:46 ] @
Da programirao sam u VB i obicnom Basicu pod dosom, uspevam da zavrtim motor ali samo u jednom smeru.
[ Mihajlo Cvetanović @ 27.09.2009. 18:03 ] @
Šta ti je konkretno problem?
[ wiktor91 @ 07.02.2010. 23:04 ] @
Ako želiš izvesti upravljanje bez mikrokontrolera to ti je najjednostavnije izvesti tako da na LPT port spojiš neki driver recimo ULN2003, dovedeš mu napon koj hočeš za servo i onda preko 5V(mislim) impulsa na nekom ulaznom pinu on kao relej propusti dovedeni napon na pripadajuči izlazni pin(onaj napon koj si mu doveo za servo). Mislim da ULN2003 konkretno podržava nekih 40V ali još dodatno provjeri.

Ja sam koristio mikro kontroler u kombinaciji s ULN jer mi je tako bilo praktičnije, uostalom tako sam bio sigurniji da mi slučajno na LPT port ne probije neki veči napon i sprži njega a i nešto drugo u kompu.

E da, za upravljanje LPT portom imaš predobru parapin biblioteku za C ali dok sam ja to radio bila je podržana samo na UNIXoidnim sistemima.