Ding:Schrittmotor Controller TMC222micro: Unterschied zwischen den Versionen

Aus FabLab Region Nürnberg
KKeine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 13: Zeile 13:
Diese Seite befindet sich im Aufbau (BETA Status)
Diese Seite befindet sich im Aufbau (BETA Status)


===== Der TMC222 ist ein Schrittmotor Controller für Positionierungsaufgaben =====  
== Der TMC222 ist ein Schrittmotor Controller für Positionierungsaufgaben ==
    
    
Die Position kann hierbei mit einem 16-Bit breiten Wert (0 - 65535) bestimmt werden.
Die Position kann hierbei mit einem 16-Bit breiten Wert (0 - 65535) bestimmt werden.
Zeile 20: Zeile 20:
wird vom Chip gesteuert, dies muss im IC natürlich vorher einmalig eingestellt sein.
wird vom Chip gesteuert, dies muss im IC natürlich vorher einmalig eingestellt sein.
    
    
===== Anwendungen =====  
=== Anwendungen ===
Mir fallen für diesen Einsatzzweck folgende Anwendungen ein:
Mir fallen für diesen Einsatzzweck folgende Anwendungen ein:
* Modellbahn:      Drehscheibensteuerung, Schrankensteuerung, Hebebrückensteuerung
* Modellbahn:      Drehscheibensteuerung, Schrankensteuerung, Hebebrückensteuerung
Zeile 28: Zeile 28:
      
      
===== Außerdem ist im TMC222 eine Wegoptimierung eingebaut =====  
===== Außerdem ist im TMC222 eine Wegoptimierung eingebaut =====  
  Ist die angegebene Position von der aktuellen Position z.B. links herum kürzer als rechts herum  
Ist die angegebene Position von der aktuellen Position z.B. links herum kürzer als rechts herum  
  wird dieser Weg eingeschlagen.  
wird dieser Weg eingeschlagen.  
  Beispiel: akt. Pos = 250, Zielpos = 65530 (links herum wären nur -250 & -5 also -255 Schritte nötig)
Beispiel: akt. Pos = 250, Zielpos = 65530 (links herum wären nur -250 & -5 also -255 Schritte nötig)
  Dies kann durch abfragen der aktuellen Position und geschickter  
Dies kann durch abfragen der aktuellen Position und geschickter  
  Programmierung der Zielposition umgangen werden. Auch kann die aktuelle Position jederzeit
Programmierung der Zielposition umgangen werden. Auch kann die aktuelle Position jederzeit
  genullt oder auf einen beliebigen Wert gesetzt werden.
genullt oder auf einen beliebigen Wert gesetzt werden.
    
    
Genau aus diesem Grund ist dieses IC auch NICHT für z.B. CNC Steuerungen geeignet.
Genau aus diesem Grund ist dieses IC auch NICHT für z.B. CNC Steuerungen geeignet.
Vielmehr eignet sich dieses IC um bestimmte Positionen mit definierten Parametern zu "anzufahren".
Vielmehr eignet sich dieses IC um bestimmte Positionen mit definierten Parametern zu "anzufahren".
    
    
  Dieses Sketch ist diskret ohne TMC Library (GitHub) aufgebaut
===== Dieses Sketch wird diskret ohne TMC Library (GitHub) aufgebaut =====
    
    
  -> Beachte: Die I2C Leitungen, SCL und SDA benötigen jeweils einmalig einen 10kR Pull Up Widerstend zu +5V des Arduino
* Beachte: Die I2C Leitungen, SCL und SDA benötigen jeweils einmalig einen 10kR Pull Up Widerstend zu +5V des Arduino  
  -> Beachte: Die Versorgungsspannung des TMC222 darf nicht unter 8V liegen
* Beachte: Die Versorgungsspannung des TMC222 darf nicht unter 8V liegen
  -> Beachte: Es muss ein Schrittmotor an die Platine angeschlossen sein
* Beachte: Es muss ein Schrittmotor an die Platine angeschlossen sein
  -> Beachte: Die Pins HW und SWI haben keinen Logic Level!
* Beachte: Die Pins HW und SWI haben keinen Logic Level!
               HW löst den zweiten Adressbereich aus mehr dazu im Datenblatt
               HW löst den zweiten Adressbereich aus mehr dazu im Datenblatt
               SWI ist ein Eingang für einen Refernzschalter mehr dazu im Datenblatt
               SWI ist ein Eingang für einen Refernzschalter mehr dazu im Datenblatt
Zeile 50: Zeile 50:
               Important Hint: The SWI is not a logic level input as usual;  
               Important Hint: The SWI is not a logic level input as usual;  
               it needs to be connected via 1K resistor either to (+VBAT) or GND;
               it needs to be connected via 1K resistor either to (+VBAT) or GND;
  ansonsten kann der TMC keine sinnvollen Daten generieren
ansonsten kann der TMC keine sinnvollen Daten generieren
    
    
  Datenblatt zum TMC222: http://www.trinamic.com/_articles/products/integrated-circuits/tmc222/_datasheet/TMC222_datasheet.pdf
Datenblatt zum TMC222: http://www.trinamic.com/_articles/products/integrated-circuits/tmc222/_datasheet/TMC222_datasheet.pdf
    
    
  ---  ---  ---
 
    
    
===== Adressierung und OTP Memory =====  
=== Adressierung und OTP Memory ===
    Der TMC222 wird über I2C (TWI) Bus angesprochen, dazu ist es erforderlich dass bei Verwenung mehrerer dieser ICs
Der TMC222 wird über I2C (TWI) Bus angesprochen, dazu ist es erforderlich dass bei Verwenung mehrerer dieser ICs
    jeder seine eigene Adresse erhält, da sonst auf dem BUS Konflikte auftreten.
jeder seine eigene Adresse erhält, da sonst auf dem BUS Konflikte auftreten.
    Hierzu hat der TMC22 einen sog. OPT Speicher (frei übersetzt Einmalig programmiererbarer Speicher)
 
    Die Speicherzellen in diesem Speicher können ähnlich wie in einem EPROM gesetzt aber nie wieder zurückgesetzt werden.
Hierzu hat der TMC22 einen sog. OPT Speicher (frei übersetzt Einmalig programmiererbarer Speicher)
    d.h. der Speicher inhalt kann jederzeit verändert werden aber nur nach oben. Es sist also Vorsicht beim beschreiben
Die Speicherzellen in diesem Speicher können ähnlich wie in einem EPROM gesetzt aber nie wieder zurückgesetzt werden.
    dieser Speicherzellen gegeben. Es muss also dem IC einmalig eine eindeutige Adresse gegeben werden.
d.h. der Speicher inhalt kann jederzeit verändert werden aber nur nach oben. Es sist also Vorsicht beim beschreiben
    Hilfreich kann hier der HW Eingang sein, dieser Schaltet zwischen zwei Adressbereichen um.
dieser Speicherzellen gegeben. Es muss also dem IC einmalig eine eindeutige Adresse gegeben werden.
Hilfreich kann hier der HW Eingang sein, dieser Schaltet zwischen zwei Adressbereichen um.
       HW = offen : 16 verfügbare Adressen ab 0xC0 (DEZ=192) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen
       HW = offen : 16 verfügbare Adressen ab 0xC0 (DEZ=192) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen
       HW = GND  : 16 verfügbare Adressen ab 0xC2 (DEZ=194) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen
       HW = GND  : 16 verfügbare Adressen ab 0xC2 (DEZ=194) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen
    Siehe auch im Datenblatt Abschnitt "6.3 Physical Address of the circuit"
Siehe auch im Datenblatt Abschnitt "6.3 Physical Address of the circuit"
      
      
===== Aufbau / Berechnung der I2C Adressierung (1 Byte) =====  
===== Aufbau / Berechnung der I2C Adressierung (1 Byte) =====  
Zeile 82: Zeile 83:
           Immer 1 (HIGH) fest eigebrannt       
           Immer 1 (HIGH) fest eigebrannt       
      
      
    Auch die Mototparameter können in diesem OTP Speicher abgelegt werden, diese sind allerdings auch
Auch die Motorparameter können in diesem OTP Speicher abgelegt werden, diese sind allerdings auch
    in einem flüchtigen RAM konfigurierbar und müssen dann eben bei jedem Neustart/Reset neu parametriert werden.
in einem flüchtigen RAM konfigurierbar und müssen dann eben bei jedem Neustart/Reset neu parametriert werden.
      
      
  Die Steuerung geschieht immer mit einem sog. Daten-Telegramm, in welchen die einzelnen Paramerter eingetragen sind.
Die Steuerung geschieht immer mit einem sog. Daten-Telegramm, in welchen die einzelnen Paramerter eingetragen sind.
  Je nach Befehl an den TMC222 sind diese Telegramme anders aber ähnlich aufgebaut. Hierzu habe ich eingenen Funtionen
Je nach Befehl an den TMC222 sind diese Telegramme anders aber ähnlich aufgebaut. Hierzu habe ich eingenen Funtionen
  im Nachfolgenden Sketch geschrieben.
im Nachfolgenden Sketch geschrieben.
 
 
===Damit das ganze nicht zu sehr Theorie wird ===
baue ich in den kommenden Tagen so nach und nach ein Arduino Sketch auf,
welches entsprechend dokumentiert den Einstieg in die Ansteuerung des TC222 erleichtern soll.
 
== Aufbau des Sketches Schritt für Schritt==


=== Als erstes müssen wir die Befehle dfinieren===
Diese definieren wir als Konstanten mit sprechenden Bezeichnungen, damit wir uns nicht den Wert merken müssen
  // TMC222 Befehlssatz
  const byte _TMC222GetFullStatus1    = 0x81;
  const byte _TMC222GetFullStatus2    = 0xFC;
  const byte _TMC222GetOTPParam        = 0x82;
  const byte _TMC222GotoSecurePosition = 0x84;
  const byte _TMC222HardStop          = 0x85;
  const byte _TMC222ResetPosition      = 0x86;
  const byte _TMC222ResetToDefault    = 0x87;
  const byte _TMC222RunInit            = 0x88;
  const byte _TMC222SetMotorParam      = 0x89;
  const byte _TMC222SetOTPParam        = 0x90;
  const byte _TMC222SetPosition        = 0x8B;
  const byte _TMC222SoftStop          = 0x8F;





Version vom 31. Januar 2016, 18:25 Uhr

Foto
TMC222microt.png
flattr.png
Basisdaten
Status unbenutzbar
Schöpfer Udo (Diskussion)


Diese Seite befindet sich im Aufbau (BETA Status)

Der TMC222 ist ein Schrittmotor Controller für Positionierungsaufgaben

Die Position kann hierbei mit einem 16-Bit breiten Wert (0 - 65535) bestimmt werden. Im Idealfall wird dem Chip nur die Position angegeben an welche er den Motor steuern soll, der Rest wie Beschleunigung, Verzögerung, Geschwindigkeit, StepMode, Strombegrenzung usw. usf. wird vom Chip gesteuert, dies muss im IC natürlich vorher einmalig eingestellt sein.

Anwendungen

Mir fallen für diesen Einsatzzweck folgende Anwendungen ein:

  • Modellbahn: Drehscheibensteuerung, Schrankensteuerung, Hebebrückensteuerung
  • Regalsystem: Regalroboter fü z.B. CD-Sammlung ;-)
  • Zeigersteuerung: Zeiger für Analog Uhr, Anzeigeistrumente (Amaturenbrett im KFZ)
  • Lüftung: Schiebersteuerung für Luftverteiler
Außerdem ist im TMC222 eine Wegoptimierung eingebaut

Ist die angegebene Position von der aktuellen Position z.B. links herum kürzer als rechts herum wird dieser Weg eingeschlagen. Beispiel: akt. Pos = 250, Zielpos = 65530 (links herum wären nur -250 & -5 also -255 Schritte nötig) Dies kann durch abfragen der aktuellen Position und geschickter Programmierung der Zielposition umgangen werden. Auch kann die aktuelle Position jederzeit genullt oder auf einen beliebigen Wert gesetzt werden.

Genau aus diesem Grund ist dieses IC auch NICHT für z.B. CNC Steuerungen geeignet. Vielmehr eignet sich dieses IC um bestimmte Positionen mit definierten Parametern zu "anzufahren".

Dieses Sketch wird diskret ohne TMC Library (GitHub) aufgebaut
  • Beachte: Die I2C Leitungen, SCL und SDA benötigen jeweils einmalig einen 10kR Pull Up Widerstend zu +5V des Arduino
  • Beachte: Die Versorgungsspannung des TMC222 darf nicht unter 8V liegen
  • Beachte: Es muss ein Schrittmotor an die Platine angeschlossen sein
  • Beachte: Die Pins HW und SWI haben keinen Logic Level!
             HW löst den zweiten Adressbereich aus mehr dazu im Datenblatt
             SWI ist ein Eingang für einen Refernzschalter mehr dazu im Datenblatt
             Um diese Eingange auszulösen reicht ein Schalten auf (+UB)/GND im anderen Fall sind diese offen zu halten.
             Im Layout wurde ein Schalten gegen GND vorgesehen
             Important Hint: The SWI is not a logic level input as usual; 
             it needs to be connected via 1K resistor either to (+VBAT) or GND;

ansonsten kann der TMC keine sinnvollen Daten generieren

Datenblatt zum TMC222: http://www.trinamic.com/_articles/products/integrated-circuits/tmc222/_datasheet/TMC222_datasheet.pdf


Adressierung und OTP Memory

Der TMC222 wird über I2C (TWI) Bus angesprochen, dazu ist es erforderlich dass bei Verwenung mehrerer dieser ICs jeder seine eigene Adresse erhält, da sonst auf dem BUS Konflikte auftreten.

Hierzu hat der TMC22 einen sog. OPT Speicher (frei übersetzt Einmalig programmiererbarer Speicher) Die Speicherzellen in diesem Speicher können ähnlich wie in einem EPROM gesetzt aber nie wieder zurückgesetzt werden. d.h. der Speicher inhalt kann jederzeit verändert werden aber nur nach oben. Es sist also Vorsicht beim beschreiben dieser Speicherzellen gegeben. Es muss also dem IC einmalig eine eindeutige Adresse gegeben werden. Hilfreich kann hier der HW Eingang sein, dieser Schaltet zwischen zwei Adressbereichen um.

      HW = offen : 16 verfügbare Adressen ab 0xC0 (DEZ=192) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen
      HW = GND   : 16 verfügbare Adressen ab 0xC2 (DEZ=194) jede 4. Adresse, jede 2. Adresse bestimmt schreiben/lesen

Siehe auch im Datenblatt Abschnitt "6.3 Physical Address of the circuit"

Aufbau / Berechnung der I2C Adressierung (1 Byte)
       Im Datenblatt wird AD0 auf Bit1 genannt, da Bit0 IMMER die Richtung (schreiben/lesen) definiert.
          Bit7  Bit6  Bit5  Bit4  Bit3  Bit2  Bit1  Bit0
          ^     ^     ^     ^     ^     ^     ^     ^
          |     |     |     |     |     |     |     |
          |     |     |     |     |     |     |     Schreiben/Lesen
          |     |     |     |     |     |     HW-Pin Status
          |     |     |     |     |     programmierbares Adress-Bit
          |     |     |     |     programmierbares Adress-Bit 
          |     |     |     programmierbares Adress-Bit      
          |     |     programmierbares Adress-Bit      
          |     Immer 1 (HIGH) fest eigebrannt
          Immer 1 (HIGH) fest eigebrannt      
    

Auch die Motorparameter können in diesem OTP Speicher abgelegt werden, diese sind allerdings auch in einem flüchtigen RAM konfigurierbar und müssen dann eben bei jedem Neustart/Reset neu parametriert werden.

Die Steuerung geschieht immer mit einem sog. Daten-Telegramm, in welchen die einzelnen Paramerter eingetragen sind. Je nach Befehl an den TMC222 sind diese Telegramme anders aber ähnlich aufgebaut. Hierzu habe ich eingenen Funtionen im Nachfolgenden Sketch geschrieben.


Damit das ganze nicht zu sehr Theorie wird

baue ich in den kommenden Tagen so nach und nach ein Arduino Sketch auf, welches entsprechend dokumentiert den Einstieg in die Ansteuerung des TC222 erleichtern soll.

Aufbau des Sketches Schritt für Schritt

Als erstes müssen wir die Befehle dfinieren

Diese definieren wir als Konstanten mit sprechenden Bezeichnungen, damit wir uns nicht den Wert merken müssen

 // TMC222 Befehlssatz
 const byte _TMC222GetFullStatus1     = 0x81;
 const byte _TMC222GetFullStatus2     = 0xFC;
 const byte _TMC222GetOTPParam        = 0x82;
 const byte _TMC222GotoSecurePosition = 0x84;
 const byte _TMC222HardStop           = 0x85;
 const byte _TMC222ResetPosition      = 0x86;
 const byte _TMC222ResetToDefault     = 0x87;
 const byte _TMC222RunInit            = 0x88;
 const byte _TMC222SetMotorParam      = 0x89;
 const byte _TMC222SetOTPParam        = 0x90;
 const byte _TMC222SetPosition        = 0x8B;
 const byte _TMC222SoftStop           = 0x8F;