فهرست مطالب:
- مرحله 1: منابع مورد استفاده
- مرحله 2: CAN (شبکه کنترل منطقه)
- مرحله 3: CAN - ویژگی ها
- مرحله 4: مدار مورد استفاده
- مرحله 5: ولتاژهای خط انتقال (تشخیص افتراقی)
- مرحله 6: قالب استاندارد و فریم CAN
- مرحله 7: قالب استاندارد و فریم CAN
- مرحله 8: قالب استاندارد و فریم CAN
- مرحله 9: چهار نوع قاب (فریم)
- مرحله 10: مدار - جزئیات اتصالات
- مرحله 11: مدار - ضبط داده ها
- مرحله 12: مدار - ضبط داده
- مرحله 13: مدار - ضبط داده
- مرحله 14: کتابخانه آردوینو - CAN
- مرحله 15: Github
- مرحله 16: کد منبع فرستنده
- مرحله 17: کد منبع: حلقه () ، ارسال یک بسته استاندارد CAN 2.0
- مرحله 18: کد منبع: حلقه () ، ارسال بسته گسترده CAN 2.0
- مرحله 19: کد منبع گیرنده
- مرحله 20: کد منبع: حلقه () ، دریافت بسته و بررسی فرمت
- مرحله 21: منبع: حلقه () ، بررسی می کند که آیا بسته از راه دور است
- مرحله 22: کد منبع: حلقه () ، طول داده درخواست شده یا دریافت شده
- مرحله 23: کد منبع: حلقه () ، در صورت دریافت داده ، سپس چاپ می شود
- مرحله 24: فایل ها را بارگیری کنید
تصویری: پروتکل CAN - بله ، ما می توانیم!: 24 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:56
یکی دیگر از موضوعاتی که اخیراً توسط دنبال کنندگان کانال YouTube من پیشنهاد شده بود پروتکل CAN (Controller Area Network) بود ، چیزی که ما امروز روی آن تمرکز می کنیم. توضیح این نکته ضروری است که CAN یک پروتکل ارتباط سریال همزمان است. این بدان معناست که همگام سازی بین ماژول های متصل به شبکه در رابطه با شروع هر پیام ارسال شده به گذرگاه انجام می شود. ما ابتدا مفاهیم اولیه پروتکل CAN را معرفی کرده و یک مونتاژ ساده را با دو ESP32 انجام می دهیم.
در مدار ما ، ESP ها می توانند به عنوان Master و Slave عمل کنند. شما می توانید چندین میکروکنترلر را همزمان ارسال کنید ، زیرا CAN به طور خودکار با برخورد همه چیز برخورد می کند. کد منبع این پروژه فوق العاده ساده است. آن را بررسی کنید!
مرحله 1: منابع مورد استفاده
- دو ماژول ESP WROOM 32 NodeMcu
- دو فرستنده گیرنده CAN از WaveShare
- جامپر برای اتصالات
- تجزیه و تحلیل منطقی برای ضبط
- سه کابل USB برای ESP و آنالیز
- 10 متر جفت پیچ خورده برای خدمت به عنوان اتوبوس
مرحله 2: CAN (شبکه کنترل منطقه)
- این دستگاه توسط Robert Bosch GmbH در دهه 1980 برای خدمت به صنعت خودرو توسعه داده شد.
- در طول سالها به دلیل استحکام و انعطاف پذیری اجرای آن ، رواج یافته است. این دستگاه با تجهیزات نظامی ، ماشین آلات کشاورزی ، اتوماسیون صنعتی و ساختمان ، روباتیک و تجهیزات پزشکی مورد استفاده قرار می گیرد.
مرحله 3: CAN - ویژگی ها
- ارتباط سریال دو سیمه
- حداکثر 8 بایت اطلاعات مفید در هر فریم ، با امکان تکه تکه شدن
- آدرس به پیام و نه به گره هدایت می شود
- اختصاص اولویت به پیام ها و انتقال پیام های "در حالت انتظار"
- توانایی م toثر در تشخیص و علامت گذاری خطاها
- قابلیت چند کارشناسی ارشد (همه گره ها می توانند دسترسی به گذرگاه را درخواست کنند)
- قابلیت Multicast (یک پیام برای چندین گیرنده به طور همزمان)
- نرخ انتقال تا 1 مگابیت بر ثانیه در اتوبوس 40 متری (کاهش نرخ با افزایش طول شینه)
- انعطاف پذیری پیکربندی و معرفی گره های جدید (حداکثر 120 گره در هر گذرگاه)
- سخت افزار استاندارد ، هزینه کم و در دسترس بودن خوب
- پروتکل تنظیم شده: ISO 11898
مرحله 4: مدار مورد استفاده
در اینجا ، من گیرنده گیرنده را دارم. در هر طرف یک عدد وجود دارد و آنها توسط یک جفت سیم به یکدیگر متصل می شوند. یکی مسئول ارسال و دیگری دریافت اطلاعات است.
مرحله 5: ولتاژهای خط انتقال (تشخیص افتراقی)
در CAN ، بیت غالب صفر است.
تشخیص دیفرانسیل خط حساسیت نویز (EFI) را کاهش می دهد
مرحله 6: قالب استاندارد و فریم CAN
فرمت استاندارد با شناسه 11 بیتی
مرحله 7: قالب استاندارد و فریم CAN
فرمت گسترده با شناسه 29 بیتی
مرحله 8: قالب استاندارد و فریم CAN
توجه به این نکته ضروری است که یک پروتکل قبلاً CRC را محاسبه کرده و سیگنال های ACK و EOF را ارسال می کند ، که این موارد قبلاً توسط پروتکل CAN انجام شده است. این تضمین می کند که پیام ارسال شده به روش اشتباهی نخواهد رسید. این امر به این دلیل است که اگر در CRC (چک حلقه ای اضافی یا چک افزونگی) ، که همان رقم بررسی اطلاعات است ، مشکلی ایجاد کند ، توسط CRC مشخص می شود.
مرحله 9: چهار نوع قاب (فریم)
توجه به این نکته ضروری است که یک پروتکل قبلاً CRC را محاسبه کرده و سیگنال های ACK و EOF را ارسال می کند ، که این موارد قبلاً توسط پروتکل CAN انجام شده است. این تضمین می کند که پیام ارسال شده به روش اشتباهی نخواهد رسید. این امر به این دلیل است که اگر در CRC (چک حلقه ای اضافی یا چک افزونگی) ، که همان رقم بررسی اطلاعات است ، مشکلی ایجاد کند ، توسط CRC مشخص می شود.
چهار نوع قاب (فریم)
انتقال و دریافت داده ها در CAN بر اساس چهار نوع فریم است. انواع فریم با تغییرات در بیت های کنترل یا حتی تغییر در قوانین نوشتن قاب برای هر مورد مشخص می شود.
- قاب داده: شامل داده های فرستنده گیرنده (ها) است
- قاب از راه دور: این درخواست برای داده های یکی از گره ها است
- Error Frame: فریمی است که توسط هر یک از گره ها هنگام شناسایی خطا در گذر ارسال می شود و توسط همه گره ها قابل تشخیص است.
- Overload Frame: به منظور تأخیر در ترافیک در گذرگاه به دلیل اضافه بار داده یا تأخیر در یک یا چند گره عمل می کند.
مرحله 10: مدار - جزئیات اتصالات
مرحله 11: مدار - ضبط داده ها
طول موج برای استاندارد CAN با شناسه 11 بیتی به دست آمده است
مرحله 12: مدار - ضبط داده
طول موج برای CAN گسترده با شناسه 29 بیتی به دست آمده است
مرحله 13: مدار - ضبط داده
داده های بدست آمده توسط تحلیل گر منطقی
مرحله 14: کتابخانه آردوینو - CAN
من در اینجا دو گزینه را نشان می دهم که می توانید کتابخانه CAN Driver را نصب کنید
مدیر کتابخانه Arduino IDE
مرحله 15: Github
github.com/sandeepmistry/arduino-CAN
مرحله 16: کد منبع فرستنده
کد منبع: شامل و راه اندازی ()
ما کتابخانه CAN را وارد می کنیم ، سریال اشکال زدایی را شروع می کنیم و گذرگاه CAN را با سرعت 500 کیلوبیت بر ثانیه راه اندازی می کنیم.
#include // inclui a biblioteca CAN void setup () {Serial.begin (9600)؛ // inicia a serial para debug while (! Serial)؛ Serial.println ("انتقال دهنده می تواند") ؛ // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN")؛ // در صورت کنترل (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 bit and 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 bit and 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.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 را وارد می کنیم ، سریال را برای اشکال زدایی شروع می کنیم و گذرگاه CAN را با سرعت 500 کیلوبیت بر ثانیه شروع می کنیم. در صورت بروز خطا ، این خطا چاپ می شود.
#include // inclui a biblioteca CAN void setup () {Serial.begin (9600)؛ // inicia a serial para debug while (! Serial)؛ Serial.println ("گیرنده می تواند") ؛ // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN")؛ // در صورت کنترل (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.")؛ if (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido")؛ }
مرحله 21: منبع: حلقه () ، بررسی می کند که آیا بسته از راه دور است
در اینجا ، بررسی می کنیم که بسته دریافتی درخواست داده باشد. در این مورد ، هیچ داده ای وجود ندارد.
if (CAN.packetRtr ()) {// Verifica se o pacote é 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) ؛ if (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: فایل ها را بارگیری کنید
من نه
توصیه شده:
رمزگشای پروتکل کنترل از راه دور RC5 بدون کتابخانه: 4 مرحله
رمزگشای پروتکل کنترل از راه دور RC5 بدون کتابخانه: قبل از رمزگشایی rc5 ابتدا بحث می کنیم که دستور rc5 چیست و ساختار آن چگونه است. بنابراین اساساً دستور rc5 در کنترل از راه دور که در تلویزیون ها ، پخش کننده های سی دی ، d2h ، سیستم های سینمای خانگی و غیره استفاده می شود استفاده می شود و دارای 13 یا 14 بیت مرتب شده در یک
ساعت اینترنتی: نمایش تاریخ و زمان با OLED با استفاده از ESP8266 NodeMCU با پروتکل NTP: 6 مرحله
ساعت اینترنتی: نمایش تاریخ و زمان با OLED با استفاده از ESP8266 NodeMCU با پروتکل NTP: سلام بچه ها در این دستورالعمل ها ما یک ساعت اینترنتی ایجاد می کنیم که از اینترنت زمان می گیرد بنابراین این پروژه برای اجرا به هیچ RTC احتیاج ندارد ، فقط به یک اتصال به اینترنت کار می کند و برای این پروژه به esp8266 نیاز دارید که دارای
Nextion Display - رابط و پروتکل توضیح داده شده با PIC و آردوینو: 10 مرحله
Nextion Display | رابط و پروتکل توضیح داده شده با PIC و Arduino: Nextion بسیار آسان برای استفاده و رابط کاربری آسان با کنترلرهای میکرو است. با کمک ویرایشگر Nextion می توانیم صفحه نمایش را پیکربندی کرده و UI را روی صفحه طراحی کنیم. بنابراین بر اساس رویدادها یا دستورات Nextion display در جهت نمایش
تابلوی اعلانات دیجیتال با استفاده از رزبری پای و پروتکل MQTT: 8 مرحله
تابلوی اعلانات دیجیتال با استفاده از Raspberry Pi و پروتکل MQTT: تابلوی اعلانات تقریباً در همه جا مانند دفتر ، مدارس ، بیمارستان ها و هتل ها استفاده می شود. می توان آنها را بارها و بارها برای نمایش اطلاعیه های مهم یا تبلیغ رویدادها یا جلسات آینده استفاده کرد. اما اطلاعیه یا تبلیغات باید اصلی باشد
رمزگذار و رمزگشای پروتکل NEC پروتکل مادون قرمز: 5 مرحله
رمزگذار و رمزگشای پروتکل مادون قرمز NEC: سیگنال NEC IR مدوله شده یا تغییر شکل یافته را دریافت می کند و آن را به بایت هایی تبدیل می کند که از پورت سریال ارسال می شوند. نرخ باود سریال از دو سرعت پیش فرض قابل انتخاب است. حالت استفاده پیش فرض یک توالی فرمان را با بایت فریم منتقل می کند