Inhoudsopgave:

STM32 CAN-interface: 7 stappen
STM32 CAN-interface: 7 stappen

Video: STM32 CAN-interface: 7 stappen

Video: STM32 CAN-interface: 7 stappen
Video: STM32 настройка CAN 2024, November
Anonim
STM32 CAN-interface
STM32 CAN-interface

De Controller Area Network-bus, of CAN-bus, is een zeer effectief communicatieprotocol dankzij de hoge snelheidscapaciteiten, de lange afstandsbetrouwbaarheid en de ruisimmuniteit. Om deze redenen is CAN-communicatie de standaard geworden in autotechnologieën en omgevingen met veel lawaai. Apparaten op de CAN-bus worden nodes genoemd. Alle knooppunten op de CAN-bus zijn parallel aangesloten, wat betekent dat elk knooppunt is verbonden met alle andere knooppunten op het netwerk. Een enkele CAN-bus kan maximaal 115 knooppunten tegelijk hebben, afhankelijk van de snelheid van de berichtoverdracht, maar voor de meeste toepassingen wordt aanbevolen om maximaal 32 apparaten te hebben. Het wordt ook aanbevolen om de lengte tussen de eerste en de laatste knoop minder dan 40 meter uit elkaar te houden.

Deze stapsgewijze zelfstudie laat u zien hoe u een CAN-knooppunt instelt met behulp van de STM32-microcontroller, inclusief het circuit en de eenvoudige C-code om naar de CAN-bus te lezen en te schrijven

Benodigdheden

Voor elk CAN-knooppunt:

  • 1x STM32 breakout-bord (Nucleo, Blue Pill, andere)
  • 1x MCP2551 CAN-transceiver IC
  • 1x 0.1µF condensator
  • 1x 120Ω weerstand
  • 1x 1kΩ weerstand
  • 1+ leesbare ingang (knop, schakelaar, potentiometer, etc.) of uitgang (LED, MOSFET, etc.)
  • 1x Dsub9-connector

Stap 1: Het zendontvangercircuit

Het zendontvangercircuit
Het zendontvangercircuit

Om met de CAN-bus te communiceren, gebruiken we het MCP2551 CAN-transceiver-IC. Het IC fungeert als een tussenzender/ontvanger-paar om de STM32 op de CAN-bus aan te sluiten. Het circuit om dit IC in te stellen is vrij eenvoudig, maar er zijn een paar dingen om op te merken:

  • De CAN_RX (pin 4) en CAN_TX (pin 1) op de MCP2551-chip kunnen alleen naar bepaalde pinnen op de STM32 gaan.

    • Sluit op de STM32F1 Nucleo de RX-lijn aan op pin PB8 en de TX-lijn op pin PB9.
    • Sluit op de STM32F1 blauwe pil RX aan op pin PA11 en TX op pin PA12.
    • Merk op dat deze pintoewijzingen alternatieven hebben. Raadpleeg de handleidingen van de microcontroller om te bepalen welke pinnen geschikt zijn voor CAN_RD en CAN_TD
    • Als u een Arduino of een bord gebruikt zonder ingebouwde CAN-communicator, is de MCP2515 IC-chip vereist om andere berichtprotocollen naar CAN te converteren.
  • De CANL-pin moet worden aangesloten op de andere CANL-pinnen van de andere busknooppunten. Hetzelfde geldt voor de CANH-pinnen.
  • De 120Ω-weerstand over de CANH- en CANL-pinnen is alleen nodig als het knooppunt een eindknooppunt is. Dit betekent dat het zich aan het einde van de parallelle verbindingsbedrading bevindt. Met andere woorden, de CAN-bus mag slechts twee 120Ω-weerstanden bevatten en ze moeten zo ver mogelijk van elkaar verwijderd zijn.
  • Ten slotte kan de weerstand van 1 kΩ op RS (pin 8) worden vervangen door een weerstand van 10 kΩ om de stijg-/daaltijd van de CAN-berichtbits te regelen. Raadpleeg de datasheet van de MCP2551-chip voor meer details.

Stap 2: Lezen en schrijven naar de CAN-bus

Lezen en schrijven naar de CAN-bus
Lezen en schrijven naar de CAN-bus

Nu het transceivercircuit is aangesloten op de STM32, kunnen we beginnen met het schrijven van berichten naar de CAN-bus. Deze instructable gids gaat niet dieper in op de STM32-code. Bekijk hier echter onze code voor voorbeelden. Voor het gebruik van de STM32 als CAN-knooppunt is een CAN-headerbestand vereist. We hebben er zelf een geschreven, die je hier op onze github kunt vinden. Hier geven we een kort overzicht van het lees-/schrijfproces.

Om van de CAN-bus te kunnen lezen, moeten we eerst de ID van het CAN-bericht weten. Elk bericht moet een unieke ID hebben, waarbij lagere ID's een hogere prioriteit hebben. Het hier getoonde codefragment wacht op een CAN-bericht met ID 0x622. Als in ons systeem het eerste bit van de 6e byte hoog is, willen we pin A10 hoog zetten.

Bij het schrijven van een CAN-bericht moeten we onthouden dat CAN-berichten multi-byte zijn. Elk geschreven bericht moet een ID en lengte hebben. In het tweede getoonde codefragment schrijven we gegevens naar elke byte en verzenden vervolgens het bericht (de ID- en lengteparameters worden eerder in de code gedefinieerd).

Stap 3: Knooppunten verbinden

Knooppunten verbinden
Knooppunten verbinden

Bij het aansluiten van meerdere CAN-nodes moet goed worden gelet op de lengte van de kabels. De twee verste knooppunten kunnen tot 40 meter van elkaar verwijderd zijn. Middelste knooppunten die op de bus aansluiten, moeten zich binnen 50 cm van de hoofdbuslijnen bevinden.

CAN-verbindingen volgen een industriestandaard voor het gebruik van een Dsub9-connector met de CANL-lijn op pin 2 en de CANH-lijn op pin 7. De optie CANGND-lijn kan op pin 3 gaan.

Stap 4: Maak de PCB

Maak de printplaat
Maak de printplaat

Houd er bij het routeren van CAN-signalen op een PCB rekening mee dat CAN een differentieel signaal is en dat de routeringsrichtlijnen voor de CANH en CANL daarom zorgvuldig moeten worden gevolgd.

Stap 5: Het bord uitbreiden

Het bord uitbreiden
Het bord uitbreiden

Gooi nog wat knooppunten bij elkaar, voeg wat inputs/outputs toe en verbind al hun CANH- en CANL-pinnen. Merk op dat elke STM32 of andere microcontroller zijn eigen MCP2551-chip nodig heeft; ze kunnen niet worden gedeeld.

Dat gezegd hebbende, probeer je PCB's kleiner te houden dan de hier getoonde

Stap 6: Bestel uw PCB's bij JLCPCB

Bestel uw PCB's bij JLCPCB
Bestel uw PCB's bij JLCPCB

JLCPCB biedt snelle service van hoge kwaliteit tegen zeer redelijke prijzen. Krijg 5 borden, elke kleur met heel veel maatwerk, voor slechts $ 2! En als het je eerste bestelling is, krijg je 10 boards voor dezelfde prijs!

Upload je gerbers en ontvang direct een offerte! Dien uw bestelling in en uw boards worden binnen het uur beoordeeld voor productie. Zodra je hebt betaald, kun je je boards van hoge kwaliteit binnen drie dagen verwachten!

Bekijk het hier

Stap 7: Haal je borden

Haal je borden!
Haal je borden!

Enorme shout out naar JLCPCB voor het sponsoren van dit project. JLCPCB (ShenzhenJLC Electronics Co., Ltd.), is de grootste onderneming voor PCB-prototypes in China en een hightechfabrikant die gespecialiseerd is in snelle PCB-prototyping en PCB-productie in kleine batches. Ze waren zo vriendelijk om UBC Solar te voorzien van onze nieuwe printplaten voor onze raceauto op zonne-energie. We hebben onze bestelling op vrijdag geplaatst en de planken op woensdag ontvangen!

Aanbevolen: