نويسنده موضوع: کار با پروتکل CAN  (دفعات بازديد: 4675 بار)

0 کاربر و 1 مهمان درحال ديدن موضوع.

آفلاين D-jital

  • کاربر تازه وارد سطح اول
  • *
  • تشکر
  • -اهدايي: 4
  • -دريافتي: 25
  • ارسال: 8
    • لیسانس
کار با پروتکل CAN
« : 16 شهريور 1390 - 10:15:28 »
با سلام به همه دوستان عزیز
چند وقت پیش داشتم رزومه یه شرکت خارجی رو بررسی می کردم (خدا زیادشون کنه) دیدم اکثرا توی پروژههای صنعتی از CAN برای ارتباط استفاده کرده. (CAN یا Controller Area Network یه پروتکل خیلی عالی برای کار در محیطهای نویزی با سرعت بالا است)
با خودم گفتم که چه خوبه من هم از این پروتکل در پروژه ها مخصوصا اون جاهایی که نویز زیاده استفاده کنم.
برای همین یه سرچی داخل سایتهای فارسی زدم طبق معمول چیزی جز ساعت سامورایی و ... گیرم نیومد.
تا اینکه به ECA رسیدم گفتم بهتره یه تاپیک بزنم تا هر کس چیزی بلده یا حتی چیزی از کسی شنیده بگه تا بتونیم به لطف خدا این پروتکل رو هم مثل پروتکل Serial بومی سازی اش کنیم.
اگه کسی از دوستان مثالی برای میکروی SAM7X256 داره با یکم توضیحات بذاره تا تحلیلش کنیم و همه یاد بگیرن

آفلاين fatemehjml

  • کاربر ساده سطح اول
  • *
  • تشکر
  • -اهدايي: 49
  • -دريافتي: 34
  • ارسال: 71
    • شرکت دلفین
پاسخ : کار با پروتکل CAN
« پاسخ #1 : 16 شهريور 1390 - 10:39:27 »
با سلام
ممنون از اینکه این تاپیک رو ایجاد کردید.
سیستم عامل RTXیه کتابخونه برای کار با پروتکل CAN داره. آقای حسینی زحمت کشیدن و پروژه‌ای رو که در این زمینه انجام داده بودن با آموزش و توضیحات کامل توی این تاپیک گذاشتن.
کاربران مهمان مجاز به مشاهده لینک ها نیستند. لطفا ثبت نام نمایید. ثبت نام -- ورود
حالا که یه تاپیک جدا برای این مطلب باز شده، من با اجازه‌ی ایشون مطالبشون رو اینجا می‌ذارم.

پیاده سازی شبکه CAN با میکروکنترلر AT91SAM7X256 و سیستم عامل بلادرنگ RTX

CAN (مخفف Controller Area Network) یک باس استاندارد است که برای برقراری ارتباط بین واحدهای کنترل الکترونیکی (ECU) درون یک خودرو طراحی شده و پراستفاده ترین پروتکل در طراحی و ساخت قسمت های ارتباطی وسایل نقلیه است. امروزه CAN بخاطر قابلیت هایی که دارد، در انواع پروژه ها و محیط های صنعتی نیز استفاده می شود.
CAN یک پروتکل مبتنی بر پیام (message based) و multi-master broadcast سریال است. شبکه CAN می تواند شامل تعداد زیادی Node باشد که هر Node قابلیت ارسال و دریافت اطلاعات را دارد. هر پیام شامل یک ID و حداکثر 8 بایت داده است. وسایل (device) های متصل شده به CAN، عموما حسگرها (sensor)، محرک ها (actuator) و دیگر تجهیزات کنترلی هستند.
ویژگی ها :
-   پرسرعت (تا 1Mbps)
-   قابلیت اولویت بندی پیام ها، مناسب برای طراحی سیستم بلادرنگ (پیام با شماره ID پایین تر دارای اولویت بالاتر است)
-   باس 2 سیمه تفاضلی (2-wire differential bus)
-   ایمنی بسیار زیاد در برابر نویز
-   قابلیت خطایابی، کنترل و رفع خطا (در مواقع تداخل و ...)
-   استاندارد ISO 11898 در لایه Data link و قسمت هایی از لایه فیزیکی

برای پیاده سازی، هر Node به موارد زیر نیاز دارد :
-   Host processor
o   پردازنده تصمیم می گیرد که هر پیام دریافتی چه معنایی دارد و با توجه به پیام چه عملی باید صورت گیرد. همینطور وظیفه تصمیم گیری در مورد پیام هایی که باید ارسال شوند به عهده این قسمت است. کاربر با برنامه نویسی پردازنده، سیستم مورد نظر را کنترل میکند. sensorها و actuatorها به پردازنده متصل می شوند.
-   CAN controller
o   وظیفه دریافت : CAN controller بیت ها را بصورت سریال از باس دریافت می کند تا یک پیام کامل فراهم شود. سپس پیام به Host processor منتقل می شود.
o   وظیفه ارسال : Host processor بیت های ارسالی را در CAN controller ذخیره می کند تا پیام را بشکل سریال ارسال کند.
-   Transceiver
o   وظیفه تبدیل سطوح سیگنال بین باس و CAN controller را به عهده دارد. باس ایجاد شده توسط Transceiver یک باس دو سیمه تفاضلی است. سیگنال های این باس CAN_H و CAN_L نام دارند.


میکرو کنترلر AT91SAM7X256 (مبتنی بر پردازنده ARM7-TDMI) دارای یک CAN controller می باشد. این کنترلر دارای هشت Mailbox (یا Channel) است. هر Mailbox می تواند هربار تا حداکثر 8 بایت داده را ارسال یا دریافت کند. دو Frame مهم CAN عبارتند از Data frame و Remote frame. Data frame برای ارسال داده و Remote frame برای درخواست داده استفاده می شود. با ارسال Remote frame، کنترلر مقصد (بدون درگیر کردن پردازنده) بطور خودکار داده درخواستی که توسط کاربر مشخص شده را ارسال می کند. فریم ها دارای یک identifier می باشند. این ID برای Standard frame ها 11 بیت وبرای Extended frame ها 29 بیت می باشد.
از آی سی MCP2551 می توان به عنوان Transceiver استفاده کرد.  دو سر باس CAN باید توسط مقاومت های 120 اهمی به هم متصل شوند تا جریان نسبتا بالایی در باس ایجاد شده و مقاومت باس در برابر نویز زیاد شود.


برای آشنایی با پیاده سازی این شبکه، مداری مانند شکل زیر با 4 node بسته شد. هرکدام از میکروکنترلرها، توسط تراشه MCP2551 ، به عنوان یک Node به باس CAN متصل هستند. میکرو کنترلرهای 1 ، 2 و 3، هر 300 میلی ثانیه، یک ورودی ADC را خوانده و با یک پیام دو بایتی برای میکروکنترلر4 ارسال می کنند. میکروکنترلر4 که منتظر دریافت اطلاعات است، بعد از دریافت هر پیام، اطلاعات دریافتی از هر node را روی LCD همراه با شماره node نمایش می دهد. همزمان node شماره 4 نیز می توان برای node های دیگر اطلاعات ارسال کرده و فرمان مناسب را صادر کند. عملیات ارسال و دریافت به شکل تسک های جدا توسط سیستم عامل RTX نوشته شده است.


RL-RTX یک هسته سیستم عامل بلادرنگ تحت محیط توسعه KEIL MDK برای پردازنده های ARM7TDMI ، ARM9 و CORTEX-M3 است. توسط این سیستم عامل می توان بسادگی یک سیستم بلادرنگ شامل تسک های اولویت بندی شده طراحی کرد. پشتیبانی از پروتکل بلادرنگ CAN (library RL-CAN) از جمله ویژگی های مهم این سیستم عامل است.
CAN

فایل های کتابخانه RL-CAN :
RTX_CAN.h : این فایل شامل تعریف توابع و ثابت ها است.
RTX_CAN.c : توابع عمومی کنترلر CAN. این فایل با فایل CAN_chip.c که پیاده سازی قسمت سخت افزار کنترلر است ارتباط بر قرار می کند.
CAN_chip.c : با توجه به میکروکنترلر مورد استفاده باید یکی از فایل های مربوط استفاده شود. (CAN_SAM7X.c در این پروژه)
CAN_CFG.h : فایل پیکربندی کنترلر CAN


برای ارسال و دریافت فریم ها از نوع داده CAN_msg که به شکل زیر تعریف شده است استفاده می شود.
typedef struct {
  U32 id;                 /* 29 bit identifier                               */
  U8  data[8];            /* Data field                                      */
  U8  len;                /* Length of data field in bytes                   */
  U8  ch;                 /* Object channel                                  */
  U8  format;             /* 0 - STANDARD,   1 - EXTENDED IDENTIFIER         */
  U8  type;               /* 0 - DATA FRAME, 1 - REMOTE FRAME                */
} CAN_msg;
توابع CAN_init و CAN_start برای راه اندازی کنترلر CAN فراخوانی می شوند.
CAN_ERROR CAN_init (
    U32 ctrl,         /* CAN Controller */
    U32 baudrate);    /* Baudrate */

CAN_ERROR CAN_start (
    U32 ctrl);    /* CAN Controller to Enable */
CAN_rx_object برای پیکربندی یک Mailbox(channel) در حالت دریافت استفاده می شود.
CAN_ERROR CAN_rx_object (
    U32 ctrl,              /* CAN Controller */
    U32 channel,           /* CAN Channel Number */
    U32 id,                /* Message ID */
    U32 object_para);      /* Object Parameters */
CAN_receive فریم ارسال شده به Mailbox را دریافت می کند. پارامتر سوم تابع، زمانی را برای انتظار دریافت فریم مشخص می کند. در صورتی که 0xFFFF انتخاب شود، این زمان نامحدود می شود. لازم به ذکر است که این زمان تلف نمی شود. با وجود سیستم عامل، زمان پردازش در اختیار تسک های دیگر قرار می گیرد.
CAN_ERROR CAN_receive (
    U32 ctrl,        /* CAN Controller */
    CAN_msg *msg,    /* CAN Message */
    U16 timeout);    /* Time to Wait */
CAN_send : ارسال داده
CAN_ERROR CAN_send (
    U32 ctrl,        /* CAN Controller */
    CAN_msg *msg,    /* CAN Message */
    U16 timeout);    /* Time to Wait */
CAN_request : ارسال Remote frame
CAN_ERROR CAN_request (
    U32 ctrl,        /* CAN Controller */
    CAN_msg *msg,    /* CAN Message to Request */
    U16 timeout);    /* Time to Wait */
CAN_set : پیکربندی یک Mailbox برای پاسخ خودکار به Remote frame
CAN_ERROR CAN_set (
    U32 ctrl,        /* CAN Controller */
    CAN_msg *msg,    /* CAN Message */
    U16 timeout);    /* Time to Wait */

نمونه برنامه :
__task   void tsk_send(void)
{
   int i = 0;
   CAN_msg msg_buf2 = {
      33,                           // ID
      { 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00 },   // Data
      2,                            // Length
      2,                            // Channel
      STANDARD_FORMAT,              // Format
      DATA_FRAME                    // Type
   };

   AT91S_ADC *pADC = AT91C_BASE_ADC;
   pADC->ADC_CR = AT91C_ADC_SWRST;      //reset
   pADC->ADC_MR |= AT91C_ADC_LOWRES_8_BIT | (0x3<<24);
   pADC->ADC_CHER = AT91C_ADC_CH4;

   os_itv_set(30);
   while(1){
         pADC->ADC_CR = AT91C_ADC_START;
         while (pADC->ADC_SR & AT91C_ADC_EOC4 == 0);   //End of Conversion
         adc_data = (unsigned int) pADC->ADC_CDR4 & AT91C_ADC_DATA;

         msg_buf2.data[0] = 'A';
         msg_buf2.data[1] = adc_data;
         CAN_send(1, &msg_buf2, 0xffff);
         os_itv_wait();
   }
}
این تسک هر 300 میلی ثانیه اطلاعات ADC را خوانده و ارسال می کند.  شماره ID 33 و Mailbox 1 با طول 2 بایت.
CAN_rx_object(1, 2, 33, DATA_TYPE | STANDARD_TYPE);
__task   void tsk_receive(void)
{
   CAN_msg   msg_buf;

   while(1){
      CAN_receive (1, &msg_buf, 0xffff);
      if (msg_buf.data[0] == 'A'){
         lcd_gotoxy(1,3);
         lcd_putsf("   ");
         lcd_gotoxy(1,3);
         lcd_puts(msg_buf.data[1]);
      }
      else if (msg_buf.data[0] == 'B'){
         lcd_gotoxy(1,11);
         lcd_putsf("   ");
         lcd_gotoxy(1,11);
         lcd_puts(msg_buf.data[1]);
      }
      else if (msg_buf.data[0] == 'C'){
         lcd_gotoxy(2,3);
         lcd_putsf("   ");
         lcd_gotoxy(2,3);
         lcd_puts(msg_buf.data[1]);
      }
   }
}

تسک دریافت برای فریم داده استاندارد. Mailbox 2 با ID 33 .
« آخرين ويرايش: 26 بهمن 1392 - 22:09:47 توسط علی ایمانی فر »

آفلاين D-jital

  • کاربر تازه وارد سطح اول
  • *
  • تشکر
  • -اهدايي: 4
  • -دريافتي: 25
  • ارسال: 8
    • لیسانس
پاسخ : کار با پروتکل CAN
« پاسخ #2 : 16 شهريور 1390 - 14:29:05 »
چند تا سوال:
1- یعنی شما می فرمایید که اتصال دو میکرو به صورت مستقیم ممکن نیست و علاوه بر خود میکرو که CAN را ساپورت میکنه باید از MCP2551 هم استفاده کرد؟
2- منظور از Mail box  چیست؟

با اجازه آقای حسینی من PDF آموزش CAN را اینجا قرار میدهم تا این تاپیک کامل بشه.

کاربران مهمان مجاز به مشاهده لینک ها نیستند. لطفا ثبت نام نمایید. ثبت نام -- ورود
« آخرين ويرايش: 16 شهريور 1390 - 14:40:21 توسط D-jital »

آنلاين مهدی کربلایی

  • کاربر نیمه حرفه ای سطح دوم
  • *
  • تشکر
  • -اهدايي: 313
  • -دريافتي: 380
  • ارسال: 710
پاسخ : کار با پروتکل CAN
« پاسخ #3 : 16 شهريور 1390 - 15:17:09 »
سلام
mcp2551 یا pca82c251 هر دو به عنوان driver برای پروتکل Can هستند و کنترلر اصلی داخل خود میکرو هست .
در پروتکل can به طور معمول در هر ارسال حداکثر 8 بایت را می توان انتقال داد . در اصل این 8 بایت همراه با یک سری رجیسترهای کنترلی داخل یک فضایی از حافظه رم قرار می گیرند که به نام mailboxN است . در میکرو at91sam7x256 دارای 8 mailbox می باشد که هر کدام میتوانند هر گونه حالتی را داشته باشند و با یکی از رجسترها که برای اولویت بندی است بین اجرا و انتفال اطلاعات تمایز ایجاد می شود .

آفلاين mmmaherani

  • کاربر تازه وارد سطح سوم
  • *
  • تشکر
  • -اهدايي: 7
  • -دريافتي: 28
  • ارسال: 24
    • دیپلم
پاسخ : کار با پروتکل CAN
« پاسخ #4 : 17 شهريور 1390 - 22:57:03 »
ساعت سامورائی را خوب اومدی
تا وقتی که داخله این مملکت حواسه همه به ساعت سامورائی یا مهره ماره اوضاعه علمی کشور بهتر از این نمیشه...
داخله فیسبوک هر چی مطلبه علمی مینویسم هیچ کس لایکش نمیکنه ولی مطالبه عشق و عاشقی را هر نفر صد بار لایکش میکنه.

آفلاين zohair

  • کاربر تازه وارد
  • *
  • تشکر
  • -اهدايي: 1
  • -دريافتي: 5
  • ارسال: 4
    • لیسانس
پاسخ : کار با پروتکل CAN
« پاسخ #5 : 12 فروردين 1391 - 00:08:06 »
دوستان سلام
از همه دوستانی که کار با کن رو کامل بلد شده اند ، تقاضا میکنم مراجعی رو در این زمنیه معرفی کنند به من باید پروتکل کن رو کامل شناسایی کنم و یک گزارش کامل و جامع راجع بهش بنویسم ...

آفلاين pooyafff

  • کاربر ساده سطح دوم
  • *
  • تشکر
  • -اهدايي: 119
  • -دريافتي: 32
  • ارسال: 145
    • لیسانس
پاسخ : کار با پروتکل CAN
« پاسخ #6 : 28 فروردين 1391 - 12:42:00 »
سلام
دوستان من با basco1m و atmega 32 مي خوام با پروتكل can ارتباط برقرار كنم  ممنون ميشم اگه راهنماييم كنيد
موفق باشيد

آنلاين مهدی کربلایی

  • کاربر نیمه حرفه ای سطح دوم
  • *
  • تشکر
  • -اهدايي: 313
  • -دريافتي: 380
  • ارسال: 710
پاسخ : کار با پروتکل CAN
« پاسخ #7 : 28 فروردين 1391 - 13:54:45 »
بیسیک و سی که فرقی نداره ولی پیشنهاد می کنم که تا دیر نشده بری سراغ سی .
در مورد مگا 32 که خوب مشخصه که رابط can رو نداره ولی در خانواده avr می تونی بری سراغ at90can که این رو داره . اما اگه فقط می خواهی با همین مگا 32 کار کنی باید یه کنترلر can در کنار میکرو بزاری مثل sja1000 .

آفلاين mahdi2_2

  • کاربر تازه وارد
  • *
  • تشکر
  • -اهدايي: 1
  • -دريافتي: 7
  • ارسال: 2
    • نارشناسی
پاسخ : کار با پروتکل CAN
« پاسخ #8 : 29 فروردين 1391 - 23:50:52 »
در فايل word زير به صورت کامل شبكه كنترل كننده CAN معرفي شده
کاربران مهمان مجاز به مشاهده لینک ها نیستند. لطفا ثبت نام نمایید. ثبت نام -- ورود
« آخرين ويرايش: 29 فروردين 1391 - 23:54:09 توسط mahdi2_2 »

آفلاين nrezaei31

  • کاربر تازه وارد
  • *
  • تشکر
  • -اهدايي: 5
  • -دريافتي: 3
  • ارسال: 3
    • electronic eng
پاسخ : کار با پروتکل CAN
« پاسخ #9 : 1 مرداد 1391 - 18:10:00 »
چند تا سوال:
1- یعنی شما می فرمایید که اتصال دو میکرو به صورت مستقیم ممکن نیست و علاوه بر خود میکرو که CAN را ساپورت میکنه باید از MCP2551 هم استفاده کرد؟
2- منظور از Mail box  چیست؟

با اجازه آقای حسینی من PDF آموزش CAN را اینجا قرار میدهم تا این تاپیک کامل بشه.

کاربران مهمان مجاز به مشاهده لینک ها نیستند. لطفا ثبت نام نمایید. ثبت نام -- ورود

با سلام
ابتدا ممنون از همه بابت این تاپیک ها
بعد اینکه این فایل pdfیک سری تصاویر داره که با دانلود نمایش داده نمیشه
ممنون میشم اگر که مشکل را بفرمایین؟؟؟؟

moshkel hal shod
mamnon ke inghadr rahnamaiii  kardiinn :D :lol:
« آخرين ويرايش: 11 شهريور 1391 - 01:51:19 توسط nrezaei31 »

آفلاين big-ben

  • کاربر تازه وارد سطح اول
  • *
  • تشکر
  • -اهدايي: 0
  • -دريافتي: 5
  • ارسال: 8
    • لیسانس
پاسخ : کار با پروتکل CAN
« پاسخ #10 : 3 مرداد 1391 - 09:39:04 »
سلام به همه دوستان - آقا من این پرتکل رو برای lpc1768 ران کردم ولی مشکلی که دارم اینه که نمیدونم چرا هر ID رو نمیشه تعریف کرد ، مثلا وقتی ID رو میذارم 0x200 دیتا دریافت میشه بدون مشکل ولی چرا وقتی که ID رو می ذارم 0x25A پکت دریافت نمیشه ، آیا کلاس خاصی برای تعیین ID وجود داره ؟
چطور میشه در ضمن ID رو من به صورت 11 بیتی تعریف کردم که فضایی بین 0 تا 7FF رو شامل میشه

آفلاين رضا بابایی

  • کاربر کامل سطح اول
  • *
  • تشکر
  • -اهدايي: 516
  • -دريافتي: 180
  • ارسال: 342
  • mrh سابق
پاسخ : کار با پروتکل CAN
« پاسخ #11 : 12 شهريور 1391 - 15:20:06 »
سلام کسی تا به حال موفق شده باس CAN رو روی میکروی SAM7x256 پیاده سازی کنه؟
بنده دو تا میکرو دارم که باید با ارتباط CAN به یکدیگر وصل بشن و مستر به اسلیو داده برفسته.
بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
موفقيت پيش رفتن است نه به نقطه ي پايان رسيدن
نلسون ماندلا

آفلاين naseri.m

  • کاربر تازه وارد
  • *
  • تشکر
  • -اهدايي: 1
  • -دريافتي: 1
  • ارسال: 2
پاسخ : کار با پروتکل CAN
« پاسخ #12 : 27 فروردين 1392 - 10:20:54 »
اينم يه معرفي‌ مختصرو مفيد از can bus که به نظرم مفيد براي کساني‌ که شروع مي‌کنن
کاربران مهمان مجاز به مشاهده لینک ها نیستند. لطفا ثبت نام نمایید. ثبت نام -- ورود

آفلاين ahad65

  • کاربر تازه وارد
  • *
  • تشکر
  • -اهدايي: 0
  • -دريافتي: 1
  • ارسال: 2
    • کارشناس الکترونيک
پاسخ : کار با پروتکل CAN
« پاسخ #13 : 24 شهريور 1392 - 20:33:28 »
سلام من اين پروتکل با sam7x بدون استفاده از RTX راه اندازي کردم
« آخرين ويرايش: 24 شهريور 1392 - 21:11:55 توسط علی ایمانی فر »

آفلاين mohsenavr

  • کاربر ساده سطح چهارم
  • *
  • تشکر
  • -اهدايي: 35
  • -دريافتي: 38
  • ارسال: 244
پاسخ : پاسخ : کار با پروتکل CAN
« پاسخ #14 : 7 مهر 1392 - 20:03:34 »
سلام من اين پروتکل با sam7x بدون استفاده از RTX راه اندازي کردم
آفرين
برنامه ، شماتيک؟