SPI Ansteuerung TMC429

  • 1
  • 2
  • 3
  • Page 1 of 3
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

SPI Ansteuerung TMC429

 · 
Posted: 17.03.2013 - 13:01  ·  #1
Hallo Zusammen,

ich habe Probleme beim Ansprechen des Schritmotorcontrollerts TMC429 von Trinamic.

Wenn ich mit dem (inzwischen sehr weit gekürzten) Programm versuche ein Register über die SPI Schnittstelle zu lesen krige ich nur beim Status Byte einen vernünftigen Wert, der sich auch sinnvoll ändert wenn ich einen der Endschalter betätige.
Das Verhalten ist vollig gleich, egal welches Register ich zu lesen versuche.
Irgendwo scheine ich einen grundsätzlichen Fehler zu haben der verursacht, das ich vermutlich immer das gleiche mir unbekannte Register lese.

Für den Fall. das jemand Hardwarefehler vermutet habe ich auch einen (abgestrippten) Schaltplan beigelegt. Der TMC wird zur Zeit noch von einem externe Taktgenerator mit einem Rechtecksignal von 1,25 MHZ versorgt.

Ich würde mich freuen, wenn mir jemand auf die Sprünge helfen könnte.

Mit freundlichen Grüßen

Helmut
Code

program Drehscheibe_spi;
Device = mega88, VCC = 5;
{ $BOOTRST $00C00}                                                              {Reset Jump to $00C00}

Import SysTick, SPIdriver;

Define
  ProcClock      = 20000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0032, iData;
  FrameSize      = $0032, iData;
  SwitchPort1    = PinB, %00111000;
  PolarityP1     = %00000000;       {polarity}
  SPIpresc       = 3;
  SPIOrder       = MSB;
  SPIcpol        = 0;
  SPIcpha        = 0;
  SPI_SS         = true; // false;                    NotSS = nSCS_C

Implementation

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
  Decoderadresse : byte;

  Eingang        : byte;

  SS_Manual [@PortB, 2]      : Bit;
  Low            : byte;
  Mid            : byte;
  High           : byte;
  TMCStatus      : byte;


{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
  PortB:= %0000 1011;                                                           // PulUp bei Input Wert bei Output
  DDRB:= %0011 0100;                                                            // 1 = Output
  PortC:= %0000 0011;
  DDRC:= %0011 1111;
  PortD:= %0000 0000;
  DDRD:= %0000 0011;
end InitPorts;

{
....
}

{------------------------------------------------------------------------------}
//SPI Spezifische Sachen
{------------------------------------------------------------------------------}
procedure Select_428;
begin
  SS_Manual := 0;
  uDelay_1 (20);
end;


{------------------------------------------------------------------------------}
procedure DeSelect_428;
begin
  SS_Manual := 1;
end;


{------------------------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
  InitPorts;
  EnableInts;
  loop
    Eingang := %0 11 1001 1;
//  Select_428;                                                                 // Falls SPI_SS = false
    TMCStatus := SPIInOutByte(%0 11 1001 1);
    High := SPIInOutByte(0);
    Mid := SPIInOutByte(0);
    Low := SPIInOutByte(0);
//  DeSelect_428;                                                               // Falls SPI_SS = false

//Ausgabe der gelesenen Werte
    SchreibeKanal (Decoderadresse + 4, Low);
    SchreibeKanal (Decoderadresse + 3, Mid);
    SchreibeKanal (Decoderadresse + 2, High);
    SchreibeKanal (Decoderadresse + 1, TMCStatus);

    mdelay (1000);

  endloop;
end Drehscheibe_spi.


Attachments
 
Filename: Drehscheibe Auszug.pdf
Filesize: 9.76 KB
Title: Schaltplan
Download counter: 36
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 17.03.2013 - 17:54  ·  #2
Hallo Helmut,

ich habe vor vielen Jahren mal ein kleines Programm für einen Trinamic geschrieben.
Ist in der Demos Directory in "StepperDemo". Vielleicht hilft das weiter.

rolf
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 17.03.2013 - 19:05  ·  #3
Hallo Rolf,

danke für die shnelle Antwort, aber leider hilft mir das Programm bei dem TMC429 nicht weiter.

In dem Progamm wird ein (vermutlich dummes) Trinamic Treiber IC über ein Controller über den StepPort angesteuert.

Sowas habe ich schon am laufen. Mir geht es darum das der Motion Controller den Motor ansteuert und das Programm Ihm über SPI sagt was er machen soll damit der uC den Kopf für anderes frei hat.

MFG

Helmut
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 17.03.2013 - 19:47  ·  #4
Hallo Helmut,

mir ging es darum wie der SPI eines Trinamic angesteuert wird.
Aber ich vermute mal dass er zuerst über den SPI ein Kommando und Register Adresse bekommen
muss, bevor er beim nächsten Schritt mit einem Resultat antwortet.

rolf
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 18.03.2013 - 18:19  ·  #5
Hallo Rolf,

leider wird der Trinamic in dem Programm nicht über die SPI Schnittstelle angesprochen. Im Kopf des Programms wird zwar ein TWInet importiert, aber ich kann dem Programm nicht entnehmen wo diese genutzt wird.

Quote

Aber ich vermute mal dass er zuerst über den SPI ein Kommando und Register Adresse bekommen
muss, bevor er beim nächsten Schritt mit einem Resultat antwortet.


Genau das würde ich je gerne machen, aber es gelingt mir nicht. Mit diesem Codeteil:

Code

    TMCStatus := SPIInOutByte(%0 11 1001 1);
    High := SPIInOutByte(0);
    Mid := SPIInOutByte(0);
    Low := SPIInOutByte(0);


erhalte ich beim Auslesen des ReadOnly Wertes nur beim Status sinvolle Werte. Hierbei ist auch ganz egal was ich anstatt %0 11 1001 1 dem TMC übergebe.
Es müssten jedoch die Werte $42 $91 $01 zurückgegeben werden.

Helmut
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 18.03.2013 - 20:36  ·  #6
Hallo Helmut,

sorry, da kann ich nicht weiterhelfen. Vielleicht hat da jemand anderes eine Idee?

rolf
Harald_K
 
Avatar
 
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 18.03.2013 - 20:54  ·  #7
der TMC will ja laut Datenblatt immer 32Bit ...

und der SPIdriver schaltet im Modus SPI_SS=true vor und nach jedem Byte den SS an bzw. aus.

nehme mal an das das den TMC dazu veranlasst, nur das Statusbyte zurückzugeben und dann das Kommando wegen inaktivem SS abzubrechen und nachfolgende Daten zu ignorieren.

Wenn du den SPI_SS auf false stellst muß es gehen, du mußt dann nur den SS-Pin von Hand steuern .... in deinem Schaltplan der PB4, in deiner Software der PB2 ....

(Tip: schau dir einfach mal das Assemblerlisting vom AVRCo an, da siehste was der Prozessor tut .... )

Gruß Harald
helmut-nsu
Benutzer
Avatar
Gender:
Age: 61
Posts: 16
Registered: 01 / 2013
Subject:

Re: SPI Ansteuerung TMC429

 · 
Posted: 18.03.2013 - 22:13  ·  #8
Hallo Harald,

danke erst mal für die Antwort.
Der Erste Versuch auf die Schnelle hat noch kein Ergebnis gebracht. Ich werde mich aber Mittwoch noch mal näher mit deiner Mail beschäftigen und mich dann wieder melden.

MFG

Hemut
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   141   156 · Page-Gen-Time: 0.030756s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI