Forum: Mikrocontroller und Digitale Elektronik MLX90316 mit Atmega8 über SPI


von Alex (Gast)



Lesenswert?

Hallo alle zusammen,

ich bin gerade dabei einen Brushless Motor Regler mit Rotations-Feedback 
zu entwickeln.
Die Idee ist, eine Platine an der Rückseite eines Außenläufers zu 
befestigen und dann mittels eines am Schaft montierten Magnet und einem 
auf Halleffekt basierenden Rotationssensor die exakte Rotorposition zu 
bestimmen. Als Rotationssensor habe ich einen MLX90316KDC-BDG-SPI 
vorgesehen.
Dieser antwortet aber nicht auf das SPI Signal. Es scheint, als ob die 
Datenleitung auf Low gehalten wird. Ich weiß aber nicht wieso.

TLDR; MLX90316KDC-BDG-SPI hält Datenleitung konstant auf Low, ich weiß 
aber nicht warum.

Ich habe die Spannungslevel in Bezug auf GND an allen Pins des MLX90316 
gemessen:

1. 5V
2. 0V
3. 5V bzw. 0V während der Übertragung
4. siehe Oszi
5. siehe Oszi
6. 0V
7. 3.3V
8. 0V

Die Platine wurde auf Kurzschlüsse getestet. Außerdem habe ich alle 
relevanten Bauteile ausgetauscht.

Anbei sind zwei Oszilloskop-Messungen. Einmal mit dem Sensor aufgelötet 
und einmal ohne Sensor. CH1 ist SCLK (Pin 4), CH2 ist MOSI/MISO (Pin 5). 
Zusätzlich habe ich das Signal noch mit einem Logikanalyser überprüft, 
um das Timing zu checken (signal1-3.png). Außerdem habe ich noch einige 
Bilder des Layouts und eins des gesamten Schaltplans beigefügt sowie das 
Datenblatt des Sensors und den Code, mit dem ich getestet habe.

Ich bin gerade echt am Verzweifeln, da ich nicht mehr weiß was ich sonst 
noch Testen kann.
Falls jemand eine Idee oder sonst noch konstruktive Kritik an meinem 
Vorhaben hat, würde ich mich sehr freuen. Man lernt schließlich nie aus.

Grüße,
Alex

von Joerg W. (joergwolfram)


Lesenswert?

Wie sehen die Signale aus, wenn Du während der Kommunikation SSMLX auf 
HIGH lässt?

von clonephone82 (Gast)


Lesenswert?

Hallo,

100 Ohm am MISO kann der das? Wir haben da 1kOhm. Sonst schaut die 
Schaltung mal okay aus.

sg

von John P. (brushlesspower)


Lesenswert?

clonephone82 schrieb:
> 100 Ohm am MISO kann der das? Wir haben da 1kOhm. Sonst schaut die
> Schaltung mal okay aus.

Ich würde auch mal R6 auf 1kOhm erhöhen.

von Alex (Gast)


Lesenswert?

Hallo,

vielen Danke für die Antworten. Ich habe beide Punkte nochmal überprüft 
und nachgemessen.

John P. schrieb:
> clonephone82 schrieb:
>> 100 Ohm am MISO kann der das? Wir haben da 1kOhm. Sonst schaut die
>> Schaltung mal okay aus.
>
> Ich würde auch mal R6 auf 1kOhm erhöhen.

R16 habe ich mit 1kOhm ausgetauscht. Das Signal bleibt exakt gleich.
Ist es möglich, dass der Sensor durch den niedrigen Widerstand zerstört 
wurde? Mir ist aber auch nicht genau ersichtlich wie ein höherer 
Widerstand an dieser Stelle das Signal verbessern sollte, da der MISO 
Pin am AVR als Hochohmiger Eingang geschaltet ist.

Joerg W. schrieb:
> Wie sehen die Signale aus, wenn Du während der Kommunikation SSMLX
> auf
> HIGH lässt?

