Geschichte des Ethernet-CAN-Konverters

An einem klaren, sonnigen Arbeitstag war ein kostengünstiger CAN-Ethernet-Schnittstellenkonverter erforderlich. Natürlich begann die Suche mit vorgefertigten Lösungen, aber wie so oft wurde am Ende beschlossen, eine eigene Stichprobe zu entwickeln. Natürlich konnte die Begeisterung des Autors nicht widerstehen und beschränkte sich auf eine solche "verkürzte" Funktionalität. Was kam daraus, wie und warum - unter dem Schnitt.

Bild

Allgemeine Zusammenfassung. Das Foto oben zeigt ein 3D-Modell der Platine, die ich mit CAD Altium Designer entwickelt habe. Hauptmerkmale und Funktionen:

  • 10 \ 100 Mb Ethernet
  • Rtc
  • MicroSD (FAT12, FAT16, FAT32) 4 GB
  • RS232 \ RS485
  • CAN
  • Summer
  • 3 Benutzer-LED
  • GPIO
  • EEPROM 32 KB
  • FLASH 2 MB
  • I2C
  • SPI
  • UART
  • SW \ JTAG
  • USB seriell (COM-Anschluss)
  • Stromversorgung: miniUSB 5V \ Extern 9..24V

Die Kosten für das gesammelte Board betragen ~ 5000 R. Das Projekt ist Open Source, die Quellen finden Sie auf Github . Was sich am Ende neben der Hauptfunktionalität herausstellte, kann als gutes Debugging-Board für die Arbeit mit dem STM32-Mikrocontroller angesehen werden.

Und nun zu den Details der Schöpfung.

Hardware


Die Untersuchung dieses Problems begann mit der Suche und Bewertung von vorgefertigten Lösungen. Die Hauptanforderungen waren:

  1. Konvertierung eingehender CAN2.0B-Frames in TCP \ IP-Pakete und umgekehrt;
  2. Niedrige Kosten als Ergebnis der Implementierung eines auf einem Mikrocontroller basierenden Geräts.

Kollegen aus China haben mehrere industrielle Lösungen, aber keine billigen. Daher wurde ein Vertreter des inländischen PIRS CAN-Ethernet-Schnittstellenkonverters für einen Test in unser Büro geliefert. Entsprechend den beschriebenen Fähigkeiten und Eigenschaften erfüllte das Gerät die bescheidene T.Z., es blieb nur noch die Leistung in der Praxis zu überprüfen, was ich mit Wireshark und dem Oszilloskop bewaffnet tat. Aus einem unbekannten Grund werden beim Senden von Paketen an das Geräte-TCP am Geräteausgang, an dem die CAN-Frames erscheinen sollten, Sequenzen mit physischen CAN-Pegeln (Differenzpaar), aber logischem UART-Schnittstellenprotokoll (mit Start- und Stoppbits) ausgespuckt. Beim Öffnen des Gehäuses, Öffnen der Dokumentation der Mikroschaltungen und Klingeln der Platinenschienen stellte ich fest, dass die RX- und TX-Pins (UART) des Mikrocontrollers tatsächlich mit dem CAN-Transceiver verbunden und von dort aus mit einem externen Anschluss verbunden sind. Daher war keine Hardwareunterstützung für den CAN2.0B-Standard zu erwarten.

Folgendes habe ich am CANL-Ausgang von „PIRS CAN-Ethernet“ beim Senden von zwei Datenbytes [ 0xF0 ] und [ 0x0A ] über TCP \ IP gesehen:

Bild

Die Reihenfolge der Bits ist verkehrt herum, aber Sie können programmgesteuert damit umgehen, aber es ist bereits schwieriger, auf Anwendungsebene etwas mit Start- und Stoppbits durch jedes Byte zu tun, weil Sie werden in Hardware eingefügt.

Und so sollte der „wahre“ CAN2.0B-Frame mit denselben zwei Datenbytes aussehen:

Bild

Wie Sie dem Oszillogramm entnehmen können, enthält der Frame zusätzlich zu den Datenbytes viele Dienstbits des Protokolls sowie Füllbits, und vor allem gehen sie kontinuierlich ohne Start- und Stoppbits! (Für Interessierte unter dem Spoiler eine detaillierte Beschreibung dieses Pakets).

Spoiler
Bild

Die ersten 4 Bytes sind die Rahmenkennung. Weitere Informationen zum CAN-Format finden Sie unter [1].

Daher war es mir nicht möglich, das Problem der Inkompatibilität von CAN- und UART-Frames mit einer Softwaremethode zu lösen, und angesichts der enttäuschten Zwischenergebnisse der Forschungsergebnisse wurde beschlossen, einen eigenen Prototyp des erforderlichen Geräts zu entwickeln.

Aufgrund der Tatsache, dass es nun möglich war, ein breiteres Spektrum an technischen Eigenschaften des Geräts zu steuern, wurden die folgenden Anforderungen hinzugefügt:

3. Die Fähigkeit, in Transportsystemen 12-24 V mit Strom zu versorgen;
4. Vorhandensein eines externen Speichers zum Speichern von Protokollen;
5. Die Abmessungen der Platine betragen nicht mehr als 86 x 80 mm.
6. Betriebstemperaturbereich -40..85 ° C.

Die berüchtigte STM32F407VET6- Plattform [2] wurde als Gehirn des neuen Geräts ausgewählt, das Hardware-Unterstützung für alle erforderlichen Schnittstellen und eine gute Versorgung mit RAM und FLASH-Speicher bietet. Nachdem das Internet aufpoliert worden war, wurde der Transceiver DP83848IVV [3] als PHY-Ethernet ausgewählt, das meiner Meinung nach eine gute Dokumentation und genügend Beispiele für Verbindungs- und Routing-Schemata aufweist. Als externen nichtflüchtigen Speicher zum Speichern von Protokollen habe ich SPI FLASH 2 MB und SPI EEPROM zum Speichern verschiedener Einstellungen ausgewählt. Zusätzlich wurde ein Leistungsschutz gegen Überspannung und Polaritätsumkehr hinzugefügt. Nach N Abenden und M Wochenenden wurden ein Schaltplan und eine Spur der Leiterplatte des Geräts der ersten Version erstellt. Weil Es gab genügend Platz auf dem Board, aber ich wollte die müßigen MK-Beine nicht verlassen. Zusätzlich zur Hauptfunktionalität wurde das Board hinzugefügt:

  • Debugging-Tools SW, JTAG;
  • 8-DIP-Schalter;
  • Micro-USB (USB Serial);
  • RS-232;
  • UART
  • I2C;
  • GPIO

Die Idee war, dass das Board bei Bedarf bereit war, die Funktionalität durch die Installation zusätzlicher Komponenten zu erweitern. Darüber hinaus wirken sich Ersatzsitze nicht auf die Produktionskosten aus. Auf der einen Seite war es leider nicht möglich, alles zu montieren, so dass sich herausstellte, dass das Board bilateral 86x80mm, min. Spurbreite 0,25 mm, minimaler Lochdurchmesser 0,6 mm.

Bild
Die erste Version des PCB-Designs

Später wurden zwei Testproben bestellt und mit einem kompletten Satz Peripheriegeräte für Forschungszwecke zusammengebaut. Um Geld zu sparen, wurde das Board ohne Maske hergestellt und hat daher eine so ungewöhnliche Farbe.

Bild

Mit Hilfe von STM32CubeMX skizzierte ich eine Test-Firmware mit einem Test der Funktionsfähigkeit der Hauptperipheriemodule des Geräts, und in erster Näherung funktionierte alles außer dem Starten des MK von einem externen 8-MHz-Quarz. Es stellte sich heraus, dass aufgrund meines Fehlers bei der Erstellung der Spezifikation die falschen Lastkondensatoren gelötet wurden. Dies hinderte den STM32F407 jedoch nicht daran, mit einem internen RC-Generator zu arbeiten. Als ich mein Gerät anpingen konnte, gab es keine zurückhaltende Freude. Mit dem PHY-Ethernet-Trace habe ich am längsten gebraucht. Dann sah ich im Browser meine Test-http-Seite und beruhigte mich mit dem Testen.

Die Herstellung der ersten Muster der Platten wurde in Zelenograd bestellt. Und trotz der Tatsache, dass die Kosten für "mit" der Maske und "ohne" fast zweimal unterschiedlich waren, empfehle ich dies auch im Prototypenstadium nicht, da in der Regel in diesem Stadium die Ablaufverfolgungsfehler auftauchen und etwas passiert löten. Aber sich auf den "nackten" Spuren zu betrinken ist extrem unangenehm, spart Geld, aber kaum Nerven. Ja, und dann zu raten, ob es irgendwo eine kurze Pause gab oder die Spur falsch ist - so ein Vergnügen. Aufgrund meiner Unerfahrenheit beim Löten eines Quarzresonators und von Lastkondensatoren habe ich eine Probe getötet.

Zu diesem Zeitpunkt befand sich bei der Arbeit in den Behältern ein Stück Eisen, mit dem die Konvertierungsaufgabe im aktuellen Projekt gelöst werden konnte. Zusätzlich zu der Größe und den Kosten, die ich für das Schreiben der Firmware hatte, stieß ich auf Probleme im Zusammenhang mit der RAM-Größe und der verkürzten Funktionalität des TCP \ IP MK-Stacks LPC2368. Der Wunsch, Ihr Gerät zu machen, hat sich also nur verstärkt.
Nachdem ich die Mängel der ersten Version sorgfältig untersucht hatte, ging ich, ohne darüber nachzudenken, zur zweiten über. Und wieder wollte ich einen „Rückstand für die Zukunft“ hinzufügen, der die folgenden Komponenten in den vorherigen Formfaktor einbezieht:

  • RTC-Unterstützung mit Batterie;
  • RS-485;
  • Mikro-SD;
  • Summer Hochtöner;
  • USB-Stromversorgungsoption
  • SPI zum externen Anschluss;
  • 5 V und 3,3 V Strom an einen externen Anschluss.

Unter anderem wurden der aktuelle Stromschutz und TVS-Dioden an Benutzeranschlüssen hinzugefügt.

Das Ergebnis ist eine Art Entwicklungsplatine mit der Möglichkeit, externe Module anzuschließen. Diesmal habe ich ein Board in China bestellt. Die Montage wurde mit uns durchgeführt.

Bild

Bild
Die zweite Version des Boards

Für die zweite Version habe ich die 3D-Modellierung in Altium Designer herausgefunden, was sehr dazu beigetragen hat, Fehler bei der relativen Positionierung von Komponenten auf zwei Seiten zu vermeiden (es stellte sich heraus, dass das Internet bereits viele vorgefertigte Modelle von SMD-Komponenten hatte [4] ). Damit wurden alle Fehler der ersten Version behoben, die Innovationen zeigten ihre Effizienz, was mich sehr freute.

Firmware


Die Beschreibung des Codes würde den Rahmen dieses Teils sprengen, ich möchte jedoch einige Worte zur Softwarekomponente sagen. Auf meinem Gerät habe ich mich für den FreeRTOS + LwIP-Stack entschieden. Es gibt eine ausreichende Anzahl von Artikeln über sie, zum Beispiel [5] und [6] , so dass es nicht schwierig sein sollte, sie an Ihr Projekt zu binden. Kurz gesagt, LwIP ist ein TCP \ IP-Stack für eingebettete Systeme, der sich durch einen geringen RAM-Verbrauch und eine praktische API auszeichnet (es gibt sogar eine BCD-Socket-Shell). Ich habe die Netconn-API verwendet. Mit FreeRTOS wird die gesamte Arbeit des TCP \ IP-Stacks in einem von der Anwendung getrennten Stream abgelegt. Zusätzlich zur Hauptarbeit (Anschließen eines externen TCP-Servers an den CAN-Bus) dreht sich ein separater Webserver in einem unabhängigen Stream, um auf die Geräteeinstellungen zuzugreifen. Eine solche Webschnittstelle dient zum Überwachen und Konfigurieren von Geräteeinstellungen - Einstellen verschiedener Betriebsmodi, Übertragungsgeschwindigkeiten, Adressen usw. Ich weiß noch nicht, ob es möglich sein wird, ein Firmware-Update damit durchzuführen.

Fazit


Dies war mein erstes (und ich hoffe nicht das letzte) Hardwareprojekt dieser Komplexität, und trotz der gemachten Fehler kann die zweite Version des Boards meiner Meinung nach als erfolgreich angesehen werden. Bei jeder Iteration gab es viele Zweifel, aber ich bin trotzdem wieder einmal davon überzeugt, dass sich nichts herausstellen wird, wenn Sie es nicht versuchen.

Verwendete Quellen


1. Wikipedia / Controller_Area_Network
2. Datenblatt STM32F407VET6
3. DP83848-Datenblatt
4. 3D-Modelle
5. Einführung in FreeRTOS
6. Einführung in LwIP

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


All Articles