Inhoudsopgave:

Een eenvoudige handleiding voor CANBUS: 8 stappen
Een eenvoudige handleiding voor CANBUS: 8 stappen

Video: Een eenvoudige handleiding voor CANBUS: 8 stappen

Video: Een eenvoudige handleiding voor CANBUS: 8 stappen
Video: Zonnepaneel Camper Aansluiten: In 8 Eenvoudige Stappen 2024, Juli-
Anonim
Een eenvoudige handleiding voor CANBUS
Een eenvoudige handleiding voor CANBUS

Ik bestudeer CAN al drie weken en heb nu een aantal applicaties voltooid om mijn leerresultaten te valideren. In deze tutorial leer je hoe je Arduino kunt gebruiken om CANBUS-communicatie te implementeren. Als je suggesties hebt, laat dan gerust een bericht achter.

Benodigdheden:

Hardware:

  • Maduino Zero CANBUS
  • DHT11 Temperatuur- en vochtigheidsmodule
  • 1.3" I2C OLED 128x64- Blauw
  • DB9 naar DB9-kabel (vrouwelijk naar vrouwelijk)
  • Dupont-lijn

Software:

Arduino IDE

Stap 1: Wat is CANBUS

Wat is CANBUS
Wat is CANBUS
Wat is CANBUS
Wat is CANBUS

Over CAN

CAN (Controller Area Network) is een serieel communicatienetwerk dat gedistribueerde realtime besturing kan realiseren. Het is ontwikkeld voor de auto-industrie om de complexe kabelboom te vervangen door een tweedraads bus.

Het CAN-protocol definieert de Data Link Layer en een deel van de Physical Layer in het OSI-model.

Het CAN-protocol is ISO-gestandaardiseerd met ISO11898 en ISO11519. ISO11898 is de CAN high-speed communicatiestandaard met een communicatiesnelheid van 125kbps-1Mbps. ISO11519 is de CAN low-speed communicatiestandaard met een communicatiesnelheid van minder dan 125 kbps.

Hier richten we ons op high-speed CAN.

ISO-11898 beschrijft hoe informatie wordt doorgegeven tussen apparaten op een netwerk en voldoet aan het Open Systems Interconnection-model (OSI) dat is gedefinieerd in termen van lagen. De feitelijke communicatie tussen apparaten die door het fysieke medium zijn verbonden, wordt bepaald door de fysieke laag van het model

  • Elke CAN-eenheid die op de bus is aangesloten, kan een knooppunt worden genoemd. Alle CAN-units zijn aangesloten op een bus die aan elk uiteinde is afgesloten met 120 Ω-weerstanden om een netwerk te vormen. De bus bestaat uit CAN_H- en CAN_L-lijnen. De CAN-controller bepaalt het busniveau op basis van het verschil in het vermogensniveau op beide draden. Busniveaus zijn onderverdeeld in dominante en recessieve niveaus, die er een van moeten zijn. De afzender stuurt het bericht naar de ontvanger door een wijziging aan te brengen op busniveau. Wanneer de logische regel "en" op de bus wordt uitgevoerd, is het dominante niveau "0" en het recessieve niveau "1".
  • In de dominante toestand is de spanning van CAN_H ongeveer 3,5 V en de spanning van CAN_L ongeveer 1,5 V. In recessieve toestand is de spanning van beide lijnen rond de 2,5V.
  • Het signaal is differentieel en daarom ontleent CAN zijn robuuste ruisimmuniteit en fouttolerantie. Gebalanceerd differentieel signaal vermindert ruiskoppeling en zorgt voor hoge signaleringssnelheden via twisted-pair-kabel. De stroom in elke signaallijn is gelijk, maar in de tegenovergestelde richting, wat resulteert in een veldonderdrukkend effect dat essentieel is voor lage geluidsemissies. Het gebruik van gebalanceerde differentiële ontvangers en twisted-pair bekabeling verbetert de common-mode onderdrukking en hoge ruisimmuniteit van een CAN-bus.

CAN-zendontvanger:

De CAN Transceiver is verantwoordelijk voor de conversie tussen het logische niveau en het fysieke signaal. Converteer een logisch signaal naar een differentieel niveau of een fysiek signaal naar een logisch niveau.

CAN-controller:

De CAN-controller is de kerncomponent van CAN, die alle functies van de datalinklaag in het CAN-protocol realiseert en het CAN-protocol automatisch kan oplossen.

MCU

De MCU is verantwoordelijk voor de aansturing van het functiecircuit en de CAN-controller. De parameters van de CAN-controller worden bijvoorbeeld geïnitialiseerd wanneer het knooppunt start, het CAN-frame wordt gelezen en verzonden via de CAN-controller, enz.

Stap 2: Over CAN-communicatie

Als de bus inactief is, kunnen alle nodes berichten gaan verzenden (multi-master control). Het knooppunt dat als eerste de bus benadert, krijgt het recht om te verzenden (CSMA/CA-modus). Wanneer meerdere knooppunten tegelijkertijd beginnen te verzenden, krijgt het knooppunt dat het ID-bericht met hoge prioriteit verzendt het recht om te verzenden.

In het CAN-protocol worden alle berichten in een vast formaat verzonden. Als de bus inactief is, kunnen alle op de bus aangesloten eenheden nieuwe berichten gaan verzenden. Wanneer meer dan twee cellen tegelijkertijd berichten beginnen te verzenden, wordt de prioriteit bepaald op basis van de identifier. De ID vertegenwoordigt niet het bestemmingsadres van de verzending, maar eerder de prioriteit van het bericht dat toegang krijgt tot de bus. Wanneer meer dan twee cellen tegelijkertijd berichten beginnen te verzenden, wordt elk bit van de rentevrije ID één voor één gearbitreerd. De eenheid die de arbitrage wint, kan berichten blijven verzenden en de eenheid die de arbitrage verliest, stopt onmiddellijk met verzenden en ontvangt het werk.

De CAN-bus is een broadcast-bus. Dit betekent dat alle nodes alle uitzendingen kunnen ‘horen’. alle knooppunten zullen steevast al het verkeer oppikken. De CAN-hardware zorgt voor lokale filtering, zodat elk knooppunt alleen op de interessante berichten mag reageren.

Stap 3: Frames

Frames
Frames

CAN-apparaten verzenden gegevens over het CAN-netwerk in pakketten die frames worden genoemd. CAN heeft vier frametypes:

  • Dataframe: een frame dat knooppuntgegevens bevat voor verzending
  • Extern frame: een frame dat de verzending van een specifieke identifier vraagt
  • Foutframe: een frame verzonden door een knooppunt dat een fout detecteert
  • Frame overbelasten: een frame om een vertraging te injecteren tussen gegevens of een frame op afstand

Gegevensframe

Er zijn twee soorten dataframes, standaard en uitgebreid.

De betekenis van de bitvelden van de figuur is:

  • SOF–De single dominante start of frame (SOF) bit markeert het begin van het bericht en wordt gebruikt om de knooppunten op een bus te synchroniseren nadat ze inactief zijn geweest.
  • Identifier-De standaard CAN 11-bit identifier bepaalt de prioriteit van het bericht. Hoe lager de binaire waarde, hoe hoger de prioriteit.
  • RTR–De single Remote Transmission Request (RTR) bit
  • IDE–Een dominante IDE-bit (single identifier extension) betekent dat een standaard CAN-ID zonder extensie wordt verzonden.
  • R0–Gereserveerde bit (voor mogelijk gebruik door toekomstige standaardwijziging).
  • DLC–De 4-bits datalengtecode (DLC) bevat het aantal bytes aan gegevens dat wordt verzonden.
  • Gegevens: er kunnen maximaal 64 bits aan toepassingsgegevens worden verzonden.
  • CRC–De 16-bit (15 bits plus scheidingsteken) cyclische redundantiecontrole (CRC) bevat de controlesom (aantal verzonden bits) van de voorgaande toepassingsgegevens voor foutdetectie.
  • ACK-ACK is 2 bits, één is de bevestigingsbit en de tweede is een scheidingsteken.
  • EOF–Dit end-of-frame (EOF), 7-bits veld markeert het einde van een CAN-frame (bericht) en schakelt bitstuffing uit, wat wijst op een vulfout bij dominantie. Wanneer 5 bits van hetzelfde logische niveau achtereenvolgens optreden tijdens normaal bedrijf, wordt een bit van het tegenovergestelde logische niveau in de gegevens gestopt.
  • IFS: deze 7-bits interframeruimte (IFS) bevat de tijd die de controller nodig heeft om een correct ontvangen frame naar de juiste positie in een berichtenbuffergebied te verplaatsen.

Arbitrage

In de inactieve toestand van de bus krijgt de eenheid die het bericht het eerst begint te verzenden, het verzendrecht. Wanneer meerdere eenheden tegelijkertijd beginnen te verzenden, begint elke verzendende eenheid bij het eerste bit van het arbitragesegment. De eenheid met het grootste aantal continue output dominante niveaus kan blijven zenden.

Stap 4: Snelheid en afstand

Snelheid en afstand
Snelheid en afstand

De CAN-bus is een bus die meerdere units tegelijk verbindt. Er is theoretisch geen limiet aan het totale aantal units dat kan worden aangesloten. In de praktijk wordt het aantal aan te sluiten units echter beperkt door de tijdvertraging op de bus en de elektrische belasting. Verlaag de communicatiesnelheid, verhoog het aantal units dat kan worden aangesloten en verhoog de communicatiesnelheid, het aantal units dat kan worden aangesloten neemt af.

De communicatieafstand is omgekeerd evenredig met de communicatiesnelheid, en hoe verder de communicatieafstand, hoe kleiner de communicatiesnelheid. De langere afstand kan 1 km of meer zijn, maar de snelheid is minder dan 40 kps.

Stap 5: Hardware

Hardware
Hardware

Maduino Zero CAN-BUS-module is een tool ontwikkeld door Makerfabs voor CANbus-communicatie. Het is gebaseerd op Arduino, met de CAN-controller en CAN-transceiver, om een kant-en-klare CAN-bus-poort te creëren.

  • MCP2515 is een stand-alone CAN-controller die de CAN-specificatie implementeert. Het kan zowel standaard als uitgebreide gegevens en externe frames verzenden en ontvangen.
  • De MAX3051 vormt een interface tussen de CAN-protocolcontroller en de fysieke draden van de buslijnen in een controller area network (CAN). De MAX3051 biedt differentiële zendcapaciteit naar de bus en differentiële ontvangstcapaciteit naar de CAN-controller.

Stap 6: Verbinding

Verbinding
Verbinding

Sluit de DHT11-module aan op de Maduino Zero CAN-BUS-module met draden om te gebruiken als instrument om CAN-communicatie te ondersteunen. Sluit op dezelfde manier het display aan op de module om de gegevens te ontvangen en weer te geven.

De verbinding tussen Maduino Zero CANBUS en DHT11:

Maduino Nul CANBUS -- DHT11

3v3 ------ VCC GND ------ GND D10 ------ GEGEVENS

De verbinding tussen Maduino Zero CANBUS en OLED:

Maduino Zero CANBUS -- OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Gebruik een DB9-kabel om de twee Maduino Zero CANBUS-modules aan te sluiten.

Stap 7: Coderen

De MAX3051 voltooit de conversie van differentiële niveaus naar logische signalen. De MCP2515 voltooit de CAN-functie zoals gegevenscodering en decodering. De MCU hoeft alleen de controller te initialiseren en gegevens te verzenden en te ontvangen.

  • Github:
  • Nadat Arduino is geïnstalleerd, is er geen pakket om het bord (Arduino zero) te ondersteunen dat moet worden geïnstalleerd.
  • Selecteer tools -> Board -> Board Manager, zoek "Arduino zero" en installeer "Arduino SAMD Boards".
  • Selecteer Tools -> Board -> Arduino Zero (Native USB Port), selecteer Tools -> Port -> com…
  • Nadat u het programma van GitHub hebt opgehaald, moet u ervoor zorgen dat alle bestanden zich in de projectdirectory bevinden, die bibliotheekbestanden bevat die CANBUS ondersteunen.
  • Installeer de DHT-sensorbibliotheek van Adafruit, die wordt gebruikt om de DHT11 aan te sturen om temperatuur en vochtigheid te verkrijgen.
  • Gebruik verschillende adressen om temperatuur en vochtigheid afzonderlijk te verzenden in de code Test_DHT11.ino.

CAN.sendMsgBuf (0x10, 0, stmp1.length(), stmp_send1);

vertraging (500); CAN.sendMsgBuf (0x11, 0, stmp2.length(), stmp_send2); vertraging (500);

"0x10" is de gemiddelde bericht-ID, "0" is de gemiddelde standaardframe, "stmp1.length()" is de gemiddelde lengte van het bericht, "stmp_send1" is de verzonden gegevens.

  • In de code Test_OLED.ino worden alle berichten op de CANBUS ontvangen door te vragen en wordt de vereiste informatie weergegeven op de OLED.
  • Upload het programma Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino naar de module die op de sensor is aangesloten, en upload het programma Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino naar een andere module die op de OLED is aangesloten.

Stap 8: Tonen

Laten zien
Laten zien
Laten zien
Laten zien

Schakel de twee modules in, temperatuur en vochtigheid worden op het display weergegeven.

Aanbevolen: