ARM, STM32, توصیه شده, مقاله

مقایسه میکروکنترلر STM32 و LPC17xx

مقایسه میکروکنترلر STM و LPC

مقایسه میکروکنترلر ها همیشه یک جنگ خونین بوده  و هست ؛ متاسفانه افراد تعصبات زیادی روی ابزار هایی که استفاده می کنند دارند و در اغلب موارد معتقدند که ابزار و لوازم مورد استفاده خودشون بهترین ابزار موجود در جهان که نه، بلکه در کهکشان است؛ بنا بر همین استدلال، حاظر نیستند حتی اپسیلونی از مواضع خودشون کوتاه بیان و یک بحث منطقی رو شکل بدهند ؛ نمونه زیاده مثلا “لینوکس بهتر است یا ویندوز” یا “کامپایلر Keil بهتر است یا IAR ” و…

معمولا چنین بحث هایی بی نتیجه و بی سرانجام میمونه و تهش هم افراد از هم رنجیده خاطر می‌شوند، ما در این مقاله قصد نداریم که به این دعوا دامن بزنیم یا بهش بپردازیم ؛ همیشه معتقد بودم ابزاری که کارم رو ساده تر کنه ؛ پس بهترینه (البته به شرطی که ندزدیده باشم ؛ یا خریده باشم یا رایگان بوده باشه) پس در این مقاله همین رویکرد رو خواهیم داشت و از برخورد احساسی در مورد این مقوله دوری خواهیم کرد. با سیسوگ همراه باشید.

ما در این مقاله قصد نداریم پرفال به پرفال میکروکنترلرهای مورد بحث را بررسی کنیم ؛ بلکه قصد داریم نکات کلیدی را مطرح کنیم که در تصمیم گیری حائر اهمیت است.

میکروکنترلر و کمی از تاریخچه آن در ایران

راه اندازی میکروکنترلر AT91Sam7s

سالها پیش ؛ شاید بشه گفت سال های بسیار دور ؛ سال هایی که هنوز میکروکنترلر های هشت بیتی مثل AVR پادشاهی داشتند ؛ زمانی که تازه میکروکنترلر های ARM وارد عرصه رقابت شده بودند ؛ اون موقع مثل الان شروع ساده نبود ؛ منابع خیلی محدود بود و آموزش ها همه به زبان انگلیسی و محدود ؛ اول سال ها برای راه اندازی یه میکروکنترلر ARM باید چند تا ولتاژ درست میکردی ؛ باید شبکه RC برای بخش PLL درست می‌کردی ؛ پروگرامر و دیباگر در دسترس نبود و همه از طریق بوت لودر های تعبیه شده روی آیسی اقدام به برنامه ریزی اون می کردند ؛ فکر کنید توی چنین شرایطی اول سر و کله LPC1768 (البته اگر از سری LPC2368 بگذریم) پیدا شد ؛

اگر در اون دوره زندگی کرده باشید حتما به یاد دارید ؛ اغلب از میکروکنترلر های Atmel استفاده می کردند با شماره At91Sam7 که تمام این دنگ و فنگ هایی که توضیح دادم (توی عکس فوق می‌تونید تنها برد راه اندازش رو ببینید ) رو داشت. حالا فکر کنید بهتون میگن میکروکنترلری اومده که برای راه اندازی فقط ولتاژ 3.3 لازم داره ؛ هیچ کدوم از این خازن مقاومت ها رو هم نمیخواد ؛ تازه بوت لودرشم از طریق پورت سریال هست ؛ واقعا باور نکردنی بود.

اینطور شد که شاید حدود 1 سال با میکروکنترلر LPC1768 کار کردیم و بعد میکروکنترلرهای STM32 وارد بازار شدند و کم کم جای خودشون رو باز کردند. اون اوایل علاقه زیادی بهشون نداشتم (نه به خاطر LPC1768 بلکه بخاطر دلایل منطقی که در ادامه بیان میکنم) ولی کم کم گذشت و گذشت جوری که الان شاید حدود 5 سالی میشه که سراغ LPC1768 نرفتم البته به تازگی با LPC1788 دارم کار می‌کنم.

همین شد جرقه نوشتن این پست که بپردازیم به این که کدام میکروکنترلر ها چه قابلیت هایی دارند و استفاده از کدوم میکروکنترلر منطقی تر است و کجا نمیشه از کدوم میکروکنترلر استفاده کرد.

انتخاب منصفانه رقبا برای مقایسه

میکروکنترلر با هسته CortexM

در مقایسه انصاف رو باید رعایت کرد ؛ برای همین انتخاب کاندید مناسب یکی از جنبه های انصاف است ، ملاک هایی که مد نظر قرار میدهیم برای انتخاب ؛ اول رایج بودن شماره مذکور هست و دوم هم داشتن هسته پردازشی یکسان است.

برای هسته پردازشی سراغ هسته های Cortex خواهیم رفت ؛ مخصوصا هسته Cortex-M3 ؛ چرا که این هسته در بیشتر میکروکنترلر ها مورد استفاده قرار می گیرد ؛ البته هسته سری M خاص میکروکنترلر طراحی شده برای این سراغ هسته Cortex-M3 میرویم چون رایج تر هست.

در خانواده NXP میکروکنترلر رایج این هسته LPC1768 است و در خانواده ST هم سراغ سری STM32F10X میرویم چرا که رایج ترین شماره ممکن این خانواده هست.

بررسی ساختار میکروکنترلر ها

ساختار داخلی LPC1768

وقتی از میکروکنترلر LPC17xx استفاده می‌کنید ؛ دقیقا این حس رو داره که دارید از یک میکروکنترلر 32 بیتی استفاده می‌کنید ؛ چرا که تمام رجیستر ها 32 بیتی هستند ، ولی این حس رو در کار کردن با ST ندارید! دقیقا به این دلیل که در

میکروکنترلر های شرکت ST اغلب رجیستر های به صورت 16 بیتی هستند

انگار که هسته 32 بیتی رو روی بدنه یه میکروکنترلر 16 بیتی سوار کرده باشند ! البته نمیشه گفت این بده ولی وقتی بخواید یه پورت 32 بیتی داشته باشید که اطلاعات رو به صورت مستفیم بریزید روش بدون دخالت CPU شما رو دچار مشکل خواهد کرد.

همپوشانی ناخوشایند

میکروکنترلر STM32

همه اطلاع داریم که میکروکنترلر های ST از قیمت های خیلی مناسبی نسبت به NXP برخوردار هستند ؛ و فکر میکنم یکی از دلایل اصلی فراگیر شدن این میکروکنترلر ها همین مساله می باشد ؛ اما چطور این قیمت مناسب ممکن می شود ؟

اگر بخواهیم در سطح سلیکون به این مساله بپردازیم ؛ کاهش حجم سلیکون میتونه دلیل عمده این مساله باشه ؛ به عنوان نمونه شما در خانواده F1 قادر نیستید که هم زمان هم از رابط USB و هم از رابط Can استفاده کنید ؛ چون این دو از یک RAM یکسان استفاده می‌کنند این در حالی است که چنین محدودیتی در میکروکنترلر های NXP وجود ندارد.

از دیگر موارد آزار دهنده این همپوشانی ها بحث Remap است ، منظور از Remap  تغییر پایه های مورد استفاده یک پرفال است. در میکروکنترلر LPC17xx این بحث به صورت بیت به بیت پیاده سازی شده است در حالی که در میکروکنترلرهای STM32 این بحث به صورت پرفالی دیده شده است که چندان جالب نیست !

بگذارید برای روشن تر شدن مساله با مثالی این موضوع را بررسی کنیم ؛ در حالت عادی Uart1 در میکروکنترلر STM32 بر روی پایه های PA9 و PA10 است ؛ اگر پایه PA9 را به عنوان ورودی تایمر استفاده کرده باشید ؛ و قصد داشته باشید از Uart1 استفاده کنید حتما باید از پایه های PB6 و PB7 استفاده کنید و امکان استفاده از PA10 را نخواهید داشت. یعنی مجبور به جابجایی هر دو پایه هستید در حالی که میکروکنترلر LPC17xx این امکان را به شما می دهد.

گاهی در طراحی PCB امکان مپ کردن به صورت بیتی موجب ساده شدن طرح خواهد شد.

ضرایب دردسر ساز

مقایسه واحد PLL

PLL از اجزاء جدانشدنی مدارات میکروکنترلر جدید است ؛ در واقع کار PLL افزایش فرکانس ورودی است ، وجود PLL باعث می‌شود که میکروکنترلر با یک کریستال 12 مگاهرتزی قادر باشد با 100 مگاهرتز کار کند.

در میکروکنترلر های LPC17xx بخش PLL به نحوی طراحی شده است که تقریبا شما را قادر می سازد با اکثر فرکانس های ورودی فرکانس مورد نیاز خودتان را ایجاد کنید ؛ چرا که یک عدد 14 بیتی به عنوان ضرب کننده دریافت می کنید و یک عدد 8 بیتی به عنوان تفسیم کننده !

اما در میکروکنترلر های STM32 مقداری قضیه متفاوت است و شما تنها قادر به انتخاب بین ضرایب هستند و نمی توانید هر عدد دلخواهی را ضرب و تقسیم کنید. همین مساله برای کلاک ورودی تایمر ها و باس های داخلی نیز صادق است.

پارالل کردن سخت افزاری

فرض کنید در پروژه ای لازم دارید که یک تایمر 32 بیتی داشته باشید ؛ با میکروکنترلر LPC17xx نیاز نیست نگران چیزی باشید چرا که تایمر ها به صورت پیش فرض 32 بیتی هستند ؛ اما وقتی که از میکروکنترلر های STM32 استفاده می کنید ؛ واقعا جای نگرانی وجود دارد ؛ چرا که تمام تایمر های 16 بیتی هستند همین دلیل باعث ایجاد چالش های زیادی در طراحی و پیاده سازی خواهد شد.

خوشبختانه STM32 قابلیتی دارد که می توانید چند سخت افزار را به هم متصل کنید و از حداکثر راندمان آن استفاده کنید.

این قابلیتی است که اجازه می دهد قادر باشید دو یا حتی سه تایمر 16 بیتی را با هم لینک کنید و بتوانید یک تایمر 32 بیتی یا 48 بیتی داشته باشید. اما قابلیت لینک کردن به همین جا محدود نمی شود ؛ تا حالا فکر کرده اید چرا میکروکنترلر های STM32 در برخی موارد 2 یا 3 واحد ADC مجزا دارند ؟ ؛ دقیقا شما قادر هستید این دو یا سه واحد مجزا را با هم به نحوی ترکیب کنید تا سمپل ریت را دو یا سه برابر افزایش دهید. این قابلیتی است که در میکروکنترلر های LPC17xx وجود ندارد.

کلیدی ترین موضوع

جامعه استفاده کننده

همیشه مقایسه میان میکروکنترلر ها با سنجش میزان فرکانس کاری CPU ؛ میزان حافظه RAM و Flash و… انجام میشه ؛ که مقایسه صحیحی نیست ؛ مهمترین و اساسی ترین مساله جامعه استفاده کننده و پشتیبانی کننده است ؛ بذارید با مثالی موضوع رو روشن کنم ؛ فرض کنید میکروکنترلری به اسم XVR وجود داره که یک دلار قیمت داره ؛ با 1 گیگاهرتز فرکانس CPU و 64 مگابایت رم و 1 گیگابیت حافظه Flash ؛ از اون طرف هم میکروکنترلر AVR همین قیمت رو داره ؛ شما کدوم میکروکنترلر رو انتخاب خواهید کرد ؟

تا اینجا فکر نمیکنم شک داشته باشید بین XVR و AVR ! ولی شما مساله اصلی رو فراموش کردید، میکروکنترلر XVR تنها یک دیتاشیت داره که قابلیت ها و پایه های میکروکنترلر داخلش توضیح داده نه انجمن و نه سایتی برای پشتیبانی نداره ؛ ولی در مقابل AVR انجمن فعال و کاربرهای فعالی داره که در صورت به وجود آمدن مشکل یا خطا میتونید مساله رو مطرح کنید و در کوتاه ترین زمان ممکن به جواب دلخواه برسید !

حالا کدام را انتخاب می‌کنید ؟ من که باشم قطعا به سراغ AVR خواهم رفت ؛ در واقع مساله مهم تر از قابلیت های فنی ؛ گستردگی جامعه استفاده کننده است همین باعث میشه که شما بتونید به سادگی پروژه خودتون رو پیش ببرید و در صورت بروز مشکل ؛ هرچه سریعتر مشکلتون رو برطرف کند.

اگر بخوام مقایسه رو بین میکروکنترلر های NXP و ST انجام بدم ؛ به جرات میتونم بگم که ST جامعه بزرگتری از استفاده کننده ها رو داره و فروم فعالی داره که به سادگی مشکلاتتون رو برطرف کنید ؛ در مقابل شرکت NXP در این زمینه چندان موفق عمل نکرده و جامعه استفاده کنندگان چندان بزرگی هم نداره و همین مساله قطعا در آینده شما رو با مشکل مواجه خواهد کرد.

از طرف دیگر شرکت NXP ایران رو تحریم کرده و سایتش برای دوستان مقیم ایران در دسترس نیست که شرایط استفاده از مستنداتش رو دو چندان سخت تر خواهد کرد!

 

نوشته های مشابه

16 دیدگاه در “مقایسه میکروکنترلر STM32 و LPC17xx

  1. Amir گفت:

    سلام
    خسته نباشید
    پست خوب و جالبی بود …
    اگه امکان داره یه پست بزارین با همین عنوان فقط بین AVR باشه و PIC
    امکانات – هزینه – دسترسی – طراحی …
    من پروژه های صنعتی دیدم که با PIC انجام شده و یا برعکس با AVR
    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      سلام
      متشکرم ؛ بحث پشنهادی شما جنجالی تر خواهد بود ؛ ولی انشالله سعی خواهیم کرد چنین مقاله ای را نیز منتشر کنیم.

  2. علی گفت:

    درود بر شما مهندس
    بسیار عالی بود قبلا خواندن مطالب جذاب سایت برایم بدلیل کم رنگ بودن نوشته ها سخت بود الان خیلی عالی شده ممنون از شما

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود دوست عزیز؛ خواهش میکنم ؛ واقعا خوشحالیم که مخاطب هایی داریم که ایراداتمون رو بهمون گوشزد میکنند ؛ همین مساله باعث میشه که بتونیم خودمون رو اصلاح کنیم.

  3. مهدی گفت:

    سلام .
    در مورد ریمپ کردن میکرو های St باید خدمتتون عرض کنم که این امکان وجود داره که شما هر پایه ای که نیاز دارید رو جا به جا کنید و نیاز به جا به جایی همه ی پایه ها نیست و گفته شما در این مورد درست نیست .

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      تا اونجایی که میدونم تقریبا مطمئنم این قضیه رو میکروی stm32f103 پشتیبانی نمیکنه ! قبلا باهاش مواجه شده بودم ؛ اگر شما فکر میکنید این قضیه موجود هست ؛ لطفا مستندی ارائه کنید که تا هم ما خوشحال بشیم و هم این که پست رو اصلاح کنیم.
      متشکرم

  4. مجید گفت:

    سلام امروز با وب سایت عالی شما آشنا شدم . کاری بینهایت جالب.
    من مدت هاست که با STM32 کارهایم را انجام می دهم . امروز پشت سرهم همه 15 قسمت آموزش cube را خواندم نکاتی بود که نمی دانستم و یاد گرفتم . دستان درد نکند مشتاقانه منتظر قسمت های بعدی هستم .
    موفق و پایدار باشید.

    1. زئوس Zeus زئوس Zeus گفت:

      سلام خواهش میکنم دوست من ؛ خوشحالم که مطالب سیسوگ مورد توجه شما قرار گرفته
      بله خواهش میکنم ، انشالله سری جدید به زودی روی سایت قرار خواهد گرفت

  5. سعید گفت:

    سلام خیلی خوب بود حیف که زود تموم شد.
    من با avr برای کنترل موتور استپر و 3فاز و موقعیت کار می کنم اطلاعی در مورد stm32 ندارم به نظرتون باید arm رو هم یاد بگیرم. اگر آره باتوجه به آشنایی با میکرو 8 بیتی اسمبلی و سی با روزی دو ساعت چقدر زمان میبره با 32 بیتی بتونم کار کنم و کدوم گروه m0 یا m3 بهتره برای من بهتره ؟
    https://m.dw.com/fa-ir/culture/a-46383818

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز ؛
      اوپس تازه من فکر میکردم شاید خیلی طولانی شده و حوصله سر بر ؛ ممنون برای نظرتون
      ببینید هر کدوم از این هسته ها جای خاص خودشون کاربرد دارند و واقعا نمیشه گفت کدوم بهتره ؛ چون اینام به هر حال با توجه به نیازی به وجود اومدن ؛ ولی فکر میکنم شاید با توجه به نوع کار شما سری m3 بهتر باشه
      البته شاید در مقاله ای به مقایسه این دو بپردازیم
      متشکرم برای لینک – جالب بود 🙂

  6. Afshin Mafakheri Afshin گفت:

    عالی بود ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز 🙂

  7. navid گفت:

    جالب بود.ممنون
    فقط ایکاش در حین تعریف داستان گذشته سال مورد نظر رو هم ذکر میکردین تا بیشتر متوجه ی اوضاع کلی بشیم

    1. زئوس Zeus زئوس Zeus گفت:

      سلام ؛ خواهش میکنم دوست عزیز
      فکر میکنم حوالی سال های 83 بود

  8. Michel گفت:

    سلام ممنون بابت همه زحمت هاتون
    چنتا نکته میخواستم عرض کنم
    اولا لطفا سرعت آموزش های stm32 رو افزایش بدید
    دوما لطفا لینک فروم شرکت st و nxp رو هم بذارید ممنون??

    1. زئوس Zeus زئوس Zeus گفت:

      سلام خواهش میکنم دوست عزیز
      در حال آماده سازی آموزش های جدید هستیم که به زودی منتشر خواهند شد .
      فروم stm32 که میتونید به این لینک مراجعه کنید
      و برای NXP که به این لینک مراجعه کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *