Forum: Mikrocontroller und Digitale Elektronik Stepper-Motor mit einem NRF52 eval-board betreiben


von Patrick T. (luckylukas90)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Für ein Projekt würde ich gerne einen Schrittmotor (Nema17) mittels 
einem NRF52 evaluation-board ansteuern. Dazu habe ich mir ein DRV8835EVM 
evaluation-board gekauft (driver für stepper und auch dc-Motoren). Den 
stepper will ich im full-step mode betreiben. D.h. 200 steps = 1 
Umdrehung des Rotors.

Mein Code sieht wie folgt aus:
1
#include <stdbool.h>
2
#include <stdint.h>
3
#include "nrf.h"
4
#include "nrf_gpiote.h"
5
#include "nrf_gpio.h"
6
#include "boards.h"
7
#include "nrf_drv_ppi.h"
8
#include "nrf_drv_timer.h"
9
#include "nrf_drv_gpiote.h"
10
#include "app_error.h"
11
#include "nrf_gpio.h"
12
#include "nrf_delay.h"
13
14
/* Eigene defines */
15
16
#define GPIO_P02  2        /* VCC            */
17
#define GPIO_P22  22      /* APhase  / AIN1 */
18
#define GPIO_P23  23      /* BPhase  / AIN2 */
19
#define GPIO_P24  24      /* AEnable / BIN1 */
20
#define GPIO_P25  25      /* BEnable / BIN2 */
21
22
/* Globale Variabeln */
23
24
static uint32_t delay = 2000;
25
26
void init_gpio(void){
27
  nrf_gpio_cfg_output(GPIO_P22);
28
  nrf_gpio_cfg_output(GPIO_P23);
29
  nrf_gpio_cfg_output(GPIO_P24);
30
  nrf_gpio_cfg_output(GPIO_P25);
31
  nrf_gpio_cfg_output(GPIO_P02);
32
  nrf_gpio_pin_write(GPIO_P02, 1);
33
}
34
35
void mode2_sequence_1(void){
36
  
37
  /* config all GPIO's */
38
  nrf_gpio_pin_write(GPIO_P22, 1);
39
  nrf_gpio_pin_write(GPIO_P23, 0);
40
  nrf_gpio_pin_write(GPIO_P24, 1);
41
  nrf_gpio_pin_write(GPIO_P25, 0);
42
  
43
  /* wait */
44
  nrf_delay_us(delay);
45
}
46
47
void mode2_sequence_3(void){
48
49
  /* config all GPIO's */
50
  nrf_gpio_pin_write(GPIO_P22, 1);
51
  nrf_gpio_pin_write(GPIO_P23, 0);
52
  nrf_gpio_pin_write(GPIO_P24, 0);
53
  nrf_gpio_pin_write(GPIO_P25, 1);
54
  
55
  /* wait */
56
  nrf_delay_us(delay);
57
}
58
59
void mode2_sequence_5(void){
60
61
  /* config all GPIO's */
62
  nrf_gpio_pin_write(GPIO_P22, 0);
63
  nrf_gpio_pin_write(GPIO_P23, 1);
64
  nrf_gpio_pin_write(GPIO_P24, 0);
65
  nrf_gpio_pin_write(GPIO_P25, 1);
66
  
67
  /* wait */
68
  nrf_delay_us(delay);
69
}
70
71
void mode2_sequence_7(void){
72
73
  /* config all GPIO's */
74
  nrf_gpio_pin_write(GPIO_P22, 0);
75
  nrf_gpio_pin_write(GPIO_P23, 1);
76
  nrf_gpio_pin_write(GPIO_P24, 1);
77
  nrf_gpio_pin_write(GPIO_P25, 0);
78
  
79
  /* wait */
80
  nrf_delay_us(delay);
81
}
82
83
void drv_set(void){
84
  mode2_sequence_1();
85
  mode2_sequence_3();
86
  mode2_sequence_5();
87
  mode2_sequence_7();
88
}
89
90
int main(void)
91
{
92
    init_gpio();
93
  
94
    while(true){
95
      drv_set();
96
    }
97
}
98
99
100
/** @} */

Mein Problem ist nun, dass ich den Motor nicht schnell drehen lassen 
kann (so ca. 2 Umdrehungen/Sekunde). Sobald ich die Drehzahl weiter 
steigern will, dann vibriert der Motor nur noch und dreht nicht mehr. 
Zudem kommt noch das Problem, dass der Motor stark vibriert.

Die Ansteuerung des DRV8835EVM sollte richtig sein (mit einem KO 
überprüft). Die Ansteuerung des steppers mittels dem DRV8835EVM sollte 
auch richtig sein (siehe Abbildung 1).

Woher kommt es, dass ich den stepper nur mit geringer Drehzahl betreiben 
kann? Woher kommt es, dass der stepper so "stark" vibriert?

Freundliche Grüsse

Patrick

: Bearbeitet durch User
von Jan (Gast)


Lesenswert?

Du beobachtest normales Verhalten. Du kannst nicht mit hoher Drehzahl 
den Motor starten. Versuche linear zu beschleunigen, dan wird es 
klappen.
Gruss,  Jan

von Wolfgang (Gast)


Lesenswert?

Guck dir mal die Application Note von Atmel zu dem 
Geschwindigkeitsrampen an.
Atmel AppNote AVR446 - Linear speed control of stepper motor 
http://www.atmel.com/images/doc8017.pdf

von Jim M. (turboj)


Lesenswert?

Patrick T. schrieb:
> Für ein Projekt würde ich gerne einen Schrittmotor (Nema17) mittels
> einem NRF52 evaluation-board ansteuern.

Hui, da würde ich mir erstmal die Dokus zu den Softdevices anschauen, 
denn eventuell zerschießen die Dir das Timing.

nrf_delay() berücksichtigt die verloren gegangene Zeit von Interrupts 
nicht,
der zählt stumpf NOP()s für volle 64 MHz.

Schau Dir im Handbuch mal die PWM Einheit an, die kann IMHO das Timing 
in Hardware erledigen.

Das nrf_gpio_cfg_output() macht nur den 4mA Treiber an. Du wolltest 
sicher den high drive anmachen (gibt leider kein kurzes Makro):
1
nrf_gpio_cfg(
2
            pin_number,
3
            NRF_GPIO_PIN_DIR_OUTPUT,
4
            NRF_GPIO_PIN_INPUT_DISCONNECT,
5
            NRF_GPIO_PIN_NOPULL,
6
            NRF_GPIO_PIN_H0H1,
7
            NRF_GPIO_PIN_NOSENSE);

Eventuell löst das schon Dein Problem bei höherer Drehzahl.

Blöderweise liegen P22-P24 im QFN48 direkt neben der Antenne, da kann 
High Drive deren Performance negativ beeinflussen. Hast Du noch andere 
Pins frei?

von Patrick (Gast)


Lesenswert?

Jan schrieb:
> Du beobachtest normales Verhalten. Du kannst nicht mit hoher Drehzahl
> den Motor starten. Versuche linear zu beschleunigen, dan wird es
> klappen.
> Gruss,  Jan

Hallo Jan, ich danke dir für die schnelle Antwort! Ich werde es morgen 
(bzw. heute) gleich mal ausprobieren.

Wolfgang schrieb:
> Guck dir mal die Application Note von Atmel zu dem
> Geschwindigkeitsrampen an.
> Atmel AppNote AVR446 - Linear speed control of stepper motor
> http://www.atmel.com/images/doc8017.pdf

siehe Jan :).

Jim M. schrieb:
> Patrick T. schrieb:
>> Für ein Projekt würde ich gerne einen Schrittmotor (Nema17) mittels
>> einem NRF52 evaluation-board ansteuern.
>
> Hui, da würde ich mir erstmal die Dokus zu den Softdevices anschauen,
> denn eventuell zerschießen die Dir das Timing.
>
> nrf_delay() berücksichtigt die verloren gegangene Zeit von Interrupts
> nicht,
> der zählt stumpf NOP()s für volle 64 MHz.
>
> Schau Dir im Handbuch mal die PWM Einheit an, die kann IMHO das Timing
> in Hardware erledigen.
>
> Das nrf_gpio_cfg_output() macht nur den 4mA Treiber an. Du wolltest
> sicher den high drive anmachen (gibt leider kein kurzes Makro):
> nrf_gpio_cfg(
>             pin_number,
>             NRF_GPIO_PIN_DIR_OUTPUT,
>             NRF_GPIO_PIN_INPUT_DISCONNECT,
>             NRF_GPIO_PIN_NOPULL,
>             NRF_GPIO_PIN_H0H1,
>             NRF_GPIO_PIN_NOSENSE);
>
> Eventuell löst das schon Dein Problem bei höherer Drehzahl.
>
> Blöderweise liegen P22-P24 im QFN48 direkt neben der Antenne, da kann
> High Drive deren Performance negativ beeinflussen. Hast Du noch andere
> Pins frei?

Hallo Jim M.
Das mit den Interrupts verstehe nicht ganz. Wozu brauche ich Interrupts? 
Mein Programm soll lediglich den stepper in CCW oder CW Richtung drehen 
lassen. Das mit der GPIO config schaue ich mir morgen (bzw. heute) noch 
an. Ich habe alle Pins noch frei (ausser einige, die das 
Evaluation-Board besetzt).

Ich danke euch allen für die hilfreichen Tipps! Ich werde diese 
schnellst möglich umsetzen und euch darüber informieren, ob diese 
geklappt haben oder nicht.

Ich wünsche euch allen einen schönen Abend.

Freundliche Grüsse

Patrick

von Jim M. (turboj)


Lesenswert?

Patrick schrieb:
> Das mit den Interrupts verstehe nicht ganz. Wozu brauche ich Interrupts?

Äh, Du nutzt einen BTLE-fähigen Chip. Da setze ich schon voraus das man 
das auch irgendwann einschaltet - denn ohne BT low Energy wären 
vergleichbare µC nur halb so teuer.

Jedes nicht völlig triviale µC Programm nutzt irgendwo Interrupts. Eine 
Schrittmotor Steuerung z.B. will ja normalerweise auch irgendwo Daten 
einlesen (UART, SPI).

von Patrick T. (luckylukas90)


Lesenswert?

Jim M. schrieb:
> Patrick schrieb:
>> Das mit den Interrupts verstehe nicht ganz. Wozu brauche ich Interrupts?
>
> Äh, Du nutzt einen BTLE-fähigen Chip. Da setze ich schon voraus das man
> das auch irgendwann einschaltet - denn ohne BT low Energy wären
> vergleichbare µC nur halb so teuer.
>
> Jedes nicht völlig triviale µC Programm nutzt irgendwo Interrupts. Eine
> Schrittmotor Steuerung z.B. will ja normalerweise auch irgendwo Daten
> einlesen (UART, SPI).

Hallo Jim M.

Nein, BLE nutze ich nicht. Ich hatte das NRF52 Board schon vor einem 
Jahr gekauft für ein anderes Projekt. Da brauchte ich BLE aber jetzt 
nicht mehr.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Patrick T. schrieb:
> Für ein Projekt würde ich gerne einen Schrittmotor (Nema17) mittels
> einem NRF52 evaluation-board ansteuern.

Nema17 bezieht sich ausschließlich auf die Bauform/Flansch.
Es sagt nichts über die inneren Werte.

Und nein!
Ich halte den Treiber für nicht angemessen!
Zumindest nicht für meine Nema17.

Die ich hier verwende sagen 2,8V und 1,7A in ihrem schmächtigen 
Datenblättchen.
Betreiben tue ich sie an 24V. Dann haben sie bei "relativ hoher" 
Drehzahl noch ein ansprechendes Drehmoment.
Ein Treiber mit Stromregelung ist dabei unerlässlich.
z.B. DRV8825
Ein Treiber mit Strom Absenkung im Stand ist empfehlenswert.

von Johannes S. (Gast)


Lesenswert?

warum benutzt du nicht einen 'intelligenten' Schrittmotortreiber? Die 
Module für 3D Drucker sind spottbillig, brauchen nur einen 
Takt/Richtungseingang, können Mikroschritte und haben eine 
Stromregelung.
Beispiel: 
https://www.amazon.de/Elegoo-Stepstick-K%C3%BChlk%C3%B6rper-Schrittmotor-Treibermodul/dp/B01MDNY71E/ref=sr_1_4?ie=UTF8&qid=1511516377&sr=8-4&keywords=schrittmotor+treiber

von Jan (Gast)


Lesenswert?

Hallo Patrick,

ich würde Dir auch empfehlen einen inteligenten Schrittmotortreiber zu 
benutzen. Den von Johannes habe ich auch verwendet, sehr einfach zu 
bedienen, funktioniert sehr gut.

Stromregelung ist  ein wichtiger Punkt

Gruss,
Jan

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Einen Schrittmotor-Treiber mit Stromregelung und Mikroschritt würde ich 
nicht unbedingt als "intelligent" bezeichnen. Solche Lösungen gibt es 
schon seit Jahrzehnten, nur vielleicht nicht im Briefmarkenformat. 
Intelligent wird das erst, wenn Rampengenerator und/oder Stalldetection 
dazu kommen.

Mit freundlichen Grüßen
Thorsten Ostermann

von Patrick (Gast)


Lesenswert?

Hallo Zusammen

Ich habe mir einen neuen Schrittmotorendriver gekauft. Ich berichte 
nochmals, sobald ich ihn bekommen und ausprobiert habe.

Ich danke euch für die Unterstützung!

Freundliche Grüsse

Lukas

von Einer K. (Gast)


Lesenswert?

Patrick schrieb:
> Ich danke euch für die Unterstützung!

Gerne doch....

Aber ....

Du könntest ruhig mal sagen:
1. Welchen Nema17 du da hast
2. Welchen Treiber du jetzt erworben hast.

Dann könnte man JETZT schon sagen, ob die Kombination funktionieren 
kann.
Oder auch, ob die vorherige wirklich falsch war.

von Wolfgang (Gast)


Lesenswert?

Patrick schrieb:
> Ich habe mir einen neuen Schrittmotorendriver gekauft.

Wieder nur eine strohdoofe H-Brücke oder wenigstens einen, in dem auch 
ein Controller sitzt, der die Phasenfolge generiert und bei feinerer 
Ansteuerung als Vollschrittbetrieb die Ströme passend regelt?

von Patrick (Gast)


Lesenswert?

Arduino F. schrieb:
> Patrick schrieb:
>> Ich danke euch für die Unterstützung!
>
> Gerne doch....
>
> Aber ....
>
> Du könntest ruhig mal sagen:
> 1. Welchen Nema17 du da hast
> 2. Welchen Treiber du jetzt erworben hast.
>
> Dann könnte man JETZT schon sagen, ob die Kombination funktionieren
> kann.
> Oder auch, ob die vorherige wirklich falsch war.


Hallo Arduino F.

1) 
https://www.digikey.ch/product-detail/de/adafruit-industries-llc/324/1528-1062-ND/5022791

2) 
https://www.amazon.de/Elegoo-Stepstick-K%C3%BChlk%C3%B6rper-Schrittmotor-Treibermodul/dp/B01MDNY71E/ref=sr_1_4?ie=UTF8&qid=1511516377&sr=8-4&keywords=schrittmotor+treiber

Zusätzlich habe ich den DRV8825 bestellt.

Wolfgang schrieb:
> Patrick schrieb:
>> Ich habe mir einen neuen Schrittmotorendriver gekauft.
>
> Wieder nur eine strohdoofe H-Brücke oder wenigstens einen, in dem auch
> ein Controller sitzt, der die Phasenfolge generiert und bei feinerer
> Ansteuerung als Vollschrittbetrieb die Ströme passend regelt?

https://www.amazon.de/Elegoo-Stepstick-K%C3%BChlk%C3%B6rper-Schrittmotor-Treibermodul/dp/B01MDNY71E/ref=sr_1_4?ie=UTF8&qid=1511516377&sr=8-4&keywords=schrittmotor+treiber

Zusätzlich habe ich den DRV8825 bestellt.

Ich hoffe ich habe alle Fragen beantwortet :).

Freundliche Grüsse

Lukas

von my2ct (Gast)


Lesenswert?


von m.n. (Gast)


Lesenswert?

Patrick schrieb:
> 1)
> 
https://www.digikey.ch/product-detail/de/adafruit-industries-llc/324/1528-1062-ND/5022791
>
> 2)
> 
https://www.amazon.de/Elegoo-Stepstick-K%C3%BChlk%C3%B6rper-Schrittmotor-Treibermodul/dp/B01MDNY71E/ref=sr_1_4?ie=UTF8&qid=1511516377&sr=8-4&keywords=schrittmotor+treiber

Taugt Beides nicht viel.
Der Treiber wird viel zu schnell überhitzen und der Motor mit seinen 12 
V Wicklungen paßt nicht zum Treiber, es sei denn, man betreibt den Motor 
mit >= 48 V.
Ein typisches Resultat, wenn das Bestellen schneller geht als das 
Nachdenken oder sich schlau zu machen.

von spess53 (Gast)


Lesenswert?

Hi

>und der Motor mit seinen 12 V Wicklungen paßt nicht zum Treiber, es sei >denn, 
man betreibt den Motor mit >= 48 V.

Da der Treiber keine Stromreglung besitzt passt der Motor schon zum 
Treiber. Aber die Wahl der Treibers ist falsch. Allerdings wird der 
Motor dann wahrscheinlich auch nicht mehr zu einem neuen Treiber passen.

MfG Spess

von m.n. (Gast)


Lesenswert?

spess53 schrieb:
> Da der Treiber keine Stromreglung besitzt

Wenn ich das richtig verfolgt habe, basieren die genannten Treiber auf 
einem A4988. Diese bieten durchaus eine Stromregelung.
Der Motor ist ungeeignet, mit 'üblichen' Versorgungsspannungen (5 - 24 
V) höhere Drehzahlen zu liefern.

von Wolfgang (Gast)


Lesenswert?

m.n. schrieb:
> Taugt Beides nicht viel.
> Der Treiber wird viel zu schnell überhitzen und der Motor mit seinen 12
> V Wicklungen paßt nicht zum Treiber, es sei denn, man betreibt den Motor
> mit >= 48 V.

Für den Motor ist ein Strom von 350mA pro Phase angegeben. Das ist nun 
wirklich nicht die Welt.
Mit dem Treiber wirst du den Motor nicht mit 48V betreiben können. 
Nicht ohne Grund steht im Datenblatt des A4988 unter Maximum Ratings 
etwas von 35V.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.