Hitta stegmotors nollpunkt med en switch

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Tjenare!
Jag håller på med ett projekt där jag ska ha en stegmotor som driver en "vagn" på en räls (likt en cnc) med Arduino. Nu har jag kommit till de steget där jag vill att vagnen ska gå till ett läge där den aktiverar en switch eller knapp innan den börjar utföra de ursprungliga koden. Alltså att den ska gå till sin nollpunkt.

Detta är koden jag jobbar med:

Kod: Markera allt

#include <AccelStepper.h>


AccelStepper stepper(1, 49, 47);

int switchPin = 33;

boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;

void setup()
{
  pinMode(switchPin, INPUT);
  
  stepper.setMaxSpeed(200.0);
    stepper.setAcceleration(100.0);
}

boolean debounce(boolean last)
{
  boolean current = digitalRead(switchPin);
  if (last != current)
  {
    delay(5);
    current = digitalRead(switchPin);
  }
  return current;
}

void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    delay(1000);
    stepper.runToNewPosition(0);
    stepper.runToNewPosition(500);
    stepper.runToNewPosition(100);
    stepper.runToNewPosition(120);
  }
  


}

 
Problemet jag har är att jag inte vet hur jag ska programera den så att stegmotorn tar ett steg "bakåt" hela tiden tills kanppen trycks.
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Helgesson »

http://www.open.com.au/mikem/arduino/Ac ... index.html

http://www.open.com.au/mikem/arduino/Ac ... ource.html

Arduino är inte riktigt min grej men efter att ha kollat lite på länkarna ovan så borde nedanstående kod kanske ge en liten fingervisning i rätt riktning?

Kod: Markera allt

#include <AccelStepper.h>
   stepper.setMaxSpeed(200);
 
//Startar nollning
   stepper.setSpeed(-50);
      while(limitswitch==0){ //medans limitswitchen ligger låg, dvs ej aktiverad
         stepper.runSpeed(); //så Uppdaterar vi runSpeed() som behöver uppdateras 
      }                      //så ofta som möjligt då det är den som genererar stegen.

   stepper.setSpeed(0);
   stepper.setCurrentPosition(0); //sätter nuvarande position som nolla.

//Nollad/Hemma


Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Tack så mycket, men får tyvärr inte ihop de :doh:
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Helgesson »

1.Vad får du inte ihop?

2.Vad funkar och vad funkar inte?

3.Har du fått motorn att röra sig?

4.Funkar positioneringen på motorern?
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Motorn fungerar och jag har fått den att röra sig till önskade destinationer i följd.

Det är mina kunskaper inom programmering som ställer till det. Jag vet inte vart jag ska skriva t.ex.

Kod: Markera allt

 stepper.setSpeed(-50);
      while(limitswitch==0){ //medans limitswitchen ligger låg, dvs ej aktiverad
         stepper.runSpeed(); //så Uppdaterar vi runSpeed() som behöver uppdateras 
      }                      //så ofta som möjligt då det är den som genererar stegen.

   stepper.setSpeed(0);
   stepper.setCurrentPosition(0); //sätter nuvarande position som nolla. 


Alltså jag har ingen aning om hur jag ska bemöta problemet. Men motorn är funktionell.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Icecap »

Det är bara att tänka till lite...

När programmet startar ska det:
1: Initiera portar och pinnar och allt sånt.
2: Nolla stegmotorn.
3: Köra programmet vidare, den delen man brukar kalla "main loop"

Sedan är det ett problem med den kodsnudd du har fått! Om stegmotorn redan är på noll är det inte till att svara på om den är över noll eller inte så rent teknisk ska det finnas en punkt 2A som kollar om nollpunkten är påverkat, är den det ska stegmotorn köra framåt till den släpper och sedan ska steg 2B köra den tillbaka till det passar.
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Min tanke var att en knapp ska finnas på sidan utav rälsen så när motorn är i position 0 så är knappen intryckt. Borde inte det fungera istället för 2A och 2B?
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Helgesson »

Icecap:
Jo självklart finns det rum för förbättring och ökad säkerhet, var bara ett litet exempel.
menar du inte

Kod: Markera allt

Main()
{
     Initiera portar o sånt;
     Nollar motor;
          Loopar{
              Pollar knappen och uppdaterar positionen för stegmotorn
          }
}
Avsaknaden av main() är ju som sagt lite problematiskt, ser heller inte nånstanns där setup() anropas så den koden som står i den funktionen har jag svårt att förstå hur den kan göra nån nytta.

Vad har du för krav på nogranhet på nollningen?
Att nolla rakt mot en knapp brukar inte vara nån höjdare, bättre med en microswitch med en arm på så att brytaren inte går sönder om vagnen inte hinner stanna direkt. Ungefär som bilden http://www.micro-machine-shop.com/Taig_ ... imit_5.jpg
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Jag är tacksam för alla tips! :)
Och det är en sådan switch jag ska använda, just nu har ja motorn på bordet och försöker bara få ihop de med prgrammeringen.

Kod: Markera allt

#include <AccelStepper.h>
   int limitswitch = 33;
   AccelStepper stepper(1, 49, 47);
   boolean lastButton = LOW;
boolean currentButton = LOW;


//Startar nollning
void setup()
{
  stepper.setMaxSpeed(390);
  stepper.setAcceleration(200);
  pinMode(limitswitch, INPUT);
  
   stepper.setSpeed(-50);
      while(lastButton == LOW && currentButton == LOW){ //medans limitswitchen ligger låg, dvs ej aktiverad
         stepper.runSpeed(); //så Uppdaterar vi runSpeed() som behöver uppdateras 
      }                      //så ofta som möjligt då det är den som genererar stegen.

   stepper.setSpeed(0);
   stepper.setCurrentPosition(0); //sätter nuvarande position som nolla.
}
   boolean debounce(boolean last)
{
  boolean current = digitalRead(limitswitch);
  if (last != current)
  {
    delay(5);
    current = digitalRead(limitswitch);
  }
  return current;
}

void loop() 
{
  
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    delay (1000);
   
    stepper.runToNewPosition(0);
    stepper.runToNewPosition(500);
    stepper.runToNewPosition(100);
    stepper.runToNewPosition(120);
    stepper.run();
  }
 

}

//Nollad/Hemm
Denna har jag provat nu, och jag har fått den att vandra mot "bakåt", men det händer inget när jag trycker på knappen..
Användarvisningsbild
Helgesson
Inlägg: 298
Blev medlem: 19 november 2008, 22:51:11
Ort: Linköping

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Helgesson »

Vad är "lastbutton" och "currentbutton"?
Pröva att enbart använda en knapp till en början och se om det funkar. Hur har du kopplat knappen?
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Om jag bara kör på att läsa knappen (HIGH och LOW) så händer ingenting. lastbutton och currentbutton är för att läsa av när knappen blir tryckt, så att inte knappen behöver vara intryckt.
Den är kopplad som vanligt tror jag. Ena "benet" till + och de andra till minus och pin 33.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Icecap »

Och pull-down motståndets värde?
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

10 k
TobiasEinarsson
Inlägg: 58
Blev medlem: 6 september 2012, 11:15:33
Ort: Göteborg

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av TobiasEinarsson »

Du läser aldrig av knappen i setup(). Du kollar bara om variablerna lastButton och currentButton är LOW, vilket de alltid kommer att vara (de ändras först i loop()).

Se först och främst till att du kan läsa av knappens värde ordentligt innan du börjar med debounce-kod och liknande. Jag tror nog inte att debounce ska behövas alls i det här fallet när jag tänker efter, det är nog snarare en nackdel att köra med det (motorn kommer att köra minst 5 millisekunder "för långt").
Karlsson25
Inlägg: 22
Blev medlem: 10 september 2012, 12:50:50

Re: Hitta stegmotors nollpunkt med en switch

Inlägg av Karlsson25 »

Det förklara en del, men som nybörjare inom programmering så är de fortfarande lite oklart, du skulle inte kunna skriva ett enkelt exempel på hur du menar?
Skriv svar