Voor mijn eindwerk moet ik een stappenmotor aansturen via de computer. Tot over enkele weken wist ik niets van stappenmotoren en zeer weing over visual basic, maar omdat over deze 2 onderwerpen nogal veel informatie te vinden is kon ik dus al snel beginnen aan mijn 1e proef projectje. Ik heb dus mijn stappenmotor (unipolair, 96 stappen = 360°) aangesloten op de parallelle poort van men pc en een programma geschreven in visual basic op basis van een timer. Alles werk, alleen duurde het ongeveer 5 seconden voordat mijn motor 1 omwenteling maakte zelfs met mij timer interval ingesteld op 1. Nu ben ik er al achter dat het niet aan men parrallelle poot ligt en ook niet aan de motor maar aan de timer. Weet iemand hoe ik die motor sneller kan laten draaien?
The Force
May The Force be with you...
timer interval = 1... banaan? seconde, ms, us?! Iets specifieker graag... i.i.g. moet je je timer sneller laten werken dan die nu doet... moet je (en wij op CO als je wilt dat we je kunnen helpen) eerst weten hoe snel die nu werkt!!
Als je je timer uit VB gebruikt
deze
...dan kom je niet verder dan 50ms. Die timer is gewoon niet sneller dan 20Hz.
Dus timer = gaat niet.
Als je met sleep() werkt, dan is het nog niet veel sneller, omdat 1ms met sleep() is geen 1ms, maar nog steeds 10 tot 20ms. Maar met onderstaande (zie quote) wordt sleep() idd ook werkelijk 1 ms. Als je nog fijner wilt, dan moet je je eigen routine schrijven volgens mij. Heb ik gedaan iig. Niet ideaal, maar ja...
ik quote:
HOWEVER, I should not have given up so fast! It turns out that there is a win32 command, timeBeginPeriod(), which solves our problem. It lowers the granularity of Sleep() to whatever parameter you give it. So if you're on windows 2000 and you call timeBeginPeriod(1) and then Sleep(1), it will truly sleep for just 1 millisecond, rather than the Default 10! timeBeginPeriod() only affects the granularity of Sleep() for the application that calls it, so don't worry about messing up the system with it. Also, be sure you call timeEndPeriod() when your program exits, with the same parameter you fed into timeBeginPeriod() when your program started (presumably 1). Both of these functions are in winmm.lib, so you'll have to link to it if you want to lower your Sleep() granularity down to 1 ms."
[Bericht gewijzigd door ikkedus op ]
Hallo
Ik moet voor mijn eindwerk ook een stappenmotor sturen maar heb totaal geen ervaring.
Wil je eens vertellen hoe jij dat precies aangepakt hebt en waar vind ik informatie. Je schreef dat je een programma in Visual Basic schreef. Maar wat heb je dan nog verder nodig dat jou programma de motor laat draaien, stuur je dit naar een IC of? En kan je later je programma nog aanpassen?
Welke componenten heb je dus eigenlijk nog nodig naast je PC en stappenmotor? Waar zou ik die kunnen vinden?
Alle hulp zou ongelooflijk welkom zijn!!
Ben dus echt totalen leek:-)
Mijn opdracht is de volgende:
De stappenmotor moet een grijper met daartussen een hangende glazen fles laten draaien op deze verschillende posities (0°, 45°, 90°, 135°, 180°, -45°, -90°, -135° en vervolgens dezelfde reeks maar 22.5° graden verschoven dus 22.5, 67.5,.. °)
ook alle links die mij zouden knn helpen zijn welkom!
grtz Bart
Dit is een mogelijkheid (ook halve stappen mogelijk) ->
stappenmotor controller L297
stappenmotor driver L298
Voor aansturing met PC ->
WinXP io.dll voor VB, C++ of Delphi
En de PC bepaalt direct of de motor loopt of niet, er wordt geen programma naar de chip ge-upload ofzo.
heb je een unipolaire of een bipolaire stappenmotor ?? (4 draden is bipolair, 5 of 6 unipolair) ik had van school een unipolaire gekregen en heb die direct aangestuurt met de pc. via 4 transistors direct aan de parralele poort. daarvoor heb ik nog een klein programmatje geschreven. gewoon om te testen of het werkt ( aantal stapen en aantal stappen per seconde kunen ingegeven worden) daarin kan je ook goed zien hoe je de parralele poort moet aansturen. als je deze wil hebben moet je maar gewoon mailen naar lodevandyck@pandora.be
ben nu bezig met het aansturen van een bipolaire ook via de pc maar dan met een kaart ertussen zodat je enkel een frequentie en een richting moet ingeven maar die werkt nog niet optimaal.
Ten eerste werkt een windows-pc niet realtime, dus als je een serieuze toepassing wil maken gaat dit met een dos-systeem of een microcontroller. In c heb ik een tijd geleden ook zoiets gemaakt met wachtlussen die je tussen elke stap aanroept, dit zijn er dus 4 of 8 afhankelijk van je bedrijfsmodus (fullstep, halfstep of wave). Visual basic ken ik helaas niks van omdat die taal te moeilijk voor mij is, in c:
void wacht(int t)
{int i,j;
for (i=0;i<=t;i++)
{
for (j=0;j<=32000;j++);
};
}
dat maakt dan al drie van ons die voor ons eindwerk een stappenmotor willen gaan sturen via de pc. Ik zie dat jullie ook voor de L297/L298 gekozen hebben.
Ik werk met unipolaire motoren, dus ik zou nog een extra IC moeten tussenschakelen. (De ULN2075). Heeft iemand van jullie hier ervaring me? Heeft iemand van jullie een schema die ik zou kunnen raadplegen? Ik heb zo een voorstelling van hoe het zou moeten zijn, maar de details mis ik nog zo'n beetje.
MVG
Jeroen Maton
aka doylle
P.S. als iemand van jullie msn heeft, dit is mijn adres: jeroenmaton@hotmail.com
ik ben ongeveer deze aan het maken.
http://peteropfinder.dk/_konst/motor/step1/
maar ze werkt nog niet helemaal.
(nog even knoeien
)