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
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.
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
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
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!
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!
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.
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
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
Alex schrieb:> was ich dann auch gemacht hatte.
Bei solcher Beliebigkeit / Ungenauigkeit bei der Berichterstattung
und dieser Salamitaktik bin ich dann mal weg.
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