Fråga:
Är en CAN-aktiverad mikrokontroller tillräcklig för att driva en CAN-buss?
efox29
2012-04-24 03:57:42 UTC
view on stackexchange narkive permalink

Det finns ett antal CAN-moduler inbyggda i mikrokontroller idag. PIC18F2480 är ett exempel på det. Är den mikrokontrollern (med inbyggd CAN) kapabel att köra en CAN-buss på egen hand eller krävs en extern CAN-sändtagare / styrenhet?

Jag tror att CAN har både ett mjukvaru- och hårdvarulager och utseende av det verkar dessa CAN-aktiverade mikrokontroller bara ha programvaran, men det står inte att det kan eller inte kan köra CAN-bussen som den är.

Jag vill ansluta mer än sex mikrokontroller via en CAN-buss och vill veta om jag behöver en sändtagare över dem alla eller om de inbyggda grejerna kan hantera kommunikationen ur ett mjukvaru- och hårdvaruperspektiv.

Antag att jag har nödvändiga avslutningsmotstånd och andra små diskreta komponenter (kåpor, motstånd etc.)

Fem svar:
Rocketmagnet
2012-04-24 16:18:24 UTC
view on stackexchange narkive permalink

Detta är en mycket bra fråga. I allmänhet kräver CAN en sändtagare för varje nod:

enter image description here

Under vissa omständigheter kan du faktiskt komma undan utan sändtagare! Dessa omständigheter är:

  • Kort busslängd (mycket mindre än 1 meter)
  • Företrädesvis är alla mikrokontroller på samma kretskort eller stack av kretskort.
  • Bithastigheten är låg
  • Miljön är inte för mycket bullrig

Det här är inte svåra regler. Du kan komma undan med maximal bithastighet (1 MB / s) om du har en riktigt kort buss (10 cm).

För att uppnå detta måste du veta lite om vad sändtagaren gör. Liksom de flesta sändtagare kan de mata ut en hög eller en låg till bussen (representerar 1 och 0), men 0 kan dominera en 1. I.E. Om två sändtagare försöker tala samtidigt, och en säger 1 och den andra säger 0, kommer 0 att vinna. Vi kan återskapa samma situation genom att helt enkelt använda dioder:

Simple CAN

Se Seimens-applikationsanmärkning AP2921: Inbyggd kommunikation via CAN utan sändtagare

Men här är något ännu mer intressant: PIC har faktiskt hårdvarustöd för transceiverless CAN!

CIOCON Register

Du kan konfigurera CAN TX-stiftet så att det beter sig på exakt samma sätt som sändtagaren. Det betyder att du kan ansluta CAN-bussen utan dioder. Du behöver fortfarande motståndet.

Simpler CAN

Helt fantastiskt svar. Jag uppskattar mycket den tid du tog för att svara. Jag kan behöva gå med sändtagaren eftersom det kan finnas mycket elektriskt brus, och även om allt kommer att vara inrymt i en "låda" kommer de att finnas på flera pcbs. Tack igen!
@efox29 - Du är välkommen. Det är verkligen bättre att gå med sändtagare om du kan.
Den transceiverlösa installationen var ny för mig och ser väldigt intressant ut för att skapa ett enkelt nätverk av styrenheter över längre avstånd. Trevlig!
@0x6d64 - Om du behöver det länge, glöm inte att använda en låg bithastighet och svänghastigheten begränsar kanterna.
Om jag förstår rätt ser det ut som PIC: s "pin kommer att vara tri-state när recessiv" inställning motsvarar en open-drain-konfiguration.Detta kan fungera på andra mikrokontroller (som en STM32) om CAN TX-stiftet är konfigurerat som öppen dränering snarare än push-pull.Precis som PIC krävs inga dioder.
Observera att detta kommer att fungera om alla enheter på bussen använder samma konfiguration och använder en CAN-buss med en tråd.Om du vill gränssnitt med något annat som faktiskt är "riktig" ISO CAN och använder en tvåtrådsbuss fungerar inte detta läge.
timrorr
2012-04-24 19:03:56 UTC
view on stackexchange narkive permalink

LPC11Cxx -familjen av mikrokontroller (ARM Cortex-M0-baserad) inkluderar CAN-sändtagaren på chipet.

Ja. Höger. OP frågar om PIC18. Detta är inte riktigt bra.
@FedericoRusso han ger ett exempel med PIC18, och timrorr har gett en lösning med inbyggd drivrutin. Vad är fel med det?
@clabacchio: "Min fråga är, är ** att ** uC (med inbyggd CAN) kan köra en CAN-buss på egen hand". Han hänvisar tydligt till PIC18.
@FedericoRusso du har rätt, men innan han säger att PIC är ett exempel; en alternativ lösning, även om det kanske inte är ett direkt svar, kan lösa hans problem, och jag överlämnar beslutet till OP, eftersom jag tycker det är användbart att veta att vissa uC har den här funktionen
@FedericoRusso - Var inte så anal. Detta svar är väldigt intressant.
@Rocketmagnet: Så [F: "Hur gör jag X?" S: "Gör Y."] (http://meta.electronics.stackexchange.com/a/1263/3920) trots allt? (Från ditt eget svar)
@FedericoRusso - Om frågan har besvarats väl till OP: s tillfredsställelse, och någon nämner intressant relaterad information, varför inte?
Martin Thompson
2012-04-24 14:11:06 UTC
view on stackexchange narkive permalink

Ja, du behöver en tranceiver. CAN-stiften på mikro tar emot och sänder. CAN-bussen i sig använder ett tvinnat par med differentiell signalering på två ledningar som heter HIGH och LOW.

Ett av sändtagarens jobb är att ta den logiska nivån du presenterar på TX-stiftet och förvandla den till CAN-buss signaler:

  • en logik '1' representeras av att inte köra bussen, så HÖG- och LÅG-linjerna "flyter" till 2,5 V - kallad en "recessiv bit" i CAN-terminologi.
  • en logik '0' representeras av att köra HÖG linje hög och LÅG linje låg - kallas en "dominerande bit" eftersom den kommer att åsidosätta alla recessiva bitar som sänds.

Den andra är att ta det som finns på bussen och förvandla det till en logisk nivå för att skicka tillbaka från RX-stiftet till din mikro.

Olin Lathrop
2012-04-24 04:51:45 UTC
view on stackexchange narkive permalink

Du behöver ett CAN-sändtagarchip mellan CPU och CAN-bussen. Kolla in MCP2551.

Uppdatering 17 augusti 2017:

Jag är på Microchip Masters-konferensen just nu. Jag fick veta av Microchip-ingenjörer att en av de nya delarna som resulterade från Atmel-förvärvet är både billigare och bättre än MCP2551.

Microchip rekommenderar [2561] (http://www.microchip.com/wwwproducts/en/MCP2561) över 2551 nu.NXP har också några intressanta CAN-chips.De flesta MCU: er behöver en sändtagare.
Chris K
2015-07-02 03:23:25 UTC
view on stackexchange narkive permalink

Analoga enheter har en exempel CAN-sändtagarkrets med en differentiell förstärkare.
Jag har inte provat det här, jag är bara medveten om det. Också intresserad om det skulle kunna implementeras med en op-amp

analog's circuit

Fördelarna med att använda dedikerad IC CAN-sändtagare är att de kommer att hantera skiljeförfarande för dig och dig behöver inte oroa dig för att störa bussen. Om du bara observerar bussen och det inte är en felkritisk miljö kan kretsen vara bra. Medan mcp2551 är mycket populär, finns det många alternativ för gränssnittschips.

En ny utveckling är systembasstypen chips som inkluderar spänningsreglering, strömlägen och ESD-skydd från bussen.

Som timorr sa ovan är NXP: s LCP11C24 unik i det processorn inkluderar CAN-sändtagare. Ett demo-kort med detta är bara $ 19. En annan låg kostnadslösning är att använda $ 9,38 Cypress PSoC5 demo-kort, CY8CKIT-059. PSoC5 har ingen CAN-kontroller; det går en längre: styrenheten är implementerad i FPGA-liknande universalblock. Styrenhetens register konfigureras via IDE: s GUI, vilket gör filtrering och R&D ganska enkelt.

En nyckelmetod som jag har hittat när jag läser datablad är att mcu TTL är märkt CAN-Tx och CAN-Rx medan sändtagarna datalinjer till bussen är alltid märkta CAN-H och CAN-L. Jag ogillar diagrammen i det andra svaret där TxRx visas anslutna till bussen; detta strider mot konvention och bidrar till förvirring.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...