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
staticuint32_tdelay=2000;
25
26
voidinit_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
voidmode2_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
voidmode2_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
voidmode2_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
voidmode2_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
voiddrv_set(void){
84
mode2_sequence_1();
85
mode2_sequence_3();
86
mode2_sequence_5();
87
mode2_sequence_7();
88
}
89
90
intmain(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
Du beobachtest normales Verhalten. Du kannst nicht mit hoher Drehzahl
den Motor starten. Versuche linear zu beschleunigen, dan wird es
klappen.
Gruss, Jan
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
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?
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
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).
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.
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.
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
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
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
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.
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?
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
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.
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.