اطلاعیه

Collapse
No announcement yet.

پروتکل ارتباطی CAN

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پروتکل ارتباطی CAN

    پریفرال CAN (Controller Area Network) یکی از پروتکل‌های مهم ارتباطی در میکروکنترلرها است که برای ارتباطات سریال در محیط‌های صنعتی و خودرویی طراحی شده است.
    این پروتکل برای انتقال داده‌ها بین میکروکنترلرها و دستگاه‌های مختلف با استفاده از یک خط ارتباطی مشترک استفاده می‌شود و از مزایای زیادی برخوردار است.


    ویژگی‌ها و مزایای پروتکل CAN
    قابلیت اطمینان بالا:
    پروتکل CAN برای محیط‌های نویزی و صنعتی طراحی شده است و دارای مکانیزم‌های خطایابی پیشرفته است که از بروز خطا در داده‌ها جلوگیری می‌کند.

    سرعت بالا:
    CAN می‌تواند با سرعت‌های بالا (تا 1 مگابیت بر ثانیه) کار کند که این امکان را فراهم می‌کند تا داده‌ها به سرعت بین دستگاه‌ها منتقل شوند.

    استقلال از دستگاه:
    هر دستگاه می‌تواند بدون وابستگی به دستگاه‌های دیگر داده‌ها را ارسال و دریافت کند که این ویژگی باعث انعطاف‌پذیری بالای شبکه CAN می‌شود.

    استفاده در خودروها:
    پروتکل CAN به طور گسترده در صنعت خودروسازی برای ارتباط بین واحدهای کنترلی الکترونیکی (ECUها) استفاده می‌شود.

    کاربردها
    صنعت خودروسازی:
    برای کنترل سیستم‌های مختلف خودرو مانند سیستم ترمز ضد قفل (ABS)، سیستم‌های تهویه مطبوع، و سیستم‌های انتقال قدرت.

    اتوماسیون صنعتی:
    در سیستم‌های کنترل صنعتی، ماشین‌آلات و روبات‌ها برای ارتباط بین سنسورها و کنترلرها.

    سیستم‌های پزشکی:
    برای ارتباط بین دستگاه‌های پزشکی و نظارت بر داده‌های بیمار.

    معرفی چند نمونه از میکروکنترلر هایی که از پروتکل ارتباطی CAN پشتیبانی میکنند:
    • STM32 (STMicroelectronics):
    میکروکنترلرهای STM32 از سری‌های مختلف دارای واحدهای CAN هستند که امکان پیاده‌سازی شبکه‌های CAN در پروژه‌های صنعتی و خودرویی را فراهم می‌کنند.
    • AVR (Microchip Technology):
    برخی از میکروکنترلرهای AVR دارای ماژول‌های CAN داخلی هستند که به خصوص برای پروژه‌های کوچک و کم‌هزینه مناسب هستند.
    • PIC (Microchip Technology):
    میکروکنترلرهای PIC نیز دارای واحدهای CAN هستند که برای کاربردهای متنوع صنعتی و خودرویی استفاده می‌شوند.
    جدیدترین ویرایش توسط Tanrina; ۱۲:۳۰ ۱۴۰۳/۰۳/۳۰.

    #2
    سلام
    بسیار عالی ... با تشکر از ایجاد کننده تاپیک مهندس Tanrina

    کاش آموزش راه اندازی و ارتباط با این پروتکل کَن توسط آردوینو یا میکروکنترلرهای AVR هم اضافه بشه مفیدتر میشه. امروزه اکثر ماشین های داخلی مخصوصا خودروهای شرکت سایپا، از پروتکل CAN برای ارتباط با کلاستر، سنسورها و کامپیوتر ماشین استفاده میکنند. اگر بشه هک کرد و مثلا با یک آردوینو بشه عقربه های پشت آمپر رو کنترل کرد عالی میشه.

    موفق باشید
    جدیدترین ویرایش توسط shahinb007; ۱۰:۵۷ ۱۴۰۳/۰۳/۲۹.
    *** کمترین توقع از یک فرد تحصیل کرده، دانستن املاءِ صحیحِ کلمات است ***

    دیدگاه


      #3
      نوشته اصلی توسط shahinb007 نمایش پست ها
      سلام
      بسیار عالی ... با تشکر از ایجاد کننده تاپیک مهندس Tanrina

      کاش آموزش راه اندازی و ارتباط با این پروتکل کَن توسط آردوینو یا میکروکنترلرهای AVR هم اضافه بشه مفیدتر میشه. امروزه اکثر ماشین های داخلی مخصوصا خودروهای شرکت سایپا، از پروتکل CAN برای ارتباط با کلاستر، سنسورها و کامپیوتر ماشین استفاده میکنند. اگر بشه هک کرد و مثلا با یک آردوینو بشه عقربه های پشت آمپر رو کنترل کرد عالی میشه.

      موفق باشید
      سلام و درود
      ممنونم از توجهتون
      من حین تحقیق این اطلاعات رو کسب کردم و تو انجمن باهاتون به اشتراک گذاشتم، متاسفانه هنوز دانش و تبحر کافی در این زمینه ندارم ،
      به همین جهت از اساتید خواهشمندم آموزش های لازم رو در مورد پروتکل CAN با هامون به اشتراک بذارن.

      دیدگاه


        #4
        سلام دوست عزیز ، نمونه کد هایی برای راه اندازی و ارتباط پروتکل can با آردوینو وجود داره ، مهمترین قسمتش اتصالات سخت‌افزار رو باید به درستی به آردوینو وصل کنید. از جمله اتصال پین‌های SPI (Serial Peripheral Interface) میکروکنترلر به پین‌های ماژول CAN (مانند پین‌های MOSI، MISO، SCK و SS).
        همینطور نصب کتابخانه که قابلیت ارتباط با ماژول CAN رو فراهم کنه باید نصب بشه، می‌تونید از کتابخانه MCP_CAN استفاده کنید که برای اتصال با ماژول MCP2515 CAN استفاده می‌شود.
        کد HTML:
        #include <SPI.h>
        #include <mcp_can.h>
        
        const int SPI_CS_PIN = 10; // پین CS ماژول CAN
        MCP_CAN CAN(SPI_CS_PIN); // ایجاد یک شیء از کلاس MCP_CAN
        
        void setup() {
          Serial.begin(9600); // شروع ارتباط سریال
          while (CAN_OK != CAN.begin(CAN_500KBPS)) { // شروع ارتباط با ماژول CAN
            Serial.println("Failed to initialize CAN bus");
            delay(100);
          }
          Serial.println("CAN bus initialized");
        }
        
        void loop() {
          unsigned char len = 0;
          unsigned char buf[8];
          
          if (CAN_MSGAVAIL == CAN.checkReceive()) { // بررسی دریافت پیام
            CAN.readMsgBuf(&len, buf); // خواندن پیام دریافتی
            unsigned int canId = CAN.getCanId(); // دریافت شناسه CAN
            Serial.print("Receivedپیام از شناسه CAN: ");
            Serial.print(canId);
            Serial.print(", داده‌ها: ");
            for (int i = 0; i < len; i++) {
              Serial.print(buf[i], HEX);
              Serial.print(" ");
            }
            Serial.println();
          }
        }​
        این کد نمونه، پیام‌های دریافتی را از ماژول CAN خوانده و آنها را در پورت سریال آردوینو نمایش می‌دهد.

        دیدگاه


          #5
          نوشته اصلی توسط آقاپور نمایش پست ها
          سلام دوست عزیز ، نمونه کد هایی برای راه اندازی و ارتباط پروتکل can با آردوینو وجود داره ، مهمترین قسمتش اتصالات سخت‌افزار رو باید به درستی به آردوینو وصل کنید. از جمله اتصال پین‌های SPI (Serial Peripheral Interface) میکروکنترلر به پین‌های ماژول CAN (مانند پین‌های MOSI، MISO، SCK و SS).
          همینطور نصب کتابخانه که قابلیت ارتباط با ماژول CAN رو فراهم کنه باید نصب بشه، می‌تونید از کتابخانه MCP_CAN استفاده کنید که برای اتصال با ماژول MCP2515 CAN استفاده می‌شود.
          کد HTML:
          #include <SPI.h>
          #include <mcp_can.h>
          
          const int SPI_CS_PIN = 10; // پین CS ماژول CAN
          MCP_CAN CAN(SPI_CS_PIN); // ایجاد یک شیء از کلاس MCP_CAN
          
          void setup() {
          Serial.begin(9600); // شروع ارتباط سریال
          while (CAN_OK != CAN.begin(CAN_500KBPS)) { // شروع ارتباط با ماژول CAN
          Serial.println("Failed to initialize CAN bus");
          delay(100);
          }
          Serial.println("CAN bus initialized");
          }
          
          void loop() {
          unsigned char len = 0;
          unsigned char buf[8];
          
          if (CAN_MSGAVAIL == CAN.checkReceive()) { // بررسی دریافت پیام
          CAN.readMsgBuf(&len, buf); // خواندن پیام دریافتی
          unsigned int canId = CAN.getCanId(); // دریافت شناسه CAN
          Serial.print("Receivedپیام از شناسه CAN: ");
          Serial.print(canId);
          Serial.print(", داده‌ها: ");
          for (int i = 0; i < len; i++) {
          Serial.print(buf[i], HEX);
          Serial.print(" ");
          }
          Serial.println();
          }
          }​
          این کد نمونه، پیام‌های دریافتی را از ماژول CAN خوانده و آنها را در پورت سریال آردوینو نمایش می‌دهد.
          سلام دوست عزیز
          بسیار بسیار عالی و ممنونم از شما
          فقط یک مساله، پروتکل کن دوتا پین +CAN و -CAN داره. اینارو باید به کدوم پایه اردوینو متصل کرد؟؟ البته امیدوارم منظور شما استفاده از شیلد کَن نباشه! این شیلد بشدت گران هستش و بدرد پروژه های کوچیک اصلا نمیخوره!

          راستش هدف بنده کنترل عقربه های کلاستر ماشین هستش. تو خودروهای سایپا (تیبا به بالا) فقط از طریق همین دوتا پایه + و - کَن، دستور به پشت آمپر داده میشه.
          تشکر

          ویرایش: من میخاستم مستقیم با آردوینو کنترل کنم ولی الان میبینم که نیازمند کتابخونه کامل و دسترسی ب تمامی پروتکلهای مورد استفاده تو ماشین‌های مختلف هست که عملا از عهده من خارجه! ماژولی هم که پیشنهاد دادید بسیار بصرفه و خوب هستش . کمک بزرگی کردی مهندس !
          جدیدترین ویرایش توسط shahinb007; ۱۴:۳۱ ۱۴۰۳/۰۴/۰۳.
          *** کمترین توقع از یک فرد تحصیل کرده، دانستن املاءِ صحیحِ کلمات است ***

          دیدگاه

          لطفا صبر کنید...
          X