Hallo :) ich habe vor kurzem ein Projekt angefangen, dort geht es um eine Achse die sich dreht. Diese Position/Drehung möchte ich mit einem Evaluationboard von Infineon (TLE5012B) auslesen. Ich dachte das ganze wäre etwas einfacher, aber ich bin interessiert das Teil besser kennenzulernen. Für das Board gibt es eine fertige GUI und dort funktioniert Incremental, aber SPI nicht. Es gibt auch vorgefertigte Arduinoprogramme und dort lässt sich leider auch nichts auslesen. Habe ich evtl das falsche Board gekauft oder muss ich noch etwas umprogrammieren? Soweit ich das verstanden habe müssten alle Boards SPI können. Ich habe folgendes gekauft: https://www.infineon.com/cms/en/product/evaluation-boards/tle5012b_e1000_ms2go/ Die Lib und das Board habe ich in der Arduino IDE installiert. Der Bespielcode habe ich euch mal im Anhang hochgeladen. Hier gibt es einen Github-Beitrag dazu: https://github.com/Infineon/TLE5012-Magnetic-Angle-Sensor Für das Evaluation gibt es auch eine Dokumentation. http://www.farnell.com/datasheets/2700284.pdf Wahrscheinlich ist es für euch Profis etwas ganz leichtes... An der Achse hängt ein Diametral Scheibenmagnet. Ich wäre für die Hilfe sehr Dankbar :) Bei weiteren Fragen/Unklarheiten einfach schreiben. Gruß Jan
Jan B. schrieb: > Wahrscheinlich ist es für euch Profis etwas ganz leichtes... Das Checksummengedöns schießt einem gerne ins Knie. BTDT. Ist die Berechnung korrekt, wenn du die Testdaten aus z.B. https://www.autosar.org/fileadmin/user_upload/standards/classic/4-3/AUTOSAR_SWS_CRCLibrary.pdf da durchjagst? In dem Faden Beitrag "Arduino SPI read Infineon TLE5012B" hat man schon eine "schlappe" Flankensteilheit beim Senden des TLE5012 festgestellt. Mal messen? Funktioniert die Umschaltung der Datenrichtung μC-Seitig korrekt? Wie schnell wird die SPI bedient? Kannst du dir die Datenleitung μC-Seitig MOSI+MISO vs. Clock mal am Oszi, das das auch dekodieren kann, ansehen? Wie wäre es, das ganze gesumms mal händisch nachzuprogrammieren? mfg mf
:
Bearbeitet durch User
Achim M. schrieb: > as Checksummengedöns schießt einem gerne ins Knie. BTDT. Ist die > Berechnung korrekt, wenn du die Testdaten aus z.B. > https://www.autosar.org/fileadmin/user_upload/standards/classic/4-3/AUTOSAR_SWS_CRCLibrary.pdf > da durchjagst? Da müsstest du mir genauer erklären was ich da machen muss. Hab leider noch kein Studium in Elektrotechnik abgeschlossen, sondern "nur" eine Ausbildung. Was genau ist der Hintergrund für diesen Schritt? Achim M. schrieb: > Kannst du dir die Datenleitung μC-Seitig MOSI+MISO vs. Clock mal am > Oszi, das das auch dekodieren kann, ansehen? Ich habe mir extra für so etwas ein OSZI gekauft. Ich versuche es mal darzustellen und hier hochzuladen. Vielen Dank Achim! :)
Zum darstellen der SPI Funktion muss ich doch folgendes anschließen: Physical Pin Nummer: 1 SPI:MISO (MISO und MOSI sind laut Plan zusammen) 3 SPI:SCK 4 SPI:CS Ist das richtig so? Wenn ich am Pin 3 SCK das OSZI anschließe kommt kein Takt... Komisch. Ich habe mal noch mit Hilfe eines Arduino Sketches das Register ausgelesen, vielleicht hilft das weiter. init done! checkerror: FF F E D C B A 9 8 7 6 5 4 3 2 1 0 ------------------------------------------------ 0 STAT 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ACSTAT 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 AVAL 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 ASPD 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 4 AREV 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 FSYNC 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 MOD1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 SIL 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 MOD2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 9 MOD3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 OFFX 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 OFFY 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 SYNCH 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 13 IFAB 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 14 MOD4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 15 TCOY 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 16 ADCX 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 17 ADCY 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 18 DMAG 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 19 TRAW 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 20 IIFCNT 0 0 1 1 1 1 1 1 1 0 1 1 0 0 0 0 21 T250 0 0 1 1 1 1 1 1 1 0 1 1 0 0 0 0 Register: STAT Offset: 0x0 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- SRST 0x1 1 1, boolean ru 0 indication of power-up, short power-break, firmware or active reset SWD 0x1 1 1, boolean r 1 watch dog counter expired (DSPU stop) SVR 0x1 1 1, boolean r 2 over voltage VDD-off, GND-off or VOVG/A/D too high SFUSE 0x1 1 1, boolean r 3 CRC fail SDSPU 0x1 1 1, boolean r 4 DPSU self-test not OK or still running SOV 0x1 1 1, boolean ru 5 DSPU overflow occurred SXYOL 0x1 1 1, boolean ru 6 X/Y data out of limit SMAGOL 0x1 1 1, boolean ru 7 GMR magnitude out of limit Reserverd1 0x1 1 1, boolean 8 SADCT 0x1 1 1, boolean r 9 Test vectors out of limit SROM 0x1 1 1, boolean r 10 CRC fail or still running NOGMRXY 0x1 1 1, boolean ru 11 no valid GMR_XY values on the ADC input NOGMRA 0x1 1 1, boolean ru 12 no valid GMR angle value on the interface SNR 0x3 3 2, uint8_t r w 13:14 Slave Number of this sensor out of up to four sensors RDST 0x1 1 1, boolean r 15 status values changed Register: ACSTAT Offset: 0x1 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- ASRST 0x1 1 1, boolean ruw 0 activation of HW Reset (S_RST is set) ASWD 0x1 1 1, boolean ruw 1 DSPU Watch dog monitoring enabled ASVR 0x1 1 1, boolean ruw 2 check of regulator voltages enabled ASFUSE 0x1 1 1, boolean ruw 3 monitoring of CRC enabled ASDSPU 0x1 1 1, boolean ruw 4 activation of DSPU BIST or BIST running ASOV 0x1 1 1, boolean ruw 5 monitoring of DSPU Overflow enabled ASVECXY 0x1 1 1, boolean ruw 6 monitoring of X,Y Out of Limit enabled ASVEGMAG 0x1 1 1, boolean ruw 7 monitoring of magnitude enabled Reserverd2 0x1 1 1, boolean 8 ASADCT 0x1 1 1, boolean ruw 9 after execution ASFRST 0x1 1 1, boolean ruw 10 default or after execution of firmware reset Reserverd1 0x1F 31 1, uint8_t 11:15 Register: AVAL Offset: 0x2 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- RDAV 0x1 1 1, boolean r 15 new angle value present ANGVAL 0x1 1 16,uint16_t ru 0:14 Calculated Angle Value (signed 15-bit) Register: AVAL Offset: 0x3 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- RDAS 0x1 1 1, boolean r 15 new angle speed value present ANGSPD 0x1 1 16,uint16_t ru 0:14 Calculated Angle Speed, where the sign indicates the direction of the rotation Register: AREV Offset: 0x4 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- RDREV 0x1 1 1, boolean r 15 new value present FCNT 0x3F 63 6,uint8_t ruw 9:14 Internal frame counter. Increments every update period (FIR_MD setting) REVOL 0xFF 255 8,uint16_t ru 0:8 Number of Revolutions (signed 9-bit value) Register: FSYNC Offset: 0x5 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- TEMPR 0xFF 255 7,int16_t r 9:15 Signed offset compensated temperature value FSYNC 0x7F 127 9,uint16_t r 0:9 Frame Synchronization Counter Value Register: MOD1 Offset: 0x6 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- IIFMOD 0x3 3 2, uint8_t r w 0:1 Incremental Interface Mode: 11b not allowed DSPUHOLD 0x1 1 1, boolean r w 2 DSPU is on hold Reserverd2 0x1 1 1, boolean 3 CLKSEL 0x1 1 1, boolean ru 4 external 4-MHz clock (IFC pin switched to input) Reserverd1 0x1 1 1, uint16_t 5:13 FIRMD 0x3 3 2, uint8_t r w 14:15 Update Rate Setting (Filter Decimation): 11b 170.6 μs Register: SIL Offset: 0x7 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- ADCTVX 0x7 7 3, uint16_t r w 0:2 Test vector X: 111b -Overflow ADCTVY 0x7 7 3, uint16_t r w 3:5 Test vector Y: 111b -Overflow ADCTVEN 0x1 1 1, boolean r w 6 ADC-Test Vectors enabled Reserverd1 0x7 7 3, uint16_t 7:9 FUSEREL 0x1 1 1, boolean r w 10 normal operation Reserverd2 0x7 7 3, uint16_t 11:13 FILTINV 0x1 1 1, boolean r w 14 filter inverted enabled FILTPAR 0x1 1 1, boolean r w 15 filter parallel enabled (source: X-value) Register: MOD2 Offset: 0x8 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- AUTOCAL 0x3 3 2, uint8_t r w 0:1 Autocalibration Mode: 11b auto-cal. mode 3: update every 11.25° PREDICT 0x1 1 1, boolean r w 2 prediction enabled ANGDIR 0x1 1 1, boolean r w 10 counterclockwise rotation of magnet ANGRANGE 0x7FF 2047 1, boolean r w 11:14 AngleRange: 040h factor 0.5, magnetic angle -180°..180° Reserverd1 0x1 1 1, boolean 15 Register: MOD3 Offset: 0x9 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- PADDRV 0x3 3 2, uint8_t r w 0:1 Configuration of Pad-Driver: 11B IFA/IFB/IFC: weak driver, DATA: weak driver, slow edge SSCOD 0x1 1 1, boolean r w 2 Push-Pull SPIKEF 0x1 1 1, boolean r w 3 spike filter enabled ANG_BASE 0xFFF 4095 12,uint16_t r w 4:15 Angle Base sets the 0° angle position: 7FFH +179.912° Register: OFFX Offset: 0xA Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- Reserverd1 0xF 15 3, uint8_t 0:3 XOFFSET 0xF001 61441 12, int16_t r w 4:15 12-bit signed integer value of raw X-signal offset Register: OFFY Offset: 0xB Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- Reserverd1 0xF 15 3, uint8_t 0:3 YOFFSET 0xF001 61441 12, int16_t r w 4:15 12-bit signed integer value of raw Y-signal offset Register: SYNCH Offset: 0xC Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- Reserverd1 0xF 15 3, uint8_t 0:3 SYNCH 0xF001 61441 12, int16_t 4:15 12-bit signed integer value of amplitude synchronicity correction Register: IFAB Offset: 0xD Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- IFADHYST 0x3 3 2, uint8_t r w 0:1 HSM and IIF Mode: Hysteresis: 11b HSM: 0.70° IFABOD 0x1 1 1, boolean r w 2 Open Drain FIRUDR 0x1 1 1, boolean r w 2 FIR_MD = ‘10’ (85.3 μs) ORTHO 0xF001 61441 3,uint16_t r w 4:15 12-bit signed integer value of orthogonality correction Register: MOD4 Offset: 0xE Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- IFMD 0x3 3 2,uint8_t r w 0:1 Interface Mode on IFA,IFB,IFC: Reserverd1 0x1 1 1, boolean 2 IFABRES 0x3 3 2, uint8_t 3:4 11b IIF: 9bit, 0.703° step HSMPLP 0xF 15 2, uint8_t 5:8 IIF Absolute Count, x0xxb enabled, x1xxb disabled TCOXT 0x3F 63 7, int8_t r w 9:15 7-bit signed integer value of X-offset temperature coefficient Register: TCOY Offset: 0xF Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- SBIST 0x0 0 7, int8_t 0:7 CRC of parameters from address 08H to 0FH CRCPAR 0x7F 127 1, boolean r w 8 Startup-BIST enabled TCOYT 0x3F 63 7, int8_t 9:15 7-bit signed integer value of Y-offset temperature coefficient Register: ADCX Offset: 0x10 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- ADCX 0xFFFF 65535 16,uint16_t r 0:15 Register: ADCX Offset: 0x11 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- ADCY 0xFFFF 65535 16,uint16_t r 0:15 Register: DMAG Offset: 0x14 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- MAG 0x3FF 1023 9 ,uint16_t ru 0:9 Unsigned Angle Vector Magnitude after X, Y error Reserverd1 0x3F 63 6 ,uint8_t 10:15 Register: SYNCH Offset: 0x15 Binary: 1111111111111111b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- TRAW 0x3F 63 9 ,uint16_t r 0:9 Temperature value not compensated with the offset temperature at ADC Reserverd1 0x3F 63 6 ,uint8_t 10:14 TTGL 0x1 1 1, boolean r 15 Toggles after every new temperature value Register: IIFCNT Offset: 0x20 Binary: 0011111110110000b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- IIFCNT 0x3FB0 16304 13,uint16_t r 0:13 Internal 14-bit counter for the incremental interface, counts from 0 to 16383 during one full turn Reserverd1 0x0 0 2, uint8_8 r 14:15 Register: T250 Offset: 0x30 Binary: 0011111110110000b ======================================================================== ======================================== Register HEX DEC variable type bit remark ------------------------------------------------------------------------ ---------------------------------------- Reserverd1 0x1F 31 9 ,uint16_t r 0:8 T250 0x1FB0 8112 9 , int16_t r 9:15 Signed offset value at 25°C temperature; 1dig=0.36°C.
Jan B. schrieb: > Da müsstest du mir genauer erklären Also, die SPI-Kommunikation mit dem TLE5012 ist mit einer CRC-Checksumme geschützt. Die hängt der TLE5012 hinten an die Daten ran. Ich weiß nicht, was passiert, wenn der Arduino-Software-Treiber eine falsche Checksumme geliefert bekommt. Daher dachte ich mir, zu prüfen, ob das richtig implementiert ist. Laut deinem anderen Post scheint das aber gar nicht das primäre Problem zu sein, denn Jan B. schrieb: > Wenn ich am Pin 3 SCK das OSZI anschließe kommt kein Takt... Deine gelesenen Daten sehen so aus, als würde die Datenleitung permanent auf High-Pegel fest hängen. Womit bedienst du den TLE5012? Mit dem XMC1xxx oder extern mit eigenem separatem Arduino? Wenn XMC1xxx dann sieht es so aus, dass der intern meint, den Clock Zu bedienen, aber am Pin keiner raus kommt. Wenn eigener Arduino, dann spuckt der Rest auf dem Evalboard mit in die Suppe. Clock kurzgeschlossen. Jan B. schrieb: > (MISO und MOSI sind laut Plan zusammen) Das ist dann der nächste Fallstrick, da du μC-seitig je nach Lese-/Schreibkommando wissen musst, wann du den Pin-Treiber von MOSI abschaltest. Akut weiß ich jetzt erstmal nicht weiter... mfg mf btw. den Log vom Auslesen hätte ich eher in eine Datei gesteckt, als in den Post. Macht es nur unübersichtlich.
:
Bearbeitet durch User
So ich habe meinen Fehler erkannt. Ich hatte das falsche Programm aufgespielt... Jetzt kommt natürlich der Takt. Sorry dafür. Habe jetzt mal hier ein Bild von den OSZI Messungen. CH4 SPI:CS Ch2 SPI:SCK CH3 SPI:MOSI CH1 SPI:MISO Abfolge im Bild von oben nach unten (Siehe oben) Achim M. schrieb: > Womit bedienst du den TLE5012? Mit dem XMC1xxx oder extern mit eigenem > separatem Arduino? Mit dem XMC1100 der auf dem Evaluationsboard ist.
:
Bearbeitet durch User
Jan B. schrieb: > Bild von den OSZI Messungen. Das sieht doch schon mal besser aus :) Original einige Größenordnungen weniger Zeitauflösung, und man würde den Takt sogar ordentlich zappeln sehen. Hier hat dir die niedrige Abtastrate von den 200msec/div einiges kaschiert. Jan B. schrieb: > So ich habe meinen Fehler erkannt. > Ich hatte das falsche Programm aufgespielt... Funzt es jetzt wie es soll? mfg mf
:
Bearbeitet durch User
Achim M. schrieb: > Original einige Größenordnungen weniger Zeitauflösung, und man würde den > Takt sogar ordentlich zappeln sehen. Hier hat dir die niedrige > Abtastrate von den 200msec/div einiges kaschiert. Also feiner auflösen? Achim M. schrieb: > Funzt es jetzt wie es soll? Es kommt halt mal zumindest ein Signal heraus, aber die Werte kommen beim Seriellen Monitor nicht.
Für mich sehen die Signale irgendwie fehlerhaft aus. Bin aber auch erst gerade im einarbeiten der ganzen Thematik. Ich kann da gar keine Struktur erkennen.
So ich geh jetzt mal einen Schritt zurück und benutze die vorgefertigte GUI Software. Bei dieser geh ich mal davon aus, dass dort keine Fehler vorhanden sind und diese dann nur bei mir liegen. Die Incrementalfunktion /Modus funktioniert einwandfrei. Im SPI-Modus kommt leider nichts bzw die Gradanzeige verändert sich nicht. So sieht die SPI-GUI aus: Siehe Anhang 1 Hier habe ich nochmals Messungen aufgenommen. Die Signale sind gestartet als ich in der SPI-GUI Start gedrückt habe. Siehe Anhang 2 und 3 Was ich jetzt vermute ist das ich irgendwas anders Konfigurieren muss. Bin da gerade dran, falls einer helfen kann wäre ich dankbar dafür. Hier nochmals das Evaluationboard Manual: http://www.farnell.com/datasheets/2700284.pdf Irgendwie ist der SPI Bus nicht aktiv siehe SPI_GUI Bild im Anhang unter Auto Detect Log Diesen muss ich aktivieren. Die Frage ist halt wie... Ich benutze das Board E1000. Gruß Jan
Jan B. schrieb: > Hier habe ich nochmals Messungen aufgenommen. Sieh dir mal im Datenblatt an, wie das SPI-Signal aussehen muss. Kannst du Ähnlichkeiten erkennen? Ich nicht. Und auch das Oszi kann offensichtlich die aufgenommenen Signale nicht als sinnvolle Protokolle analysieren. Jan B. schrieb: > Für mich sehen die Signale irgendwie fehlerhaft aus. So sehen Messfehler aus... Deshalb: trigger mal auf die fallende Flanke des SS# und zeig ein es der Telegramme in einer vernünftigen Auflösung an (Stichworte: Zeitbasis und Aufzeichnungstiefe). Wenn du da ein erkennbares Bild hergezaubert hast (ein wenig Übung ist für die meisten Zaubertricks nötig, auch für die einfachen...), dann können wir das mal analysieren.
Lothar M. schrieb: > So sehen Messfehler aus... > Deshalb: trigger mal auf die fallende Flanke des SS# und zeig ein es der > Telegramme in einer vernünftigen Auflösung an (Stichworte: Zeitbasis und > Aufzeichnungstiefe). Wenn du da ein erkennbares Bild hergezaubert hast > (ein wenig Übung ist für die meisten Zaubertricks nötig, auch für die > einfachen...), dann können wir das mal analysieren. Mein Problem ist aber gerade nicht das falsche Messen, sondern das einfach kein SPI-Signal raus kommt. Wenn das der Fall ist, kann ich die Auflösung auch anpassen. Was mir auffällt das bei der GUI die von Infineon bereitgestellt wird, unter Auto Detect Log "SSC IF not active" steht (siehe Anhang) und in der Anleitung sieht es wie im Link Seite 12 aus : http://www.farnell.com/datasheets/2700284.pdf Da passt irgendetwas nicht..
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.