Go Down

Topic: Arduino Uno + Easydriver + Stepper motor = Timelapse slide (Read 12 times) previous topic - next topic

Schmixebakke

Er det sådan her, du tænker på?

Code: [Select]
void setup() {               
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {         
}


Du har fat i noget, for jeg har samme torque og hastighed med denne kode.

Mystisk. Jeg har samme opsætning som på hjemmesiden, og har forsøgt med og uden Gnd, for at se om det gjorde nogen forskel.

Således:

Msquare

Selvfølgeligt skal den lille kode stump virke. Det lyder som om noget andet får stepperen at dreje, end din pin9. Hvad sker hvis du ikke laver noget (dvs loop() er tom)?

Schmixebakke

Har været lidt optaget af nogle andre projekter, så har først fået liv i det hele nu.

Den kode jeg postede her virker dog ikke mere, hvad jeg gør forkert ved jeg ikke helt.
Jeg har dog læst lidt op på de andre koder jeg har brugt og er fundet frem til at denne egentlig burde være nok:

Code: [Select]
void setup() {               
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1);         
  digitalWrite(9, LOW);
  delay(1);         
}


Hvis jeg uploader denne kode til min Arduino stepper min motor lystigt derud af, som beskrevet på siden. Når jeg så vil ændre hastigheden som beskrevet herunder, er der ingen ændringer. Samme hastighed uanset delay. Har prøvet fra 10ms til 5000 uden nogen ændring i hastigheden.

Quote
So how fast is this code going to run the stepper? Well, with the STEP signal 1ms high and 1ms low, each complete pulse will take 2ms of time. Since there are 1000ms in 1 second, then 1000/2 = 500 microsteps/second.

What if we wanted the motor to go slower? We change the delay(); lines to have longer delays. If you use delay(10); for both, the you'll move at 50 microsteps/second.

What if you wanted the motor to go faster? We can't really delay for less than 1 ms, can we? Yes, of course we can! We can change the delay() calls to delayMicroseconds(100); calls and then each delay would be 100 microseconds (or us), so the motor would be driven at 5000 microsteps/second.


Så mit spørgsmål nu er egentlig bare, hvad der gør at delay ikke virker som ønsket?

Schmixebakke

Takker for god info ;)

Selvfølgelig regnede jeg ikke med at alt arbejdet blev gjort for mig.
Jeg er ikke typen som bare kaster min computer over på en ven/familiemedlem, fordi at de lige ved hvad der skal gøres. Hvorefter de kan sidde og blive frustreret over det den næste uges tid.

Dog kan jeg ikke teste så meget lige nu, da min Easydriver muligvis er død. Ved ikke om jeg har tabt en dråbe tin forkert, men et eller andet er dødt. Nu afventer jeg lige da jeg har lidt for meget i kalenderen i øjeblikket.

Jeg vender tilbage med nyt ;)

Msquare

Du har alle delene. Dvs du har en fin for-løkke og du stepper sandsynligtvis lystigt deruda'. Sådan forstår jeg din situation lige nu.

Man fortræker i dette forum at give folk et hint, snarere end en grydeklar løsning.

Hvad sker det med din motor hvis i stedet for 200 mikros sekunder du bruger 500 millisekunder. Gør det så ikke det du vil? Mere tid?

En stepper er i sagens natur en "stepper" den vil flytte sig i ryk med det der er dens step størrelse (typisk 1,8 grader) Hvis du sætter 5V til MS1 og MS2 vil den tage mindre trin (Easydriver sætter 1/8 spænding på den ene spole og 7/8 på den anden - ergo drejer motoren til 1/8 mellem to trin). Nu skal du bare give 8 gange så mange step-pulser for at få samme drejning.

At læse en "hasighedsværdi" fra en potentiometer involvere brug af analogRead og det vil være nemt nok, men analogRead har en tends til at støje lidt, dvs du får lid forskellige værdier for hver gang selv om poten ikke bliver rørt. Så man er nødt til at gøre noget med løbende gennemsnit eller via en ektsra trykknap siger at man kun skal læse en gang.

Jeg vil foretrække at læse et tal fra Serial input. Søg her på forumet efter "nnnC" så finder du en lille kodestump jeg ofte bruger til diverse parameter-indstilling-fra-serial.  Alternativt kan du bare sige bogstav A er 1 trin i sekundet, B er 5 trin og ellers en opslags tabel hvad hver bogstav skal betyde. (Kig på switch...case i Reference sektionen)

Go Up