SSMLX auf High erzeugt bei MOSI und SCK am MLX90316 das gleiche Signal. 
Nur SS ist eben HIGH. Sollte aber meines Erachtens Active Low sein. So 
steht es zumindest im Datenblatt.

Grüße Alex

von Beo Bachta (Gast)


Lesenswert?

Was soll die Schaltung mit Q7 tun?

Mist erzeugen?

von Alex (Gast)


Lesenswert?

Beo Bachta schrieb:
Hallo Bei Bachta,

Vielen Dank für deine Antwort.

> Was soll die Schaltung mit Q7 tun?

Die Schaltung habe ich aus dem Datenblatt übernommen. Meine Intension 
war, den Hardware SPI des AVRs zu verwenden um Rechenzeit zu sparen. Da 
dieser MISO und MOSI getrennt hat und am MLX beide Signale über einen 
Pin laufen benötigt man den Mosfet. Der sorgt dafür, dass die 
Datenleitungen frei bleibt, wenn MOSI vom AVR auf LOW (inaktiv) ist. Und 
ja ich weiß, dass das Signal Invertiert wird.
Deine Befürchtung, dass die Schaltung Unsinn ist hatte ich aber auch 
schon und habe sie deswegen zeitweise überbrückt. Leider ohne Erfolg.

Grüße,
Alex

von Beo Bachta (Gast)


Lesenswert?

Alex schrieb:
> Der sorgt dafür, dass die
> Datenleitungen frei bleibt, wenn MOSI vom AVR auf LOW (inaktiv) ist.

Du bekommst diesen Zustand nicht garantiert da bei entsprechender
Polarität der SPI-Maschine der statische (inaktive Zustand) auch
High sein kann.

Die Schaltung ist Mist und erzeugt Mist!

von Beo Bachta (Gast)


Lesenswert?

Alex schrieb:
> habe sie deswegen zeitweise überbrückt.

Wie soll das aussehen? Da gibt es nichts zu überbrücken.
Der Transistor muss weg damit die SPI Kommunikation
funktioniert.

Controller MOSI muss an MLX90316 MOSI

und

Controller MISO muss an MLX90316 MISO!

von Beo Bachta (Gast)


Lesenswert?

Ja ich weiss dass es MLX90316 MISO nicht gibt.

Beo Bachta schrieb:
> Controller MISO muss an MLX90316 MISO!

von Heinz R. (Gast)


Lesenswert?

Ich habe mich gefragt, ob Du die "TStartUp - < 10 ms / 16 ms " 
einhältst?
(Wenns der erste Frame gewesen wäre, den Du gemessen hast.)

von Alex (Gast)


Lesenswert?

Beo Bachta schrieb:
> Du bekommst diesen Zustand nicht garantiert da bei entsprechender
> Polarität der SPI-Maschine der statische (inaktive Zustand) auch
> High sein kann.

Da hast du Recht. Das müsste aber durch gleichzeitiges schreiben einer 0 
lösbar sein.
Aktuell werden die Pins des AVRs aber durch eine Bitbang SPI Programm 
angesteuert.
Dabei wird dann auch der statische Zustand richtig gesetzt.

Beo Bachta schrieb:
> Wie soll das aussehen? Da gibt es nichts zu überbrücken.
> Der Transistor muss weg damit die SPI Kommunikation
> funktioniert

Genau. Ich habe den Transistor ausgelötet und R16 überbrückt. Zusätzlich 
habe ich auch das Programm angepasst. Wenn du meinst, dass das 
funktionieren sollte, probier ich es nochmal aus. Vielleicht hatte ich 
noch ein Fehler drin.

Heinz R. schrieb:
> Ich habe mich gefragt, ob Du die "TStartUp - < 10 ms / 16 ms "
> einhältst?
> (Wenns der erste Frame gewesen wäre, den Du gemessen hast.)

Die Fuses des AVR sind auf 64ms Startup-Time gesetzt.  Das sollte das 
Problem eigentlich lösen. Zusätzlich sind die Messungen auch nicht die 
des ersten Frames.

von Beo Bachta (Gast)


Lesenswert?

Alex schrieb:
> Genau. Ich habe den Transistor ausgelötet und R16 überbrückt.

Wenn du R16 überbrückst dann verbindest du Controller MISO
mit MLX90316 MOSI - und das ist falsch.

Kannst du lesen, nicht nur drüberfliegen?

Beo Bachta schrieb:
> Controller MOSI muss an MLX90316 MOSI

von Alex (Gast)


Lesenswert?

Beo Bachta schrieb:
> Wenn du R16 überbrückst dann verbindest du Controller MISO
> mit MLX90316 MOSI - und das ist falsch.

Aktuell verwenden ich nicht den Hardware SPI sondern eine Bitbang 
Implementierung (siehe main.c). Dabei kann man die Pins beliebig 
umdefinieren, was ich  dann auch gemacht hatte. In diesem Fall war es 
leichter die Pin Definition zu ändern als die Leiterplatte.
Tut mir leid, wenn ich manche Dinge nicht so exakt formuliere. Bin 
gerade unterwegs. Ich werde das ganze mit dem Überbrücken nachher noch 
genauer erklären damit wir nicht mehr aneinander vorbei reden.

Grüße,
Alex

von Beo Bachta (Gast)


Lesenswert?

Alex schrieb:
> was ich  dann auch gemacht hatte.

Bei solcher Beliebigkeit / Ungenauigkeit bei der Berichterstattung
und dieser Salamitaktik bin ich dann mal weg.

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin es wieder. Leider habe ich immer noch keine Lösung zu meinem 
Problem gefunden. Um die Unklarheiten der vorherigen Posts zu beseitigen 
und um den Troll endgültig zu überfüttern, hier noch die zwei 
alternativen Schaltungen die ich getestet hatte und jetzt noch einmal 
neu getestet habe.
Bei beiden Versuchen habe ich ein modifiziertes Programm (Anhang: 
main.c) verwendet, um den Pin MISO/MOSI hochohmig zu schalten, wenn 
Daten empfangen werden.

Beim ersten Versuch (Anhang: mit_R16.png) habe ich Q7 Ausgelötet und 
SCLK (Gelb) und MISO/MOSI (Blau) am MLX gemessen (Anhang: 
ohne_Q7_und_mit_R16_am_MLX.png).

Beim zweiten Versuch (Anhang: ohne_R16.png) habe ich R16 überbrückt und 
die selbe Messung durchgeführt (Anhang: 
ohne_Q7_und_ohne_R16_am_MLX.png).

Ich habe auch nach Kurzschlüssen oder Widerständen zu GND gesucht aber 
keine gefunden. Die Stromaufnahme der gesamten Schaltung beträgt ca 24 
mA.
Meines Erachtens liegt der Fehler beim MLX90316.
Es gibt also drei Möglichkeiten warum der Sensor nicht funktioniert:
1. er ist falsch beschaltet (was ich dank euch zu 100% ausschließen 
kann)
2. er befindet sich in irgend einem Fehlermodus (siehe Datenblatt 
Kapitel 14. Self Diagnostic)
3. der Sensor ist gar kein MLX90316 mit SPI (siehe Anhnang: IC.jpg)
 (Quelle: 
https://de.aliexpress.com/item/MLX90316-MLX90316KDC-BDG-SPI-316BDG-SOP8-MELEXIS-10pcs-lot/32829915280.html)

Leider Fehlen mir die Möglichkeiten und Informationen um die letzten 
beiden Punkte zu überprüfen. Falls jemand schon einmal ähnlich Probleme 
hatte oder eine Idee hat, wie ich den IC identifizieren kann, wäre ich 
sehr dankbar.

Ansonsten habe ich mir den Sensor jetzt noch von einer anderen Quelle 
bestellt. Sobald der da ist werde ich mich nochmal hier melden.

Grüße Alex

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
Noch kein Account? Hier anmelden.