ዝርዝር ሁኔታ:

የ CAN ፕሮቶኮል - አዎ ፣ እንችላለን! 24 ደረጃዎች
የ CAN ፕሮቶኮል - አዎ ፣ እንችላለን! 24 ደረጃዎች

ቪዲዮ: የ CAN ፕሮቶኮል - አዎ ፣ እንችላለን! 24 ደረጃዎች

ቪዲዮ: የ CAN ፕሮቶኮል - አዎ ፣ እንችላለን! 24 ደረጃዎች
ቪዲዮ: 12V ፣ 24V 400 ዋ ተለዋጭ የተጎላበተ የንፋስ ተርባይን ጀነሬተር 2024, ሀምሌ
Anonim
Image
Image
ጥቅም ላይ የዋሉ ሀብቶች
ጥቅም ላይ የዋሉ ሀብቶች

የእኔ የ YouTube ሰርጥ ተከታዮች በቅርቡ የተጠቆሙት ሌላ ርዕሰ ጉዳይ የ CAN (ተቆጣጣሪ አካባቢ አውታረ መረብ) ፕሮቶኮል ነው ፣ እኛ ዛሬ የምናተኩረው። CAN በአንድ ጊዜ ተከታታይ የግንኙነት ፕሮቶኮል መሆኑን ማስረዳት አስፈላጊ ነው። ይህ ማለት ከአውታረ መረቡ ጋር በተገናኙት ሞጁሎች መካከል መመሳሰል የሚከናወነው ወደ አውቶቡስ ከተላከው እያንዳንዱ መልእክት መጀመሪያ ጋር በተያያዘ ነው። የ CAN ፕሮቶኮል መሰረታዊ ፅንሰ ሀሳቦችን በማስተዋወቅ እንጀምራለን እና ከሁለት ESP32 ዎች ጋር ቀለል ያለ ስብሰባ እናከናውናለን።

በወረዳችን ፣ ኢሠፓዎች እንደ መምህር እና ባሪያ ሆነው ሊያገለግሉ ይችላሉ። ብዙ የማይክሮ መቆጣጠሪያዎች በአንድ ጊዜ የሚያስተላልፉ ሊኖሩዎት ይችላሉ ፣ ምክንያቱም CAN ሁሉንም ነገሮች በራስ -ሰር ስለሚጋጭ ነው። የዚህ ፕሮጀክት ምንጭ ኮድ እጅግ በጣም ቀላል ነው። ተመልከተው!

ደረጃ 1 - ያገለገሉ ሀብቶች

  • የ ESP WROOM 32 NodeMcu ሁለት ሞጁሎች
  • ሁለት የ CAN አስተላላፊዎች ከ WaveShare
  • ለግንኙነቶች መዝለያዎች
  • ለመያዝ አመክንዮአዊ ተንታኝ
  • ለኤስፒኤስ እና ተንታኝ ሶስት የዩኤስቢ ገመዶች
  • እንደ አውቶቡስ ለማገልገል 10 ሜትር ጠማማ ጥንድ

ደረጃ 2: CAN (ተቆጣጣሪ አካባቢ አውታረ መረብ)

CAN (ተቆጣጣሪ አካባቢ አውታረ መረብ)
CAN (ተቆጣጣሪ አካባቢ አውታረ መረብ)
  • በአውቶሞቲቭ ኢንዱስትሪ ለማገልገል በ 1980 ዎቹ በሮበርት ቦሽ ግምቢኤች ተሠራ።
  • በአፈፃፀሙ ጥንካሬ እና ተለዋዋጭነት ምክንያት ባለፉት ዓመታት በስፋት ተስፋፍቷል። በወታደራዊ መሣሪያዎች ፣ በግብርና ማሽኖች ፣ በኢንዱስትሪ እና በህንፃ አውቶማቲክ ፣ በሮቦቲክስ እና በሕክምና መሣሪያዎች እያገለገለ ነው።

ደረጃ 3: CAN - ባህሪዎች

CAN - ባህሪዎች
CAN - ባህሪዎች
CAN - ባህሪዎች
CAN - ባህሪዎች
  • ባለ ሁለት ሽቦ ተከታታይ ግንኙነት
  • በአንድ ክፈፍ ውስጥ ከፍተኛ 8 ባይት ጠቃሚ መረጃ ፣ መከፋፈል ይቻላል
  • አድራሻው ወደ መልእክቱ እንጂ ወደ መስቀለኛ መንገድ አይደለም
  • ለመልዕክቶች ቅድሚያ መስጠት እና “የተያዙ” መልዕክቶችን ማስተላለፍ
  • ስህተቶችን የመለየት እና ምልክት የማድረግ ውጤታማ ችሎታ
  • ባለብዙ ማስተር ችሎታ (ሁሉም አንጓዎች የአውቶቡስ መዳረሻን ሊጠይቁ ይችላሉ)
  • ባለብዙ -ችሎታ (በአንድ ጊዜ ለብዙ ተቀባዮች አንድ መልእክት)
  • በ 40 ሜትር አውቶቡስ ላይ እስከ 1Mbit / ሰ ድረስ የማስተላለፍ ተመኖች (የአውቶቡስ ርዝመት ሲጨምር የዋጋ ቅነሳ)
  • የአዳዲስ አንጓዎች ውቅር እና ማስተዋወቅ (በአንድ አውቶቡስ እስከ 120 ኖዶች)
  • መደበኛ ሃርድዌር ፣ ዝቅተኛ ዋጋ እና ጥሩ ተገኝነት
  • ቁጥጥር የሚደረግበት ፕሮቶኮል - አይኤስኦ 11898

ደረጃ 4: የወረዳ ጥቅም ላይ ውሏል

ወረዳ ጥቅም ላይ ውሏል
ወረዳ ጥቅም ላይ ውሏል

እዚህ ፣ አስተላላፊዎች አሉኝ። በእያንዳንዱ ጎን አንድ አለ ፣ እና እነሱ በአንድ ጥንድ ሽቦዎች ተገናኝተዋል። አንደኛው የመላክ እና ሁለተኛው መረጃ የመቀበል ኃላፊነት አለበት።

ደረጃ 5 - የማስተላለፊያ መስመር ቮልታዎች (ልዩነት መለየት)

የማስተላለፊያ መስመር ቮልቴጅዎች (ልዩነት መለየት)
የማስተላለፊያ መስመር ቮልቴጅዎች (ልዩነት መለየት)

በ CAN ውስጥ አውራ ቢት ዜሮ ነው።

የመስመር ልዩነት መለየት የጩኸት ስሜትን (EFI) ይቀንሳል

ደረጃ 6 - የ CAN ደረጃዎች እና ክፈፎች ቅርጸት

የ CAN ደረጃዎች እና ክፈፎች ቅርጸት
የ CAN ደረጃዎች እና ክፈፎች ቅርጸት

ከ 11 ቢት መለያ ጋር መደበኛ ቅርጸት

ደረጃ 7 - የ CAN ደረጃዎች እና ክፈፎች ቅርጸት

የ CAN ደረጃዎች እና ክፈፎች ቅርጸት
የ CAN ደረጃዎች እና ክፈፎች ቅርጸት

ከ 29 ቢት መለያ ጋር የተራዘመ ቅርጸት

ደረጃ 8 - የ CAN ደረጃዎች እና ክፈፎች ቅርጸት

አንድ ፕሮቶኮል አስቀድሞ CRC ን ያሰላል እና በ CAN ፕሮቶኮል ቀድሞውኑ የተከናወኑትን ነገሮች ACK እና EOF ምልክቶችን እንደሚልክ ማስተዋል አስፈላጊ ነው። ይህ የተላከው መልእክት በተሳሳተ መንገድ እንደማይደርስ ዋስትና ይሰጣል። ምክንያቱም በ CRC (Redundant Cyclic Check or Redundancy Check) ውስጥ ችግር ቢሰጥ ፣ እሱም እንደ የመረጃ ፍተሻ አሃዝ አንድ ዓይነት ከሆነ ፣ በ CRC ተለይቶ ይታወቃል።

ደረጃ 9 - አራት ዓይነት ክፈፎች (ክፈፎች)

አራት ዓይነት ክፈፎች (ክፈፎች)
አራት ዓይነት ክፈፎች (ክፈፎች)

አንድ ፕሮቶኮል አስቀድሞ CRC ን ያሰላል እና በ CAN ፕሮቶኮል ቀድሞውኑ የተከናወኑትን ነገሮች ACK እና EOF ምልክቶችን እንደሚልክ ማስተዋል አስፈላጊ ነው። ይህ የተላከው መልእክት በተሳሳተ መንገድ እንደማይደርስ ዋስትና ይሰጣል። ምክንያቱም በ CRC (Redundant Cyclic Check or Redundancy Check) ውስጥ ችግር ቢሰጥ ፣ እሱም እንደ የመረጃ ፍተሻ አሃዝ አንድ ዓይነት ከሆነ ፣ በ CRC ተለይቶ ይታወቃል።

አራት ዓይነት ክፈፎች (ክፈፎች)

በ CAN ውስጥ የመረጃ ማስተላለፍ እና መቀበል በአራት ዓይነት ክፈፎች ላይ የተመሠረተ ነው። የፍሬም ዓይነቶች በመቆጣጠሪያ ቢት ልዩነቶች ወይም ለእያንዳንዱ ጉዳይ በፍሬም መጻፍ ህጎች ለውጦች እንኳን ተለይተው ይታወቃሉ።

  • የውሂብ ፍሬም - ለተቀባዩ (ቶች) አስተላላፊውን መረጃ ይtainsል
  • የርቀት ፍሬም - ይህ ከአንዱ አንጓዎች የውሂብ ጥያቄ ነው
  • የስህተት ፍሬም - በአውቶቡስ ውስጥ ስህተትን በሚለዩበት ጊዜ በማንኛውም አንጓዎች የተላከ ፍሬም ሲሆን በሁሉም አንጓዎች ሊታወቅ ይችላል
  • ከመጠን በላይ ጭነት ፍሬም - በውሂብ ከመጠን በላይ በመጫን ወይም በአንድ ወይም በብዙ መስቀሎች ላይ በመዘግየቱ በአውቶቡሱ ላይ ትራፊክን ለማዘግየት ያገለግላል።

ደረጃ 10 - ወረዳ - የግንኙነቶች ዝርዝሮች

ወረዳ - የግንኙነቶች ዝርዝሮች
ወረዳ - የግንኙነቶች ዝርዝሮች

ደረጃ 11 ወረዳ - የውሂብ ቀረፃ

ወረዳ - የውሂብ ቀረፃ
ወረዳ - የውሂብ ቀረፃ

በ 11 ቢት መታወቂያ ለመደበኛ CAN የተገኘ የሞገድ ርዝመት

ደረጃ 12 - ወረዳ - የውሂብ ቀረፃ

ወረዳ - የውሂብ ቀረፃ
ወረዳ - የውሂብ ቀረፃ

በ 29 ቢት መታወቂያ ለተራዘመ CAN የተገኘ የሞገድ ርዝመት

ደረጃ 13 ወረዳ - የውሂብ ቀረፃ

ወረዳ - የውሂብ ቀረፃ
ወረዳ - የውሂብ ቀረፃ

በሎጂክ ተንታኝ የተገኘ መረጃ

ደረጃ 14: አርዱዲኖ ቤተ -መጽሐፍት - CAN

የአርዱዲኖ ቤተ -መጽሐፍት - CAN
የአርዱዲኖ ቤተ -መጽሐፍት - CAN

የ CAN የመንጃ ቤተ -መጽሐፍትን የሚጭኑበትን ሁለት አማራጮችን እዚህ አሳያለሁ

የአርዱዲኖ አይዲኢ ቤተ -መጽሐፍት ሥራ አስኪያጅ

ደረጃ 15: Github

ጊቱብ
ጊቱብ

github.com/sandeepmistry/arduino-CAN

ደረጃ 16: አስተላላፊ ምንጭ ኮድ

የምንጭ ኮድ - ያካትታል እና ማዋቀር ()

የ CAN ቤተ -መጽሐፍትን እናካትታለን ፣ ለማረም ተከታታይን እንጀምራለን ፣ እና የ CAN አውቶቡሱን በ 500 ኪባ / ሰከንድ እንጀምራለን።

#ያካትቱ / /ቢቢዮቴካ CAN ባዶነትን ማዋቀር () {Serial.begin (9600) ን ያካትቱ ፤ // inicia ተከታታይ ፓራ ማረም እያለ (! ተከታታይ); Serial.println ("አስተላላፊ CAN"); // Inicia o barramento CAN a 500 kbps ከሆነ (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador ሳለ (1); }}

ደረጃ 17: የምንጭ ኮድ: Loop () ፣ መደበኛ CAN 2.0 ፓኬት መላክ

መደበኛውን CAN 2.0 በመጠቀም አንድ ጥቅል እንልካለን። ባለ 11 ቢት መታወቂያው መልዕክቱን ይለያል። የውሂብ እገዳው እስከ 8 ባይት ሊኖረው ይገባል። በሄክሳዴሲማል ውስጥ ፓኬጁን በመታወቂያ 18 ይጀምራል። 5 ባይት ጠቅልሎ ተግባሩን ይዘጋል።

ባዶ ቦታ () {// Usando o CAN 2.0 padrão // Envia um pacote: o id tem 11 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println (“Enviando pacote …”); CAN.beginPacket (0x12); // id 18 em ሄክሳዴሲማል CAN. ጻፍ ('ሸ'); // 1º ባይት CAN. ጻፍ ('e'); // 2º ባይት CAN. ጻፍ ('l'); // 3º ባይት CAN. ጻፍ ('l'); // 4º ባይት CAN. ጻፍ ('o'); // 5º ባይት CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); መዘግየት (1000);

ደረጃ 18: የምንጭ ኮድ: Loop () ፣ የተራዘመ CAN 2.0 ጥቅል በመላክ ላይ

በዚህ ደረጃ መታወቂያው 29 ቢት አለው። 24 ቢት መታወቂያ መላክ ይጀምራል ፣ እና አንዴ ፣ 5 ባይት እና ማቋረጥን ያጠቃልላል።

// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits e identifica a mensagem (prioridade, evento) // o bloco de dados deve possuir até 8 bytes Serial.println (“Enviando pacote estendido…”); CAN.beginExtendedPacket (0xabcdef); // id 11259375 አስርዮሽ (abcdef em hexa) = 24 ቢት preenchidos até aqui CAN.write ('w'); // 1º ባይት CAN. ጻፍ ('o'); // 2º ባይት CAN. ጻፍ ('r'); // 3º ባይት CAN. ጻፍ ('l'); // 4º ባይት CAN. ጻፍ ('መ'); // 5º ባይት CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); መዘግየት (1000); }

ደረጃ 19 የተቀባዩ ምንጭ ኮድ

የምንጭ ኮድ - ያካትታል እና ማዋቀር ()

እንደገና ፣ የ CAN ቤተ -መጽሐፍትን እናካትታለን ፣ ለማረም ተከታታይን እንጀምራለን ፣ እና የ CAN አውቶቡሱን በ 500 ኪባ / ሰከንድ እንጀምራለን። ስህተት ከተከሰተ ይህ ስህተት ይታተማል።

#ያካትቱ / /ቢቢዮቴካ CAN ባዶነትን ማዋቀር () {Serial.begin (9600) ን ያካትቱ ፤ // inicia ተከታታይ ፓራ ማረም እያለ (! ተከታታይ); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 500 kbps ከሆነ (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador ሳለ (1); }}

ደረጃ 20 - የምንጭ ኮድ - ሉፕ () ፣ ጥቅሉን ማግኘት እና ቅርጸቱን መፈተሽ

የተቀበለውን ፓኬት መጠን ለመፈተሽ ሞክረናል። የ CAN.parsePacket () ዘዴ የዚህን ጥቅል መጠን ያሳየኛል። ስለዚህ ጥቅል ካለን ፣ የተራዘመ መሆኑን ወይም አለመሆኑን እንፈትሻለን።

ባዶነት loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); ከሆነ (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote"); ከሆነ (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }

ደረጃ 21: ምንጭ: Loop () ፣ የርቀት ጥቅል መሆኑን ለማየት ይፈትሻል

እዚህ ፣ የተቀበለው ፓኬት የውሂብ ጥያቄ መሆኑን እንፈትሻለን። በዚህ ሁኔታ ፣ ምንም ውሂብ የለም።

ከሆነ (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de dados) ፣ neste caso não há dados Serial.print (“RTR”) ፤ }

ደረጃ 22: የምንጭ ኮድ: Loop () ፣ የውሂብ ርዝመት ተጠይቋል ወይም ተቀበለ

የተቀበለው ፓኬት ጥያቄ ከሆነ ፣ የተጠየቀውን ርዝመት እንጠቁማለን። ከዚያ የመረጃውን ርዝመት የሚያመለክት የውሂብ ርዝመት ኮድ (DLC) እናገኛለን። በመጨረሻም የተቀበለውን ርዝመት እንጠቁማለን።

Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId () ፣ HEX); ከሆነ (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indicamos o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (የውሂብ ርዝመት ኮድ ፣ que indica o comprimento dos dados)} ሌላ {Serial.print (“e comprimento”); // አኳያ somente indica o comprimento recebido Serial.println (packetSize);

ደረጃ 23: የምንጭ ኮድ: Loop () ፣ መረጃ ከተቀበለ ከዚያ ያትማል

ውሂቡን (በተከታታይ ማሳያ ላይ) እናተምለን ፣ ግን የተቀበለው ፓኬት ጥያቄ ካልሆነ ብቻ ነው።

// Imprime os dados somente se o pacote recebido não foi de requisição ሳለ (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}

24 ደረጃ - ፋይሎቹን ያውርዱ

ፒዲኤፍ

INO

የሚመከር: