/** @mainpage StepperController * * @section sec1 Einleitung * Aufgabe der SetepperController-Klasse ist es, alle relevanten Daten in einer Klasse zu buendeln. * * @section sec2 Subsysteme * @subsection sec2_1 Motorsteuerung * @subsection sec2_2 Ablaufsteuerung * * @link @endlink */ /** Klasse beinhaltet alle Zustandsbezogenen Informationen eines Schrittmotors * * @author Felix Schuler, Mathias Burkart * @date 27.10.2016 * * @version 0.3 * Mit BLE-Code verheiratet * * @version 0.2 * Toten Code entfernt. * * @version 0.1 * Kommentare hinzugefuegt (Doxygen). */ #ifndef STEPPERCONTROLLER_H_ #define STEPPERCONTROLLER_H_ #include // Arduino/Genuino SystemLibary zur ansteuerung eines Schrittmotors. Ben�tigte memberfunktionen: steps(int) & setSpeed(int) class StepperController { public: void ss() { schrittmotor.setSpeed(30); } /** Konstruktor * @param[in] _endschalterNeg Zustand des Endschalters in negative Richtung * @param[in] _endschalterPos Zustand des Endschalters in positive Richtung * @warning Achtung: Es MUSS der Zustand der EndschalterPin �bergeben werden: ein Aufruf mit true, true ist M�glich kann aber Schaden f�r Mensch und Maschine zur Folge haben!!! */ StepperController(const bool _endschalterNeg, const bool _endschalterPos); /** Sperrt eine Bewegungs-Richtung. * Sperrung der Bewegungsrichtung wird durch setzen der entsprechenden Boolschen Variable realisiert * @param[in] _direction Bewegungs-Richtung die gesperrt werden soll. * @li 0 (default) - Sperrt beide Richtungen * @li 1 - Sperrt negative Richtung * @li 2 - Sperrt positive Richtung * @warning Achtung: Vor inbetriebname unbedingt pruefen ob Endschalter richtig montiert sind! * @see enableDirection( unsigned int _direction = 0) * @todo Implementieren */ void disableDirection(const unsigned int _direction = 0); /** Entsperrt eine Bewegungs-Richtung. * Freigabe der Bewegungsrichtung wird durch setzen der entsprechenden Boolschen Variable realisiert * @param[in] _direction Bewegungs-Richtung die freigegeben werden soll. * @li 0 (default) - Sperrt beie Richtungen * @li 1 - Sperrt negative Richtung * @li 2 - Sperrt positive Richtung * @warning Achtung: Vor inbetriebname unbedingt pruefen ob Endschalter richtig montiert sind! * @see disableDirection( unsigned int _direction = 0) * @todo Implementieren */ void enableDirection(const unsigned int _direction = 0); /** Legt die Bewegungsgeschwindigkeit fest. * @param[in] _speed Verfahrgeschwindigkeit, Nur Positiv, Angabe in mm/s * @see disableDirection( unsigned int _direction = 0) * @todo Implementieren */ void setSpeed(const float _speed); /** Gibt den Befehl eine bestimmte Strecke zu verfahren. * Der Befehl selbst loest KEINE Bewegung aus! Er definiert nur eine Aufgabe * @param[in] _distance Weg der gefahren werden soll. Vorzeichen gibt Richtung an. Angabe in mm * @see update() * @todo Implementieren */ void turnTask(const float _distance); /** Gibt den Befehl mit sofortiger Wirkung stehen zu bleiben. * @todo Implementieren */ void stop(); /** Sperrt/entsperrt saemtliche Aktionen ueber Bluetooth, sollte verwendet werden wenn BLE-Central Device conected/disconnected * Der Befehl, l�scht alle aktuellen Aufgaben und blockiert die update-Funktion * @param[in] _status Gibt an ob Befehle bearbeitet werden sollen oder nicht * @see update() */ void generalEnable(const bool _status); /** Sendet, falls noetig, Befehle an den Schrittmotor * Der Befehl prueft ob ein Verfahr-Auftrag vorliegt und ob die Bewegungsrichtung freigegeben ist. * @see void turnTask(signed int _distance) * @todo Implementieren */ void update(); void turnSteps(signed int _steps); // <-------------------------------------------------------------------priv private: bool axisEnable_Pos; //* Erlaubt verfahren in positive Richtung bool axisEnable_Neg; //* Erlaubt verfahren in positive Richtung bool generalEnableBit; //* Ermoeglicht sperren aller (aktiven) Aktionen des Schrittmotors float distPerStep; //* Zurueckgelegte Strecke in pro Schritt (in mm) unsigned int stepsPerRevolution; //* Schritte pro Umdrehung (Eigenschaft des Schrittmotor) float degPerStep; //* Winkeldrehung pro Schritt (in Grad) signed int remainingSteps; //* Anzahl an Schritten die noch abgearbeitet werden muessen unsigned int speed; //* Geschwindigkeit in RPM unsigned int maxSpeed; //* Maximale Geschwindigkeit: wird der setSpeed()-Fkt. ein zu gro�er Wert �bergeben wird er auf maxSpeed gesetzt (in RPM) signed int stepsPerUpdate; //* Anzahl an Schritten die maximal am Stueck ausgeführt werden sollen unsigned long step_delay; //* Zeit die gewartet werden soll bis der nächste verfahr-Befehl ausgeführt wird unsigned long last_step_time; //* zeit zu der das letzte mak eine bewegung ausgeführt wurde unsigned int limitSwitchStepCounter; //* Schrittzähler nachdem ein Endschalter angefahren wurde unsigned int limitSwitchStepCounter_max; //* Anzahl von Schritten die zurückgelegt werden müssen bis Endschalter nichtmehr betätigt ist Stepper schrittmotor; const int enablePin1; const int enablePin2; }; #endif /* STEPPERCONTROLLER_H_ */