Arduino met CNC shield stappenmotor draait niet (piept wel)

Lambiek

Special Member

Op 31 augustus 2016 19:32:40 schreef rew:
die twee spoelen die staan in serie.

Ja dat weet ik, maar ben er altijd van uitgegaan dat ze in tegen fase stonden. Waarom weet ik eigenlijk niet.

Door nu het middenpunt aan de voeding te hangen, kan je de ene en de andere kant op stroom door een helft van de spoel sturen.

Dat heb ik ook geprobeerd, maar zonder de midden aftakking (dus niet aan de plus) werkt het net zo goed als met de draden aan de plus. Ik merk totaal geen verschil, het koppel blijft het zelfde en ik kan hem net zo snel aansturen.

Als je haar maar goed zit, GROETEN LAMBIEK.

De sturing word totaal niet warm. Labiek, stuur jij de motoren met de shield op dezelfde manier als mij aan? Zoja, zou je een printscreen van je settings kunnen maken. Zo nee, op welke manier dan wel? Morgen zal ik eens proberen om de motoren met de sturingen aan te sturen zonder shield.

Lambiek

Special Member

Op 1 september 2016 20:26:25 schreef Jeffreyy:
Labiek, stuur jij de motoren met de shield op dezelfde manier als mij aan?

Nee, wel met zo'n zelfde soort driver en met een pic in combinatie met Profilab. Voorbeeld staat in het artikel wat ik gestuurd heb.

Je moet wel je driver gebruiken en even een klein stukje code maken in je Arduino, zodat je de motor in stap en richting aan kan sturen.

Als je haar maar goed zit, GROETEN LAMBIEK.

Hallo,

ben weer iets verder. Door de chips rechtstreeks aan te sturen met een arduino krijg ik de motor wel aan het draaien. Echter vind ik het wel raar dat ik voor 'stepsinfullround' 800 moet ingeven om de motor volledig te doen draaien, en dat het er volgens de datasheet slechts 48 zijn? (7.5° per stap)

iemand een idee hoe dit kan?

nu ook iemand een idée waarom dit met de hele shield en programma niet werkt?

edit: met dit programma kan ik ook de snelheid van de motor regelen.

Aansluitschema: http://fritzing.org/media/fritzing-repo/projects/s/single-stepper-moto…

/*
Test code for running a bipolar stepper motor with A4988 driver and Arduino.
*/

const int stepPin = 13;
const int dirPin =  12;
// The number of steps in one full motor rotation
const int stepsInFullRound = 800;

void setup() {
  pinMode(stepPin, OUTPUT);      
  pinMode(dirPin, OUTPUT);
  digitalWrite(stepPin, LOW);
  digitalWrite(dirPin, LOW);  
}

// Runs the motor according to a chosen direction, speed (rounds per seconds) and the number of steps
void run(boolean runForward, double speedRPS, int stepCount) {
  digitalWrite(dirPin, runForward);
  for (int i = 0; i < stepCount; i++) {
    digitalWrite(stepPin, HIGH);
    holdHalfCylce(speedRPS);
    digitalWrite(stepPin, LOW);
    holdHalfCylce(speedRPS);
  }
}

// A delay function used in the run()-method
void holdHalfCylce(double speedRPS) {
  long holdTime_us = (long)(1.0 / (double) stepsInFullRound / speedRPS / 2.0 * 1E6);
  int overflowCount = holdTime_us / 65535;
  for (int i = 0; i < overflowCount; i++) {
    delayMicroseconds(65535);
  }
  delayMicroseconds((unsigned int) holdTime_us);
}

// Runs the motor once in forward direction and once to the opposite direction. 
// Holds the motor still for 1 sec after both movements. 
void runBackAndForth(double speedRPS, int rounds) {
  run(true, speedRPS, stepsInFullRound * rounds);
  delay(1000);
  run(false, speedRPS, stepsInFullRound * rounds);
  delay(1000);
}

// Tests various speeds for 3 full rotations
void loop(){
  runBackAndForth(5, 1);
 // runBackAndForth(2, 3);
 // runBackAndForth(3, 3);
  //runBackAndForth(7, 3); // doesn't work on my stepper motor
}

Lambiek

Special Member

Op 5 september 2016 17:33:30 schreef Jeffreyy:
Echter vind ik het wel raar dat ik voor 'stepsinfullround' 800 moet ingeven om de motor volledig te doen draaien, en dat het er volgens de datasheet slechts 48 zijn? (7.5° per stap)

iemand een idee hoe dit kan?

Ja dat heeft met de microstep instelling te maken op je driver.

Heb je dat artikel nu gelezen dat ik gepost heb?, daar wordt het toch aardig beschreven dacht ik. Maar weet je zeker dat je met 800 stappen precies één omwenteling maakt? Je zou zeggen dat de driver op 1/16 stap ingesteld staat, en dan zou je op 768 stappen voor één omwenteling uit komen.

https://www.circuitsonline.net/artikelen/view/47

nu ook iemand een idée waarom dit met de hele shield en programma niet werkt?

Geen flauw idee, zal toch wel met bepaalde instellingen te maken hebben denk.

Als je haar maar goed zit, GROETEN LAMBIEK.

Ben ondertussen weer iets 'verder', met 768 stappen heb ik inderdaad 1 ronde gedaan, snap nu ook waarom. Door met mijn meter te meten ben ik erachter gekomen dat mijn shield echter niet aan 1/16 stepping deed, door de jumperinstellingen aan te passen heb ik nu wel overal de juiste spanningen zoals in mijn Arduino programma (om de driver los aan te sturen).

Echter draait mijn motor nu nog altijd niet. Ik heb wel gemerkt dat als ik de spanning meet op de 'step' ingang van mijn module de motor wel ineens begint te draaien????? (Wel niet correct, maar toch al draaien). Nu heb ik de 22V voeding voorzien van 680µF+100nF en de 5v van de arduino voorzien van 100nF. Echter werkt het nog steeds niet. enkel als ik mijn multimeter aan de 'step' ingang hou (andere kant hangt aan ground (meter staat op 200VDC)) begint de motor volop te draaien.

Iemand een idée hoe dit komt of hoe dit op te lossen valt?

alvast bedankt

Shiptronic

Overleden

Waarschijnlijk heb je ergens een Pull-up of Pull-down nodig, je dat dat nu met je multi meter. Soms in dit ook in te stellen in de software.

zitten er ook nog enable ingangen op?

Wie de vraag stelt, zal met het antwoord moeten leren leven.

ja enable ingang zit erop. Deze is laag.(laag is werkend :) )
Ik zal eens testen met een pull-up of pull-down.

[Bericht gewijzigd door Jeffreyy op dinsdag 6 september 2016 16:40:54 (29%)

Lambiek

Special Member

Heb je de GND van je Arduino en de GND van je A4988 wel aan elkaar zitten?

Als je haar maar goed zit, GROETEN LAMBIEK.

yep deze zijn op het stuurchipje al doorverbonden. Heb nog eens een apart draadje gelegd maar dit is geen oplossing. Toch denk ik dat het ook iets in die aard van ergens pullup/pulldown/condensator/ground is :( ... vermits het niet altijd werkt als ik mijn multimeter er tegenaan hou.

Lambiek

Special Member

Zelf gebruik ik de DRV8825, die is vergelijkbaar met die van jou.
De ENABLE moet hoog zijn, MS1, MS2, en MS3 heb ik via 10K pull-down aan de GND liggen en die kan ik dan via een dip switch (die aan de plus 5VDC zit) instellen. SLEEP moet hoog zijn. De PINNEN STEP en DIR liggen via 10K pull down aan de GND, en worden door de controller bestuurd.

Misschien kun je dit controleren bij jou, alleen moet een hoog signaal bij jou 3.3VDC zijn. Ik werk met een andere controller op 5VDC.

De instelling voor de microstappen is:
MS1 = 0, MS2 = 0, MS3 = 0 is hele stappen.
MS1 = 1, MS2 = 0, MS3 = 0 is halve stappen.
MS1 = 0, MS2 = 1, MS3 = 0 is 1/4 stap.
MS1 = 1, MS2 = 1, MS3 = 0 is 1/8 stap.
MS1 = 1, MS2 = 1, MS3 = 1 is 1/16 stap.

Maar dit hoort ook allemaal in de bijbehorende datasheet te staan.

Als je haar maar goed zit, GROETEN LAMBIEK.

Hallo Lambiek,

moet de enable niet laag zijn om de chip te doen werken? Hieronder zie je mijn spanningen:

ENABLE LAAG
SLEEP HOOG
RESET HOOG
MS1,2,3 HOOG (maar kan ik via jumpers laag zetten, dit maakt geen verschil.)

edit: ook met de pull-down's op de DIR en STEP werkt het niet.

Ik heb inderdaag MS1=MS2=MS3=5V, dit omdat het arduino programmatje ook met 1/16de stap werkte. Ook als ik de jumpers verwijder zijn deze 0V maar blijft de motor trillen

[Bericht gewijzigd door Jeffreyy op dinsdag 6 september 2016 17:42:42 (33%)

Lambiek

Special Member

Op 6 september 2016 17:34:30 schreef Jeffreyy:
moet de enable niet laag zijn om de chip te doen werken?

Ik stuur de Enable ook aan via de controller, dus dat kan ik mis hebben.

Ik twijfel er alleen nog aan of je signaal op je STEP en DIR wel goed is, de rest moet goed zijn.

Zet eens een 10K weerstand van je STEP en DIR PIN naar de GND, en kijk dan nog eens.

Als je haar maar goed zit, GROETEN LAMBIEK.

Dit had ik hierboven nog geedit, als ik op STEP en DIR een pullup of pulldown zet draait de motor nog steeds niet, raak ik het draadje van de weerstand aan, draait of stottert de motor wel (soms).

Lambiek

Special Member

En je weet zeker dat je een goede massa hebt?

Ik weet het zo ook niet van deze afstand, waar woon je precies?

Als je haar maar goed zit, GROETEN LAMBIEK.

limburg belgie, zal alle massa's nog eens goed nalopen

Lambiek

Special Member

Op 6 september 2016 17:58:07 schreef Jeffreyy:
limburg belgie,

Dat is me iets te ver weg helaas. :) Maar misschien zit er iemand bij jou in de buurt die even kan of wil kijken.

EDIT:

Je hebt je motor aan het draaien gehad door je driver direct aan je Arduino te hangen (dus zonder shield) en nu via je shield werkt het niet goed, dan zit daar toch ergens het probleem.

Als je haar maar goed zit, GROETEN LAMBIEK.
Shiptronic

Overleden

een paar duidelijke foto's en evt. een YouTube filmpje doen ook wonderen.

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Arduino uno even vervangen door een nano.... alles werkt :( :) GRMBL

Lambiek

Special Member

Nou, dat is mooi. :) Maar weet je nu ook waar het door komt, is de Uno stuk?, of kloppen een aantal pinnen niet?, of is het iets anders?

Als je haar maar goed zit, GROETEN LAMBIEK.

Ik ben erachter gekomen door de drivers weer apart aan te sturen. Ik keek welke pin normaal de STEP zou zijn en welke de DIRECTION pin. En de motor draaide niet. Door de DIRECTION pin aan de ground te hangen deed deze nog niets. Dit alles teste ik dus met de GRBL software in de Arduino. Dus ik kreeg op de STEP pin geen pulsen volgens mij. Ik wou mijn scoop uithalen om te kijken of er pulsen waren. Maar toen toch even snel met een andere Arduino (nano) geprobeerd en de motor begon netjes te draaien.