Reverse Engineering Laserscanner Leuze RS4


Früher habe ich über das Reverse Engineering eines Laser-Abstandssensors gesprochen . Dieses Mal werden wir über ein komplexeres Gerät sprechen - einen Laserscanner Leuze RS4. Wie der Sensor kam auch dieser Scanner in einem defekten Zustand zu mir, so dass ich damit beginnen musste, seine Arbeit wiederherzustellen und dabei einige seiner Eigenschaften zu verbessern und ihn tatsächlich in ein anderes Gerät umzuwandeln.

Was ist dieser Laserscanner?


Leuze RS4 ist ein Lasersicherheitsscanner, der verhindern soll, dass Personen in gefährliche Bereiche am Arbeitsplatz gelangen, Kollisionen von Serienfahrzeugen verhindern usw. Er weist recht anständige Eigenschaften auf - maximale Reichweite: 15/50 m (abhängig von der Betriebsart) ) beträgt die Genauigkeit der Entfernungsmessung im gesamten Messbereich 5 mm, die Winkelauflösung 0,36 Grad, die Abtastgeschwindigkeit 25 U / min (25000 Messungen / Sek.).

Es ist erwähnenswert, dass dieser Scanner genau als Sicherheitsvorrichtung positioniert ist - das heißt, er speichert die Position von Alarm- und Warnzonen im Speicher, und wenn ein Objekt diese Zonen betritt, öffnet sich eine der Tasten im Scanner. Um den Standort der Zonen zu konfigurieren, kann der Scanner an einen Computer angeschlossen werden und den Standort von Hindernissen auf dem Bildschirm beobachten. Es gibt sogar ein ROS-Paket, mit dem Sie Daten von diesem Scanner empfangen können.
Ich habe einen Scanner ohne Gehäuse, der in seine Komponenten zerlegt wurde. Der Scanner stürzte aufgrund eines starken Schlags auf den Körper ab. Was genau es nicht mehr funktionierte, verstand ich immer noch nicht - vielleicht war die Optik falsch ausgerichtet, der Kontakt in einem der Anschlüsse ging aus oder der Gebersensor bewegte sich oder etwas anderes. Ich habe versucht, alle Teile zusammenzubauen. Der Scanner wurde in der nativen Software angezeigt, aber der Scan wurde nicht gestartet. Ich habe also nur eine Möglichkeit, es zu starten - die Scannerschaltung so vollständig wie möglich wiederherzustellen und meine eigene Scanner-Mikrocontroller-Firmware zu schreiben.

So sahen die Teile aus, die ich ausgesehen hatte: Hier sollten sie sich im Gehäuse befinden (Foto aus der Dokumentation, es ist zu erkennen, dass Design und Elektronik leicht voneinander abweichen):

Bild



Bild

Ein wichtiger Bestandteil des Scanners ist auch der in der Mitte installierte Scanspiegel (auf dem Foto oben blau hervorgehoben):

Bild

Schematische Darstellung des Scanners:

Bild

Wie aus dem Diagramm ersichtlich, besteht die gesamte Elektronik des Scanners aus separaten Modulen (Platinen), die durch Anschlüsse und Schleifen verbunden sind.

Es gibt viele Module - Stromversorgungsmodul (DC-DC), Schnittstellenmodul, Prozessormodul, Fotodetektormodul (APD), Lasermodul. Darüber hinaus gibt es ein Encoder-Modul und zwei hufeisenförmige Platinen, was zunächst seltsam erschien.

Zuallererst lohnt es sich, auf sie zu achten:

Bild

Offensichtlich enthält eine der Karten LEDs und die zweite Fotodioden. Anfangs dachte ich, es sei eine Art Encoder oder ein Mechanismus zur Überprüfung der Laserstrahlung. Nachdem ich jedoch später die Dokumentation für den Scanner gelesen und die darin enthaltenen Fotos eingehend untersucht hatte, stellte ich fest, dass dies ein System zur Überwachung des Zustands der Oberfläche des Schutzglases des Scanners ist.

Auf dem Foto sind Löcher für LEDs sichtbar:



Durch Messen des Signalpegels von den Fotodioden können Sie den Transmissionspegel des Schutzglases abschätzen. Offensichtlich ist dieses System für den Scanner nicht kritisch, daher habe ich diese Karten in Zukunft nicht mehr verwendet.

Das Prozessormodul ist der schwierigste Teil des Scanners. So sieht die Elektronik des Moduls von zwei Seiten aus:

Bild

Zum ersten Mal, als ich auf die Tafel schaute, wurde mir sofort klar, dass der Scanner die Flugzeitmethode zur Entfernungsmessung (TOF) verwendet - der Chip mit der größten Markierung stellte sich als " ACAM TDC-GPX " heraus, von dem ich bereits gehört hatte. TDC - "Time-to-Digital Converter", dh ein spezieller Chip zur Messung von Zeitintervallen mit sehr hoher Genauigkeit, mit dem die "Flugzeit" eines Laserpulses gemessen wird.
Ebenfalls an Bord war ein Infineon C167-Mikrocontroller mit einem externen FLASH-Speicherchip (der zufrieden war) und einem ASIC (der sehr verärgert war). Im Detail über dieses Modul werde ich unten erzählen.

Leistungsmodulenthält einen kundenspezifisch galvanisch getrennten DC-DC-Wandler mit mehreren Ausgangsspannungen und mehreren Kondensatoren:

Bild

Die Versorgungsspannung des Wandlers beträgt 24V. Sein Hauptmerkmal ist, dass es eine Hochspannung (~ 230 V), die für den Betrieb des Lasers und des Fotodetektors erforderlich ist, an einen separaten kleinen Anschluss liefert.

Es gibt auch die folgenden Spannungen an den Hauptstecker aus: + 5V, -5V, ~ 15V, galvanisch vom Rest getrennt + 5V für die RS232-Schnittstelle.

Optischer Teil des Scanners

Bild

Auf den ersten Blick ist nicht klar, wo sich die Optik des Scanners befindet. In diesem Fall dient ein kleines Fenster mit einem Spiegel in der Mitte des Fotos zur Ausgabe des Laserstrahls, und eine große glänzende Oberfläche um ihn herum ist die Oberfläche des Interferenzlichtfilters, das vor der Fotodetektorlinse installiert ist. Dieser Filter überträgt nur die Strahlung, deren Wellenlänge nahe an der Laserwellenlänge liegt.

So wird es in der Scannerdokumentation gezeigt:



Das Objektiv selbst ist in einem schwarzen Kunststoffgehäuse montiert, daher ist es problematisch, es zu sehen. Am Ende des Gehäuses entgegengesetzt zu derjenigen in dem Foto oben zu sehen ist , dem festen Lasermodul und dem Photodetektor : Laser - Modul

Bild


Ansicht des Lasermoduls (einige Details werden von mir beim Zeichnen der Schaltung markiert): Wie Sie sehen können, ist die Schaltung dieses Moduls recht einfach, so dass ich seine Schaltung vollständig wiederherstellen konnte: Ein großer runder Teil auf der Platine ist ein spezialisierter Laseremitter. Leider waren keine Markierungen darauf, so dass keine Dokumentation darauf gefunden werden konnte. Aus der Beschreibung auf dem Scanner können Sie herausfinden: "Laserlichtwellenlänge - 905 nm", "Laserklasse - 1", "Pulsdauer - 0,003 µs", "Wiederholungsfrequenz - 25 kHz". Was war zu verstehen, wenn die Modulschaltung wiederhergestellt und ihre Funktionsweise analysiert wurde:

Bild



Bild






  • Der Laseremitter wird ständig mit einer Versorgungsspannung von 143 V versorgt, die durch Zenerdioden begrenzt ist.
  • , «3» . , , .
  • , , . ( ) «» .

Die gesamte Lasersteuerung erfolgt in einer Zeile - "LASER_PULSE". Die meiste Zeit auf der Leitung sollte "hoch" sein. Wenn ein negativer Impuls angelegt wird, wird der Trigger DD1 an seiner Vorderflanke auf 0 zurückgesetzt, und an der Hinterflanke beginnt der Trigger auf das Signal von der Fotodiode zu „warten“ und der Laser startet. Wenn ein Signal von der Fotodiode erscheint, schaltet der Trigger auf 1.
An den an das Modul angeschlossenen Anschlüssen können Sie zwei Koaxialkabel erkennen. Sie dienen zur Übertragung des Differenzsignals vom Trigger zum OT-Chip.

Ebenfalls an diesem Modul befinden sich fünf LEDs. Das Prozessormodul steuert sie.

Fotodetektormodul
Das Modul selbst sieht folgendermaßen aus: Foto des Fotodetektors selbst in der Nähe von:

Bild



Bild

Das Hochspannungszeichen in der Ecke der Platine zeigt deutlich, dass hier eine Lawinenphotodiode (APD) verwendet wird - für den Betrieb ist eine ziemlich hohe Spannung erforderlich.

Leider gab es keine sichtbaren Markierungen auf dem Fotodetektorkörper. Anhand des Emblems auf der Fotodiode selbst (in der Mitte) konnte nur festgestellt werden, dass es von Pacific Silicon Sensor (First Sensor) hergestellt wurde.Es gab jedoch keine weiteren Informationen über ihn, vielleicht ist er maßgeschneidert. Aus dem Foto ist ersichtlich, dass dieser Fotodetektor ein Hybrid ist, d.h. enthält einen eingebauten Verstärker - er ist deutlich über der Fotodiode sichtbar. Offensichtlich benötigen der Verstärker und die Fotodiode Strom - sie werden über die unteren Anschlüsse gespeist (Kondensatoren sind mit ihnen verlötet). Ein großes Rätsel war das kleine Detail links von der Fotodiode, zu der drei Leiter gehören. Weitere Untersuchungen haben gezeigt, dass dies ein analoger Wärmesensor ist.

Dieses Modul ist viel komplizierter als das vorherige. Es verwendet eine mehrschichtige Leiterplatte - mindestens 4 Schichten, wobei sich die meisten Signalleitungen auf der äußeren Schicht der Platine befinden, was die Analyse erheblich erleichtert. In diesem Modul habe ich ungefähr 80% der Schaltung wiederhergestellt, der Rest wurde für mich nicht wirklich benötigt.

Die resultierende Schaltung des Fotodetektormoduls: Am oberen Ende der Schaltung befindet sich eine einstellbare lineare Hochspannungsquelle für eine Lawinenphotodiode. Es kann eine stabile Spannung von mindestens 150 V erzeugen. Diese Quelle wird vom DA1 DAC (LTC1451) gesteuert.

Bild



Da der Scanner auf einem gepulsten Entfernungsmesser basiert, besteht die Hauptaufgabe des Fotodetektormoduls darin, ein ausreichend schwaches Lasersignal, das von einem Hindernis reflektiert wird, schnell zu erfassen. Da der Pegel des Lichtsignals sehr klein ist, kann es nur mit einer Lawinenphototodiode erfasst werden, die ihre eigene Verstärkung hat. In diesem Fall wird das Signal von der Fotodiode zusätzlich durch einen im Fotodetektor integrierten integrierten Verstärker verstärkt. Aufgrund der Tatsache, dass der Verstärker in den Körper des Fotodetektors eingebaut ist, wird der Einfluss von Interferenzen auf das Nutzsignal verringert. Das vom Fotodetektor (OUT_B) erzeugte Signal wird an einen bestimmten DA4-Chip übertragen, der anscheinend ein anderer Hochfrequenzverstärker ist. Danach wird das Signal an den direkten Eingang des Hochgeschwindigkeitskomparators D1 (MAX9601) übertragen.Das Referenzsignal vom Widerstandsteiler (ca. 50 mV) wird dem inversen Eingang dieses Komparators zugeführt.

Das Signal am Ausgang des Komparators ist differentiell und wird über ein Koaxialkabel direkt an die Prozessormodulkarte übertragen.

Zusätzlich wird das Signal vom Ausgang des DA4-Verstärkers an eine Art Spitzendetektor übertragen, der sich an den Maximalpegel des empfangenen Impulses „erinnert“. Ich habe nicht begonnen, die Schaltung dieses Knotens wiederherzustellen, und habe nur die Ausgangsstufe (U1-Chip) auf die Schaltung gezogen, von der das Signal auch an das Prozessormodul übertragen wird.

Einer der Teile des Scanners, der mir weniger klar ist, ist der Q3-Transistor, der am Ausgang des HF-Verstärkers installiert ist. Nach der Schaltung zu urteilen, ist es erforderlich, die Dämpfung des Signals am Verstärkerausgang zu ermöglichen. Dieser Transistor kann mit einem Signal von der Prozessorkarte (Zeile 10 - „Digi“) gesteuert werden.

Möglicherweise stellen Sie fest, dass die Karte über einen EEPROM-Chip verfügt. Alle Signalausgänge dieses Chips sind mit der Prozessorkarte verbunden. Anscheinend wurden in dieser Mikroschaltung einige Parameter gespeichert, die für jede Fotodetektorplatine eindeutig sind, und beim Testen der Platine darin aufgezeichnet. Dies kann insbesondere eine Kurve der Abhängigkeit der Verstärkung APD von der Versorgungsspannung, der Abhängigkeit der Spannung am Ausgang des Temperatursensors von seiner Temperatur und anderer ähnlicher Eigenschaften sein.

Sie können sehen, dass die Leistung des Fotodetektors gesteuert werden kann, indem bestimmte Pegel auf den mit dem DAC und dem EEPROM verbundenen Leitungen CLK, CS, CS2 eingestellt werden.

Die Platine enthält mehrere Schaltkreise zur Überwachung ihres Zustands. Sie können den Spannungspegel des APD, seine Temperatur (Zeile 7) und den Schwellenwert des Komparators steuern. Diese Spannungen werden von DA3-DA5-Operationsverstärkern umgewandelt und an die Prozessormodulkarte übertragen.

Zurück zum Prozessormodul Dieses Modul ist das komplexeste von allen, es enthält eine große Anzahl von Mikroschaltungen mit mehreren Ausgängen, die Leiterplatte ist wieder vierschichtig und die meisten Signalleitungen sind in den inneren Schichten getrennt, was die Wiederherstellung der Schaltung erheblich erschwert. Sehr oft stellte sich heraus, dass die Tracks auf eine andere Seite des Boards wechselten. Um schnell zu suchen, wo eine bestimmte Spur angeschlossen ist, musste ich einen solchen Pinsel verwenden, der mit einem Multimeter verbunden ist (im Wählmodus):

Bild





Bild

Ich habe ungefähr 70% des Programms wiederhergestellt - den Rest brauchte ich nicht wirklich. Blockschaltbild des Prozessormoduls:

Bild

Das resultierende Diagramm des Prozessormoduls: Obwohl ich dieses Modul überall als „Prozessormodul“ bezeichne, basiert es in Wirklichkeit auf dem Infineon SAK-C167CR-L33M-Mikrocontroller . Es hat 144 Pins und basiert auf der ziemlich alten C166-Architektur. Dieser Mikrocontroller verfügt nicht über einen eigenen nichtflüchtigen Speicher. Es ist erforderlich, einen externen Speicher über einen parallelen Bus mit ihm zu verbinden. Zu diesem Zweck verfügt der Scanner über einen Flash-Speicherchip M29F400B (512 K x 8/256 K x 16). Außerdem sind zwei RAM-Chips an den Mikrocontroller angeschlossen - IS61C6416AL-12 (64K x 16) und K6R4016C1D (256K x 16).

Bild



Sie sehen, dass der Adressbus mit einer Verschiebung von einem Bit an alle Speichermikroschaltungen angeschlossen ist - die Speicherleitungen A0 sind an die Leitung A1 des Mikrocontrollers angeschlossen. Dies liegt an der Tatsache, dass die Adressen auf dem Adressbus in Bytes eingestellt sind, der Controller und der Speicher jedoch 16-Bit sind. Damit die Steuerung einzelne Bytes in den RAM schreiben kann, ohne benachbarte Bytes in einem 16-Bit-Wort zu beeinflussen, haben die Speicherchips spezielle Leitungen UBn, LBn. Diese Lösung ist bei Geräten mit parallelen Bussen sehr verbreitet und wird in der Dokumentation zur Steuerung ausführlich beschrieben.

Eine andere Lösung im Prozessormodul ist mir jedoch nicht ganz klar geworden. Wenn Sie sich den U1-Flash-Speicherchip ansehen, werden Sie feststellen, dass die A14-Leitung des Chips mit Masse verbunden ist. Die entsprechende A15-Controller-Adressbusleitung ist überhaupt nicht mit dem Chip verbunden. Das Ergebnis ist, dass der Controller nur auf die Hälfte des Flash-Speichers zugreifen kann. Eine ganz ähnliche Situation mit dem RAM2-Chip (DD3).

Beim RAM1 (DD2) -Chip ist die Situation etwas anders - die A15-Controller-Leitung ist ebenfalls nicht daran angeschlossen, aber gleichzeitig sind alle Adresseneingänge dieses Chips an den Adressbus angeschlossen, so dass der Controller Zugriff auf den gesamten Speicher des Chips hat.

Und jetzt sollten Sie auf den Knoten in den logischen Elementen DX1, DX2, DD4 achten. Es sind diese Mikroschaltungen, die bestimmen, welche der Speichermikroschaltungen vom Mikrocontroller ausgewählt wird. Es ist ersichtlich, dass sie durch die folgenden Signale gesteuert werden:

  • WRn - Aufnahmesignal, aktiver Pegel - niedrig. In dieser Zeile stellt der Mikrocontroller einen niedrigen Pegel ein, wenn Sie Daten in einen externen RAM-Speicher schreiben müssen
  • A15 ist dieselbe Datenbusleitung, die nicht direkt mit einem der Speicherchips verbunden ist.
  • CSn0 ist ein spezialisiertes Chipauswahlsignal, der aktive Pegel ist niedrig. Diese Leitung ist mit dem in der Steuerung integrierten Adressdecoder verbunden. Nach einem Reset ist der Controller niedrig.
  • RAM2_CE - mit dem GPIO des Controllers über einen Aufzug zum Boden verbunden.

Die Logik des Betriebs dieses Knotens wird in der Tabelle gut beschrieben:

Bild

Wie Sie sehen können, arbeitet der Mikrocontroller je nach Status der RAM2_CE-Leitung entweder mit dem Flash-Speicher oder mit der RAM2 (DD3) -Mikroschaltung, und ihre Adressräume stimmen überein. Es ist erwähnenswert, dass die Speicherkapazität dieser Mikroschaltungen gleich ist. Möglicherweise wird dies durchgeführt, um das Aktualisieren der Firmware des Geräts zu vereinfachen. Es gibt noch eine andere Option: Der installierte RAM ist dreimal schneller als der Flash-Speicher, sodass der Controller nach dem Start den Inhalt von FLASH in RAM2 kopieren kann, wonach das Programm von dort ausgeführt wird.

Der hohe Pegel auf der A15-Leitung bestimmt jedoch eindeutig, dass der Controller mit dem RAM-Chip (DD2) arbeitet.

Als Ergebnis stellt sich heraus, dass sich FLASH- und RAM1-Speicher im Adressraum des Controllers abwechseln:

Bild

Der bereits angetroffene RAM-Bereich wird rot hervorgehoben. Beim Zugriff erhält der Controller in Wirklichkeit Zugriff auf die Daten an den Adressen (0x8000-0xFFFF).
Die Compilerkonfiguration ist nicht trivial, und wie oben erwähnt, geht die Hälfte von Flash / RAM2 verloren. Warum die Entwickler des Scanners nicht mithilfe der speziellen CSnX-Linie des Controllers zwischen den FLASH- und RAM-Chips gewechselt haben, ist nicht klar.

Wie bereits erwähnt, verfügt der verwendete Controller nicht über einen Flash-Speicher und daher über Sicherungsbits. Um einige Parameter der Steuerung zu konfigurieren: Datenbusbreite und -adresse, werden PLL-Parameter verwendet, die an den Datenbus angeschlossene Pulldown-Widerstände sind. Der Controller selbst verfügt über eingebaute Pull-Up-Widerstände mit hohem Widerstand (> 100 KOhm), die an den gesamten Bus angeschlossen sind. Aufgrund externer Widerstände wird somit eine bestimmte Kombination von Signalen auf dem Bus hergestellt, die der Controller beim Einschalten liest. Es bestimmt die notwendigen Controller-Einstellungen.

