Archiv verlassen und diese Seite im Standarddesign anzeigen : A3972 Motorsteuerung
Hallo,
Ich habe vor mit dem A3972 (http://www.allegromicro.com/en/Products/Part_Numbers/3972/3972.pdf) einen Schrittmotor anzusteuern. Nur verstehe ich nicht so ganz die Wirkungsweise der Strom-Regelung.
Ist mit ITRIP-Max im Datenblatt der Maximal mögliche Strom durch den Motor gemeint? Und über die DAC Einstellung kann ich dann den aktuell gewünschten Strom (ITRIP) der durch den Motor fließen soll einstellen?
Ist das soweit korrekt oder habe ich das Datenblatt falsch Interpretiert?
Ich hoffe es gibt hier welche die den Chip schon verwendet haben und mir ein wenig zur allgemeinen Funktion weiterhelfen können.
Danke!
Gruß
/Gizmor
Ich habe das IC zwar noch ncith benutzt aber nach überfliegen des Datenblattes kommt es so hin wie Du es geschrieben hast.
Der Maximale Strom wird vorgegeben durch die Referenzspannung (intern oder extern) und den Sensewiderstand. über den internen DAC lässt sich dann, in den Grenzen der 6Bit und des maximalen Stroms, der erwünschte Strom einstellen. Hierüber lässt sich dann auch das Microstepping verwirklichen.
MfG
Manu
Hallo, danke für deine Antwort.
Ich hab aber noch eine Frage zu den einstellbaren Zeiten (Blank Time, Fixed Off Time, Fast Decay Time). Wozu dienen die Zeiten und welche Zeiten sollte man dort einstellen? Kann ich damit die Dreh-Geschwindigkeit des Motors einstellen?
Zum Thema Mikroschritt. Heißt das, ich muss vor jedem Schritt den Strom "manuell" über den DAC ändern? Oder funktioniert das automatisch?
Ich arbeite jetzt zum ersten mal mit Schrittmotoren, deswegen blicke ich noch nicht so ganz durch was wie funktioniert.
Hallo,
Blank Time ist normalerweise zum Ausblenden von Spikes und den schaltvorgängen der Transistoren (sperren des Stromreglers gegen vorzeitiges abschalten). Sollte so im Bereich 1µS liegen. Muss man gegeb. etwas probieren. Bei starken Geräuschen etwas erhöhen, wobei 1,5µS wohl das Maximum darstellen. Zu hoch darf sie aber auch nicht sein, weil sich sonst die niedrigen Stromwerte nicht mehr reglen lassen.
Bei den anderen muss ich noch mal genau nachschauen.
Wenn ich mir das so anschaue kommt man um einen kleinen µC nicht herum um den Baustein seriell anzusteuern.
MfG
Manu
Ja, das der IC über nen µC angesteuert wird weiß ich und war auch von vorne herein so geplant. Da hab ich auch keine Probleme mit. Ansteuerung über SPI ist sogar ne nette praktische Sache :)
Soo, noch mal nachgeschaut. Demanch müsste es ein Regler mit konstanter Auszeit sein, d.h. nach dem Abschalten durch erreichen des Sollwertes wird eine feste Zeit (Fixed Off Time bzw. Fixed Off Time und Fast Decay Time) gewartet bis der Stromregler wieder freigegeben wird. Die Frequenz der Regelung variiert mit den Motordaten (R und L) sowie dem Stromsollwert leicht. Insgesamt sollten sich die Zeiten so bewegen, dass sich eine Frequenz im Bereich von ca. 16-36kHz ergibt. Weniger ist besser für die Schaltverluste mehr soll bei Geräuschproblemen hilfreich sein.
Reine Fixed Off Time ist Slow decay, Mischung aus Fixed und Fast Decay Time ist Mixed Decay und Fast Decay Time > Fixed Off Time ist Fast Decay.
Die Wahl des nacher genutzten Stromabbaus (Decay Modi) ist auch wieder so eine Sache. Slow Decay ist langsamer Stromabbau (Strom fließt meistens einfach über die Freilaufdioden), Fast ist schneller (meist Abbau gegen die Betriebsspannung). Slow ist einfacher in der Handhabung, es entstehen geringere Rippleströme und damit auch meistens weniger Probleme. Nachteilig ist, dass im Mikroschritt die Stromkurve bei schnelleren Drehzahlen früher verschleift und das niedrige Strom um den Nullpunkt herum schlecht geregelt werden. Meistens ist dann bei 1/8 Schritt schluss.
Fast ist besser bei Mikroschritt verursacht aber auch größere Rippleströme.
Mit Mixed versucht man einen guten "Mix" aus beiden zu erreichen.
Die genauen Zeiten sind aber wohl am besten durch Versuche zu bestimmen. Wenn Geräusche oder Störungen auftreten kann man daran Änderungen vornehmen, bis man einen guten Kompromiss erreicht hat.
Für Mikroschritt muss man dann für jeden Schritt einen neuen Stromsollwert an den A3972 schicken was z.B. über eine im µC abgelegte Tabelle ganz gut geht.
Das SPI praktisch ist weiß ich ;) Ich steuere eine DAC damit an.
MfG
Manu
Hi, ich bin es mal wieder :)
Erstmal schon mal danke für die bisherigen Erklärungen. Habe es nun endlich geschafft die Schaltung mal aufzubauen und mir ein kleines Programm zum testen geschrieben.
Leider tut sich gar nix :(
Die folgenden Einstellungen habe ich eingestellt:
DAC: 5
Mixed Decay
BlankTime: 1µs
FixedOffTime: 31,75µs
FastDecayTime: 1,75µs
Zum Testen habe ich einen alten Schrittmotor aus einem CD-Laufwerk. Daher auch der geringe DAC-Wert. Wollte dem kleinen Motor nicht unbedingt so nen hohen Strom zumuten :). Um den Motor nun im Vollschritt zu betreiben ist es doch richtig, dass ich einfach die Phasen der beiden "Brücken" durchwechsel oder nicht?
Die Daten die ich per SPI sende, lasse ich mir gleichzeitig auch am PC über UART ausgeben und da am PC das richtige ankommt, gehe ich davon aus das der A3972 auch die richtigen Daten bekommt.
Wie kann ich nun am besten testen wo der Fehler liegt? Oder habe ich einfach noch was nicht so richtig verstanden mit den Schrittmotoren?
Nabend.
Was heißt den gar nichts? Ist ein Haltemoment spürbar?
Referenz angeschlossen (max 3V) oder auf intern gestellt. Sense Widerstand i.O.? Max. Übertragungsfrequenz i.O.? Betriebsspannung mind. 15V?
MfG
Manu
Hallo,
Ref ist auf Intern (2V), Sense Widerstände (0,18Ohm) sollten auch ok sein.
Vbb sind ~22V. Und ich aktualisiere die Phase 1x pro Sekunde.
Und gar nichts heißt gar nichts :)
Der Motor gibt keine Bewegung von sich und lässt sich auch genau so leicht drehen wie ausgeschaltet. Also wird auch kein Haltemoment da sein.
Hm, was hätten wir noch??
Idel Mode nicht eingeschaltet?
Bezüglich der Frequenz meinte ich die Übertragungsfrequenz vom SPI
MfG
Manu
ja, idle ist aus.
spi läuft mit 72,75khz, also das langsamste was möglich ist.
a3972_Word0 &= 0x7FFFF; //Nur 19Bit!
a3972_Word0 &= ~(1 << WordSelect);
a3972_Word1 &= 0x7FFFF; //Nur 19Bit!
a3972_Word1 |= (1 << WordSelect);
char char1 = a3972_Word0 >> 16;
char char2 = a3972_Word0 >> 8;
char char3 = a3972_Word0 & 0xFF;
char char4 = a3972_Word1 >> 16;
char char5 = a3972_Word1 >> 8;
char char6 = a3972_Word1 & 0xFF;
UART_SendString("update - |");
PORTB &= ~(1 << PB2); //CS Low
_delay_us(1);
UART_SendChar(char1);
UART_SendChar(char2);
UART_SendChar(char3);
//word0
SPI_SendChar(char1); //D23 - D16
SPI_SendChar(char2); //D15 - D8
SPI_SendChar(char3); //D7 - D0
PORTB |= (1 << PB2); //CS High
_delay_us(1);
UART_SendString("|");
PORTB &= ~(1 << PB2); //CS Low
_delay_us(1);
UART_SendChar(char4);
UART_SendChar(char5);
UART_SendChar(char6);
//word1
SPI_SendChar(char4); //D23 - D16
SPI_SendChar(char5); //D15 - D8
SPI_SendChar(char6); //D7 - D0
_delay_us(1);
PORTB |= (1 << PB2); //CS High
UART_SendString("| - fertig\n");
Das ist ein Ausschnitt aus meinem Programm, welches die beiden Wörter an den Chip sendet. Die SPI Schnittstelle ist auch auf "MSB first" usw. eingestellt wie es das Datenblatt des A3972 fordert.
In höhere Programmiersprachen muss ich mich noch mal reinarbeiten :( Bislang hab ich nur in Assembler programmiert.
Muss mir das noch mal genauer durch den Kopf gehen lassen.
MfG
Manu
Hallo, hat jemand für den A3972 bzw. A3973 bzw. A3992 ein Eagle Library Bauteil erstellt? Wäre nett, wenn ich das bekommen könnte.
Grüße,
Thomas
Ref ist auf Intern (2V), Sense Widerstände (0,18Ohm) sollten auch ok sein.
Nö, 0,18 Ohm ergibt 2V/(4/0,18R) = 2,7A (1,3A bei Teiler 8 ...)
Das IC kann nur max 1,5A, und ab 0,7A sollte man externe Dioden nehmen.
Gruß,
Thomas
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.