INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Oszillation eines Steppermotors
20.02.2016, 10:59
Beitrag #1
Oszillation eines Steppermotors
Hallo zusammen,
bin nun erstmals im Bereich Schrittmotor unterwegs und könnte noch einige Anregungen vertragen:
Ein NEMA23 Schrittmotor soll so angesteuert werden, dass er immer innerhalb eines bestimmten Winkels oszilliert (Beginn und Ende des Winkels ist erst mal egal). Mit einem Drehgeber soll der Oszillationswinkel verstellt werden - mit einem zweiten Drehgeber die Frequenz der Oszillation.
Über jeden noch so kleinen Tipp freue ich mich.
VD
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2016, 10:56
Beitrag #2
RE: Oszillation eines Steppermotors
Darf ich meinen threat mal anstupsen, ohne dafür gesperrt zu werden?

Also ich bin ja schon ein wenig weiter und habe mit folgendem Code den Stepper ans Laufen gebracht:
PHP-Code:
#include <AccelStepper.h>

AccelStepper stepper(198);
int pos 100//100 Steps gehen, danach Richtungswechsel
void setup()

  
stepper.setMaxSpeed(1000); 
  
stepper.setAcceleration(1000);
}

void loop()
{
  if (
stepper.distanceToGo() == 0)
  {
    
delay(10);
    
pos = -pos;
    
stepper.moveTo(pos);
  }
  
stepper.run();

Mit der Veränderung der Werte pos und MaxSpeed bzw. Acceleration kann ich die Bewegung des Schrittmotors nach Bedarf ändern. Jetzt besteht meine Aufgabe darin, mit zwei Drehgeber diese Änderungen herbeizuführen.
1.) die Drehfrequenz (stepper.setMaxSpeed, Wert von 0 bis 1000 ) und
2.) den Drehwinkel (pos, Wert zwischen 3 und 100).
Also einen Drehgeber habe ich schon mal einbinden können, sodass ich auf dem Serial Monitor die Werte angezeigt bekomme. Aber eine Wirkung auf den Motor bekomme ich nicht hin.
PHP-Code:
#include <Encoder.h>
#include <AccelStepper.h>
Encoder myEnc (5,6);
AccelStepper stepper(198);

int oszi// Oszillationsfrequenz

void setup()  { 
  
Serial.begin(9600);
  
Serial.println("Wert Oszillationsfrequenz:");

 
stepper.setMaxSpeed(500); //Oszillationsfreuenz
 
stepper.setAcceleration(500);
}
long oldPosition  = -999;

void loop()
{
    if (
stepper.distanceToGo() == 0)
  {
     
oszi = -oszi;
    
stepper.moveTo(oszi);
  }

   
long newPosition myEnc.read();
   if (
newPosition != oldPosition) {
    
oldPosition newPosition;
    
Serial.println(newPosition);
}
  
stepper.run();
  } 


Könnt ihr mir weiterhelfen? Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2016, 17:31
Beitrag #3
RE: Oszillation eines Steppermotors
Ach klar kann man da helfen Smile

Wo siehst Du denn im Programm eine Verbindung zwischen erfasstem Encoder und der Ansteuerung des Steppers?

Wink

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2016, 18:28
Beitrag #4
RE: Oszillation eines Steppermotors
(02.03.2016 17:31)Binatone schrieb:  Ach klar kann man da helfen Smile

Wo siehst Du denn im Programm eine Verbindung zwischen erfasstem Encoder und der Ansteuerung des Steppers?

Wink

Binatone

Tja das mit der Einbindung ist ja mein Problem...ich kriegs nicht hin!
Oszi und speed müssen ja wohl zu Variablen (globale Variable?) erklärt werden. (mit "int oszi" habe ich das hoffentlich richtig gemacht).
Die Drehgeberwerte sind dann die Variablenwerte und müssen quasi anstelle der jetzt fixen Werte eingesetzt werden -->sowas wie oszi = myEnc oder?
Also von der Theorie her weiß ich ungefähr wie es gehen soll, aber mit der Sprache happert doch gewaltig. (Also wir 50+-er haben es da schon schwer.)
Und auch die Begrenzung der Werte kriege ich nicht gebacken - also so was wie
if (Drehgeberwert >30 [Drehgeberwert=30]Wink ???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.03.2016, 15:49
Beitrag #5
RE: Oszillation eines Steppermotors
So, da ich bislang nicht wirklich Hilfe bekommen habe, ging die ganze Nacht drauf, um folgenden Sketch zu basteln und der läuft Rolleyes - Allerdings doch nicht so ganz nach meinen Vorstellungen. Zu meinem Glück fehlt nur noch, dass die Drehgeber (die Werte werden im seriellen monitor auch angezeigt) anstelle der fixen Werte übernommen werden.
Der Schrittmotor dreht gemäß der Eingabe int pos = 20 --> 20 Schritte bis zur Umkehr und stepper maxSpeed ist bislang 500. An die "pos"-Stelle soll nun der Wert des Drehgebers "Hub" mit den Wertegrenzen 3 .... 100 eingelesen werden; Der Stepper Speed -Wert soll vom Drehgeber "Oszi" (0....1000) übernommen werden.
Eigentlich sollte es doch ein einfaches sein, statt der fixen Werte die Drehgeberwerte einzutragen - aber ich kriegs nicht hin.

PHP-Code:
#include <Encoder.h>
#include <AccelStepper.h>
Encoder Oszi (56);
Encoder Hub (1011);
AccelStepper stepper(198);

int pos 20//Anzahl Schritte bis Richtungsumkehr

void setup()  { 
  
Serial.begin(9600);
 
 
stepper.setMaxSpeed(500); //Oszillationsfreuenz
 
stepper.setAcceleration(500);
}
long oldOszi  = -999;
long oldHub = -999;
void loop()
{
       if (
stepper.distanceToGo() == 0)
  {
     
pos = -pos;
    
stepper.moveTo(pos);
  }
 
// ab hier Darstellung im serial monitor
   
long newOszi Oszi.read();
   
long newHub Hub.read();
   if (
newOszi != oldOszi
     {
      
oldOszi newOszi;
      
Serial.print("oszi");
      
Serial.println(newOszi);  
      }
        if (
newHub != oldHub
        {
        
oldHub newHub;
        
Serial.print("hub");
        
Serial.println(newHub);
        }
  
  
stepper.run();

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.03.2016, 00:01 (Dieser Beitrag wurde zuletzt bearbeitet: 04.03.2016 00:02 von Binatone.)
Beitrag #6
RE: Oszillation eines Steppermotors
Also sag mal...

Die Funktion
Code:
stepper.moveTo(pos);
erhält mit pos einen Integer Wert, und dann fährt der Motor zur Position pos, fertig.

Mit
Code:
long newOszi = Oszi.read();
erhält die Variable newOszi den neuen Integer Wert
und mit
Code:
long newHub = Hub.read();
erhält newHub den neuen Integer-Wert.

Sind die Werte in den Variablen geladen (Das bitte mit Serial.println() überprüfen), brauchst Du doch nur noch die Werte in die Stepper-Funktion schreiben.

Jetzt kenn ich natürlich nicht die IST Werte von Hub
Die muss man dann umrechnen, und dann in die Funktion damit.

würde ungefähr so aussehen:
Code:
pos=newHub;
//oder
pos=newHub/10;

Dann muss natürlich noch mit
Code:
stepper.moveTo(pos);
Der Wert eingetragen werden.

ebenso die andere Geschichte mit Oszi zu Stepper.MaxSpeed()
Hast es jetzt ?

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2016, 16:17
Beitrag #7
RE: Oszillation eines Steppermotors
Oh mann...warum kriege ich es nicht hin trotz der Hinweise von Binatone?
Hab das Ganze noch mal auf das Mindeste und auf nur eine Funktion reduziert. Also, mit folgendem Sketch klappt das Oszillieren des Schrittmotors zwischen Position 30 und -30 --> int pos = 30:
PHP-Code:
#include <Encoder.h>
#include <AccelStepper.h>
Encoder Oszi (56);
//Encoder Hub (10, 11);
AccelStepper stepper(198);

int pos 30//Anzahl Schritte bis Richtungsumkehr

void setup()  
  { 
   
Serial.begin(9600);
   
stepper.setMaxSpeed(200); //Oszillationsfreuenz
   
stepper.setAcceleration(200);
  }
int oldOszi  = -999;

void loop()
{
      
stepper.moveTo(pos);
       if (
stepper.distanceToGo() == 0)
  {
     
pos = -pos;
  }
  
  
stepper.run();


Wenn ich nun versuche, statt des fixen Wertes den Drehgeberwert "Oszi" zu verwenden, geht das Oszillieren nicht mehr. Der Stepper folgt nur einmalig dem Drehgeberwert.

PHP-Code:
#include <Encoder.h>
#include <AccelStepper.h>
Encoder Oszi (56);
//Encoder Hub (10, 11);
AccelStepper stepper(198);
int pos ;   

void setup()  
  { 
    
Serial.begin(9600);
    
stepper.setMaxSpeed(200); //Oszillationsfreuenz
    
stepper.setAcceleration(200);
   }
int oldOszi  = -999;  
  
void loop()
{
       
stepper.moveTo(pos); 
  if (
stepper.distanceToGo() == 0// Soll die Oszillation bewirken
    
{
     
pos = -pos;
    } 
      
int newOszi=Oszi.read();
      
pos=newOszi;
      
Serial.println(newOszi);
      
     
stepper.run();


Das kann doch nur eine Kleinigkeit sein, find aber den Sch...fehler nicht. Was mache ich falsch?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2016, 18:56
Beitrag #8
RE: Oszillation eines Steppermotors
Pos wird an 2 Stellen im Programm beeinflusst

1 Mal, wenn der Stepper am Ziel ist
Code:
if (stepper.distanceToGo() == 0)
  {
     pos = -pos;
  }

2. Mal, wenn der Geberwert erfasst wird.
Code:
int newOszi=Oszi.read();
      pos=newOszi;
      Serial.println(newOszi);

Versuche mal, den Pos wert nur zu verändern, wenn sich Oszi geändert hat.
Code:
int newOszi = Oszi.read();
if(newOszi<>oldOszi)
{
oldOszi=newOszi;
pos=newOszi;

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Frage zur Programmierung eines Ultraschallsensors jalu4601 10 348 21.09.2016 15:06
Letzter Beitrag: Bitklopfer
  Ansteuern eines Schrittmotors Uwe1475 28 1.013 03.09.2016 21:03
Letzter Beitrag: Uwe1475
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 751 16.07.2016 11:43
Letzter Beitrag: Binatone
  Zerlegung eines Programmcodes hello_world 5 531 30.04.2016 11:01
Letzter Beitrag: rkuehle
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 572 06.03.2016 14:44
Letzter Beitrag: hotsystems
Bug Mit zwei Ultraschallsensoren die Drehbewegung eines Servos steuern Poet 5 558 21.02.2016 18:37
Letzter Beitrag: Carlo
  Suche Konzept für ein Inhaltsverzeichnis eines EEPROM avoid 0 311 27.01.2016 10:49
Letzter Beitrag: avoid
  Fehlermeldung beim compilieren eines RF24 Programmes. arduinofan 5 547 14.01.2016 22:52
Letzter Beitrag: ardu_arne
  Steuerung eines Remotekopfes mit Joystick, 2Stck DC Motore und Arduino max123 6 608 30.12.2015 14:56
Letzter Beitrag: max123
  Problem Wiederholung eines Case im Switch via Bluetooth Ecki1212 6 901 16.09.2015 23:06
Letzter Beitrag: Ecki1212

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste