সুচিপত্র:

CAN প্রোটোকল - হ্যাঁ, আমরা পারি !: 24 টি ধাপ
CAN প্রোটোকল - হ্যাঁ, আমরা পারি !: 24 টি ধাপ

ভিডিও: CAN প্রোটোকল - হ্যাঁ, আমরা পারি !: 24 টি ধাপ

ভিডিও: CAN প্রোটোকল - হ্যাঁ, আমরা পারি !: 24 টি ধাপ
ভিডিও: জীবনে উন্নতি চাইলে এই ৬টি অভ্যাস এখনই ত্যাগ করুন | 6 Habits You Have to Change Right Now for Success 2024, জুলাই
Anonim
Image
Image
ব্যবহৃত সম্পদ
ব্যবহৃত সম্পদ

সম্প্রতি আমার ইউটিউব চ্যানেলের অনুসারীদের দ্বারা প্রস্তাবিত আরেকটি বিষয় ছিল CAN (কন্ট্রোলার এরিয়া নেটওয়ার্ক) প্রোটোকল, যা আমরা আজকে ফোকাস করব। এটা ব্যাখ্যা করা গুরুত্বপূর্ণ যে CAN একযোগে সিরিয়াল যোগাযোগ প্রোটোকল। এর অর্থ হচ্ছে নেটওয়ার্কের সাথে সংযুক্ত মডিউলগুলির মধ্যে সিঙ্ক্রোনিজম বাসে পাঠানো প্রতিটি বার্তার শুরুতে সঞ্চালিত হয়। আমরা CAN প্রোটোকলের মৌলিক ধারণাগুলি প্রবর্তনের মাধ্যমে শুরু করব এবং দুটি ESP32s দিয়ে একটি সাধারণ সমাবেশ করব।

আমাদের সার্কিটে, ESPs মাস্টার এবং স্লেভ উভয় হিসাবে কাজ করতে পারে। আপনি একাধিক মাইক্রোকন্ট্রোলার একসাথে প্রেরণ করতে পারেন, কারণ CAN স্বয়ংক্রিয়ভাবে সবকিছু সংঘর্ষের সাথে কাজ করে। এই প্রকল্পের সোর্স কোড অতি সহজ। এটা দেখ!

ধাপ 1: ব্যবহৃত সম্পদ

  • ESP WROOM 32 NodeMcu এর দুটি মডিউল
  • ওয়েভশেয়ার থেকে দুটি CAN ট্রান্সসিভার
  • সংযোগের জন্য জাম্পার
  • ক্যাপচারের জন্য লজিক্যাল এনালাইজার
  • ESPs এবং বিশ্লেষকের জন্য তিনটি USB তারের
  • 10 মিটার পেঁচানো জোড়া বাস হিসেবে পরিবেশন করতে

ধাপ 2: CAN (কন্ট্রোলার এরিয়া নেটওয়ার্ক)

CAN (কন্ট্রোলার এরিয়া নেটওয়ার্ক)
CAN (কন্ট্রোলার এরিয়া নেটওয়ার্ক)
  • এটি 1980 এর দশকে রবার্ট বশ জিএমবিএইচ কর্তৃক স্বয়ংচালিত শিল্পকে পরিবেশন করার জন্য তৈরি করা হয়েছিল।
  • এটি দৃ rob়তা এবং বাস্তবায়নের নমনীয়তার কারণে বছরের পর বছর ধরে ব্যাপক হয়ে উঠেছে। এটি সামরিক সরঞ্জাম, কৃষি যন্ত্রপাতি, শিল্প ও বিল্ডিং অটোমেশন, রোবোটিক্স এবং চিকিৎসা সরঞ্জাম ব্যবহার করা হচ্ছে।

ধাপ 3: ক্যান - বৈশিষ্ট্য

ক্যান - বৈশিষ্ট্য
ক্যান - বৈশিষ্ট্য
ক্যান - বৈশিষ্ট্য
ক্যান - বৈশিষ্ট্য
  • দুই তারের সিরিয়াল যোগাযোগ
  • প্রতি ফ্রেমে সর্বাধিক 8 বাইট দরকারী তথ্য, যার সাথে ফ্র্যাগমেন্টেশন সম্ভব
  • ঠিকানা নোডের দিকে নয় বার্তার দিকে নির্দেশিত
  • বার্তাগুলিকে অগ্রাধিকার দেওয়া এবং "অন হোল্ড" বার্তাগুলি রিলে করা
  • ত্রুটি সনাক্ত এবং সংকেত দেওয়ার কার্যকর ক্ষমতা
  • মাল্টি-মাস্টার ক্ষমতা (সমস্ত নোড বাস অ্যাক্সেসের জন্য অনুরোধ করতে পারে)
  • মাল্টিকাস্ট ক্ষমতা (একই সময়ে একাধিক রিসিভারের জন্য একটি বার্তা)
  • 40 মিটার বাসে 1Mbit / s পর্যন্ত স্থানান্তর হার (বাসবারের দৈর্ঘ্য বৃদ্ধির সাথে হার হ্রাস)
  • কনফিগারেশনের নমনীয়তা এবং নতুন নোড প্রবর্তন (প্রতি বাসে 120 নোড পর্যন্ত)
  • স্ট্যান্ডার্ড হার্ডওয়্যার, কম খরচে এবং ভাল প্রাপ্যতা
  • নিয়ন্ত্রিত প্রোটোকল: ISO 11898

ধাপ 4: সার্কিট ব্যবহৃত

সার্কিট ব্যবহৃত
সার্কিট ব্যবহৃত

এখানে, আমি ট্রান্সসিভার আছে প্রতিটি পাশে একটি আছে, এবং তারা তারের একটি জোড়া দ্বারা সংযুক্ত করা হয়। একটি পাঠানোর জন্য দায়ী এবং অন্যটি তথ্য গ্রহণের জন্য।

ধাপ 5: ট্রান্সমিশন লাইন ভোল্টেজ (ডিফারেনশিয়াল ডিটেকশন)

ট্রান্সমিশন লাইন ভোল্টেজ (ডিফারেনশিয়াল ডিটেকশন)
ট্রান্সমিশন লাইন ভোল্টেজ (ডিফারেনশিয়াল ডিটেকশন)

CAN তে, প্রভাবশালী বিট হল জিরো।

লাইন ডিফারেনশিয়াল ডিটেকশন শব্দ সংবেদনশীলতা হ্রাস করে (EFI)

ধাপ 6: স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট

CAN স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট
CAN স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট

11-বিট শনাক্তকারী সহ স্ট্যান্ডার্ড ফরম্যাট

ধাপ 7: স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট

CAN স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট
CAN স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট

29-বিট শনাক্তকারী সহ বর্ধিত বিন্যাস

ধাপ 8: স্ট্যান্ডার্ড এবং ফ্রেম ফরম্যাট

এটি লক্ষ করা গুরুত্বপূর্ণ যে একটি প্রোটোকল ইতিমধ্যেই সিআরসি গণনা করে এবং এসিকে এবং ইওএফ সংকেত পাঠায়, যা CAN প্রোটোকল দ্বারা ইতিমধ্যে সম্পন্ন করা হয়েছে। এটি গ্যারান্টি দেয় যে পাঠানো বার্তাটি ভুল পথে আসবে না। এর কারণ হল যদি এটি CRC (Redundant Cyclic Check বা Redundancy Check) এ কোন সমস্যা দেয়, যা তথ্য চেক ডিজিটের সমান, এটি CRC দ্বারা চিহ্নিত করা হবে।

ধাপ 9: চার ধরনের ফ্রেম (ফ্রেম)

চার ধরনের ফ্রেম (ফ্রেম)
চার ধরনের ফ্রেম (ফ্রেম)

এটি লক্ষ করা গুরুত্বপূর্ণ যে একটি প্রোটোকল ইতিমধ্যে সিআরসি গণনা করে এবং এসিকে এবং ইওএফ সংকেত পাঠায়, যা এমন কিছু যা ইতিমধ্যে CAN প্রোটোকল দ্বারা সম্পন্ন হয়েছে। এটি গ্যারান্টি দেয় যে পাঠানো বার্তাটি ভুল পথে আসবে না। এর কারণ হল যদি এটি CRC (Redundant Cyclic Check বা Redundancy Check) এ কোন সমস্যা দেয়, যা তথ্য চেক ডিজিটের সমান, এটি CRC দ্বারা চিহ্নিত করা হবে।

চার ধরনের ফ্রেম (ফ্রেম)

CAN- এ তথ্য আদান -প্রদান এবং গ্রহণ চার ধরনের ফ্রেমের উপর ভিত্তি করে। ফ্রেমের ধরনগুলি নিয়ন্ত্রণ বিটের বৈচিত্র্য দ্বারা বা এমনকি প্রতিটি ক্ষেত্রে ফ্রেম লেখার নিয়মের পরিবর্তনের দ্বারা চিহ্নিত করা হবে।

  • ডেটা ফ্রেম: রিসিভারের জন্য ট্রান্সমিটার ডেটা থাকে
  • রিমোট ফ্রেম: এটি নোডগুলির মধ্যে একটি থেকে ডেটার অনুরোধ
  • ত্রুটি ফ্রেম: এটি একটি ফ্রেম যা কোনও নোড দ্বারা পাঠানো হয় যখন বাসে ত্রুটি সনাক্ত করা যায় এবং সমস্ত নোড দ্বারা সনাক্ত করা যায়
  • ওভারলোড ফ্রেম: ডাটা ওভারলোড বা এক বা একাধিক নোডে বিলম্বের কারণে বাসে ট্রাফিক বিলম্ব করতে কাজ করে।

ধাপ 10: সার্কিট - সংযোগের বিবরণ

সার্কিট - সংযোগের বিবরণ
সার্কিট - সংযোগের বিবরণ

ধাপ 11: সার্কিট - ডেটা ক্যাপচার

সার্কিট - ডেটা ক্যাপচার
সার্কিট - ডেটা ক্যাপচার

11-বিট আইডি সহ স্ট্যান্ডার্ড CAN এর জন্য প্রাপ্ত তরঙ্গদৈর্ঘ্য

ধাপ 12: সার্কিট - ডেটা ক্যাপচার

সার্কিট - ডেটা ক্যাপচার
সার্কিট - ডেটা ক্যাপচার

29-বিট আইডি সহ বর্ধিত CAN এর জন্য প্রাপ্ত তরঙ্গদৈর্ঘ্য

ধাপ 13: সার্কিট - ডেটা ক্যাপচার

সার্কিট - ডেটা ক্যাপচার
সার্কিট - ডেটা ক্যাপচার

যুক্তি বিশ্লেষক দ্বারা প্রাপ্ত ডেটা

ধাপ 14: Arduino লাইব্রেরি - CAN

আরডুইনো লাইব্রেরি - ক্যান
আরডুইনো লাইব্রেরি - ক্যান

আমি এখানে দুটি বিকল্প দেখিয়েছি যেখানে আপনি CAN ড্রাইভার লাইব্রেরি ইনস্টল করতে পারেন

Arduino IDE লাইব্রেরি ম্যানেজার

ধাপ 15: গিথুব

গিথুব
গিথুব

github.com/sandeepmistry/arduino-CAN

ধাপ 16: ট্রান্সমিটার সোর্স কোড

সোর্স কোড: অন্তর্ভুক্ত এবং সেটআপ ()

আমরা CAN লাইব্রেরি অন্তর্ভুক্ত করব, ডিবাগ করার জন্য সিরিয়াল শুরু করব এবং CAN বাস 500 Kbps এ শুরু করব।

#অন্তর্ভুক্ত // অন্তর্ভুক্ত করুন একটি গ্রন্থবিজ্ঞান সেটআপ বাতিল করতে পারে () {Serial.begin (9600); // inicia একটি সিরিয়াল প্যারা ডিবাগ করার সময় (! সিরিয়াল); Serial.println ("Transmissor CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

ধাপ 17: সোর্স কোড: লুপ (), একটি স্ট্যান্ডার্ড CAN 2.0 প্যাকেট পাঠানো

স্ট্যান্ডার্ড CAN 2.0 ব্যবহার করে, আমরা একটি প্যাকেজ পাঠাই। 11-বিট আইডি বার্তা সনাক্ত করে। ডেটা ব্লকে 8 বাইট পর্যন্ত থাকতে হবে। এটি হেক্সাডেসিমালে আইডি 18 দিয়ে প্যাকেট শুরু করে। এটি 5 বাইট প্যাক করে এবং ফাংশন বন্ধ করে।

void loop () {// 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 hexadecimal CAN.write ('h'); // 1º বাইট CAN.write ('e'); // 2º বাইট CAN.write ('l'); // 3º বাইট CAN.write ('l'); // 4º বাইট CAN.write ('o'); // 5º বাইট CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado।"); বিলম্ব (1000);

ধাপ 18: সোর্স কোড: লুপ (), একটি বর্ধিত 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 bits preenchidos até aqui CAN.write ('w'); // 1º বাইট CAN.write ('o'); // 2º বাইট CAN.write ('r'); // 3º বাইট CAN.write ('l'); // 4º বাইট CAN.write ('d'); // 5º বাইট CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado।"); বিলম্ব (1000); }

ধাপ 19: রিসিভার সোর্স কোড

সোর্স কোড: অন্তর্ভুক্ত এবং সেটআপ ()

আবার, আমরা CAN লাইব্রেরি অন্তর্ভুক্ত করব, ডিবাগ করার জন্য সিরিয়াল শুরু করব এবং 500 Kbps এ CAN বাস শুরু করব। যদি একটি ত্রুটি ঘটে, এই ত্রুটিটি মুদ্রিত হবে।

#অন্তর্ভুক্ত // অন্তর্ভুক্ত করুন একটি গ্রন্থবিজ্ঞান সেটআপ বাতিল করতে পারে () {Serial.begin (9600); // inicia একটি সিরিয়াল প্যারা ডিবাগ করার সময় (! সিরিয়াল); Serial.println ("রিসেপ্টর CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador while (1); }}

ধাপ 20: সোর্স কোড: লুপ (), প্যাকেজ পাওয়া এবং ফরম্যাট চেক করা

আমরা প্রাপ্ত প্যাকেটের আকার পরীক্ষা করার চেষ্টা করেছি। CAN.parsePacket () পদ্ধতি আমাকে এই প্যাকেজের আকার দেখায়। সুতরাং যদি আমাদের একটি প্যাকেজ থাকে, আমরা তা পরীক্ষা করে দেখব এটি বাড়ানো হয়েছে কি না।

void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); if (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote।"); যদি (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }

ধাপ 21: উৎস: লুপ (), এটি একটি দূরবর্তী প্যাকেজ কিনা তা পরীক্ষা করে

এখানে, আমরা চেক করি যে প্রাপ্ত প্যাকেটটি একটি ডেটা অনুরোধ। এই ক্ষেত্রে, কোন তথ্য নেই।

যদি (CAN.packetRtr ()) {// Verifica se o pacote m um pacote remoto (Requisição de dados), neste caso não há dados Serial.print ("RTR"); }

ধাপ 22: সোর্স কোড: লুপ (), ডেটার দৈর্ঘ্য অনুরোধ করা হয়েছে বা প্রাপ্ত হয়েছে

যদি প্রাপ্ত প্যাকেটটি একটি অনুরোধ হয়, আমরা অনুরোধকৃত দৈর্ঘ্য নির্দেশ করি। আমরা তারপর ডেটা লেন্থ কোড (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 (Data Length Code, que indica o comprimento dos dados)} else {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);

ধাপ 23: সোর্স কোড: লুপ (), যদি ডেটা পাওয়া যায়, তাহলে এটি প্রিন্ট করে

আমরা ডেটা মুদ্রণ করি (সিরিয়াল মনিটরে), কিন্তু শুধুমাত্র যদি প্রাপ্ত প্যাকেটটি অনুরোধ না হয়।

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

ধাপ 24: ফাইল ডাউনলোড করুন

পিডিএফ

আইএনও

প্রস্তাবিত: