ساخت شبکه CAN با ماژول MCP2515 و آردوینو

در گذشته، خودروها بیش از 2000 متر کابل داشتند که برای مثال، کلیدهای روی داشبورد را مستقیماً به چراغهای جلو و عقب متصل میکردند. با پیچیدهتر شدن خودروها، این روش ساده دیگر کارایی نداشت. در سال 1986، شرکت Bosch سیستم گذرگاه CAN (یا CAN bus) را معرفی کرد که این مشکل را حل کرد و تولید خودرو را سادهتر و ارزانتر ساخت. امروزه CAN به استاندارد صنعتی تبدیل شده و در همهچیز از خودروها و کامیونها گرفته تا اتوبوسها، تراکتورها، هواپیماها و کشتیها مورد استفاده قرار میگیرد.
یادگیری خواندن و تجزیهوتحلیل پیامهای CAN در آردوینو به شما این امکان را میدهد که دادههایی مانند دمای مایع خنککننده، موقعیت دریچه گاز، سرعت خودرو و دور موتور را از خودرو استخراج کرده و در پروژههای داشبورد خود از آنها استفاده کنید.
ماژول رابط گذرگاه MCP2515 CAN بهترین راه برای افزودن قابلیت ارتباط CAN به آردوینو از طریق پروتکل SPI است. این آموزش نحوه اتصال ماژول MCP2515 به آردوینو را به شما نشان میدهد، اما پیش از آن، نگاهی کوتاه به اصول اولیه پروتکل CAN خواهیم داشت.
مبانی سیستم باس CAN
شبکه ناحیه کنترلکننده (Controller Area Network یا CAN bus) یک استاندارد ارتباطی است که برای برقراری ارتباط بین دستگاههای داخل خودرو بدون نیاز به رایانه مرکزی طراحی شده است.
برای درک بهتر گذرگاه CAN، خودرو را به بدن انسان تشبیه کنید. در این قیاس، گذرگاه CAN همانند سیستم عصبی بدن عمل میکند.
همانطور که سیستم عصبی امکان ارتباط بین بخشهای مختلف بدن را فراهم میکند، گذرگاه CAN نیز ارتباط بین گرههای مختلف CAN یا همان واحدهای کنترل الکترونیکی (ECUها) را ممکن میسازد.
یک خودروی مدرن بیش از 70 ECU دارد که هرکدام وظیفه خاصی را بر عهده دارند. با وجود اینکه هر ECU میتواند یک وظیفه خاص را بهطور کارآمد انجام دهد، اما باید اطلاعات را با سایر ECUها به اشتراک بگذارد. برای مثال، ماژول کنترل موتور سرعت فعلی موتور را به صفحه ابزار (instrument cluster) ارسال میکند تا بر روی دورسنج (tachometer) نمایش داده شود؛ به همین ترتیب، کنترلر درب راننده پیامی به کنترلر درب سرنشین ارسال میکند تا شیشه را پایین بیاورد.
ECUها در یک پیکربندی چند-مستر (multi-master) به گذرگاه متصل هستند. به این معنا که هر ECU میتواند کنترل گذرگاه را در دست گرفته و اطلاعات (مانند دادههای حسگرها) را روی آن ارسال کند. دادههای ارسالشده توسط تمام ECUهای دیگر روی گذرگاه CAN دریافت میشوند. سپس هر ECU میتواند دادهها را بخواند و تصمیم بگیرد آن را بپذیرد یا نادیده بگیرد.
توپولوژی باس CAN
ارتباط فیزیکی در گذرگاه CAN از طریق سیمکشی مخصوصی انجام میشود که شامل دو سیم به نامهای CAN Low و CAN High است. این دو سیم بهصورت تابیده به هم قرار گرفتهاند تا تداخلات الکترومغناطیسی بهطور یکنواخت بر هر دو سیم اثر بگذارد و در نتیجه احتمال بروز خطا کاهش یابد.
در دو سر انتهایی کابل، مقاومتهایی با مقدار 120 اهم قرار داده میشود. از آنجا که گذرگاه CAN یک گذرگاه داده با سرعت بالا است، در صورت نبود این مقاومتها، سیگنالها بازتاب پیدا کرده و با سیگنالهای بعدی تداخل ایجاد میکنند که ممکن است باعث اختلال در ارتباط یا از کار افتادن گذرگاه شود.
سیگنالدهی در گذرگاه CAN
برای انتقال داده از طریق این سیمها، سطوح ولتاژ آنها تغییر میکند. این تغییرات ولتاژ به سطوح منطقی ترجمه میشود تا گرههای موجود در شبکه بتوانند با یکدیگر ارتباط برقرار کنند.
برای ارسال «منطق 1» در گذرگاه CAN، ولتاژ هر دو خط روی 2.5 ولت تنظیم میشود (یعنی هیچ اختلاف ولتاژی وجود ندارد). این حالت «وضعیت غیرفعال» یا Recessive State نام دارد و نشان میدهد گذرگاه برای استفاده توسط هر گرهی آزاد است.
در مقابل، برای ارسال «منطق 0»، خط CAN High روی 3.5 ولت و خط CAN Low روی 1.5 ولت تنظیم میشود (یعنی اختلاف ولتاژ 2 ولتی بین آنها ایجاد میشود). این حالت «وضعیت غالب» یا Dominant State نام دارد و به تمام گرههای روی گذرگاه اطلاع میدهد که یک گره در حال ارسال داده است و سایر گرهها باید تا پایان ارسال منتظر بمانند.
گره (Node) در گذرگاه CAN
هر گره CAN شامل سه بخش اصلی است: ترنسیور CAN، کنترلر CAN و میکروکنترلر.
فرستنده CAN
- در زمان دریافت: سطوح ولتاژ روی گذرگاه CAN را به سطوح قابلفهم برای کنترلر CAN تبدیل میکند.
- در زمان ارسال: جریان دادهها را از کنترلر CAN گرفته و به سطوح گذرگاه CAN تبدیل میکند.
کنترلر CAN
- در زمان ارسال: پیام را از میکروکنترلر گرفته و بهصورت سریالی زمانی که گذرگاه آزاد است، روی گذرگاه ارسال میکند.
- در زمان دریافت: بیتهای سریالی دریافتی از گذرگاه را تا زمانی که پیام کامل شود ذخیره کرده و سپس به میکروکنترلر اطلاع میدهد (معمولاً با ایجاد وقفه).
میکروکنترلر
مسئول تفسیر پیامهای دریافتی و تصمیمگیری درباره ارسال پیامهای جدید است. سنسورها، عملگرها و دستگاههای کنترلی به میکروکنترلر متصل هستند.
فریم استاندارد CAN
ارتباط در گذرگاه CAN از طریق فریمهای CAN انجام میشود. در اینجا یک فریم استاندارد با شناسه 11 بیتی را بررسی میکنیم. هر فریم شامل هشت بخش پیام است:
- SOF (Start of Frame): بیت آغاز فریم است و با ارسال «0 غالب» مشخص میشود تا سایر گرهها بدانند یک گره قصد ارسال پیام دارد.
- ID: شناسه فریم است که مشخص میکند پیام مربوط به چه چیزی است و چه کسی آن را ارسال کرده. همچنین اولویت پیام را تعیین میکند؛ هرچه مقدار ID کمتر باشد، اولویت پیام بیشتر است.
- RTR (Remote Transmission Request): نشان میدهد گره در حال ارسال داده است یا از گره دیگر درخواست داده میکند.
- Control: شامل بیت گسترش شناسه (IDE) است که در حالت شناسه 11 بیتی مقدار «0 غالب» دارد. همچنین شامل کد طول داده (DLC) است که مشخص میکند چند بایت داده در پیام وجود دارد.
- Data: شامل حداکثر 8 بایت داده واقعی است.
- CRC (Cyclic Redundancy Check): برای تشخیص خطا در پیام استفاده میشود.
- ACK (Acknowledgment): نشان میدهد آیا گره دیگر داده را بهدرستی دریافت و تأیید کرده است یا خیر.
- EOF (End of Frame): پایان فریم CAN را مشخص میکند.
بررسی ماژول MCP2515
ماژول رابط گذرگاه MCP2515 CAN یک راهکار کامل برای ارتباط CAN است که شامل کنترلر MCP2515 از شرکت Microchip و ترنسیور پرسرعت TJA1050 از شرکت Philips میباشد. این ماژول بهترین گزینه برای افزودن قابلیت ارتباط CAN به آردوینو از طریق ارتباط SPI است.
به دلیل قابلیت اطمینان و مقاومت بالای آن، ماژول MCP2515 را میتوان در پروژههای مختلفی استفاده کرد که نیاز به انتقال داده مطمئن در محیطهای پرنویز یا مسافتهای طولانی دارند.
کنترلر CAN مدل MCP2515
MCP2515 یک کنترلر CAN مستقل است که مشخصات CAN نسخه 2.0B را پیادهسازی میکند. این تراشه قادر به ارسال و دریافت هر دو نوع فریم داده و فریم ریموت (استاندارد و توسعهیافته) است. MCP2515 دارای ماسکها و فیلترهایی برای حذف پیامهای ناخواسته است که باعث کاهش بار پردازشی MCU میزبان میشود.
MCP2515 یک پایه خروجی وقفه (INT) دارد که میتواند هنگام دریافت یک پیام معتبر و ذخیره آن در یکی از بافرهای دریافت، وقفهای را در MCU ایجاد کند.
ترنسیور CAN مدل TJA1050
TJA1050 رابط بین کنترلر MCP2515 و گذرگاه فیزیکی دو سیمه CAN است و با الزامات خودروسازی از جمله سرعت بالا (تا 1 مگابیت بر ثانیه)، جریان بیکار کم، سازگاری الکترومغناطیسی و مقاومت در برابر تخلیه الکترواستاتیک مطابقت دارد.
این ترنسیور امکان اتصال حداکثر 110 گره به گذرگاه را فراهم میکند.
کانکتور گذرگاه CAN
روی ماژول یک ترمینال پیچی دوپایه (با برچسب H و L) برای اتصال کابل زوجسیم تابیده CAN وجود دارد.
ماژول MCP2515 از نرخ داده تا 1 مگابیت بر ثانیه پشتیبانی میکند. با این حال، حداکثر سرعت انتقال توسط طول خط گذرگاه تعیین میشود: هرچه خط طولانیتر باشد، سرعت انتقال کمتر میشود. حداکثر طول گذرگاه در سرعت 1 مگابیت بر ثانیه، 40 متر است، در حالیکه در سرعت 125 کیلوبیت بر ثانیه میتواند به 500 متر برسد.
پایاندهی گرهها (Node Termination)
گذرگاه CAN باید در هر دو انتها با مقاومتهایی پایاندهی شود تا از بازتاب سیگنال جلوگیری شود. به همین دلیل، ماژول MCP2515 دارای یک مقاومت 120 اهم پایاندهنده و یک جامپر مخصوص پایاندهی گره است. برای فعالسازی مقاومت باید جامپر روی برد باقی بماند.
اگر ماژول اولین یا آخرین گره شبکه CAN باشد، جامپر باید قرار داده شود. اگر ماژول در وسط شبکه قرار دارد، جامپر باید برداشته شود.
مشخصات فنی
- ولتاژ کاری: 4.75 تا 5.25 ولت (بر اساس الزامات TJA1050)
- استاندارد CAN: نسخه 2.0B با سرعت 1 مگابیت بر ثانیه
- فرکانس کریستال: 8 مگاهرتز
- بافرهای ارسال: سه بافر ارسال با قابلیت اولویتبندی و توقف (Abort)
- بافرهای دریافت: دو بافر دریافت با ذخیرهسازی پیامهای اولویتدار
- فیلتر پیام: شش فیلتر 29 بیتی
- ماسکها: دو ماسک 29 بیتی
- خروجی وقفه: یک خروجی وقفه با قابلیت انتخاب فعالسازی
- رابط ارتباطی: SPI پرسرعت (10 مگاهرتز)
پینهای ماژول MCP2515
حال نگاهی به پایههای ماژول بیندازیم.
کانکتور ورودی
پینهای سمت یک ماژول برای ارتباط با میکروکنترلر استفاده میشوند:
- INT: هنگام دریافت پیام معتبر، وقفه ایجاد میکند.
- SCK: پایه کلاک SPI.
- SI (MOSI): پایه ورودی سریال برای دادههایی که از آردوینو به ماژول ارسال میشوند.
- SO (MISO): پایه خروجی سریال برای دادههایی که از ماژول به آردوینو ارسال میشوند.
- CS: پایه انتخاب تراشه که باید در سطح Low نگه داشته شود تا تراکنش SPI آغاز شود.
- GND: زمین مشترک برای توان و منطق.
- VCC: پایه تغذیه (فقط به 5 ولت متصل شود).
کانکتور باس CAN
در سمت دیگر ماژول، یک ترمینال پیچی دوپایه و یک هدر نری دوپایه برای اتصال کابل زوجسیم تابیده CAN قرار دارد:
- L: سیگنال CAN Low برای استاندارد CAN.
- H: سیگنال CAN High برای استاندارد CAN.
مدار اتصال دو ماژول CAN و آردوینو
حالا که با تمام جزئیات ماژول آشنا شدیم، بیایید شبکه CAN خودمان را بسازیم.
مثال 1: شبکه ساده دو گرهای CAN
در این مثال، یک شبکه گذرگاه CAN ساده با دو گره ساخته میشود – یکی به عنوان فرستنده پیام و دیگری به عنوان گیرنده.
ابتدا پایه VCC ماژول را به 5 ولت آردوینو و پایه GND را به زمین متصل کنید.
سپس پایههای SPI را سیمکشی کنید. دقت کنید که هر مدل از آردوینو پایههای SPI مخصوص به خود را دارد و باید متناسب با آن متصل شود. برای بردهایی مانند Arduino UNO یا Nano V3.0، پایهها بهصورت زیر هستند:
- پایه دیجیتال 13 برای SCK
- پایه دیجیتال 12 برای MISO
- پایه دیجیتال 11 برای MOSI
- پایه دیجیتال 10 برای CS
اگر از برد آردوینو دیگری استفاده میکنید، قبل از ادامه، مستندات رسمی آن را برای موقعیت پایههای SPI بررسی کنید.
اکنون پایه INT ماژول را به پایه دیجیتال 2 آردوینو وصل کنید.
باید دو مدار مشابه بسازید. یکی نقش فرستنده (Transmitter) را دارد و دیگری نقش گیرنده (Receiver). سیمکشی در هر دو یکسان است.
اتصال دو ماژول بسیار ساده است: سیم CAN L را به CAN L و سیم CAN H را به CAN H متصل کنید. بهتر است از کابل زوجسیم تابیده (Twisted Pair) استفاده شود، اما برای تستهای ساده روی بردبورد یا فاصلههای کوتاه نیازی نیست.
به یاد داشته باشید که هرچه طول گذرگاه بیشتر یا نویز الکتریکی محیط شدیدتر باشد، استفاده از کابل تابیده و افزودن شیلد محافظ اهمیت بیشتری پیدا میکند.
در نهایت، چون این شبکه تنها شامل دو گره است، جامپر را روی هر دو ماژول قرار دهید.
مدار را مطابق شکل بسازید.
مثال 2: شبکه چند گرهای CAN
در این مثال، شبکهای بزرگتر ساخته میشود که در آن چندین گره پیام ارسال میکنند و یک گره پیامها را از طریق پورت سریال به رایانه منتقل میکند.
میتوانید گرههای دیگر را بین دو گره انتهایی اضافه کنید. این گرهها را میتوان بهصورت مستقیم روی خط اصلی متصل کرد یا با استفاده از کابل فرعی کوتاه (حداکثر طول 12 اینچ یا حدود 30 سانتیمتر) به گذرگاه متصل نمود.
در نهایت، جامپر را فقط روی اولین و آخرین گره شبکه CAN قرار دهید و آن را از روی گرههای میانی بردارید.
مدار را مطابق شکل مونتاژ کنید.
نصب کتابخانه ماژول CAN
برای کار با ماژول MCP2515 یک کتابخانه بسیار کاربردی وجود دارد که باید آن را در محیط Arduino IDE نصب کنید.
برای نصب، مسیر زیر را دنبال کنید:
Sketch > Include Library > Manage Libraries…
منتظر بمانید تا Library Manager فهرست کتابخانهها را بارگذاری و بهروزرسانی کند.
سپس در قسمت جستجو عبارت mcp2515 را وارد کنید. گزینهای با عنوان CAN by Sandeep Mistry را پیدا کنید، روی آن کلیک کرده و گزینه Install را انتخاب کنید.
کد آردوینو برای راه اندازی ارتباط CAN
کد کامل برای قسمت فرستنده و قسمت گیرنده در فایل دانلودی انتهای صفحه قرار داده شده است.
در این آزمایش ساده، ما سعی میکنیم یک پیام «Hello World» را روی گذرگاه CAN ارسال کنیم تا ببینیم آیا میتوان آن را دریافت و رمزگشایی کرد یا خیر. این کار به شما کمک میکند نحوه استفاده از ماژولها را یاد بگیرید و پایهای برای پروژهها و آزمایشهای عملیتر فراهم میکند.
در کد فرستنده، اگر چندین گره روی گذرگاه CAN دارید، این اسکچ را روی هر گره فرستنده آپلود کنید و حتماً شناسه پیامها (ID) را برای هر گره منحصربهفرد تغییر دهید
توجه داشته باشید که در کد گیرنده، تابع loop
خالی گذاشته شده است، زیرا اسکچ از وقفه (Interrupt) استفاده میکند تا هر زمان که یک پیام معتبر دریافت و در یکی از بافرهای دریافت قرار گرفت، آردوینو را مطلع کند.
پس از آپلود اسکچ، Serial Monitor را با نرخ 9600 باز کنید. گره فرستنده هر ثانیه یک بسته استاندارد و یک بسته توسعهیافته CAN ارسال میکند.
گره گیرنده این بستهها را دریافت کرده و از طریق پورت سریال به رایانه منتقل میکند.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود