PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotoransteurung TMC222



Manf
24.02.2004, 15:04
Ich fürchte, die Zukunft hat uns eingeholt.
Ich habe gerade die Beschreibung des Schrittmotorcontrollers Trinamic TMC222 gelesen mit allem was man immer schon mal einbauen wollte. Die ELEKTRONIK 4/2004 hat einen Kurzen Artikel darüber. Am besten ist es, das Datenblatt downzuloaden. Die wesentlichen Features sind:
· 2 Wire Bus
· Positionsvorgabe, laufende Positionsvorgabe möglich, auch mit Richtungsumkehr, Range: 2^12 full steps
· Einstellbare Anfahrt- und Bremsrampe (symmetrisch)
· Wählbare Mikrostep- Auflösung bis 1/2, 1/4, 1/8, 1/16
· 2 H- Brücken (normal) ,
· Stromsteuerung, 16 Ströme digital wählbar (bis 800mA im SMD Chip), Haltestrom einstellbar
· Reaktionen auf Low-Battery und Temperaturprobleme
· Preis 1+ 7,34; 10+ 7,04; 20+ 6,73; 50+ 6,42
· Evaluation Board, Kit 420,- (das ist dann etwas teuer)

Ich bin sehr beeindruckt. Der Preis für das Evaluation Kit ist etwas hoch, und der Strom ist mit 800mA etwas tief.
Ich habe aber schon mit Schrittmoteren in Microstep Mode experimentiert und bin sehr überzeugt davon, das Motorverhalten ist nicht wiederzuerkennen. (absolut geräuschlos).

Vielleicht war ich auch nur nicht so gut informiert oder bin auch in der falschen Rubrik, dann bitte korrigieren.

Manfred

http://www.trinamic.com/tmcweb/downloads/tmc222_datasheet_v092_preliminary.pdf?PHPSESSID=6c 897199ad698bd76afb1a83ef831cda

24.02.2004, 15:17
Das Datenblatt ist doch das gleiche wie hier in der Downlaod Sektion, oder hat sich schon wieder was verändert? Kann man das IC schon bei Reichelt / oder Conrad bekommen?

Manf
24.02.2004, 15:23
Als Distributer bei Trinamic ist Schuricht angegeben, der sie in seiner Bestelliste drin hat, ich habe aber noch nicht nachgefragt.
Manfred

http://basket.schuricht.de/index.php?action=puttocart&number=643825&ref=L200255&land=DE&sprache=DE

28.02.2004, 19:32
Hi,
ich habe vor 2 zwei Tagen die ersten Ansteuerungskarten (mit TMC222), µController-Firmware und die Bedienersoftware fertig entwickelt.
Die ICs sparen viel programmierarbeit (fast wie Plug&Play). Das setup, Auslesen und Auswerten von OTP und RAM läuft einwandfrei.
Aber meistens geht nichts so einfach. Ein Fehler tritt immer auf.
Das Flag-Bit "ElDef' ist fast immer gesetzt (1). Das bedeutet irgendwo gibt es Problem mit der elektronik (z.B. Kurzschluss, s. Datenblatt).
Solange dieses Bit gesetzt ist das IC im Shut Down Mode --> Motor lässt sich nicht bewegt. Alle Karten zeigen den gleichen Fehler.

Die genaue Ursachen für diesen Fehler weiss ich noch nicht, und bei Trinamic gibt es dafür keinen FAG, Support, Forums, Service. Ich habe einfach nichts dafür gefunden. Das Ding ist ziemlich neu --> das ist das Problem.

Y.C.

Manf
29.02.2004, 07:55
Wie ist es wenn man von der HW-Seite kommt und den möglichen Kurzschluß dadurch auflöst, daß man Vorwiderstände einsetzt?
Nur zum funktionalen Test der Ansteuerung. (Das ist natürlich nicht in jeder Aufbautechnik möglich. )
Die Ergebinisse würden hier sicher viele interessieren.
Manfred

01.03.2004, 01:32
Wo könnte ein möglicher Kurzschluß auf der HW-Seite sein? Wo sollen die Vorwiderstände eingesetzt werden?

Y.C.

Joerg
01.03.2004, 07:06
Hi Y.C.,

versuche mal den Haltestrom runterzusetzen. Dann kommt das Flag nicht mehr, bei mir zumindest.
Keine Ahnung was das ist. Kurzschluss zumindest nicht. Tritt auch nur bei manchen Motoren auf.

HTH und Viele Grüße
Jörg

Manf
01.03.2004, 09:27
Meine einfache Überlegung ist, die möglichen Fehlerquellen für die Seuerung beim Schalten zu großer Ströme zu reduzieren und in Reihe zu den Motorspulen Widerstände einzusetzen, die so ungefähr 2-5 mal so groß sind wie die Spulenwiderstände.
Der Motor wird sich dann kaum noch drehen aber vielleicht ist die Dauer einer Fahrtstecke am Summen des Motors erkennbar. Vielleicht dreht er sich ohne Last. Ohne Bodenkontakt oder ohne Räder.
Die störenden induzierten Spannungen beim Schalten der Spulenstöme sind dann auch kleiner.
Wie gesagt, alles nur für den Test.

Manfred

Im Idealfall hat man sogar noch irgend einen kleinen Schrittmotor aus einer Floppy oder einem Drucker, den man zum Test einsetzen kann.
(Aber nicht bei jedem sieht es so aus, daß er allein durch die Dauer des Suchens sicherstellen kann, selbst exotischste Bauteile zu finden.)

Joerg
01.03.2004, 10:24
Hallo Manf,

ich habe hier einen Miniaturstepper, Spulenwiderstand 160Ohm, bei dem tritt das beschriebene Problem auf.

Bei einem größeren Stepper (15 Ohm Spulenwiderstand) wird das Flag nicht gesetzt. Ergo liegt es nicht an Überlast oder Kurzschluss oder an einem anderen mit Serienwiderständen verbesserbaren Problem.

Viele Grüße
Jörg

01.03.2004, 10:56
Haltestrom auf 186mA runtergesetzt. Das Flag kommt nicht mehr. Das ist nur wenn der Motor angeschlossen ist. Wird der Motor entfernt, dann kommt das Flag sogar bei der niedrigsten Stufe (59 mA). Das ist sogar gut. Man braucht nichts weiteres, um herauszufinden, ob ein Motor angeschlossen ist oder nicht.
Haltestrom ist auch vom Motortyp abhängig.

Danke für den Hinweis


Y.C.

Manf
01.03.2004, 13:27
Wenn ich das richtig verstanden habe, dann ist also die Meldung Kurzschluß etwas unpräzise und bedeutet unter anderem auch: der eingestellte Stom ist zu hoch für den großen Spulenwiderstand.

Es ist sicher gut, solche Erfahrungen zu diskutieren, damit nicht jeder alles selbst erfinden muß.
Das hat sich schon gelohnt, aber ich befürchte fast, daß eine so leistungsfähige Schaltung noch mehr Interprätationsmöglicheiten für ihre Features bietet.

Bitte weiter posten, am besten auch gelöste Probleme.

Wie sieht es eigentlich mit der Aufbautechnik und Kühlung aus. Soweit ich gesehen habe, ist der Baustein nur als SMD verfügbar und hat gute Chancen das kleinste aktive Bauteil mit gleichzeitig dem größten Strom im System zu sein.

Manfred

01.03.2004, 13:27
Hi Jörg,

die aktuelle Position soll beim Fahren zur Targetposition immer abgefragt werden. Folgendes Problem tritt immer auf: Mit dem Kommando "GetFullStatus2" wird die aktuelle als auch die Targetposition zurückgegeben.
Bekommt der TMC222 (wähernd das Fahren oder direkt nach dem Anhalten) das Kommando 3 mal hintereinander, ändert er seine Targetpsoition auf $0D0D (3341). Dort wird der Motor dann gefahren.
Diese Position ist mir unbekannt.

Tritt dieses Problem bei dir auch?


Viele Grüße
Y.C.

01.03.2004, 17:22
Hallo,

ich lese seit einiger Zeit hier im Forum und finde es auch sehr informativ, obwohl ich nix mir Robotern zu tun habe.

Ich habe mir jetzt auch mal den TMC222 zugelegt und habe damit noch ein paar Probleme (Motoren laufen soweit):

-> Wie kann ich am sinnvollsten eine Referenzfahrt (auf einen Schalter) durchführen? Mit RunInit komme ich irgendwie nicht weiter, und der Anschluss für den Taster kann offensichtlich nur über i2c abgefragt werden.

-> Meine Motoren pfeifen im Stillstand, ich brauche aber einen hohen Haltestrom. Ich befürchte, ich habe irgendwo falsche Kondensatoren verbaut. Was sollte man da so nehmen?

Vielen Dank,

Martin

05.03.2004, 22:03
also naja weis net so genau was ich dazu sagen soll ihr seid alle so schlecht probiert es doch mal auf www.satanshimmel.de

bapou1
06.03.2004, 17:26
Hallo,

ich verfolge gespannt eure Diskussion über den TMC222 da diesen auch
für eine Steuerung verwenden will

Für meine Anwendung muss ich die Motoren auch sehr langsam betreiben,
der TMC222 hat aber als kleinste Geschwindigkeit 99FullSteps / Sekunde.
(Gewünschte Minimal Geschwindingkeit ca. 5FS/s -> 90 (1/16)S/s)

Spricht etwas dagegen dem TMC222 jeden Schritt eine neue Zielposition zu geben (je ein Mikroschritt weiter) zu warten und das gleiche zu Wiederholen.

I2C sollte ja schnell genug dafür sein und wenn es schneller wird kann der TMC222 ja alles übernehmen.

Was denkt Ihr ?
Viele Grüsse

Thomas

martin
06.03.2004, 18:52
Hallo bapou1,

ich habe das gerade mal ausprobiert, einzelne (Mikro-)Schritte vorgeben funktioniert prinzipiell, aber die Bewegung sieht nicht besonders gleichmässig aus. Kann natürlich auch an meinem Aufbau liegen (siehe weiter oben, das Pfeifen bei mir ist ja wohl auch nicht normal)

Grüsse,
Martin

07.03.2004, 00:50
Hallo Martin,

vielen Dank fürs ausprobieren. Was meinst du mit nicht gleichmässig ?
Glaubst du die Zeit die der TMC braucht bis er den Schritt macht ist verschieden, die Grösse der Schritte verschieden oder kann es sein das die I2C-Kommandos nicht in konstanter Frequenz gesendet werden ?
(steuerst du mit Mikroprozessor oder über einen PC ?)

Was funktioniert an RunInit nicht ? Nach dem Datenblatt hätte ich gedacht er läuft bei RunInit solange Richtung Pos1 bis der Schalter schliesst und dann noch Pos2 davon weg und setzt sich dann auf Null.

Wenn du ohne RunInit eine Referenz suchen willst könntest du ja auch Schritt für Schritt wie bei dem Mikroschritt Test vorgeben bis der Schalter schliesst... aber das wäre wenig elegant.

Grüsse,
Thomas

thomas.laepple@iup.uni-heidelberg.de

martin
07.03.2004, 10:52
Hallo Thomas,

Ich steuere den TMC über einen Atmel 90s2313 an.

ich glaube, dass die Grösse der Schritte unterschiedlich ist. Das ist aber im Datenblatt, Seite 22 auch zu sehen. So sieht die Bewegung auch ungefähr aus (mal schneller, mal langsamer)

Zu RunInit: Ich habe mir das auch so wie du vorgestellt, allerdings sieht das Ding bei mir den Endschalter nicht :-( Er fährt auf POS1, und danach auf POS2, egal, was ich mit dem Schalter mache. Das kann doch nicht so vorgesehen sein. Ich weiss nicht was ich da Falsch mache.

Grüsse,
Martin

07.03.2004, 17:07
Hallo Martin,

ich habe mir auf deinen Hinweis nochmal das Datenblatt genauer angeschaut. Auf Seite 22 sehe ich die Sinus Näherung der Ströme.
Wenn die Schrittgrössendifferenz nur genau so wie die Stromdifferenzen wären !? dann wäre dies für mich nicht so schlimm.

Werden aber tatsächlich im Schnitt 1/4... 1/16 Schritte gemacht oder läuft der Motor durch den Start und Stoppprozess etwas weiter. Wenn du mal eine Drehung lang zählen könntest ,auch bei sehr langsamen Betrieb ca. (32* 1/16 Steps) pro Sekunde, wäre es spitze

Laut 6.3.2. "Transition Irun to Ihold" werden die Spulen nach einer Bewegung für die Länge von zwei-Halbschritten auf dem gleichen Strom gehalten. Dabei müsste der Motor doch in seiner MikroPosition stehen bleiben !?

Vielen Dank für deine Experimente.

Ich muss vier Motoren sehr langsam (und fliessend) ansteuern und überlege entweder die TMC222 oder Siemens TCA3727 gekoppelt mit einem zusätzlichen PIC-Prozessor zu nehmen. Die Siemens können vier Stromstufen pro Ausgang und schaffen so 1/4 Step (+ einen MiniStep Modus nach Siemens, den ich noch nicht so verstehe)

Grüsse

Thomas

Manf
07.03.2004, 18:38
Hallo Thomas,
ich habe mir die TCA3727 angesehen und die Stepmodes mit den 3 Stromstärken für Iq1 und Iq2 einmal in einem x,y Diagramm, nicht über der Zeit aufgetragen. Ich glaube so ist es übersichtlicher.
Der Ministep ist ein 1/6 Schritt Mode der gerade mit den 3 Stromstärken ganz gut zu machen ist.
(Ein bißchen schlicht ist es schon gemacht, nur auf dem Rechteck herumzulaufen aber es ist ein Einstieg in die Microstep Technik.)
Manfred

Manf
07.03.2004, 18:43
Ich habe das BIld in meine Gallery gestellt (siehe unten), mit dem Attachment geht es wohl im Moment nicht.
Manfred

07.03.2004, 19:54
Hallo Manfred,


vielen Dank für die schöne Illustration. :-)
Im Moment bin ich von den Steuerungen hin und her gerissen.
4x TMC222 wäre das schönste, aber das Problem mit der kleinen Geschwindigkeit.

Beim 4xTCA3727 + ein PIC muss ich noch einen zweiten Chip programmieren (wegen der vielen Ports würde der zweite PIC die Signale erzeugen), wäre aber die billigste Lösung.

Als drittes gibt es ja noch 4xIMT901er der relativ teuer ist aber 1/8 Schritt mit direktem Clk, CW/CCW Signal macht. Dafür hätte ich grosse Stromreserven...

Viele Grüsse

Thomas

Joerg
12.03.2004, 08:35
Hallo Y.C.,


Bekommt der TMC222 (wähernd das Fahren oder direkt nach dem Anhalten) das Kommando 3 mal hintereinander, ändert er seine Targetpsoition auf $0D0D (3341). Dort wird der Motor dann gefahren.
Diese Position ist mir unbekannt.

Sorry, habe eine Weile hier nicht reingeschaut. Das angesprochene Problem trat bei mir nicht auf. Hört sich aber nach einem I2C-Issue an.
Allerdings ist ein irrtümliches SetPosition ja fast ausgeschlossen, da eine Sicherung mit den 2x$FF drin ist. Damit scheidet ein falsch interpretiertes Lesekommando eigentlich aus.
Gibt es evtl. sonst noch Probleme auf der I2C-Leitung?

@Martin: RunInit habe ich wegen Veralberung relativ schnell ad-acta gelegt.
Das Pfeiffen kommt vom Motor (Chopperfrequenz) und hat erst mal mit dem Aufbau nichts zu tun. Bei dem Ministepper aus meinem Projekt war das Pfeiffen auch da (egal ob eigene Leiterplatte oder Eval.-Kit), ein anderer Stepper produzierte das Pfeiffen nicht.

Viele Grüße
Jörg

martin
14.03.2004, 11:35
Hallo Joerg,

Kannst du mir mal erklären, wie du das mit dem Referenzlauf manuell machst? Ich habe mir jetzt auch eine Routine geschrieben, die das macht, aber ich habe noch ein paar Probleme damit:

Folgendes passiert bei mir:

Position auf 0 setzen (ResetPosition)
Einzelne Schritte in positive Richtung fahren, bis Schalter anspricht
Solange einzelne Schritte zurück fahren bis Schalter wieder offen
Position auf 0 setzen (ResetPosition)

Das Problem ist, wenn ich jetzt im weiteren Programm in positive Richtung fahren will, gerate ich zwangsläufig wieder in den Endschalter.

Gibt es eine Möglichkeit, die Position auf einen anderen Wert als 0x0000
zu setzen, ohne sie dabei anzufahren?

@Thomas

Nach ein paar weiteren Experimenten habe ich noch etwas herausgefunden:

Ich glaube man kann sagen, dass der Schrittwinkel in etwa mit den Stromdifferenzen übereinstimmt. Im sehr langsamen Betrieb ist das mit den einzelnen Mikroschritten kein Problem.
Wenn du aber etwas schneller wirst (knapp vor Vmin des TMC) könntest du ein Problem mit der ganzen Abfragerei kriegen. (Ich fahre momentan einen Schritt und frage dann mit GetFullStatus1 die drei Motion-Bits ab, ob der Schritt auch wirklich fertig ist, und mache erst dann den nächsten)

Die Frage ist auch, wie sich z.B. Vmax oder Acc auf einzelne Schritte auswirkt.

Zu den Zeiten Transition Irun to Ihold kann ich leider mangels Oszi nix sagen :-(

Grüße, Martin

Joerg
16.03.2004, 12:41
Hallo Martin,

den Referenzlauf habe ich im Prinzip ähnlich gemacht.


Das Problem ist, wenn ich jetzt im weiteren Programm in positive Richtung fahren will, gerate ich zwangsläufig wieder in den Endschalter.


Warum, du stellst über SetMotorParameter die Richtung um (Status:Shaft) und alles wird gut ;-)


Gibt es eine Möglichkeit, die Position auf einen anderen Wert als 0x0000
zu setzen, ohne sie dabei anzufahren?

Naja man könnte wiederum mit SetMotorParameter die SecurePosition setzen und anschließend mit GotoSecurePosition anfahren. Ist zwar nicht Sinn der Sache aber sollte gehen.

Viele Grüße
Jörg

martin
16.03.2004, 21:38
Hallo Leute,



Warum, du stellst über SetMotorParameter die Richtung um (Status:Shaft) und alles wird gut


Danke Joerg, hätt ich auch selbst draufkommen können :-) Jetzt gehts auch!

P.S. Hat von Euch noch jemand welche von den TMC222´s rumoxodieren und könnte mir evtl. welche abgeben, da ich als Privatperson (Student) nicht an die Dinger rankomme. Ich hab mir die damals als Samples bestellt und möchte die Jungs nicht schon wieder nerven. Ich würde natürlich den Preis + Versand bezahlen, da mir die Teile mittlerweile ganz gut gefallen. Ich bräuchte so ungefähr 4 Stück, da sich mein Projekt mittlerweile etwas vergrössert hat.
Angebote, falls vorhanden bitte an meine Email.

Dabei stellt sich natürlich die Frage, wie adressiere ich mehr als 2 von diesen Teilen? Bis jetzt habe ich das über das Hardwired-Bit gemacht, aber wie geht das bei mehr als 2 Ic´s?

Grüsse, Martin

Joerg
17.03.2004, 08:53
Hallo Martin,


Dabei stellt sich natürlich die Frage, wie adressiere ich mehr als 2 von diesen Teilen? Bis jetzt habe ich das über das Hardwired-Bit gemacht, aber wie geht das bei mehr als 2 Ic´s?

Du kannst Bit2-Bit5 der I2C-Adresse über das OTP-ROM festlegen, das HW-Bit (Bit1) bleibt trotzdem noch.

Viele Grüße
Jörg

martin
23.03.2004, 21:38
Hallo,

@Joerg:

Merken sich die Ic´s die OTP einstellungen oder muss ich das bei jedem Neustart wieder reinschreiben und kann man die nachträglich nochmal ändern? Dann würden mir die Portpins langsam knapp werden :-(

Sorry, viele Fragen.

Ich hatte immer Angst, das auszuprobieren, nicht dass meine IC´s dann irgendeine unbekannte Adresse haben, und ich darf dann suchen.
Irgendwie werde ich bei diesem Thema aus dem Datenblatt auch nicht schlau.

Danke und viele Grüsse,
Martin

Joerg
24.03.2004, 10:40
Hallo Martin,


Merken sich die Ic´s die OTP einstellungen oder muss ich das bei jedem Neustart wieder reinschreiben und kann man die nachträglich nochmal ändern?

also OTP steht eigentlich für One Time Programmable - (ROM) und ich deute das im Zusammenhang mit dem TMC222 auch genau so.
Muss allerdings gestehen, dass ich in meinem Projekt mit der voreingestellten Standardadresse arbeiten konnte und es somit nicht ausprobiert habe.


Ich hatte immer Angst, das auszuprobieren, nicht dass meine IC´s dann irgendeine unbekannte Adresse haben, und ich darf dann suchen.

Naja mir ging's ähnlich und das Projekt ließ es eben zu. Auch die Motorparameter lassen sich ja im OTP-ROM ablegen, aber genausogut kann man die Parameter beim initialisieren auch per I2C aus dem Controller übertragen.

Viele Grüße
Jörg

martin
29.03.2004, 19:26
Hallo,

also jetzt bin ich endgültig am verzweifeln!

Ich wollte gerade die OTP-Bits programmieren, um mehr als 2 IC´s ansprechen zu können. Hat auch funktioniert, bis ich mal die Spannung länger abgeschaltet hab. Dann waren sie wieder weg :-( Das Lock-bit habe ich probeweise auch mal gesetzt, nützt auch nix.

Jetzt hab ich im Datenblatt, Seite 38 noch was interessantes gefunden:

Vbb Nominal operating supply range 6.5-18 V
VbbOTP Supply Voltage for OTP zapping 8.5-9.5 V

Das wird aber sonst nirgends erwähnt. Vor allem frage ich mich, was Vbb sein soll. Ich kenne nur Vbat.

Kann mir hier jemand weiterhelfen?

Ciao, Martin

martin
31.03.2004, 21:40
Hallo Leute,

endlich hab ich´s geschafft, die OTP-Bits zu programmieren :cheesy:
Ging allerdings nicht ganz ohne Verluste über die Bühne.

Damit es euch auch nicht so geht, möchte ich hier mal meine Erfahrungen schildern:

DAS DATENBLATT LESEN!!!

Hier nur ein Beispiel, was man übersehen kann:

Please check that the correct supply voltage is applied to the circuit before zapping the OTP (See: Table 39: DC Parameters Supply and Voltage regulator on page 38 ), otherwise the circuit will be destroyed.

Also nun zum Vorgehen:

Keinesfalls einfach den Befehl SetOTP anwenden, ohne die richtige Spannung an Vbat angelegt zu haben. Sie muss zwischen 8.5 und 9.5 Volt liegen, ansonsten tritt eine Zerstörung des IC´s auf.
(zumindest laut Datenblatt, bei mir ließ sich danach der OTP-Speicher nicht mehr programmieren, alles andere geht aber noch. Ich habe mit 24V Programmiert)

Na ja, mit der richtigen Spannung und neuen IC´s hats dann auch funktioniert, jetzt merken die sich Ihre Adresse endlich. Die zwei kaputten laufen jetzt eben auf der Standardadresse und kriegen ihre Daten vom Controller.

Hoffe jemandem geholfen zu haben,
Martin

07.05.2004, 11:46
Hallo Martin; mein Name ist Thomas.
Ich beschäftige mich seit einiger Zeit mit diesem Schaltkreis. Du hättest es dir auch einfacher machen können, vier oder mehr TMC-222s einzeln ansprechen zu können.
Setze zunächst alle HW-bits auf Null. Vor alle IC-HW-bits setzt du einen 1-aus-n- Dekoder, der immer das HW-bit auf Eins setzt, dessen IC du dann gerade mit mit der "general call adress"(HW=1) ansprichst.

Ich hätte auch mal eine Frage: Hast du C-Sources für den TMC-222? Da ich auf einer kurzen Strecke mehrmals die Geschwindigkeit ändern muß, läßt sich das mit dem Eval-Prog schlecht machen.

MFG Thomas

martin
07.05.2004, 12:07
Hallo Thomas,

deine Lösung wäre für mich etwas problematisch gewesen, da ich zwei Platinen mit jeweils zwei IC´s habe. Dann hätte ich die ganze Verdrahtung ändern müssen. Aber daran hatte ich auch schon gedacht.

Ich habe leider nur Assembler-Code. Aber welches eval-Prog meinst du?
Das kenne ich gar nicht :-(

Grüsse, Martin

Fat_Thomi
07.05.2004, 12:18
Hallo Martin,
ich hab mit jetzt grad neu eingeloggt, bin also neu hier und jetzt unter dem Name Fat_Thomi erkennbar, Thomas war schon vergeben.

Ich arbeite beruflich bei Zeiss mit diesem Schaltkreis, und wir haben Eval-Kits mit einer Software dazu bestellt, in der man auf einer Windowsoberfläche alle Motorparameter und Target,usw. bequemer zu Ausprobieren einstellen kann.

Wo bekommt man diese Assembler-sources, oder hast du sie selbst verfasst? Würd sie mir germ mal ansehen, vielleicht kann ich was damit anfangen

Dschulle
19.05.2004, 15:19
Hallo,
ich versuche den TMC222 mit Hilfe eines IOWarriors anzusprechen. Das Schreiben über I2C scheint zu funktionieren (zumindest konnte ich die SlaveAddress ändern), allerdings bekomme ich beim Lesen als Werte immer 0xFF zurück. Die Anzahl der zurückgegebenen Bytes passt. Wechsel ich die SlaveAdress, so bekomme ich einen I2C Fehler, demnach scheint die Kommunikation mind. teilweise zu funktionieren...
Weiss jemand Rat?

Sollte jemand eventuell über PIC Code verfügen, bin ich auch sehr interessiert O:)

06.08.2004, 22:53
Hallo zusammen.

Zwar ein paar Monate verspätet aber ich versuchs trotzdem mal:
Ich bin ebenfalls sehr interessiert am TMC222, nur ist das Problem, dass ich ihn in der Schweiz nirgens bekomme!!
Hat einer von euch noch welche rumliegen und wäre bereit dazu diese mir zu schicken? Natürlich gegen Bezahlung ;-)

mfg Marc

pethei
17.08.2004, 19:15
Hallo,

Ich verfolge gespannt eure Diskussion über den TMC222, da ich auch diesen Baustein als die Lösung meiner Problemchen ansehe.
Ich bastele an einer Schrittmotorenansteuerung für eine Minidrehmaschine und brauche dazu nur 2 Motoren. Die Ansteuerung sollte auch unter Linux laufen, daher die Öberfläch in Java. Ich suche Hilfe mittels eines Beispieles zur Ansteuerung Über I2C Bus, da mein Englisch nicht, na ja...ist. Die PDF Datei habe ich, aber ein Proggrammierbeispiel würde helfen.

IngBo
02.11.2004, 23:20
Im Moment bin ich von den Steuerungen hin und her gerissen.
4x TMC222 wäre das schönste, aber das Problem mit der kleinen Geschwindigkeit.

Die kleinste Schrittweite mit einem TMC222 ist 3FS/s. Dafür muss folgendes eingestellt werden:

- Vmax = 0 (99 FS/s)
- Vmin = 1 (1/32 von Vmax)
- AccShape = 1 (Geschwindigkeit wird zu Vmin gesetzt und keine
Beschleunigung zu Vmax ).

d.h. 99FS/s dividiert durch 32 ergibt ca. 3FS/s

IngBo (http://www.channaa.com)

02.11.2004, 23:23
ich versuche den TMC222 mit Hilfe eines IOWarriors anzusprechen. Das Schreiben über I2C scheint zu funktionieren (zumindest konnte ich die SlaveAddress ändern), allerdings bekomme ich beim Lesen als Werte immer 0xFF zurück. Die Anzahl der zurückgegebenen Bytes passt.

man bekommt die FFs wenn die I2C-Übertragung zu hoch ist. Das ist meistens bei GetOTPParam. Versuche mit <50kHz.

IngBo (http://www.channaa.com)

21.01.2006, 20:55
Ich hab die Elektronik zwar erst bekommen, aber die Anleitung(original englisch) habe ich schon gelesen. Und habe viel Know-How.

1. Zu weiter oben: Der Controller Überprüft Kurzschluss + Draht unterbrechungen. Für die "Unterbrechungen" muss der Haltestrom kleiner eingestellt sein als minimal fliesst!!! Der TMC222 will en Strom immer regeln, das macht Sinn, wenn mann bei hohen Drehzahlen noch viel Drehmoment haben will. Dann kann man nämlich die Spannung um einige erhöhen ohne den Motor zu töten!!! (Stromfluss==Drehmoment) Bei Drehungen steigt die Taktfrequenz-> sinkt der Strom -->> Höhere Spannung -> mehr Strom -> OK bis Stillstand (Motor tot) -->> Strom begrenzen und der Motor Überlebt.

2. Im Datenblatt ist nur die MaxDrehzahl(Vmax) angesprochen (pro Gruppe), vielleicht kann man sie noch kleiner Programmieren als die 99FS/s??
Weiters gibt es eine Vmin die bei 3FS/s beginnt(langsamer gehts ja wohl nichtmehr, oder. Wenn man relativ kleine Positionswechsel durchfüht, wird nur mit Vmin gefahren, da für beschleunigen und bremsen ja keine Zeit bleibt, siehe Seite 14 im DataSheet (V1,03 Okt1/2004) Unter Achse ist eigentlich die Zeit und nicht die Position.

Spät aber doch!!! :-k

Hat jemand ein Programm für die JControl
Bitte mailen an a.auer#pfunds.to # durch @ ersetzen (Anti Spam) =D>

17.03.2006, 16:51
Zum ElDef Bit
7.2 General problems when getting started
Q: What is the meaning of ElDef?
A: The ElDef flag (‘Electrical Defect’) is the logical ORing of the OVC1 and OVC2 flags. OVC1 is set to
one in case of an overcurrent (coil short) or open load condition (selected coil current is not reached)
for coil A. OVC2 is the equivalent for coil B.
Q: What could be the reason for ElDef / OVC1 / OVC2 being set to one?
A: There are a number of possible causes:
• Motor not connected (􀃆 open load)
• Connected motor has shorted coils (􀃆 overcurrent) or broken coils (􀃆 open load)
• Motor coils connected to the wrong device pins
• Selected coil current can not be reached (􀃆 open load) due to high coil impedance or low
supply voltage. Solution: Select a lower coil run/hold current or rise the supply voltage.
Generally: the calculated voltage required to reach a desired coil current at a given coil
resistance (V = I • R) must be significantly lower than actual supply voltage due to the coil
inductivity.

Auf Deutsch: Die Ströme dürfen nicht zu gross Dimensioniert werden. Der IC will den Strom immer begrenzen(regeln nicht schalten). -> Grosser Motor = grosser Strom, IC läuft; kleiner Motor, Stom wird nicht erreicht -> "Elektrischer Defekt" -> ElDef Bit wird gesetzt. -> Haltestrom Ihold und Irun (Laufstrom) anpassen.

Babbage
27.07.2006, 14:40
Hab mich jetzt auch mal mit dem TMC222 auseinandergesetzt.
Klappt soweit ganz gut. Zwei kleine Probs hab ich jedoch.

Ich hätte zwar gerne noch die Möglichkeit mehr als 800mA auf die Spulen zu geben. Kennt jemand einen anderen Baustein der das kann mit den Möglichkeiten und dem Preis des TMC222 kann?

Außerdem hab ich nirgends gefunden wie mal den Motor stromlos schalten kann.
Durch die PWM kommt es im Haltezustand zu einem leichten Pfeifen. Das wollte ich damit abstellen.
Und es kann auch vorkommen das der Motor tagelang nicht benutzt wird. Wäre sehr unschön wenn der Motor in der ganzen Zeit mit einer Frequenz im kHz Bereicht nutzlos bestromt werden würde.


Babbage

darwin.nuernberg
08.08.2006, 20:11
Alle, welche nach einer Platine zum TMC222 suchen oder aber kleine Problemchen mit dam Baustein haben...


Ich habe eine Schaltung und zugehörige Software (Bascom) entworfen:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21730

Eine Zusatz-Software ist auch schon bereit...

darwin.nuernberg
09.08.2006, 08:51
Please check that the correct supply voltage is applied to the circuit before zapping the OTP (See: Table 39: DC Parameters Supply and Voltage regulator on page 38 ), otherwise the circuit will be destroyed.

Keinesfalls einfach den Befehl SetOTP anwenden, ohne die richtige Spannung an Vbat angelegt zu haben. Sie muss zwischen 8.5 und 9.5 Volt liegen, ansonsten tritt eine Zerstörung des IC´s auf.
(zumindest laut Datenblatt, bei mir ließ sich danach der OTP-Speicher nicht mehr programmieren, alles andere geht aber noch. Ich habe mit 24V Programmiert)


Ich habe meinem TMC an 15V und keinerlei Probleme mit der OTP-Adressprogrammierung.
Trozdem sollte man sich an das Datenblatt halten.

Babbage
10.08.2006, 09:29
Weiß jemand wie man den Schrittmotor wieder ausschalten kann ohne das ein Haltestrom fließt?

Babbage

darwin.nuernberg
10.08.2006, 22:11
Ich ab zwar kein Meßgerät angeschlossen,
aber mit Ihold = 15 scheint der Motor nicht mehr bestromt zu werden,
moved dann aber auch nicht mehr,
erst wieder wenn der Wert niedriger wird.

So ist kein Haltemoment mehr "spürbar", dreht allerdings auch nicht mehr:

Motorparameter:
------------------------------------------
A = Irun [0..15 = max] = 15
B = Ihold [15..0 = max] = 15
C = Vmax [0..15 = max] = 15
D = Vmin [Vmax =0..15 1/32 Vmax] = 0
E = Shaft Richtung d. Achse[0/1] = 0
F = Acceleration [0..15 = max] = 1
G = Sichere Position [0..2047] = 0
H = Acc Form [0/1] = 0
I = Step Mode ( 1/2 Step ) = 0
------------------------------------------
S = Einstellungen an TMC Senden
0 = Menue verlassen
------------------------------------------
Auswahl :

So dreht er wieder....

Motorparameter:
------------------------------------------
A = Irun [0..15 = max] = 15
B = Ihold [15..0 = max] = 13
C = Vmax [0..15 = max] = 15
D = Vmin [Vmax =0..15 1/32 Vmax] = 0
E = Shaft Richtung d. Achse[0/1] = 0
F = Acceleration [0..15 = max] = 1
G = Sichere Position [0..2047] = 0
H = Acc Form [0/1] = 0
I = Step Mode ( 1/2 Step ) = 0
------------------------------------------
S = Einstellungen an TMC Senden
0 = Menue verlassen
------------------------------------------
Auswahl :
* Menü aus meiner erweiterten Software: [2]Download [2] (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=198551#198551)

Babbage
10.08.2006, 23:38
Danke, werds morgen früh testen.

Babbage

Babbage
11.08.2006, 16:51
Danke hat gefunzt.:)
Um den Motor danach wieder zum leben zu erwecken muß man noch ne Status1 Anfrage machen.

Hubble

darxon69
27.08.2006, 17:40
Irgendwie habe ich das mit dem Geschwindigkeitsproblem hier nicht verstanden. Wenn ich in das Datenblatt schaue, dann stellt sich für mich das so klar. Seite 10 und 11
Vmax gibt die maximale Schrittzahl/sek an in Fullsteps an. Das wären in der kleinsten Stufe 99 (Vmax Group A). VMin gibt den teiler an, der auf VMAx bezogen ist. Wenn ich den VMin Index 1 ind er Vmax Group A wähle, dann komme ich auf 3 Fullsteps/sek minimum.
Ist das den Leuten hier immer noch zu schnell?

starkeeper
15.11.2006, 09:10
Hi,
ich wollte heute auch mal meine Senf abgeben zu dem TMC222, alle hier scheinen ja total begeistert zu sein. Ich finde ein Paar Nachteile hat der Chip in bezug auf Roboter aber schon, eventuell sind das aber auch Denkfehler meiner Seits also Korrigiert mich ruhig.

1. Kann ich ja nur maximal 0xFFFF Schritte am Stück machen. Dann wird der Controller runter Regeln und stehen bleiben. Will ich eine weitere Strecke fahren muss ich warten, bis der Motor steht, die Position Resetten und dann gehts weiter.

2. Will ich den Schrittmotor rückwärts fahren lassen, ohne zu wissen an welcher Position er sich gerade befindet. Er soll z.B. 500 Schritte zurück und befindet sich gerade an Position 100. So kann ich ihm maximal die Null als ziel senden, also 100 Schritte zurück. Das Umgehen ist sehr umständlich. ich müsste einen SoftStop machen, die Aktuelle position abfragen, den Shaft-Parameter ändern damit er in die Andere richtung läuft, einen reset possition und dann erst kann ich ihn die 500 schritte fahren lassen.
Schlecht daran finde ich, dass man ständig den TMC pollen muss um zu erfahren wann die Motoren nun endlich stehen geblieben sind.

3. Bei dem Betrieb von zwei Schrittmotoren zum Antrieb eines Roboters muss ich zwei Controller verwenden. Durch das I2C gelingt es nie die zwei Controller Synchron zu starten, sodass ich bei der Fahrbewegung ständig am Geschwindigkeitsregler die Spurtreue nachregeln muss. Das geht natürlich nur mit einem Bewegungssensor (Maussensor)

Trotzdem ist der Chip einfach und geil, mir geht jedesmal einer Ab, wenn der Roboter beschleunigt! ;-)

Babbage
15.11.2006, 14:05
1. Du kannst mit einer Anweisung maximal 0x7FFF Schritte am Stück machen.
Steht der Motor bei 0 und Du gibst 0xfF00 an dann fährt er 0x0100 Schritte Rückwärts.
Allerdings kannst Du mit SetPosition während der Fahrt eine neue Position angeben ohne das der Motor stoppt. Somit ist eine Endlosfahrt möglich.
Ich frage hierzu ab an welcher Position sich der Motor befindet und starte dann rechtzeitig den nächsten Befehl.

2.

Will ich den Schrittmotor rückwärts fahren lassen, ohne zu wissen an welcher Position er sich gerade befindet.
Du kannst jederzeit die Position abfragen.


So kann ich ihm maximal die Null als ziel senden, also 100 Schritte zurück. Schon beantwortet


Schlecht daran finde ich, dass man ständig den TMC pollen muss um zu erfahren wann die Motoren nun endlich stehen geblieben sind.
Ja find ich auch ungünstig, bringt aber eine i2c Master Slave Kommunikation mit sich.

3. Das stimmt.



mir geht jedesmal einer Ab
lol

Finde auch das der Chip zwar gut aber nicht perfekt ist

starkeeper
19.11.2006, 09:51
1. Du kannst mit einer Anweisung maximal 0x7FFF Schritte am Stück machen.
Steht der Motor bei 0 und Du gibst 0xfF00 an dann fährt er 0x0100 Schritte Rückwärts.


Wie hast du die 0xFF00 berechnet?
Hab mir nochmal das Datenblatt angeschaut und du hast recht, man kann tatsächlich negative Werte schicken.
Stehe ich also bei Null und möchte nun 0x100 Schritte rückwärts, muss ich doch nur das 16Bit auf 1 setzen. Also eine 0x8100 schicken. Oder habe ich das falsch verstanden?

edit:
Hat sich erledigt! war auch zu einfach um es direkt zu verstehen.

Babbage
19.11.2006, 21:04
Am einfachsten nimmst Du Dir eine 16bit Variable.
Oft ein integer im C zumindest bei 16bit Prozessoren.
Dann hast du einen Startwert von 0 und mußt nur noch 0x100 abziehen (das sind 256 Schritte) und dann kommt eben 0xff00 raus.

bei vorzeichenabhängigen 16 bit Wert ist
0x000 = 0 im dezimalsystem
0xffff = -1
0xfffe = -2
0xfff0 = -16
0xff00 = -256
0x8000 = -32768
0x8100 = -32512 !! nicht - 0x100
0x7FFF = 32767