سلام
1-
c و ++c که بلد هستی کافی است و با جاوا هم که آشنا هستی دیگه بهتر !
اما برای تولید یک محصول همانند ECU یا " واحد کنترل موتور" که خودت مثال زدی نیاز داری یکسری روشها و پروتکلهای ارتباطی را تجربه داشته باشی .
مثلا:
- نحوه کار و روش خواندن اطلاعات انواع سنسور در خودرو را آشنا باشی مثل سنسور جریان یا فشار و روش ارتباط سنکرون یا SPI را بدانی به چه نحو دیتا را به کامپیوتر مرکزی انتقال می دهد
- بین کامپیوتر مرکزی اتومبیل و مثلا کنترل کننده فرمان و یا اجزا دیگر ممکن است از طریق CAN ارتباط برقرار شود که یک پروتکل ارتباطی رایج است در صنعت خودروسازی
- درون ECU ممکن است یک حافظه فلش باشد که از طریق I2C با میکرو ارتباط دارد و باید نحوه اتصال و نحوه انتقال اطلاعات را در این روش بدانی
جداول نسبت سوخت به شتاب و ..... را هم فرض می کنیم یک مهندس مکانیک محاسبه کرده و فقط باید درون حافظه سیستم ذخیره شود.
یک مثال دیگر در مورد یک پروژه واقعی در خودرو :
تصور کن به عنوان یک برنامه نویس سخت افزار باید فرمان خودروهای جدید که در واقع با موتور الکتریکی کار می کند را پیاده سازی کنی
که شامل:
- یک موتور اصلی
- یک موتور پشتیبان (که در صورت خرابی اولی اتوموبیل باز هم قابل هدایت باشد)
- و یک موتور سومی که یک نیرویی خلاف موتور اصلی ایجاد می کند تا راننده در حین استفاده ار فرمان یک حالت سفت بودن فرمان را احساس کند.
به چه موضوعاتی احتیاج دارد؟
- زبان برنامه نویسی همان c می تواند باشد
- میکرو هر چه که دوست داری برای کارفرما این مهم نیست چه میکرویی به کار بردی بلکه سیستم باید درست کار کند.
- اما قسمت جالب داستان باید روش کنترل
سیستمهای چند ورودی/چند خروجی MIMO که با کنترل کننده ساده PID تفاوت دارد را بلد باشی
- روش کنترل موتور الکتریکی را آشنا باشی
- روش پیاده سازی درایور برای موتورها را باید بدانی
- روش ارتباطی بین کنترل کننده فرمان و ECU ................
خلاصه کنم مطلب را :
زبان برنامه نویسی را که بلد هستی باید به سمت کاربردی خاص متمرکز کنی و موارد دیگری هم به اطلاعات خودت اضافه کنی تا بتوانی یک پروژه کاربردی واقعی را انجام دهی
2-
میکروکنترلر "بهترین" شاید زیاد عبارت درستی نباشد چون انتخاب میکرو مناسب بیشتر به نوع کار بستگی دارد اما کلا با میکروهای کوچک 8بیتی می توان خیلی مطالب پایه ای را یاد گرفت اما نهایتا در یک پروژه با توجه به قیمتهای مناسب و تکنولوژیهای جدید برای جاهایی که بخواهی الگوریتمی پیاده سازی کنی میکروهای 32 بیتی مناسب است.
نباید فراموش کرد که معمولا در یک پروژه بزرگ مجبوری چندین میکرو و پروسسوراستفاده کنی
به طور مثال :
فرض کن خلبان خودکار برای یک UAV کار کرده ای که چندین میکرو در آن باید استفاده شود برای صرفه جویی در مصرف باطریها نیاز داری یک سیستم مدیریت انرژی داشته باشی که بخشهایی که ضروری نیست در طول پرواز و نزدیک شدن به هدف خاموش باشد خوب در این موارد یک میکرو کوچک 8 بیتی که خودش مصرف انرژی کمی دارد می تواند وظیفه خاموش روشن کردن بقیه قسمتها را انجام دهد و در کنار بقیه میکروها که کار موقعیت یابی و ارتباط مخابراتی و .... را انجام می دهند می تواند
یک وظیفه ساده اما مهم را انجام دهد
از دیدگاه آموزشی هم اگر کسی بخواهد مثلا مفهوم اینتراپت را متوجه باشد یا مثلا نحوه عملکرد بوت لودر را ; با یک میکرو کوچک می توان این موارد را دقیق یاد گرفت اما اگر به سراغ میکرو arm که لینوکس بر روی آن پورت شده و مثلا بوت لودر آن U-Boot است دیگر چیز زیادی نمیتوان از آنچه "در پشت صحنه" اتفاق می افتد متوجه شد بنابراین همیشه شروع از مطالب ساده تر توصیه می شود.
برای کارهایی در آینده هم پیشنهاد می کنم یک برد ARM® Cortex™-A8 مثلا
http://beagleboard.org/ یا هر مدل مشابه تهیه کن و اگر هم میخواهی زیاد هزینه نکنی یک
Dockstar را پیشنهاد می کنم که یک میکرو دارد با هسته arm و میتوان لینوکس بر روی آن نصب کرد (دقیق نمیدانم چه خانواده ای اما ظاهرا باید Marvell Feroceon باشد ) و با کمی حوصل میتوان یک برد arm داشت با حدود 20 یورو که بهترین انتخاب برای کاربرد آموزشی است و یا دستگاه های مشابه که در بازار هست و درون آن یک میکرو arm به کار رفته با کمی تغییر می توان هم کمی تجربه عملی کسب کرد و هم اینکه یک برد آموزشی خوب داشت.