Hallo,
ich habe folgendes Problem:
ich möchte gerne einen NEMA 17 (1,5A DC, 12-36V, 1,8°) mit einem
Stromtreiber A4988 betreiben.
Meine Schaltung habe ich wie folgt aufgebaut. (Siehe beigefügtem Bild)
Als Spannungsquelle benutze ich ein Labornetzteil welches ich auf 12V
eingestellt habe. Von dort gehe ich auf einen Festspannungswandler
L7805C der mir aus den 12V die 5V für meinen µC (XMEGA-E5 Xplained) und
die Versorgung für meinen A4988 wandelt. Die Motorspannung greife ich
bei den 12V ab und führe sie auf den Treiber.
Jetzt habe ich durch das Datenblatt und einiger Recherche herausgefunden
das mein A4988 schon mal keine internen Pullup oder Pulldown Widerstände
besitzt.
Jetzt versuche ich mal mein Problem zu schildern.
ich schließe wie oben beschrieben meine Schaltung an. Überprüfe per
Multimeter anschließend meine Spannungen an den PINS.
GND-VMot --> 12V
GND-VDD --> 5V
GND-Enable --> 0V
GND-DIR --> 5V
GND-STEP --> 5V
GND --> SLEEP --> 5V
GND --> RESET --> 5V
die Microsteps sind mir erstmal egal denn ich würde ihn gerne im
Vollschrittbetrieb betreiben.
So wenn ich nun die Spannung wegnehme um den Motor anzuschließen,
anschließend dann die Versorgungsspannung wieder einschalte surrt der
Motor. Wenn ich nun eine Brücke wie in vielen Foren auch steht von
SLEEP-->RESET mache beginnt der Motor sich zu drehen (Clockwise --> da
laut meiner Messung an DIR ja ein HIGH-Pegel anliegt) ziehe ich den
DIR-PIN mit einer Leitung auf Masse dreht er sich anticlockwise.
Mein Problem ist aber ich möchte nicht das der Motor sich sofort dreht
sondern per µC über den STEP-PIN steuern.
Das wäre mein Code mit dem ich ausprobieren wollte ob der Motor macht
was ich von ihm möchte (vorerst drehen nur in eine Richtung). Daran
scheitert es aber, da er wie oben beschrieben sofort losdreht wenn ich
die Brücke setze.
Programm wurde mit Eclispe erstellt
1
#include<avr/io.h>
2
#include<util/delay.h>
3
4
5
intmain(void)
6
{
7
intx,y;
8
PORTD.DIRSET=PIN4_bm;
9
PORTD.DIRSET=PIN5_bm;
10
PORTD.DIRSET=PIN6_bm;
11
12
13
14
15
while(1){
16
17
PORTD.OUTSET=PIN6_bm;
18
PORTD.OUTCLR=PIN4_bm;
19
20
for(x=0;x<4;x++)
21
{
22
for(y=0;x<50;y++)
23
{
24
PORTD.OUTSET=PIN5_bm;
25
_delay_ms(700);
26
PORTD.OUTCLR=PIN5_bm;
27
_delay_ms(700);
28
}
29
_delay_ms(1000);
30
}
31
}
32
}
Nun meine Frage muss ich meinen STEP-PIN und DIR-PIN mit einem Pullup
oder Pulldown Widerstand versehen, denn im Datenblatt steht man
muss/kann STEP & DIR, SLEEP auf HIGH oder LOW ziehen. Wenn ja wäre es
mit Erklärung sehr hilfreich.
Woran könnte des sonst liegen das der Motor sich sofort dreht. Oder was
muss ich abändern damit sich der Motor von dem µC ansteuern lässt.
Ich hoffe ich konnte halbswegs mein Problem und meine Ausgangssituation
schildern, denn das ich mein erster Forumsbeitrag. Falls es Fragen gibt
die sich aus der Beschreibung oder Problemstellung auftun werde ich mein
bestes geben es besser zu formulieren.
Danke schon mal im vorraus.
Mit freundlichen Grüßen
Julian Stahl
Julian S. schrieb:> ich möchte gerne einen NEMA 17 (1,5A DC, 12-36V, 1,8°) mit einem> Stromtreiber A4988 betreiben.
Der Motor kann keinen derart breiten Nennspannungsbereich besitzen.
Welche Nennspannung ist wirklich für deinen Motor angegeben bzw. wie
groß ist der Wicklungswiderstand?
Welche Pins des µC hast du an welche Pins des A4988 angeschlossen?
Solange dein µC Push-Pull Endstufen hat, brauchst du dir an der Stelle
um Pull-Irgendwas keine Gedanken zu machen.
Welche Mikroschrittauflösung hast du gewählt?
Was für Sense-Widerstände hast du eingebaut und was hast du als
Referenzspannung angelegt? Ohne funktioniert die Stromregelung nicht.
Wolfgang schrieb:> Julian S. schrieb:>> ich möchte gerne einen NEMA 17 (1,5A DC, 12-36V, 1,8°) mit einem>> Stromtreiber A4988 betreiben.>> Der Motor kann keinen derart breiten Nennspannungsbereich besitzen.> Welche Nennspannung ist wirklich für deinen Motor angegeben bzw. wie> groß ist der Wicklungswiderstand?
Laut Datenblatt 1.6 Ohm +-10% bei 25°C
Laut Datenblatt unter 2.6 Voltage: 12-36V
Datenblatt im Anhang auch wenn das nicht so gerne gesehen ist
Datenblätter mit hochzuladen.
>> Welche Pins des µC hast du an welche Pins des A4988 angeschlossen?> Solange dein µC Push-Pull Endstufen hat, brauchst du dir an der Stelle> um Pull-Irgendwas keine Gedanken zu machen.
ich habe mich beim µC für die Headerleiste J4 entschieden und dort nehme
ich die PINS PD4 (TXD on J4) für meinen Enable-PIN am A4988
PD5 (SS on J4) für den STEP-PIN
PD6 (MISO on J4) für den DIR-PIN
Woran erkenn ich ob mein µC eine Push-Pull Endstufe hat?
>> Welche Mikroschrittauflösung hast du gewählt?
Ich habe keine Mikroschrittauflösung gewählt, da ich den Motor im
Vollschrittmodus betreiben möchte --> alle meine Microstep-PINs haben
ein LOW-Pegel.
> Was für Sense-Widerstände hast du eingebaut und was hast du als> Referenzspannung angelegt? Ohne funktioniert die Stromregelung nicht.
Auf der Treiberstufe waren die Sense-Widerstände schon drauf gelötet
(ich muss da doch keine selber drauflöten oder?) ich habe sie gerade
eben mit dem Multimeter den Wert bestimmt und sie sind beide 0,2 Ohm
groß.
wenn ich über meinem Poti die VREF messe, VREF = 0,724V an (ich könnte
das Drehpoti noch ändern, es ist erst kurz über die Hälfte). Das
entspricht laut Formel
Imax = VREF / 8 x Rsense (Formel aus Datenblatt A4988)
würde in meinem speziellen Fall heißen:
0,4525A = 0,724V / 8 x 0,2 Ohm
--> im Datenblatt ist auch vermerkt das im Vollschritt nur 70% des Imax
fließen. Der Strom erscheint mir jetzt doch auch bisschen klein aber
drehen tut sich der Motor ja.
Hi,
du hast den EN-Pin ja beschaltet. Dann nutze ihn doch zum
Ein-/Ausschalten.
Bei High werden die Ausgänge abgeschaltet. Somit dreht sich der Motor
nicht.
Bist du dir mit den 0.2 Ohm sicher? Hab da eher was von max. 0-1 Ohm im
Kopf.
Vom Typ des Motors, hat dieser 2V und 1.3A, laut Google. Bei den von dir
angegebenen 1.5A müsste VREF 8*1.5A*0.2 Ohm=2.4V sein.
Gruß Sascha
Der A4988 benötigt einen (dicken) Low ESR Elko.
Bitte nochmal Datenblatt lesen.
Steckbretter sind bei 1A meist schon an der Grenze der Belastbarkeit
angekommen.
sascha_focus schrieb:> Hi,>> du hast den EN-Pin ja beschaltet. Dann nutze ihn doch zum> Ein-/Ausschalten.
Das hatte ich mir auch gedachte, das wenn ich auf den EN einen
HIGH-Pegel gebe müssten doch eigentlich meine Outputs für Motor
abgeschalten werden. Wieso auch immer Pustekuchen da passiert rein gar
nichts aber diese Treiberstufen gibt es ja meist im 5er Pack und das ist
bei allen 5 Treibern so und ich dachte mir die können doch nicht alle
einen Treffer haben
> Bei High werden die Ausgänge abgeschaltet. Somit dreht sich der Motor> nicht.
Wie schon oben erwähnt Pustekuchen dachte ich laut Datenblatt auch
> Bist du dir mit den 0.2 Ohm sicher? Hab da eher was von max. 0-1 Ohm im> Kopf.
Naja in anderen Forumsbeiträgen habe ich auch was mit 0,1 Ohm gelesen,
sogar schon mit 0,05 Ohm aber wenn ich die Rsense auf der Platine messe
steht auf meinem Multimeter 0,2 Ohm.
> Vom Typ des Motors, hat dieser 2V und 1.3A, laut Google. Bei den von dir> angegebenen 1.5A müsste VREF 8*1.5A*0.2 Ohm=2.4V sein.
Die 1,3A stehen das er die bei einem Haltemoment von 360mN.m hat in der
Suchleiste ist mit 1,5A angegeben. Mit der errechneten VREF stimme ich
dir zu.
Bloß so richtig weiter hilft mir das aktuell auch noch nicht.
Aber danke fürs Gedanken drüber machen
Hi,
für unser Techniker-Projekt haben wir zwei Schrittmotoren mit dem
A4988/DRV8825 und einem ATXmega128A4U eingesetzt. Der EN Pin ist zum
Strom sparen beschaltet und funktioniert auch.
PORTD.OUTCLR = PIN4_bm;
Du setzt den Pin dauerhaft auf Low, somit ist immer eingeschaltet.
Gruß Sascha
Julian S. schrieb:> Woran erkenn ich ob mein µC eine Push-Pull Endstufe hat?
An der allgemeinen GPIO-Pinbeschreibung im Datenblatt des µC ;-)
Julian S. schrieb:> ich die PINS PD4 (TXD on J4) für meinen Enable-PIN am A4988> PD5 (SS on J4) für den STEP-PIN> PD6 (MISO on J4) für den DIR-PINJulian S. schrieb:> Mein Problem ist aber ich möchte nicht das der Motor sich sofort dreht> sondern per µC über den STEP-PIN steuern.Julian S. schrieb:> for(y=0; x<50;y++)> {> PORTD.OUTSET = PIN5_bm;> _delay_ms(700);> PORTD.OUTCLR = PIN5_bm;> _delay_ms(700);> }
Solange du im Programm fleißig mit dem STEP-PIN wackelst und sonst alles
frei gegeben ist, muss der Motor doch immer weiter steppen.
Julian S. schrieb:> Der Strom erscheint mir jetzt doch auch bisschen klein aber> drehen tut sich der Motor ja.
Das passt schon, um zu sehen, ob er überhaupt steuerbar ist. Wenn du
mehr Drehmoment brauchst, wirst du den Strom allerdings hochdrehen
müssen.
Wolfgang schrieb:> Julian S. schrieb:>> Woran erkenn ich ob mein µC eine Push-Pull Endstufe hat?>> An der allgemeinen GPIO-Pinbeschreibung im Datenblatt des µC ;-)
Ich habe das Datenblatt gewälzt und bin nicht darauf gestoßen kannst du
mir eventuell einen Tipp mit der Seitenzahl geben oder einen Tipp wo ich
das man sinnvollsten finden kann?
>> Julian S. schrieb:>> ich die PINS PD4 (TXD on J4) für meinen Enable-PIN am A4988>> PD5 (SS on J4) für den STEP-PIN>> PD6 (MISO on J4) für den DIR-PIN>> Julian S. schrieb:>> Mein Problem ist aber ich möchte nicht das der Motor sich sofort dreht>> sondern per µC über den STEP-PIN steuern.>>> Solange du im Programm fleißig mit dem STEP-PIN wackelst und sonst alles> frei gegeben ist, muss der Motor doch immer weiter steppen.
Naja mehr oder weniger dreht er sich dauerhaft --> er macht vermutlich
dauerhaft Steps oder? also er läuft komplett rund ohne wirkliche
"Steppause"
Volker K. schrieb:> Ist die Zeile in deiner Software OK?>>>> for(y=0; x<50;y++)>> ... oder soll es evtl. y<50 sein?
Sie haben Recht da ist definitiv von mir ein Fehler das muss y<50 heißen
vielen Dank
Wolfgang schrieb:> Auch wenn das eigentliche Problem geklärt ist:>> Die Ausgangstreiber sind konfigurierbar:> Kapitel 16. "I/O Ports" unter 16.3 "Output Drive">> http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-8153-8-and-16-bit-AVR-Microcontroller-XMEGA-E-ATxmega8E5-ATxmega16E5-ATxmega32E5_Datasheet.pdf
vielen Dank
Also mal ein kurzer Zwischenstand und vielen Dank für euere
Unterstützung.
Mir ist es gelungen mit der Ansteuerung des Enable Pins den Motor auch
anhalten zu können. Aber das ist doch eigentlich nicht der Sinn dieses
Treibers oder?
*Wunschfunktion:*
Mein Ziel wäre es mit einem Taster den Linkslauf zu starten für eine
vorgegebene Zeit und mit einem zweiten Taster den Rechtslauf für eine
vorgegebene Zeit.
Meinen Programmcode den ich "versuche" zu schreibe teste ich vorher
immer erst mit LEDs um meinen Motor und Treiber zu schonen.
1
#include<avr/io.h>
2
#include<util/delay.h>
3
4
5
intmain(void)
6
{
7
intx,y,z=0;
8
PORTA.DIRSET=PIN4_bm;//STEP-PIN
9
PORTA.DIRSET=PIN5_bm;//DIR-PIN
10
PORTA.DIRSET=PIN6_bm;//Enable-PIN
11
12
while(z<=0)
13
{
14
PORTA.OUTSET=PIN5_bm;//HIGH-LEVEL für DIR-PIN
15
PORTA.OUTCLR=PIN6_bm;//LOW-LEVEL für Enable um Motoroutputs freizugeben
16
17
for(x=0;x<4;x++)//360°/1,8°=200 Steps --> 4x die innere 50er for-Schleife für eine Umdrehung
18
{
19
for(y=0;y<50;y++)
20
{
21
PORTA.OUTSET=PIN4_bm;
22
_delay_ms(700);
23
PORTA.OUTCLR=PIN4_bm;
24
_delay_ms(700);
25
}
26
_delay_ms(1000);
27
}
28
z=1;//damit While-Schleife nur 1x ausgeführt wird
29
PORTA.OUTSET=PIN6_bm;//Enable-PIN High um Motoroutputs zu sperren
30
}
31
}
Kurze Erklärung hinter meinem Gedanken zu dem Code.
ich deklariere mein Pins des µC --> anschließend setze ich meine DIR-PIN
auf HIGH für die Drehrichtung im Uhrzeigersinn, Enable auf LOW um
Outputs freizuschalten --> möchte dann eine Umdrehung in 4 Quadraten
teilen, und jedes Viertel mit 50 Schritten durchlaufen --> danach setze
ich z=1 um While-Schleife zu beenden und Enable-PIN auf High um Outputs
zu sperren.
Aber leider macht der Motor mit diesem Code nicht was ich möchte, bei
den LEDs klappt mein Vorhaben.
Wo liegt hier der Fehler?
Dieser Code soll dazu führen das ich verstehe wie ich den Motor
ansteure, mit meiner eigentlichen Wunschfunktion hat das noch nichts
zu tun, aber wie ich schon erwähnt habe bin ich ja ein Neuling und
schaffe nicht alles auf einmal sondern möchte mich Stück für Stück an
mein Ziel heranarbeiten
Julian S. schrieb:> Aber leider macht der Motor mit diesem Code nicht was ich möchte, bei> den LEDs klappt mein Vorhaben.
... was macht dein Motor nicht ?
Julian S. schrieb:> Mein Ziel wäre es mit einem Taster den Linkslauf zu starten für eine> vorgegebene Zeit und mit einem zweiten Taster den Rechtslauf für eine> vorgegebene Zeit.
Löse dich von der Vorstellung, dass ein Schrittmotor "läuft".
Normalerweise ist immer mindestens eine Wicklung bestromt, d.h. der
En-Pin wird für den Betrieb schön in Ruhe gelassen und gibt den Treiber
immer frei. Mit jedem Step-Impuls wird das Strommuster für die
Wicklungen umgeschaltet und der Anker des Motors richtet sich
entsprechend dem Feld neuen aus.
Ein Drehwinkel hat also nichts mit irgendeiner vorgegebenen Zeit zu tun,
sondern einzig mit der Anzahl der Schritt-Pulse. Die Abfolge der
Strommuster wird durch den DIR-Steuerpin und durch die Microstep
Konfigurationseingänge festgelegt.