In diesem Fall handelt es sich um die Widerstände R3-R6. Die ausgewählte Konfiguration der Widerstände stimmt mit den resultierenden Bussignalverbindungen überein und liefert eine Reglertaktgeschwindigkeit von 33 MHz.

Das Impulssignal vom Spiegelgeber wird über das Logikelement OR D6 dem Eingang des Timers "T2IN" des Mikrocontrollers zugeführt. Der zweite Eingang dieses Chips ist mit dem GPIO des Controllers verbunden, wodurch Sie die Zufuhr von Impulsen zum Timer-Eingang deaktivieren können. Warum eine solche Lösung benötigt wird und warum es unmöglich ist, den Timer programmgesteuert auszuschalten, verstehe ich immer noch nicht.

Jetzt sollten Sie auf den OT-Chip (DD1) achten.

Der Scanner verfügt über einen TDC-GPX-Chip - den "fortschrittlichsten" von allen im Bereich ACAM. Die behauptete Genauigkeit der Messung von Zeitintervallen bis zu 10 ps RMS. Die Mikroschaltung hat 8 Eingangskanäle von LVTTL-Leitungen und 2 Kanäle von LVECL (Differential).
Um die maximale Genauigkeit der Zeitmessung zu erzielen, werden in diesem Scanner LVECL-Eingänge verwendet, um Signale vom Lasermodul und vom Fotodetektormodul unter Verwendung von vier Koaxialkabeln zu empfangen. Die Signale vom Lasermodul werden den Eingängen des DStart / DStartN zugeführt und starten die Zeitzählung. Die Signale vom Fotodetektormodul werden den Eingängen DStop1 / DStop1N, DStop2 / DStop2N zugeführt und stoppen die Zeitzählung. Wie aus dem Diagramm ersichtlich ist, werden Stoppsignale sofort an zwei OT-Kanäle mit inverser Polarität angelegt. Dadurch ist es möglich, nicht nur die Dauer des "Fluges" des Lichtimpulses zu messen, sondern auch die Breite des empfangenen Impulses.

TDC-GPX verfügt über einen 28-Bit-Datenbus, kann jedoch in den 16-Bit-Modus geschaltet werden, der im Scanner verwendet wird. Der Adressbus ist 4-Bit, er ist wie bei Speicherchips ebenfalls um 1 Bit verschoben. Die Chips DD8, DD9, U2 werden verwendet, um Steuersignale des Chips zu erzeugen und die Pegel anzupassen - der Mikrocontroller arbeitet mit 5 V und der OT - mit 3,3 V. Im Allgemeinen ist das OT-Stromversorgungssystem ziemlich komplex, es gibt sogar eine automatische Anpassung der Versorgungsspannung. Aufgrund seiner Komplexität habe ich nicht begonnen, das Diagramm zu zeichnen - ich vermute, dass es sich nicht wesentlich von einem Datenblatt unterscheidet.

Die Programmierung des Mikrocontrollers und des OT wird später erläutert.

Wie bereits erwähnt, ist auf der Platine ein benutzerdefinierter ASIC-Chip mit den Aufschriften „LEUZE98“ und „WATCHDOG“ installiert. Was es ist, ist unbekannt. Es ist ersichtlich, dass ein 20-MHz-Quarzoszillator an diese Mikroschaltung angeschlossen ist. Nachdem ich den Mikrocontroller programmieren konnte, stellte ich sicher, dass der ASIC seinen Betrieb nicht stört, und stellte das ASIC-Verbindungsdiagramm nicht wieder her. Soweit ich weiß, kommuniziert dieser Chip über einen parallelen Bus mit der Steuerung. Es ist möglich, dass der ASIC das Rücksetzsignal RESETn erzeugt, das den Controller und den OT zurücksetzt.

Trotzdem mussten einige Ketten genauer behandelt werden.

Wie sich herausstellte, kann das Lasersteuersignal "LASER_PULSE" sowohl vom Mikrocontroller als auch vom ASIC unter Verwendung eines Knotens an den Transistoren T1, T2 erzeugt werden. In diesem Fall öffnet der ASIC beim Einschalten den Transistor T1, so dass die Steuerung den Laser nicht steuern kann. Aus diesem Grund musste ich den Widerstand R24 entfernen - und der Laser wurde normalerweise von der Steuerung gesteuert.

Das Spiegelmotor-Steuersignal line_motor1 kam ebenfalls vom ASIC (über die Diode D2). Aus diesem Grund musste ich die Spur auf der Platine abschneiden und dieses Signal direkt an den freien Ausgang des GPIO-Controllers - P3.15 - anschließen.

Das Seltsamste ist, dass die CS2-Leitung, die mit dem auf der Leiterplatte des Fotodetektormoduls installierten DAC verbunden ist, auch mit dem ASIC verbunden ist. Aus diesem Grund konnte der Controller die APD-Versorgungsspannung nicht unabhängig einstellen und den APD-Verstärker einschalten. Möglicherweise wurde dies getan, um die Zuverlässigkeit des Scanners zu erhöhen - eine falsche DAC-Einstellung kann zum Ausfall des APD führen. Ich musste diese Leitung auch an den freien GPIO-Pin des P3.4-Controllers anschließen.

Es ist bekannt, dass es der ASIC ist, der die drei am Lasermodul montierten LEDs steuert. Zwei weitere LEDs, die den Status des Scanners anzeigen (das Vorhandensein eines Hindernisses im Arbeitsbereich), werden von den Steuerungsleitungen LN1, LN2 gesteuert. Diese Leitungen führen auch zur Schnittstellenmodulplatine.

Da der Scanner in Sicherheitssystemen arbeiten kann, verfügt die Prozessorkarte über eine große Anzahl von Knoten zur Diagnose ihres Zustands. Der Prozessor (und möglicherweise der ASIC) kann den Einschluss eines Lasers (unter Verwendung des U3-Chips) erkennen, den Pegel mehrerer Versorgungsspannungen, die APD-Versorgungsspannung, die APD-Temperatur und die Komparatorschwelle auf der Fotodetektorplatine steuern.

Aufgrund der Tatsache, dass die Referenzspannung des ADC des Reglers 4,1 V beträgt, wird ein Teil der gemessenen Spannungen mit Hilfe von Widerstandsteilern reduziert - sie sind im Diagramm rechts zu sehen.

Und jetzt lohnt es sich, einen genaueren Blick auf die Methode zur Erzeugung des ungewöhnlichen "Digi" -Signals zu werfen , die ich bereits in der Beschreibung des Fotodetektormoduls erwähnt habe.

Das folgende Diagramm zeigt die Knoten sowohl des Prozessormoduls (unten) als auch des Fotodetektormoduls (oben):

Bild

Die Pfeile zeigen den Anschluss der Module über Drähte. Im Folgenden werde ich die Funktionsweise dieser Knoten beschreiben, so wie ich es verstehe. In dem Fotodetektormodul wird das Signal vom APD-Ausgang durch den DA4-Chip verstärkt, wonach es an den Komparator D1 übertragen wird. Wenn der Signalpegel am Eingang des Komparators mehr als 50 mV beträgt, wird am Ausgang des Komparators ein hoher Pegel eingestellt. Das Signal vom Ausgang des Komparators wird an das Prozessormodul übertragen. Zunächst wird der OT-Eingang eingegeben, der die Zeit ab dem Beginn des Laserpulses zählt. Zusätzlich wird dieses Signal aber dem Takteingang des D-Triggers DD1 zugeführt. Dem Triggersignaleingang wird immer eine logische Einheit zugeführt, und der Trigger selbst kann über die GPIO-Leitung des BASE5-Controllers auf Null zurückgesetzt werden. Somit führt der Betrieb des Komparators zu einem Schnappauslöser "1". Dieser Trigger hat einen Differenzausgang.Das Signal wird vom Eingang des D3-Chips eingespeist, der es in das LVTTL-Format konvertiert. Dieses Signal wird dem "Digi" -Eingang des Fotodetektormoduls zugeführt. Wie bereits erwähnt, führt das Auftreten dieses Signals meiner Meinung nach zu einer Abschwächung des Signalpegels am Eingang des Komparators.

Die Hauptfrage ist, warum dies erforderlich ist und warum es so schwierig zu implementieren ist. Warum war es unmöglich, beide Knoten auf der Platine des Fotodetektormoduls zu erstellen?

Ich kann nur meine Annahmen ausdrücken. Möglicherweise muss das Signal gedämpft werden, um den Übergang des Komparators oder Amplitudendetektors zur Sättigung zu vermeiden. Vielleicht - um die Länge des empfangenen Impulses zu verringern. Für beide Knoten konnte einfach kein Platz auf der Fotodetektorplatine vorhanden sein. Eine andere Option ist ebenfalls möglich - das Signal muss erst geschwächt werden, nachdem es Zeit hat, den OT über Koaxialdrähte zu erreichen, was ein derart komplexes Design rechtfertigt.
Die Studie hat gezeigt, dass vor dem Starten eines neuen Laserpulses der Trigger zurückgesetzt werden muss, da sonst die Impulse nicht akzeptiert werden.

Schnittstellenmodul
Leider habe ich kein gutes Foto von diesem Modul gefunden. Es gibt nur diesen einen:

Bild

Auf diesem Modul sind nur zwei Anschlüsse installiert, an die Sie außerhalb des Scanners anschließen können. Eine davon ist RS-232 / RS-422. Gemäß der zweiten wird der Scanner mit Strom versorgt, es werden Steuersignale geliefert und hier wird ein Sicherheitsschaltkreis angeschlossen.

Dieses Modul enthält UART-RS232 / RS485-Wandler und Optokoppler mit galvanischer Trennung (sie sind auf einer separaten kleinen Platine rechts abgebildet), Netzschlüssel der Sicherheitsschaltung, Eingangsschaltungen der Steuerleitungen des Entfernungsmessers, eine Motorsteuerschaltung, einen Encodersignalwandler.

Das Leistungsmodul und das Prozessormodul sowie das Encodermodul und der Spiegelmotor sind an dieses Modul angeschlossen (über die Anschlüsse an der Unterseite des Moduls sind sie auf dem Foto nicht sichtbar).

Teildiagramm des Schnittstellenmoduls: Ich habe nur einen Teil des Schaltplans dieses Moduls wiederhergestellt (ca. 20%), da ich nicht an den Schlüsseln und Eingangsleitungen interessiert war, die zur Gewährleistung der Sicherheit erforderlich sind. In der Dokumentation werden die Strombegrenzung des Sicherheitsstromkreises, die Kurzschlussüberwachung und andere Funktionen erwähnt.

Bild



Etwas seltsam gemacht, die Drehzahl des Spiegelmotors zu steuern. Die Drehzahlregelung erfolgt durch Änderung der Motorspannung - damit ist alles klar. Die Einstellung dieser Spannung selbst erfolgt jedoch mit Hilfe einer bestimmten Integrationskette an einem Operationsverstärker. Um die Spannung zu erhöhen, setzt die Steuerung 0 auf der Leitung line_mot1, um sie auf 1 zu senken. Ohne konstante Rückmeldung vom Encoder stoppt der Motor offensichtlich oder beschleunigt durch die Steuerung auf die maximale Drehzahl.

Wie sich herausstellte, ist der UART-RS232 LTC1387-Konverterchip ziemlich langsam - bei einer Geschwindigkeit von 500 kbit / s waren die Daten verzerrt. Aus diesem Grund musste ich mit diesem Chip eine kleine Karte entfernen und den USB-UART-Konverter direkt an die Schnittstellenmodulkarte anschließen.

Nachdem ich über das Design aller Module gesprochen habe, lohnt es sich, den Prozess des Reverse Engineering selbst zu erläutern.

Als ich anfing, mich mit Scannerelektronik zu beschäftigen, hatte ich größte Angst, dass ein Laser oder Fotodetektor durch einen Aufprall beschädigt werden könnte. Gleichzeitig war ich mir nicht sicher, ob ich das Prozessormodul starten könnte - der unbekannte Mikrocontroller und der ASIC waren verlegen. Deshalb habe ich zuerst die Schaltung des Lasermoduls und dann des Fotodetektormoduls wiederhergestellt. Nachdem ich die Schaltung dieser Module verstehen und den Zweck aller Kontakte an ihren Anschlüssen bestimmen konnte, war es möglich, mit dem Prozessormodul fortzufahren. Als letzten Ausweg hatte ich die Idee, ein Analogon dieses Moduls auf STM32 + TDC-GP2-Mikroschaltungen zu erstellen, wenn ich es nicht starten konnte.

Um das Modul zu überprüfen, müssen Sie natürlich Ihr eigenes Programm auf dem darauf installierten Infineon SAK-C167CR-Mikrocontroller ausführen. Auch hier ist zu beachten, dass dieser Controller keinen integrierten Flash-Speicher hat. Darüber hinaus verfügt der Controller, wie sich herausstellte, über keine speziellen Debugging-Schnittstellen (einschließlich JTAG). Mit hoher Wahrscheinlichkeit wird die Firmware werkseitig auf einen externen Flash im Programmierer geschrieben. Wie sich herausstellte, ist jedoch nicht alles so schlecht - der Controller verfügt über einen Bootloader („Bootstrap Loader“), der an UART arbeitet. Dieser Bootloader ist im integrierten Boot-ROM des Controllers gespeichert, muss sich also in meinem Controller befunden haben. Und es funktioniert ganz eigenartig - um es beim Start zu aktivieren, müssen Sie die Datenbusleitung P0L.4 auf niedrig setzen,Danach wartet der Controller darauf, dass das 0x00-Byte vom Host angezeigt wird. Nachdem der Bootloader dieses Byte akzeptiert hat, ermittelt er automatisch die Übertragungsrate und wartet auf 32 Datenbytes, die er in den internen RAM des Controllers kopiert. Nachdem die Daten empfangen wurden, startet die Steuerung die Ausführung des empfangenen Programms (16 Steuerungswörter).

Tatsächlich müssen Sie in diesen 32 Bytes einen anderen Loader ("Preloader") pushen, der den Hauptlader "External Loader" vom Host empfängt, und dessen Ausführung starten.

Hier hatte ich Glück - für diesen Prozessor gibt es bereits ein fertiges FLASHit-Programm, das alle genannten Vorgänge automatisch ausführen kann. Der eingebaute Loader verfügt über zahlreiche Funktionen: Mit ihm können Sie automatisch das Modell des installierten Flash-Speichers ermitteln, den Inhalt der Controller-Register bearbeiten und anzeigen sowie den Status der ADC-Kanäle anzeigen.

Ich konnte keine Testpads auf der Platine finden, die mit der P0L.4-Leitung des Controllers verbunden waren. Um den Bootloader zu starten, musste ich einen speziellen Stift an diese Leitung anlöten. Ich habe den Stift auf den Fall eines der RAM-Chips geklebt. Um den Bootloader zu starten, müssen Sie diesen Pin über einen 8-kΩ-Widerstand mit Masse verbinden.

Nachdem ich die Karte an den Computer angeschlossen und das Prozessormodul mit Strom versorgt hatte, wurde der Mikrocontroller wirklich in FLASHit angezeigt. Danach habe ich ein kleines Programm in Keil geschrieben, das einen der Controller-Pins vertauscht und in Flash geschrieben hat. Das Programm hat gut funktioniert, ASIC hat sich nicht eingemischt (ich hatte Angst vor einem eingebauten Watchdog-Mechanismus oder vor Konflikten in den Bussen), damit ich weitermachen konnte.
Danach stellte ich die Prozessormodulschaltung wieder her, wodurch ich den Betrieb aller Module in der Baugruppe überprüfen konnte.

Beim ersten Mal habe ich den Betrieb des Lasermoduls überprüft. Wie ich bereits geschrieben habe, musste zum Starten des Laserpulses nur ein Signal an dieses Modul angelegt werden. Der Laser funktionierte - seine Blitze konnten mit der Kamera eines Mobiltelefons gesehen werden. Außerdem habe ich mit einem Oszilloskop überprüft, ob das Modul normalerweise Startimpulse (Referenzimpulse) bildet.

Als nächstes folgte die Überprüfung des Fotodetektormoduls. Hier musste ich den Betrieb des DAC, der Lawinenphotodioden-Spannungserzeugungseinheit und der Leistungssteuereinheit des Fotodetektorverstärkers überprüfen. Alle verdienten, was es ermöglichte, die Funktion des Entfernungsmessers selbst zu überprüfen. Zu diesem Zweck habe ich die Module in der von den Entwicklern beabsichtigten Form zusammengestellt:

Bild

Auf dem Foto sind alle fünf Hauptmodule um das optische System herum zusammengesetzt. Hier habe ich anstelle meines eigenen rotierenden Spiegels einen normalen Spiegel installiert.

Danach habe ich ein Lasersteuerungsprogramm für UART geschrieben, die Fotodiode eingerichtet. Als ich den Laser am Eingang des Komparators startete, konnte ich Impulse mit einem Oszilloskop erfassen, dessen Amplitude eindeutig von der Art des Hindernisses vor dem Spiegel abhing! Der Komparator hat auch gut funktioniert. Der letzte wichtige Teil des Tests blieb - die Überprüfung der OT-Leistung.

Der im Scanner installierte TDC-GPX-Chip hat ein ziemlich kompliziertes Design und kann in einer Vielzahl von Modi arbeiten.

Die folgende Abbildung zeigt das Strukturdiagramm:

Bild

Wie Sie sehen können, enthält der Chip 8 separate Kanäle, dh er kann bis zu 8 Stoppsignale empfangen. Wenn die Kanäle differenziell sind, können nur zwei Stoppsignale plus ein Startsignal analysiert werden. In diesem Fall können Sie mit dem Chip die Messkanäle kombinieren und so die Genauigkeit der Messzeitintervalle erhöhen:

Bild

Ehrlich gesagt hat mir die Dokumentation für diesen Chip nicht gefallen. Viele Dinge darin werden eher oberflächlich beschrieben, Codebeispiele sind unverständlich. Der Teil des Datenblattes, der der Anpassung der Zeitauflösung gewidmet ist, enthält eine Art „Migrationszahl“. Es gibt auch keinen normalen „Application Note“ auf dem Chip. Außerdem konnte ich im Scanner selbst die Verbindung der EF1 / EF1-Leitungen zum Controller nicht erkennen. Aus diesen Linien kann festgestellt werden, dass die Mikroschaltung die Messzeit beendet hat. Aus diesem Grund hat das Starten des OT sehr viel Zeit in Anspruch genommen, aber infolgedessen hat alles so funktioniert, wie es sollte - als der Laser gestartet wurde, funktionierte der TDC, und die Ergebnisse des TDC hingen eindeutig von der Entfernung zum Hindernis ab. Somit begann der gepulste Laser-Entfernungsmesser zu arbeiten. Es bleibt die gesamte Struktur in einen funktionsfähigen Laserscanner zu verwandeln.

Der erste Schritt, den ich brauchte, um die Einstellung vorzunehmen - der zusammengebaute Entfernungsmesser sah nach einigen Metern keine Hindernisse mehr. Das optische System sah intakt aus, aber ich musste die Platinen aus dem optischen System entfernen, damit das reflektierte Licht von der Linse auf dem Fotodetektor nicht genau fokussiert wurde.

Vor der Ausrichtung habe ich ein Programm für die Steuerung geschrieben, das nicht nur Entfernungen bestimmt, sondern auch die Amplitude des vom Spitzendetektor mit dem ADC erzeugten Signals gemessen hat.

Der gesamte Einstellvorgang wurde auf reibungslose Bewegungen des Fotodetektors und der Laserplatinen sowie auf die Suche nach ihrer Position reduziert, an der die Signalamplitude maximal ist. Infolge der Einstellung wurde die Amplitude des empfangenen Signals signifikant verbessert.

Als nächstes sollten Sie einige Merkmale der Datenverarbeitung beachten, die Impulsentfernungsmessern eigen sind.

Das vom Fotodetektor erzeugte Signal hat eine analoge Form. Um es in eine digitale Form umzuwandeln, die vom OT weiterverarbeitet wird, wird ein Komparator verwendet, der so konfiguriert ist, dass er umschaltet, wenn das Eingangssignal einen bestimmten Schwellenwert überschreitet. Infolgedessen tritt aufgrund der komplexen Form des Eingangssignals beim Ändern der Amplitude des Signals ein Fehler beim Bestimmen der Zeitintervalle auf:

