69-L298-Schrittmotor-Library (STM32F4)

Wer einen Schrittmotor über einen L298-Treiber an den STM32F4 anschließen will, kann diese Library dazu benutzen.

Ich habe das L298-Treiber-Modul und den Schrittmotor von “Joerg” zur Verfügung gestellt bekommen….Danke nochmal dafür.

Der L298N kann entweder einen 6pol Unipolaren oder einen 4pol Bipolaren Schrittmotor ansteuern (5pol Unipolare funktionieren nicht !!).

Beim Init der Library kann angegeben werden in welchem Mode der Schrittmotor betrieben werden soll (HalfStep, FullStep, WaveStep)

Die CPU simuliert einen L297 und wird über 6 Leitungen mit dem L298 verbunden.

Hinweis: im FullStep-Mode werden die beiden Leitungen “ENA” und “ENB” eigentlich nicht benötigt und könnten am L298 fix auf Vcc gelegt werden. So könnte man zwei Pins an der CPU einsparen wenn man nur diesen Mode benutzt.

Ich habe die Library so einfach wie möglich gehalten und auf eine Beschleunigungs- und Abbrems-Rampe verzichtet.

Im H-File muss für alle 3 Modis das kleinste Delay (in us) von einem Schritt zum nächsten eingestellt werden (das ist Motorabhängig). Der Wert muss durch ausprobieren rausgefunden werden und zwar so das der Motor keine Schritte verschluckt oder überspringt.

Alle Geschwindigkeitsangaben in den Funktionen beziehen sich dann auf dieses kleinste Delay.

Es gibt zwei Funktionen um den Schrittmotor eine einstellbare Anzahl von Schritten nach links oder rechts laufen zu lassen. (Wenn Anzahl = 0, dann läuft der Schrittmotor permanent)

Mit einer Funktion kann getestet werden ob der Motor noch läuft (um zu testen ob er seine Zielposition erreicht hat) und mit einer anderen kann er gestoppt werden.

Mit der Funktion “UB_L298_StepTo” kann eine bestimmte Position angefahren werden. Der Motor dreht dann solange nach rechts oder links, bis die Position erreicht ist.

Es gibt auch eine Pausen-Funktion (in us) die man benutzen kann.

Bilder :

im Beispiel hängt der L298 an Port-E :

1
2
3
4
5
6
PE4  ->  L298_IN1 (Pin5)
PE5  ->  L298_IN2 (Pin7)
PE6  ->  L298_IN3 (Pin10)
PE7  ->  L298_IN4 (Pin12)
PE8  ->  L298_ENA (Pin6)
PE9  ->  L298_ENB (Pin11)

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, TIM, MISC
Benutzte Librarys : keine

Enumerationen :

1
2
3
4
5
typedef enum {
  L298_HALF_STEP = 0,  // Halb-Schritt-Mode
  L298_FULL_STEP,      // Voll-Schritt-Mode
  L298_WAVE_STEP       // Wave-Mode
}L298_Mode_t;

Funktionen :

1
2
3
4
5
6
7
8
void UB_L298_Init(L298_Mode_t mode);                  // zum init vom L298
void UB_L298_StepRight(uint32_t speed, uint32_t cnt); // rechts drehen
void UB_L298_StepLeft(uint32_t speed, uint32_t cnt);  // links drehen
void UB_L298_StepTo(uint32_t speed, uint32_t pos);    // eine position anfahren
void UB_L298_Stop(void);                              // motor anhalten
bool UB_L298_StopCheck(void);                         // test ob motor steht
void UB_L298_SetZeroPos(void);                        // null-position setzen
void UB_L298_Pause_us(uint32_t cnt);                  // pausenfunktion

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.12.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der L298-Stepper-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_l298_stepper.h"
 
int main(void)
{
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // init vom L298 im FullStep-Mode
  UB_L298_Init(L298_FULL_STEP);
 
  while(1)
  {
    // 1sec warten
    UB_L298_Pause_us(1000000);
    // Schrittmotor 30 Schritte nach rechts
    // mit 80% Speed
    UB_L298_StepRight(80,30);
    // 1sec warten
    UB_L298_Pause_us(1000000);
    // Schrittmotor 30 Schritte nach links
    // mit 35% Speed
    UB_L298_StepLeft(35,30);
  }
}

Hier die Library zum Download :

ub_stm32f4_l298_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_69_L298_Stepper

STM32F407 Demo 69 L298 2 Stepper

STM32F407 Demo Projekt um zwei L298 Schrittmotoren gleichzeitig anzubinden.

Hier der komplette CooCox-Projektordner zum Download.

Ungetestet, bitte Feedback geben ob alles funktioniert.


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 Bewertungen, Durchschnitt: 5,00 von 5)
Loading...

7 Kommentare zu 69-L298-Schrittmotor-Library (STM32F4)

  1. Pascale sagt:

    Hallo,

    ist es auch möglich mit zwei Treibern gleichzeitig zu arbeiten mit der Libary ? Und wenn ja wie ?

    Gruß Pascale

    • admin_mb sagt:

      Hallo Pascale,

      wie du aus dem Schaltplan entnehmen kannst, werden die 6 freien Pins PE4 bis PE9 des STM32F4-Discovery-Board verwendet, um den L298-Treiber zu steuern.

      Wenn du zusätzlich einen zweiten L298-Treiber verwenden willst, dann könnte diese an den freien Pins PE10 bis PE15 verschaltet werden.
      Allerdings sind die Library Funktionen nicht darauf ausgelegt mit zwei L298-Treibern zu arbeiten.

      Deshalb würde ich wie folgt vorgehen:
      1.) Kopiere die stm32_ub_l298_stepper.h Datei zur stm32_ub_l298_2_stepper.h
      2.) Bearbeite die Datei zur stm32_ub_l298_2_stepper.h:
      2.1) Suche alle stm32_ub_l298_stepper.h und ersetze stm32_ub_l298_2_stepper.h (1 Treffer)
      2.2) Suche alle (großgeschriebene) L298 und ersetze L298_2 (60 Treffer)
      2.3) Definiere die neuen Port-Pins PE10 bis PE15(Zeile 59 bis 81)
      2.4) Verwende bei der Timer Definition dem Timer TIM3 (Zeile 90 bis 95)
      3.) Kopiere die stm32_ub_l298_stepper.c Datei zur stm32_ub_l298_2_stepper.c
      4.) Bearbeite die Datei zur stm32_ub_l298_2_stepper.c:
      4.1) Suche alle stm32_ub_l298_stepper.c und ersetze stm32_ub_l298_2_stepper.c (1 Treffer)
      4.2) Suche alle stm32_ub_l298_stepper.h und ersetze stm32_ub_l298_2_stepper.h (1 Treffer)
      4.3) Suche alle (großgeschriebene) L298 und ersetze L298_2 (286 Treffer)
      5.) Binde beide Dateien in deinem Projekt ein.
      6.) Includiere in deinem Main.c die neue header Datei: #include „stm32_ub_l298_2_stepper.h“)
      7.) Rufe in deinem Main.c zusätzlich die Init Funktion auf: UB_L298_2_Init(L298_2_FULL_STEP);
      8.) Rufe in deinem Main.c zusätzlich die neuen Funktionen auf: UB_L298_2_StepRight(80,30);

      Ist zwar nicht die eleganteste Methode da einige Defines und Strukturen eigentlich nicht kopiert werden müssten, aber es sollte funktionieren.
      Viel Erfolg

      • Pascale sagt:

        Sehr geehrter Herr Becker,

        erst einmal vielen lieben Dank für das tolle Kommentar über die Anleitung der zweiten Libary für die Schrittmotoren. Allerdings klappt bei mir noch nicht die Interupt Funktion. Er meckert immer in der HAL_Datei. Die Funktion „TIM_GetITStatus“ findet er leider gar nicht, deshalb versuch ich gerade ein wenig mit der HAL rum zu spielen. Als Fehler in der stm32f4xx_hal_time.h gibt er mir immer folgendes aus: ‚TIM_TypeDef {aka struct }‘ has no member named ‚Instance‘. Über ihrer Hilfe würde ich mich sehr freuen.

        Danach probier ich das mit dem zweiten Schrittmotor aus, sobald der erste läuft 🙂

        Mit freundlichen Grüßen

        Pascale

  2. Pascale sagt:

    Sehr geehrter Herr Becker,

    erst einmal vielen lieben Dank für das tolle Kommentar über die Anleitung der zweiten Libary für die Schrittmotoren. Allerdings klappt bei mir noch nicht die Interupt Funktion. Er meckert immer in der HAL_Datei. Die Funktion „TIM_GetITStatus“ findet er leider gar nicht, deshalb versuch ich gerade ein wenig mit der HAL rum zu spielen. Als Fehler in der stm32f4xx_hal_time.h gibt er mir immer folgendes aus: ‚TIM_TypeDef {aka struct }‘ has no member named ‚Instance‘. Über ihrer Hilfe würde ich mich sehr freuen.

    Danach probier ich das mit dem zweiten Schrittmotor aus, sobald der erste läuft 🙂

    Mit freundlichen Grüßen

    Pascale

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.