Beste CO'ers,
ik ben bezig met het aansturen van een stappen motor.
Hij moet uiteindelijk een soort klok aansturen om een puntentelling van een zelfgemaakte flipperkast aan te geven.
nu maakt hij soms tijdens het optellen 1 of (heel af en toe) een aantal stappen in de verkeerde richting. dit gebeurt ook bij te terug gaan naar het 0 punt.
dusss:
stap vooruit, stap vooruit, stap vooruit, stap terug, stap vooruit...
en andersom.
Als hij niet verkeert stapt loopt hij soepel.
De stappenmotor is aangesloten op poortA 0-3 van de atmega32
met een uln2803 er tussen. die wordt niet heet of iets dergelijks.
de code voor het stappen heb ik niet zo heel moeilijk(dacht ik).
het wordt ongeveer uitgevoerd met 240Hz.
clockMoveTo = STEPSperMIN * score;//calc number of steps to take
//STEPSPERMIN = the number of steps need to make for 1 min on the clock
if(clockStepCnt < clockMoveTo){ // if stepscnt < taget number of steps -> make a step extra
PORTA = 0x0F & _BV(cnt);
clockStepCnt++;
}else if((clockStepCnt > clockMoveTo)){// if stepscnt > taget number of steps -> make a step back
PORTA = 0x0F & _BV(3-cnt) ;
clockStepCnt--;
}else PORTA = 0x0F & 0 ;
cnt++;
if(cnt>=4)
cnt=0;
ik heb alles geprobeerd dat ik kan bedenken.
heb ook nog zitten googlen, maar de zoekterm is wat vaag.
heeft dus niet veel opgeleverd.
is deze informatie voldoende? of ben ik nog wat vergeten?
van de stappen motor weet ik alleen dat deze unipolair is en niet te veel stroom verbruikt want de uln leeft nog.
ik hoop dat jullie er iets op weten.
met vriendelijke groet,
Jeroen Kleijn
Bart Hiddink
Bart Hiddink is Ideetron; electronics and projects, http://www.ideetron.nl. LoRaWAN Nutcase.
Het kan zijn dat de stroom te laag is voor de motor en dat je op een resonantiepunt uitkomt.
Dan hebben deze motoren de neiging om gekken dingen te doen.
Dit komt voor als je de motor zonder belasting laat draaien, bij een vrij hoge stapsnelheid en bij een (te) lage stroom.
Misschien kun je beter een echte driver nemen?
Dat scheelt ook lastige code.
Bijvoorbeeld de TA8435 of een nieuwer type van Toshiba: TB6560.
Ik zag op Ebay een betaalbare driver en die komt ook voor in dit topic:
Paar opmerkingen:
Als je de eindstand bereikt hebt, dan schakelt de stroom uit (laatste else stukje). Dan staat de motor zonder stroom, en dan is er geen kracht om de motor vast te zetten. Dus je kunt beter de stroom altijd aan laten.
Verder blijft cnt gewoon doorlopen als je de eindstand bereikt hebt. Als je dan ooit verder wilt stappen, weet je nooit welke spoel gaat lopen.
En als je ooit van richting verandert dan is het ook een beetje gokken welke spoel stroom krijgt.
Dus je moet er altijd voor zorgen dat je altijd weet welke spoel stroom krijgt.
Dus eigenlijk meer zoiets:
clockMoveTo = STEPSperMIN * score;//calc number of steps to take
//STEPSPERMIN = the number of steps need to make for 1 min on the clock
if(clockStepCnt < clockMoveTo){ // if stepscnt < taget number of steps -> make a step extra
cnt = (cnt + 1) & 0x03;
PORTA = 0x0F & _BV(cnt);
clockStepCnt++;
}else if((clockStepCnt > clockMoveTo)){// if stepscnt > taget number of steps -> make a step back
cnt = (cnt - 1) & 0x03;
PORTA = 0x0F & _BV(cnt) ;
clockStepCnt--;
}
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Het kan zijn dat 240 Hz, net te veel is.
Maar als ie "in de regel" goed loopt, dan zal dat wel niet.
240Hz, dan is een periode 4ms. Wat ik vermoed is: soms wordt een stap te vroeg of te laat(*) uitgevoerd. Daardoor komen soms twee stappen te dicht bij mekaar, en vindt de stappenmotor het makkelijker om 3 stapjes terug te doen ipv 1 vooruit.
Oh. Weet je zeker dat je de motor goed aanstuurt met maar steeds 1 uitgang actief? De motor wordt in ieder geval 2x sterker als je twee uitgangen tegelijk aanstuurt.
unsigned char stuurtabel[] = {/*1010*/ 0xa; /*1001/ 0x9, /* 0101*/ 5, /*0110*/ 6};
porta = stuurtabel[cnt];
dit gaat er van uit dat je "spoel A" aan de bovenste twee bitjes hebt aangesloten en "spoel B" aan de onderste. ZOals jij hem nu stuurt moet je spoel A aan de even bitjes, en spoel B aan de oneven bitjes hebben zitten. Anders is dat de oorzaak van dat hetniet goed werkt. 
(*) veel waarschijnlijker.
[Bericht gewijzigd door rew op (43%)]