Bild

Wie aus dem Diagramm ersichtlich ist, wird ein Signal mit einer niedrigeren Amplitude verzögert erfasst. Um dieses Problem zu lösen, gibt es verschiedene Methoden, sowohl Hardware als auch Software. Ich habe mich für die einfachste Option entschieden - die Korrektur der Messergebnisse in Abhängigkeit von der Signalamplitude. Gleichzeitig musste ich Statistiken über Änderungen der Zeitmessergebnisse aufgrund von Änderungen der Signalamplitude sammeln. Um die Amplitude des Signals zu ändern, ohne die anderen Parameter zu ändern, habe ich Papierblöcke auf der Linse verwendet, die den auf die Fotodiode einfallenden Lichtfluss reduzierten.

Das Ergebnis war diese Abhängigkeit:

Bild

Basierend auf dieser Abhängigkeit habe ich eine Korrekturtabelle erstellt, deren Daten vom Steuerungsprogramm verwendet werden, um die Entfernung zum Objekt zu bestimmen.

Der nächste Schritt ist das Starten des Spiegelmotors und des Encoders.

Ich habe bereits zuvor ein Foto eines Spiegels zitiert:

Bild

Der Spiegelmotor ist bürstenlos, sehr ähnlich zu denen, die in Kühlerlüftern verwendet werden. Es kommen drei Drähte heraus - zwei davon sind Strom, ein anderer ist ein Impulsgeschwindigkeitssignal. Alle diese Drähte sind mit dem Schnittstellenmodul verbunden, während das vom Motor erzeugte Drehzahlsignal nicht verwendet wird - die Steuerung basiert auf Daten vom Encoder.
Wie Sie auf dem Foto sehen können, ist eine transparente Scheibe mit Beschriftungen für den Encoder auf der Achse des Motors befestigt. Möglicherweise stellen Sie fest, dass sich auf der Festplatte eine Nullmarke befindet.

Der Encoder wurde auf eine kleine Platine montiert und vollständig mit einem Metallschirm abgedeckt, so dass seine Markierung nicht bestimmt werden konnte. Aufgrund seiner Größe und Pinbelegung entschied ich mich jedoch für einen HEDS-9040-Quadraturcodierer:

Bild

Vier Drähte gingen von der Encoderplatine zum Schnittstellenmodul, aber es stellte sich heraus, dass nur drei davon verwendet wurden - zwei Netzteile und ein Signal.

Soweit ich weiß, wurden Schmitt-Trigger und eine Logik auf der Karte installiert, die Daten von den Kanälen A, B und dem Index (Nullmarkierungssignal) kombiniert.

So sehen das von der Encoderplatine erzeugte Signal und das direkt vom Encoder aufgenommene Indexsignal aus.

Bild

Wie zu sehen ist, werden während des Indexsignals die Codiererimpulse unterdrückt. Wie sich herausstellte, erzeugte die Geberplatine 500 Impulse pro Umdrehung, aber der Zeitgeber des T2-Reglers, an den die Geberleitung angeschlossen ist, kann gleichzeitig an beiden Flanken der Impulse arbeiten, was 1000 Unterbrechungen pro Umdrehung des Spiegels ergibt. Dieser Wert entspricht der angegebenen Winkelauflösung des Scanners bei 0,36 Grad.

Ich stelle den T2-Timer auf „Aufnahmemodus“, mit dem ich die Zeit zwischen Unterbrechungen durch den Encoder messen kann. Die erhaltene Zeit wird verwendet, um die "Null" -Position des Spiegels zu erfassen und die Drehzahl des Motors zu stabilisieren. Gleichzeitig wird die Anzahl der Unterbrechungen gezählt, mit denen Sie die Position des Spiegels bestimmen können.

Nachdem der Encoder funktioniert hatte und ich die Drehzahlregelung starten konnte, konnte der Scanner komplett zusammengebaut werden. Aufgrund der komplexen Form der Platinen und der Optik erwies sich das Design als recht aufwendig: Es war nicht einfach, ein solches Design zusammenzubauen - die Genauigkeit der Anordnung der einzelnen Teile ist für den Scanner sehr wichtig. Wenn die Achse des Spiegels nicht mit der optischen Achse des Entfernungsmesserteils übereinstimmt, könnte dies dazu führen, dass die Abtastebene stark gekrümmt oder geneigt wäre.

Bild

Bild



Bei der Messung der genauen Entfernung zu Objekten ist es wichtig, eine Art Referenzobjekt zu haben, dessen Entfernung genau bekannt ist. Wenn Sie die "Flugzeit" kennen, können Sie die Zeit genau bestimmen, die der Nullentfernung entspricht. Aufgrund von Temperaturänderungen der Scannerkomponenten kann sich diese Zeit ändern, daher muss diese Zeit ständig überwacht werden. Um dieses Problem zu lösen, habe ich eine spezielle geschwärzte Platte in den Scanner eingebaut:

Bild

Die Platte ist geschwärzt, damit das von ihr reflektierte Licht den Fotodetektor nicht "blind" macht. Nach den Anweisungen wurden auch dunkle und hell reflektierende Elemente in das ursprüngliche Scannerdesign eingebaut. Sie wurden verwendet, um den Betrieb des Entfernungsmesserteils des Scanners zu überwachen, und höchstwahrscheinlich wurden sie auch zur Kalibrierung verwendet.

Auf dem Foto oben ist auch der auf der Platine montierte Encoder gut sichtbar. Wie sich herausstellte, muss der Encoder sehr genau relativ zur Platte positioniert sein, und es gab viele Probleme damit - selbst eine kleine Verschiebung des Encoders führte zum Verlust von Impulsen, insbesondere von Indeximpulsen. Es ist möglich, dass der Scanner nach dem Auftreffen auf den Körper gerade aufgrund von Problemen mit dem Encoder nicht mehr funktioniert.

Dadurch konnte eine Abtastgeschwindigkeit von bis zu 20 Umdrehungen pro Sekunde erreicht werden. Bei einer APD-Spannung von 135 V werden normalerweise Entfernungen von bis zu 10-15 m erkannt. Bei einer Spannung von 145 V und zusätzlicher Signalfilterung können Entfernungen von bis zu 30 m gemessen werden (obwohl ich nicht sicher bin, ob dies für einen Fotodetektor sicher ist).

Es ist erwähnenswert, dass die maximale Übertragungsgeschwindigkeit im Originalscanner 115200 Bit / s beträgt, wodurch Sie alle Daten nur mit einer Geschwindigkeit von etwa 11 Umdrehungen pro Sekunde übertragen können.

Wie bereits erwähnt, übertrage ich in meiner Firmware Daten mit einer Geschwindigkeit von 500 kbit / s, was die Anzahl der übertragenen Scans pro Sekunde erheblich erhöhen kann. Aufgrund der UART-Geschwindigkeitsbegrenzung habe ich die Scangeschwindigkeit nicht auf die ursprünglichen 25 Umdrehungen pro Sekunde erhöht. Ich stelle fest, dass im Originaldesign des Scanners die Daten im Scanner selbst verarbeitet werden, sodass die niedrige Datenübertragungsgeschwindigkeit keine besonderen Auswirkungen hat.

Da der Scanner jetzt ohne Gehäuse arbeitet, konnte der Scanbereich im ursprünglichen Design auf 208 Grad gegenüber 190 Grad vergrößert werden.

Visualisierung der vom Scanner empfangenen Daten:

Bild

Natürlich sollte der Scanner einige nützliche Funktionen erfüllen, daher habe ich beschlossen, seine Funktion in ROS in SLAM zu überprüfen und die Ergebnisse mit den Ergebnissen eines hausgemachten Laserscanners zu vergleichen . Zu diesem Zweck habe ich es auf Roomba installiert, auf dem zuvor ein hausgemachter Scanner installiert war.

Ansicht des auf Roomba installierten Leuze-Scanners (der Spiegel dreht sich so, dass er verschwommen erscheint ): Als Ergebnis der Operation hector_slam ist es uns gelungen, eine solche Wohnungskarte zu erhalten (die Wände sind gelb dargestellt): Da der Staubsauger auf Bodenhöhe fährt, „sieht“ er hauptsächlich die Möbel. Eine solche Karte erhält man jedoch, wenn der Staubsauger einfach in Höhe des Gürtels in Händen getragen wird: In diesem Fall sind die Wände der Wohnung häufiger „sichtbar“.

Bild



Bild





Bild



Wenn wir die Qualität der Karten vergleichen, ist klar, dass die Linien des hausgemachten Scanners „lauter“ sind. Dies liegt an der Tatsache, dass bei einem hausgemachten Scanner, der das Triangulationsprinzip verwendet, die Genauigkeit mit zunehmender Entfernung erheblich zunimmt.

Leider ist dieser Scanner trotz der sehr guten Scanqualität nicht für einen autonomen Roboter geeignet - er hat zu große Abmessungen und einen zu großen Stromverbrauch (ca. 7,2 W).
Wo sonst kann ich einen solchen Scanner verwenden? Früher, als ich über einen hausgemachten Scanner sprach, wurde ich oft nach der Möglichkeit gefragt, einen 3D-Scanner herzustellen, und es ist Zeit, ihn herzustellen! Eine ziemlich hohe Scangeschwindigkeit ist hier nützlich. Natürlich kann ein solcher Scanner aufgrund seiner Auflösung nicht mit Scannern verglichen werden, die das Triangulationsprinzip der Entfernungsmessung verwenden (mit einer Laserlinie oder einem Projektor (SLS)), aber sie können große Räume scannen - Räumlichkeiten, Straßenabschnitte.

Um einen 2D-Scanner in 3D neu zu erstellen, müssen Sie ihm die Möglichkeit geben, sich entlang einer anderen Achse zu drehen. Der Scanner entschied ich mich zu tun, nach dem gleichen Prinzip der Abtaststrahl als Scanner von diesemArtikel. Dazu habe ich den Leuze-Scanner so „liegend“ platziert, dass seine Scanebene senkrecht zum Boden steht. Als nächstes war es notwendig, eine gleichmäßige langsame Drehung des gesamten Scanners um die Achse zu realisieren. Die Hauptschwierigkeit - der Scanner muss sich ohne Schläge und Verzerrungen drehen, was zu Verzerrungen der Scans führt. Wie sich herausstellte, ist es zu Hause schwierig, eine Lagerbaugruppe herzustellen, die eine so genaue Drehung ermöglicht. Aus diesem Grund habe ich mich für den VHS-Kopf des Tonbandgeräts als Lagereinheit entschieden - er enthält zwei Lager, ist sehr genau hergestellt und hält dem Gewicht des Scanners stand. Die resultierende Konstruktion wird von einem Schrittmotor angetrieben.

Der zusammengebaute 3D-Scanner sieht folgendermaßen aus: Ansicht des auf einem Stativ montierten Scanners:

Bild



Bild

Auf der linken Seite befindet sich eine 12-V-Batterie, die auch ein Gegengewicht ist. Da der Leuze-Scanner für den Betrieb 24 V benötigt, musste ich einen DC / DC-Aufwärtswandler installieren, der auf der Grundlage des XL6009-Chips am Scanner montiert wurde. Der Schrittmotor des Scanners wird von einem Modul des A4988 und des Arduino gesteuert, das eine Drehung mit einer bestimmten Geschwindigkeit ermöglicht. Sowohl der Leuze-Scanner (über den USB-UART-Adapter) als auch der Arduino sind über einen USB-Hub mit einem Kabel an einen Computer angeschlossen, der Daten erfasst. In der aktuellen Form sind die Drehung des Scannerspiegels und die Drehung des gesamten Scanners nicht synchronisiert. Die Drehzahl des Scanners wird so gewählt, dass der Spiegel bei einer Drehung um 0,36 Grad Zeit hat, mindestens drei Umdrehungen auszuführen. Da es keine Geschwindigkeitssynchronisation gibt, musste ich Synchronisationspositionsinformationen vom Arduino an den Leuze-Scanner übertragen.Dies ist ganz einfach zu implementieren: Wenn Arduino den Scanner alle 0,36 Grad dreht, ändert sich der Signalpegel an einem der Anschlüsse. Dieses Signal wird an das Scanner-Prozessormodul (an den nicht verwendeten Anschluss des Schutzglas-Statussensors) übertragen. Informationen über den Status dieses Signals werden zu Beginn jedes Scanners gesendet - somit empfängt das selbstgeschriebene Programm für den PC, der den Scanner steuert, Informationen über die Bewegung des Scanners und bestimmt den Winkel, um den er gedreht wird.empfängt Informationen über die Bewegung des Scanners und bestimmt den Winkel, in dem er gedreht wird.empfängt Informationen über die Bewegung des Scanners und bestimmt den Winkel, in dem er gedreht wird.

Ein einzelner vom Scanner erzeugter 3D-Scan enthält ungefähr 350'000 Punkte. Dies ist natürlich deutlich weniger als bei professionellen Scannern, aber immer noch ziemlich gut, insbesondere wenn Sie mehrere Scans zusammenkleben.

Ein Beispiel ist ein einzelner Scan eines Raums: Ein Beispiel ist ein Scan eines Raums, der aus mehreren geklebt wurde: Der gescannte Teil des Eingangs: Ein Video, das die Ergebnisse des resultierenden Scanners zeigt:

Bild



Bild



Bild





Der Quellcode des Controller-Programms auf Github

Source: https://habr.com/ru/post/de396357/


All Articles