MCU مخفف واحد میکروکنترلر است. مخفف میکروکنترلر در زبان چینی، که معمولاً به عنوان میکروکامپیوتر تک تراشهای شناخته میشود، برای کاهش مناسب فرکانس و مشخصات CPU و ادغام رابطهای جانبی مانند حافظه، شمارنده، USB، تبدیل A/D، UART، PLC، DMA و حتی مدارهای درایور LCD روی یک تراشه واحد برای تشکیل یک کامپیوتر در سطح تراشه است. این کامپیوتر میتواند ترکیبات مختلفی از کنترل را برای کاربردهای مختلف مانند تلفنهای همراه، لوازم جانبی کامپیوتر، کنترل از راه دور، الکترونیک خودرو، موتورهای پلهای صنعتی و کنترل بازوی ربات انجام دهد. MCU را میتوانید در شکل مشاهده کنید.
یک
تاریخچه مختصری از توسعه میکروکنترلرها
تاریخچه میکروکنترلرها طولانی نیست، اما بسیار سریع توسعه یافته است. تولید و توسعه آن عموماً با تولید و توسعه ریزپردازندهها (CPU) همزمان بوده است. از آنجایی که شرکت اینتل ایالات متحده برای اولین بار در سال ۱۹۷۱ یک ریزپردازنده ۴ بیتی را عرضه کرد، توسعه آن تاکنون را میتوان تقریباً به پنج مرحله تقسیم کرد. در ادامه مقدمهای بر توسعه میکروکنترلرها از شرکت اینتل آمده است.
1971 ~ 1976
مرحله اولیه توسعه میکروکنترلرها. در نوامبر ۱۹۷۱، اینتل ابتدا Intel 4004، یک ریزپردازنده ۴ بیتی با ادغام ۲۰۰۰ ترانزیستور/تراشه، مجهز به RAM، ROM و شیفت رجیستر را طراحی کرد و اولین ریزپردازنده MCS-4 را تشکیل داد. سپس ریزپردازنده ۸ بیتی Intel 8008 و سایر ریزپردازندههای ۸ بیتی توسط شرکتهای دیگر عرضه شدند.
1976 ~ 1980
مرحله میکروکنترلر با کارایی پایین. این میکروکنترلر که با سری MCS-48 که توسط اینتل در سال ۱۹۷۶ عرضه شد، ارائه میشود، از یک ساختار یکپارچه استفاده میکند که یک پردازنده ۸ بیتی، رابط ورودی/خروجی موازی ۸ بیتی، تایمر/شمارنده ۸ بیتی، RAM و ROM را روی یک تراشه نیمههادی ادغام میکند. اگرچه محدوده آدرسدهی آن محدود است (بیش از ۴ کیلوبایت نیست)، ورودی/خروجی سریال ندارد، ظرفیت RAM و ROM کم است و سیستم وقفه نسبتاً ساده است، اما عملکردهای آن میتواند نیازهای کنترل صنعتی عمومی و ابزار و کنتورهای هوشمند را برآورده کند.
1980 ~ 1983
مرحله میکروکنترلر با کارایی بالا. میکروکنترلرهای 8 بیتی با کارایی بالا که در این مرحله عرضه میشوند، عموماً دارای پورتهای سریال، سیستمهای پردازش وقفه چند سطحی و تایمر/شمارندههای 16 بیتی متعدد هستند. ظرفیت RAM و ROM روی تراشه افزایش یافته و محدوده آدرسدهی میتواند به 64 کیلوبایت برسد. برخی از تراشهها همچنین دارای رابط تبدیل A/D هستند.
۱۹۸۳ تا اواخر دهه ۱۹۸۰
مرحله میکروکنترلر ۱۶ بیتی. در سال ۱۹۸۳، اینتل سری میکروکنترلر ۱۶ بیتی MCS-96 با عملکرد بالا را عرضه کرد. به دلیل اتخاذ آخرین فناوری تولید، سطح ادغام تراشه به ۱۲۰۰۰۰ ترانزیستور در هر تراشه میرسد.
1990s
میکروکنترلرها در تمام جنبههای یکپارچهسازی، عملکرد، سرعت، قابلیت اطمینان و زمینههای کاربردی به سطح بالاتری در حال توسعه هستند.
دو
طبقه بندی و کاربرد میکروکامپیوتر تک تراشه ای
میکروکنترلرها (MCU) را میتوان بر اساس نوع حافظهشان به دو نوع تقسیم کرد: آنهایی که فاقد ROM روی تراشه هستند و آنهایی که دارای ROM روی تراشه هستند. برای تراشههای بدون ROM روی تراشه، قبل از استفاده باید یک EPROM خارجی متصل شود (معمولاً 8031)؛ تراشههای دارای ROM روی تراشه به نوع EPROM روی تراشه (تراشه معمولی 87C51 است)، نوع ROM ماسک روی تراشه MASK (تراشه معمولی 8051 است)، نوع فلش روی تراشه (تراشه معمولی 89C51 است) و انواع دیگر تقسیم میشوند.
بر اساس هدف، میتوان آن را به انواع عمومی و خاص تقسیم کرد؛ بر اساس عرض گذرگاه داده و طول بایتهای دادهای که میتوانند در یک زمان پردازش شوند، میتوان آن را به MCU های 8، 16 و 32 بیتی تقسیم کرد.
در حال حاضر، گستردهترین بازار کاربرد MCU در داخل کشور در حوزه لوازم الکترونیکی مصرفی و پس از آن در حوزه صنعتی و بازار الکترونیک خودرو قرار دارد. لوازم الکترونیکی مصرفی شامل لوازم خانگی، تلویزیون، کنسولهای بازی، سیستمهای صوتی و تصویری و غیره میشود. حوزههای صنعتی شامل خانههای هوشمند، اتوماسیون، کاربردهای پزشکی و تولید و توزیع انرژیهای نو میشود. حوزه خودرو شامل سیستمهای انتقال قدرت و کنترل ایمنی خودرو میشود.
سه
توابع اساسی میکروکنترلر
برای اکثر MCUها، عملکردهای زیر رایجترین و اساسیترین هستند. برای MCUهای مختلف، نحوه توصیف آنها ممکن است متفاوت باشد، اما اساساً یکسان هستند:
۱. تایمر (تایمر): اگرچه انواع مختلفی از تایمر وجود دارد، اما میتوان آنها را به دو دسته خلاصه کرد: یک نوع، تایمر با فواصل زمانی ثابت است، یعنی زمان زمانبندی توسط سیستم تنظیم میشود و توسط برنامه کاربر قابل کنترل نیست. سیستم فقط چندین فاصله زمانی ثابت را برای انتخاب برنامه کاربر فراهم میکند، مانند ۳۲ هرتز، ۱۶ هرتز، ۸ هرتز و غیره. این نوع تایمر در MCU های ۴ بیتی رایجتر است، بنابراین میتوان از آن برای پیادهسازی ساعت، زمانبندی و سایر عملکردهای مرتبط استفاده کرد.
نوع دیگر تایمر قابل برنامهریزی است. همانطور که از نامش پیداست، زمانبندی این نوع تایمر را میتوان توسط برنامه کاربر کنترل کرد. روشهای کنترل شامل موارد زیر است: انتخاب منبع کلاک، انتخاب تقسیم فرکانس (Prescale) و تنظیم عدد از پیش تعیینشده. برخی از MCUها هر سه مورد را همزمان دارند، در حالی که برخی دیگر ممکن است یک یا دو مورد از آنها را داشته باشند. کاربرد این نوع تایمر بسیار انعطافپذیر است و کاربرد واقعی آن نیز دائماً در حال تغییر است. یکی از رایجترین کاربردها، استفاده از آن برای پیادهسازی خروجی PWM است.
از آنجایی که منبع کلاک میتواند آزادانه انتخاب شود، این نوع تایمر معمولاً با شمارنده رویداد ترکیب میشود.
۲. پورتهای ورودی/خروجی: هر میکروکنترلر تعداد مشخصی پورت ورودی/خروجی دارد. بدون پورتهای ورودی/خروجی، میکروکنترلر کانال ارتباطی با دنیای خارج را از دست میدهد. با توجه به قابلیت پیکربندی پورت ورودی/خروجی، میتوان آن را به انواع زیر تقسیم کرد:
پورت ورودی خالص یا خروجی خالص: این نوع پورت IO توسط طراحی سختافزار MCU تعیین میشود. فقط میتواند ورودی یا خروجی باشد و نمیتوان از نرمافزار برای تنظیمات بلادرنگ استفاده کرد.
پورتهای IO خواندن و نوشتن مستقیم: برای مثال، پورت IO مربوط به MCS-51 به این نوع پورت IO تعلق دارد. وقتی دستورالعمل خواندن پورت IO اجرا میشود، این پورت ورودی است؛ وقتی دستورالعمل نوشتن پورت IO اجرا میشود، به طور خودکار یک پورت خروجی است.
برنامهنویسی برای تنظیم جهت ورودی و خروجی: ورودی یا خروجی این نوع پورت IO توسط برنامه و بر اساس نیازهای واقعی تنظیم میشود. این برنامه نسبتاً انعطافپذیر است و میتواند برخی از کاربردهای سطح باس، مانند باس I2C، انواع باسهای کنترل درایور LCD، LED و غیره را تحقق بخشد.
برای استفاده از پورتهای IO، نکتهی مهمی که باید در نظر داشت این است: برای پورت ورودی، باید یک سیگنال سطح واضح وجود داشته باشد تا اطمینان حاصل شود که نمیتواند شناور شود (این امر را میتوان با اضافه کردن یک مقاومت بالاکش یا پایینکش به دست آورد)؛ برای پورت خروجی، سطح وضعیت خروجی باید شرایط اتصال خارجی آن را در نظر بگیرد و باید اطمینان حاصل شود که هیچ گونه افت یا کاهش جریانی در حالت آماده به کار یا استاتیک وجود ندارد.
۳. وقفه خارجی: وقفه خارجی نیز یک عملکرد اساسی اکثر MCUها است. عموماً برای تحریک سیگنالها در زمان واقعی، نمونهبرداری دادهها و تشخیص وضعیت استفاده میشود. روشهای وقفه شامل تریگر لبه بالارونده، تریگر لبه پایینرونده و تریگر سطح است. وقفههای خارجی معمولاً از طریق پورتهای ورودی پیادهسازی میشوند. اگر پورت IO باشد، تابع وقفه آن فقط زمانی فعال میشود که روی ورودی تنظیم شده باشد. اگر پورت خروجی باشد، تابع وقفه خارجی به طور خودکار خاموش میشود (در سری ATiny شرکت ATMEL استثنائاتی وجود دارد که میتواند تابع وقفه را در زمانی که پورت خروجی است نیز فعال کند). کاربردهای وقفههای خارجی به شرح زیر است:
تشخیص سیگنالهای تریگر خارجی: یکی مبتنی بر الزامات بلادرنگ، مانند کنترل تریستورها، تشخیص سیگنالهای ناگهانی و غیره است، در حالی که دیگری نیاز به صرفهجویی در مصرف برق است.
اندازهگیری فرکانس سیگنال: برای اطمینان از اینکه سیگنال از دست نمیرود، وقفه خارجی انتخاب ایدهآلی است.
رمزگشایی دادهها: در زمینه کاربردهای کنترل از راه دور، به منظور کاهش هزینه طراحی، اغلب لازم است از نرمافزاری برای رمزگشایی دادههای کدگذاری شده مختلف، مانند رمزگشایی کدگذاری منچستر و PWM، استفاده شود.
تشخیص کلید و بیدار کردن سیستم: برای MCU هایی که وارد حالت خواب میشوند، معمولاً باید از طریق وقفههای خارجی بیدار شوند. ابتداییترین شکل آن فشردن کلید است که از طریق عملکرد کلید، تغییرات سطح ایجاد میکند.
۴. رابط ارتباطی: رابط ارتباطی ارائه شده توسط MCU عموماً شامل رابط SPI، UART، رابط I2C و غیره است که به شرح زیر توضیح داده میشوند:
رابط SPI: این نوع رابط، اساسیترین روش ارتباطی ارائه شده توسط اکثر MCUها است. انتقال داده آن توسط یک کلاک همزمان کنترل میشود. سیگنالها شامل موارد زیر هستند: SDI (ورودی داده سریال)، SDO (خروجی داده سریال)، SCLK (کلاک سریال) و سیگنال آماده؛ در برخی موارد، ممکن است سیگنال آمادهای وجود نداشته باشد؛ این نوع رابط میتواند در حالت اصلی یا فرعی کار کند. به عبارت عامیانه، بستگی به این دارد که چه کسی سیگنال کلاک را ارائه میدهد. طرفی که کلاک را ارائه میدهد، اصلی و طرف مقابل، فرعی است.
UART (Universal Asynchronous Receive Transmit): It is the most basic asynchronous transmission interface. It has only two signal lines, Rx and Tx. The basic data format is: Start Bit + Data Bit (7-bits/8-bits) + Parity Bit (Even, Odd or None) + Stop Bit (1~2Bit). The time occupied by one bit of data is called Baud Rate.
برای اکثر MCUها، طول بیتهای داده، حالت بررسی داده (بررسی فرد، بررسی زوج یا بدون بررسی)، طول بیت توقف و نرخ انتقال داده (Baud Rate) را میتوان به صورت انعطافپذیر از طریق برنامهنویسی برنامه تنظیم کرد. رایجترین روش استفاده از این نوع رابط، ارتباط با پورت سریال یک کامپیوتر شخصی است.
رابط I2C: I2C یک پروتکل انتقال داده است که توسط فیلیپس توسعه داده شده است. همچنین با استفاده از 2 سیگنال پیادهسازی میشود: SDAT (ورودی و خروجی داده سریال) و SCLK (کلاک سریال). بزرگترین مزیت آن این است که چندین دستگاه میتوانند به این گذرگاه متصل شوند و از طریق آدرسها شناسایی و دسترسی پیدا کنند. یکی از بزرگترین مزایای گذرگاه I2C این است که استفاده از نرمافزار برای پیادهسازی آن از طریق پورت IO بسیار راحت است. نرخ داده انتقال آن کاملاً توسط SCLK کنترل میشود که میتواند سریع یا کند باشد، برخلاف رابط UART که الزامات نرخ سختگیرانهای دارد.
۵. واچداگ (تایمر واچداگ): واچداگ همچنین یک پیکربندی اساسی در اکثر MCUها است (برخی از MCUهای ۴ بیتی ممکن است این عملکرد را نداشته باشند). واچداگ اکثر MCUها فقط میتواند به برنامه اجازه دهد که آن را مجدداً تنظیم کند اما نمیتواند آن را خاموش کند (برخی از آنها هنگام نصب برنامه تنظیم میشوند، مانند سری Microchip PIC MCU)، و برخی از MCUها از یک روش خاص برای تصمیمگیری در مورد روشن کردن آن استفاده میکنند، مانند سری KS57 سامسونگ. تا زمانی که برنامه به رجیستر واچداگ دسترسی داشته باشد، به طور خودکار روشن میشود و دیگر نمیتوان آن را خاموش کرد. به طور کلی، زمان تنظیم مجدد واچداگ را میتوان به صورت برنامهریزی شده تنظیم کرد. اساسیترین کاربرد واچداگ، فراهم کردن قابلیت خودبازیابی برای MCUهایی است که به دلیل خرابیهای غیرمنتظره از کار میافتند.
چهار
تولیدکننده میکروکنترلر جریان اصلی جهانی
(رتبهبندی بدون ترتیب خاصی، بر اساس تولیدکنندگان اصلی انجام شده است. اگر نکتهای از قلم افتاده است، لطفاً آن را در قسمت نظرات اضافه کنید)
اروپا و امریکا
۱. Freescale+NXP (Freescale+NXP): هلند، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: الکترونیک خودرو، LED و روشنایی عمومی، مراقبتهای بهداشتی، همگرایی چندرسانهای، لوازم خانگی و ابزارهای برقی، فناوری اتوماسیون ساختمان، کنترل موتور، منابع تغذیه و مبدلهای برق، انرژی و شبکههای هوشمند، اتوماسیون، زیرساختهای رایانهای و ارتباطی.
۲. میکروچیپ+اتمل (فناوری میکروچیپ + اتمل): ایالات متحده، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: الکترونیک خودرو، مصارف صنعتی، کنترل موتور، خودروها، اتوماسیون ساختمان، لوازم خانگی، سرگرمی خانگی، اتوماسیون صنعتی، روشنایی، اینترنت اشیا، انرژی هوشمند، تجهیزات الکترونیکی موبایل، لوازم جانبی کامپیوتر.
۳. Cypress+Spansion (نیمهرسانای Cypress + Spansion): ایالات متحده، عمدتاً MCU های ۸ بیتی، ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: الکترونیک خودرو، لوازم خانگی، پزشکی، لوازم الکترونیکی مصرفی، ارتباطات و مخابرات، صنعت، بیسیم.
۴. ADI (دستگاههای آنالوگ): ایالات متحده، عمدتاً MCU های ۸ بیتی، ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: هوافضا و دفاع، کاربردهای خودرو، فناوری ساختمان، ارتباطات، الکترونیک مصرفی، انرژی، مراقبتهای بهداشتی، ابزار دقیق و اندازهگیری، موتورها، اتوماسیون صنعتی، امنیت.
5. Infineon: Germany, mainly provides 16-bit and 32-bit MCUs. Applications: automotive electronics, consumer electronics, engineering, commercial and agricultural vehicles, data processing, electric transportation, industrial applications, medical equipment, mobile equipment, motor control and drive, power supply, for motorcycles, electric bicycles and small electric vehicles, smart grids, lighting, solar system solutions, wind energy system solutions.
۶. شرکت ST Microelectronics: ایتالیا/فرانسه، عمدتاً MCU 32 بیتی ارائه میدهد. کاربردها: LED و روشنایی عمومی، حمل و نقل، مراقبتهای بهداشتی، همگرایی چندرسانهای، لوازم خانگی و ابزارهای برقی، فناوری اتوماسیون ساختمان، کنترل موتور، منابع تغذیه و مبدلهای برق، شبکههای انرژی و هوشمند، اتوماسیون، زیرساختهای رایانهای و ارتباطی.
۷. کوالکام: ایالات متحده، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: تلفنهای هوشمند، تبلتها، مودمهای بیسیم.
۸. تگزاس اینسترومنتس: ایالات متحده، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: الکترونیک خودرو، لوازم الکترونیکی مصرفی، تجهیزات پزشکی، دستگاههای تلفن همراه، ارتباطات.
9. Maxim (Maxim): United States, mainly provides 32-bit MCU. Application scope: automotive electronics, consumer electronics, industrial applications, security.
ژاپن و کره جنوبی
۱. رنساس: ژاپن، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: کامپیوتر و لوازم جانبی، لوازم الکترونیکی مصرفی، لوازم الکترونیکی بهداشتی و پزشکی، لوازم الکترونیکی خودرو، صنعت و ارتباطات.
۲. توشیبا: ژاپن، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: الکترونیک خودرو، مصارف صنعتی، کنترل موتور، ارتباطات بیسیم، تلفنهای همراه، رایانهها و تجهیزات جانبی، تصویربرداری و صدا و تصویر، لوازم خانگی مصرفی، روشنایی LED، امنیت، مدیریت انرژی، تجهیزات سرگرمی.
3. Fujitsu: Japan, mainly provides 32-bit MCU. Application scope: automobile, medical, machinery, home appliances.
۴. سامسونگ الکترونیکس: کره جنوبی، عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: الکترونیک خودرو، مصارف صنعتی، کنترل موتور، خودروها، اتوماسیون ساختمان، لوازم خانگی، سرگرمی خانگی، اتوماسیون صنعتی، روشنایی، اینترنت اشیا، انرژی هوشمند، تجهیزات الکترونیکی موبایل، لوازم جانبی کامپیوتر.
منطقه چین
سرزمین اصلی چین
۱. سیگما میکروالکترونیک: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: مخابرات، تولید، انرژی، حمل و نقل، برق و غیره.
۲. ژوهای اوربیت: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: هوافضا: کشتیهای ایستگاه ماهوارهای، هواپیما؛ کنترل صنعتی پیشرفته: رایانههای تعبیهشده؛ کنترل کشتی، کنترل صنعتی، تجهیزات برق، نظارت بر محیط زیست.
3. GigaDevice Innovation: Mainly provides 32-bit MCU, application scope: industrial automation, human-machine interface, motor control, security monitoring, smart home, Internet of Things.
۴. شرکت میکروالکترونیک شنگسی: عمدتاً MCU های ۸ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: لوازم خانگی کوچک، لوازم الکترونیکی مصرفی، کنترل از راه دور، ماوس، باتریهای لیتیومی، محصولات دیجیتال، الکترونیک خودرو، ابزار پزشکی و اندازهگیری، اسباببازی، کنترل صنعتی، خانه هوشمند و امنیت و سایر زمینهها.
۵. چیپسی تکنولوژی: عمدتاً MCU های ۱۶ و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: ابزار دقیق، اینترنت اشیا، لوازم الکترونیکی مصرفی، لوازم خانگی و لوازم الکترونیکی خودرو.
۶. مدار مجتمع لیانهوا: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: لوازم الکترونیکی مصرفی، لوازم خانگی سفید، کنترل صنعتی، تجهیزات ارتباطی، الکترونیک خودرو و رایانه.
۷. ژوهای جیانرونگ: عمدتاً MCU هشت بیتی ارائه میدهد، دامنه کاربرد: لوازم خانگی، منبع تغذیه موبایل.
۸. فناوری اقدامات: عمدتاً MCU های ۸ بیتی تا ۳۲ بیتی را ارائه میدهد، محدوده کاربرد: رایانههای لوحی، خانه هوشمند، چندرسانهای، بلوتوث، صدای وایفای.
۹. آیسکو میکروالکترونیک: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: تراشههای مصرفی، تراشههای ارتباطی، تراشههای اطلاعاتی و لوازم خانگی.
۱۰. شرکت Huaxin Microelectronics: عمدتاً MCU های ۸ بیتی و ۴ بیتی ارائه میدهد. کاربردها: گیرندههای ماهواره، شارژرهای تلفن همراه، تقویمهای دائمی و کنترلهای از راه دور همه کاره.
۱۱. شانگهای بلینگ (هولدینگ نیمههادی هوآدا): عمدتاً MCU های ۸ بیتی، ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: لوازم جانبی کامپیوتر، تلویزیونهای HDTV، مدیریت انرژی، لوازم خانگی کوچک و لوازم دیجیتال.
۱۲. مدارهای مجتمع هایر: عمدتاً MCU های ۱۴ بیتی، ۱۵ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: لوازم الکترونیکی مصرفی، لوازم الکترونیکی خودرو، صنعت و ابزارهای هوشمند.
۱۳. پکن اینجنیک: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: دستگاههای پوشیدنی، اینترنت اشیا، لوازم خانگی هوشمند، خودروها، لوازم الکترونیکی مصرفی، تبلتها.
۱۴. شرکت China Microelectronics: عمدتاً MCU های ۸ بیتی ارائه میدهد. کاربردها: لوازم خانگی هوشمند، الکترونیک خودرو، نظارت امنیتی، روشنایی و محوطهسازی LED، اسباببازیهای هوشمند، خانههای هوشمند و لوازم الکترونیکی مصرفی.
۱۵. مدار مجتمع Shenzhou Loongson: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: نظارت بر توان، شبکه هوشمند، کنترل دیجیتال صنعتی، اینترنت اشیا، خانه هوشمند، نظارت بر دادهها.
16. Ziguang Microelectronics: Mainly provides 8-bit and 16-bit MCUs. Application scope: smart home appliances.
۱۷. Times Minxin: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: ناوبری خودرو، نظارت بر ترافیک، نظارت بر شناورهای ماهیگیری، شبکه مخابرات برق.
۱۸. شرکت China Resources Silicon Microelectronics (زیرمجموعه China Resources Microelectronics): عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: لوازم الکترونیکی مصرفی، کنترل صنعتی و لوازم خانگی.
۱۹. فناوری هستهای ملی: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: حوزه امنیت اطلاعات، حوزه اتوماسیون اداری، حوزه شبکه ارتباطی، حوزه امنیت اطلاعات.
۲۰. Zhongtian Micro: عمدتاً MCU های ۳۲ بیتی ارائه میدهد. کاربردها: گوشیهای هوشمند، تلویزیونهای دیجیتال، گیرندههای دیجیتال، لوازم الکترونیکی خودرو، GPS، کتابخوانهای الکترونیکی و چاپگرها.
۲۱. China Resources Microelectronics: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: مدارهای کنترل عمومی برای لوازم خانگی، لوازم الکترونیکی مصرفی و کنترل اتوماسیون صنعتی.
۲۲. Zhongying Electronics: عمدتاً MCU های ۴ بیتی، ۸ بیتی، ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: لوازم خانگی و موتورها.
۲۳. لینگدونگ میکروالکترونیک: عمدتاً تراشههای ۳۲ بیتی ارائه میدهد و کاربردهای آن شامل کنترل موتور، کنترل بلوتوث، نمایشگر با کیفیت بالا، شارژ بیسیم، پهپادها، میکروپرینترها، برچسبهای هوشمند، سیگارهای الکترونیکی، نمایشگرهای ماتریس نقطهای LED و غیره است.
۲۴. فناوری نووتون: عمدتاً MCU هشت بیتی ارائه میدهد، دامنه کاربرد: روشنایی، اینترنت اشیا و غیره.
۲۵. Neusoft Carrier: عمدتاً MCU های ۸ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: لوازم خانگی، خانههای هوشمند، ابزار دقیق، کنترلکنندههای پنل LCD، کنترل صنعتی و غیره.
۲۶. بتلی: عمدتاً MCU 32 بیتی ارائه میدهد، دامنه کاربرد: خانه هوشمند، کنترل صنعتی و محصولات مصرفی.
27. Shengquan Technology: Mainly provides 8-bit MCU, application scope: small and medium-sized display panels for automotive, education, industrial control, medical, etc.
28. Hangshun Chip: Mainly provides 8-bit and 32-bit MCUs. Application scope: automobiles, Internet of Things, etc.
۲۹. فودان میکروالکترونیک: عمدتاً MCU های ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: کنتورهای هوشمند، قفلهای درب هوشمند و غیره.
۳۰. شرکت Huada Semiconductor: عمدتاً MCU های ۸ بیتی، ۱۶ بیتی و ۳۲ بیتی ارائه میدهد. کاربردها: کنترل صنعتی، تولید هوشمند، زندگی هوشمند و اینترنت اشیا.
تایوان ، چین
۱. فناوری هونگجینگ: عمدتاً MCU 32 بیتی ارائه میدهد. دامنه کاربرد: ارتباطات، کنترل صنعتی، لوازم اطلاعاتی و صدا.
۲. شرکت نیمههادی Holtek: عمدتاً MCU های ۸ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: لوازم الکترونیکی مصرفی، روشنایی LED و غیره.
۳. فناوری لینگیانگ: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: لوازم صوتی و تصویری خانگی.
۴. Zhongying Electronics: عمدتاً MCU های ۴ بیتی و ۸ بیتی ارائه میدهد. دامنه کاربرد: شارژرها، منبع تغذیه موبایل، لوازم خانگی، کنترل صنعتی.
۵. شرکت فناوری سونگهان: عمدتاً MCU های ۸ بیتی و ۳۲ بیتی ارائه میدهد. دامنه کاربرد: کنترل از راه دور، شارژرهای هوشمند، سیستمهای بزرگ و کوچک، ترازوهای الکترونیکی، دماسنج گوش، مانیتور فشار خون، فشارسنج لاستیک، تجهیزات مختلف اندازهگیری و سلامت.
۶. وینباند الکترونیکس: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: الکترونیک خودرو، الکترونیک صنعتی، شبکه، کامپیوتر، لوازم الکترونیکی مصرفی، اینترنت اشیا.
۷. فناوری ده سرعته: عمدتاً MCU های ۴ بیتی، ۸ بیتی و ۵۱ بیتی را ارائه میدهد. دامنه کاربرد: کنترل از راه دور، لوازم خانگی کوچک.
۸. یوهوا میکروالکترونیک: عمدتاً MCU های ۴ بیتی و ۸ بیتی ارائه میدهد. دامنه کاربرد: ضبط محصولات مدار مجتمع، لوازم الکترونیکی مصرفی، محصولات خانگی.
۹. میکروکنترلر Yingguang Technology: عمدتاً MCU های ۴ بیتی و ۸ بیتی ارائه میدهد. دامنه کاربرد: ماشین آلات، اتوماسیون، لوازم خانگی، رباتها.
۱۰. Elan Electronics: عمدتاً MCU های ۸ بیتی و ۱۶ بیتی ارائه میدهد. دامنه کاربرد: لوازم الکترونیکی مصرفی، رایانهها، تلفنهای هوشمند.
پنج
نکاتی برای یادگیری میکروکنترلرها
اصول و کارکردهای اساسی هر MCU مشابه است. تنها تفاوت در پیکربندی و تعداد ماژولهای عملکرد جانبی، سیستمهای دستورالعمل و غیره است.
برای سیستمهای دستورالعمل، اگرچه از نظر شکل ظاهری بسیار متفاوت به نظر میرسند، اما در واقع فقط نمادهای متفاوتی هستند. معانی که نشان میدهند، عملکردهایی که باید انجام شوند و روشهای آدرسدهی اساساً مشابه هستند.
برای درک یک MCU، ابتدا باید فضای ROM، فضای RAM، تعداد پورتهای IO، تعداد تایمرها و روشهای زمانبندی، ماژولهای عملکرد جانبی ارائه شده (مدار جانبی)، منابع وقفه، ولتاژ عملیاتی و مصرف برق و غیره را بدانید.
پس از درک این ویژگیهای MCU، گام بعدی مقایسه کارکردهای MCU انتخابشده با کارکردهای مورد نیاز برای توسعه واقعی پروژه و مشخص کردن منابع مورد نیاز فعلی و منابعی است که در این پروژه استفاده نمیشوند.
برای توابعی که باید در پروژه استفاده شوند اما توسط MCU انتخاب شده ارائه نمیشوند، باید اطلاعات مربوط به MCU را به دقت درک کنید تا بتوانید آنها را با استفاده از روشهای غیرمستقیم پیادهسازی کنید. به عنوان مثال، اگر پروژهای که در حال توسعه آن هستید نیاز به ارتباط با پورت COM کامپیوتر دارد و MCU انتخاب شده پورت UART را ارائه نمیدهد، میتوانید استفاده از وقفههای خارجی را برای پیادهسازی آن در نظر بگیرید.
برای منابع مورد نیاز برای توسعه پروژه، باید Manua* را با دقت بفهمید و بخوانید، در حالی که میتوانید ماژولهای کاربردی غیرضروری را نادیده بگیرید یا مرور کنید. برای یادگیری MCU، کاربرد کلید و هدف اصلی است.
پس از روشن شدن کارکردهای مربوط به MCU، میتوانید برنامهنویسی را شروع کنید.
برای مبتدیان یا طراحانی که برای اولین بار از این MCU استفاده میکنند، ممکن است با توضیحات مبهم زیادی در مورد عملکردهای MCU مواجه شوند. برای چنین مشکلاتی، دو روش برای حل آنها وجود دارد. یکی نوشتن یک برنامه تأیید ویژه برای درک عملکردهای شرح داده شده در دادهها است؛ روش دیگر این است که موقتاً آن را نادیده بگیرید و برنامه MCU را مطابق با درک فعلی خود بنویسید و بگذارید در طول اشکالزدایی اصلاح و بهبود یابد. روش اول برای پروژههایی با زمان آزاد و مبتدیان مناسب است، در حالی که روش دوم برای افرادی با تجربه خاص در توسعه میکروکنترلر یا زمانی که برنامه پروژه فشرده است، مناسب است.
برای فهمیدن سیستم دستورات، زمان خاصی را صرف نکنید. سیستم دستورالعملها فقط نمادی از توصیف منطقی است. شما فقط میتوانید دستورالعملهای مربوطه را طبق منطق خودتان و الزامات منطقی برنامه در حین برنامهنویسی مشاهده کنید. با پیشرفت برنامهنویسی، شما در سیستم دستورالعملها بیشتر و بیشتر مهارت پیدا خواهید کرد و حتی میتوانید آن را به صورت ناخودآگاه به خاطر بسپارید.
شش
برنامهنویسی میکروکنترلر
تفاوت زیادی بین نوشتن برنامه MCU و نوشتن برنامه PC وجود دارد. اگرچه ابزارهای توسعه MCU مبتنی بر C روز به روز محبوبتر میشوند، اما برای طراحانی که کد برنامه کارآمدی دارند و دوست دارند از اسمبلی استفاده کنند، زبان اسمبلی هنوز مختصرترین و مؤثرترین زبان برنامهنویسی است.
برای برنامهنویسی MCU، میتوان گفت چارچوب اساسی تقریباً یکسان است. عموماً به سه بخش تقسیم میشود: بخش مقداردهی اولیه (این بزرگترین تفاوت بین برنامهنویسی MCU و PC است)، بدنه حلقه اصلی برنامه و کنترلکننده وقفه. توضیحات مربوط به آنها به شرح زیر است:
۱. مقداردهی اولیه: برای طراحی تمام برنامههای MCU، مقداردهی اولیه اساسیترین و مهمترین مرحله است که عموماً شامل موارد زیر میشود:
همه وقفهها را ماسک کنید و اشارهگر پشته را مقداردهی اولیه کنید: بخش مقداردهی اولیه معمولاً نمیخواهد هیچ وقفهای رخ دهد.
فضای رم سیستم را خالی کنید و حافظه را نمایش دهید: اگرچه گاهی اوقات ممکن است کاملاً ضروری نباشد، اما از منظر قابلیت اطمینان و ثبات، به ویژه برای جلوگیری از خطاهای غیرمنتظره، توصیه میشود عادات برنامهنویسی خوبی را در خود پرورش دهید.
مقداردهی اولیه پورت IO: با توجه به الزامات کاربردی پروژه، حالت ورودی و خروجی پورت IO مربوطه را تنظیم کنید. برای پورت ورودی، باید مقاومت pull-up یا pull-down آن را تنظیم کنید؛ برای پورت خروجی، باید سطح اولیه خروجی آن را تنظیم کنید تا از خطاهای غیرضروری جلوگیری شود.
تنظیمات وقفه: برای تمام منابع وقفهای که نیاز به استفاده در پروژه دارند، باید روشن شوند و شرایط راهاندازی برای وقفهها تنظیم شود. برای وقفههای اضافی که استفاده نمیشوند، باید خاموش شوند.
مقداردهی اولیه سایر ماژولهای عملکردی: برای تمام ماژولهای عملکردی جانبی MCU که نیاز به استفاده دارند، تنظیمات مربوطه باید مطابق با الزامات کاربرد پروژه انجام شود. به عنوان مثال، برای ارتباط UART، نرخ ارسال داده (Baud Rate)، طول داده، روش تأیید و طول بیت توقف (Stop Bit) باید تنظیم شوند. برای تایمر برنامهنویس، منبع کلاک، شماره تقسیم فرکانس و دادههای بارگذاری مجدد آن باید تنظیم شوند.
مقداردهی اولیه پارامترها: پس از تکمیل مقداردهی اولیه سختافزار و منابع MCU، مرحله بعدی مقداردهی اولیه برخی از متغیرها و دادههای مورد استفاده در برنامه است. مقداردهی اولیه این بخش باید مطابق با پروژه خاص و چیدمان کلی برنامه طراحی شود. برای برخی از برنامههایی که از EEPROM برای ذخیره دادههای از پیش ساخته شده پروژه استفاده میکنند، توصیه میشود دادههای مربوطه را در حین مقداردهی اولیه در RAM MCU کپی کنید تا سرعت دسترسی برنامه به دادهها بهبود یابد و مصرف برق سیستم کاهش یابد (در اصل، دسترسی به EEPROM خارجی باعث افزایش مصرف برق منبع تغذیه میشود).
۲. بدنه حلقه برنامه اصلی: اکثر MCU ها برای مدت طولانی به طور مداوم اجرا میشوند، بنابراین بدنههای برنامه اصلی آنها اساساً در یک حلقه طراحی شدهاند. برای برنامههایی با حالتهای کاری متعدد، ممکن است چندین بدنه حلقه وجود داشته باشد که از طریق پرچمهای وضعیت تبدیل میشوند. برای بدنه برنامه اصلی، ماژولهای زیر به طور کلی مرتب شدهاند:
برنامههای محاسباتی: برنامههای محاسباتی عموماً زمانبر هستند، بنابراین ما قاطعانه با پردازش آنها در هر وقفهای، به ویژه عملیات ضرب و تقسیم، مخالفیم.
پردازش برنامههایی با نیازهای بلادرنگ کم یا بدون نیاز به زمان واقعی؛
برنامه انتقال تصویر: عمدتاً برای کاربردهایی با درایورهای خارجی LED و LCD.
۳. کنترلکننده وقفه: برنامه وقفه عمدتاً برای مدیریت وظایف و رویدادهایی با نیازهای زمان واقعی بالا، مانند تشخیص سیگنالهای ناگهانی خارجی، تشخیص و پردازش دکمهها، شمارش زمان، اسکن صفحه نمایش LED و غیره استفاده میشود.
به طور کلی، برنامه وقفه باید کد را تا حد امکان مختصر و کوتاه نگه دارد. برای توابعی که نیازی به پردازش در زمان واقعی ندارند، میتوان پرچم تریگر را در وقفه تنظیم کرد و سپس برنامه اصلی تراکنشهای خاصی را انجام میدهد. این امر بسیار مهم است، به خصوص برای MCU های کم مصرف و کم سرعت، که باید پاسخ به موقع به همه وقفهها را تضمین کنند.
۴. برای چیدمان بدنههای کاری مختلف، MCUهای مختلف روشهای پردازش متفاوتی دارند:
برای مثال، برای کاربردهای MCU با سرعت پایین و توان پایین (Fosc=32768Hz)، با توجه به اینکه چنین پروژههایی دستگاههای دستی هستند و از نمایشگرهای LCD معمولی استفاده میکنند، پاسخ به فشردن کلیدها و پاسخ نمایشگر نیاز به عملکرد بالا در زمان واقعی دارد، بنابراین معمولاً از وقفههای زمانبندیشده برای پردازش فشردن کلیدها استفاده میشود. اقدامات و نمایش دادهها؛ برای MCUهای با سرعت بالا، مانند کاربردهای Fosc>1MHz، از آنجایی که MCU در این زمان زمان کافی برای اجرای بدنه حلقه اصلی برنامه را دارد، فقط میتواند پرچمهای ماشه مختلف را در وقفههای مربوطه تنظیم کند و همه وظایف را در بدنه اصلی برنامه برای اجرا قرار دهد.
۵. در برنامهنویسی MCU، نکتهای که نیاز به توجه ویژه دارد این است:
لازم است از دسترسی یا تنظیم همزمان یک متغیر یا داده در بدنههای وقفه و برنامه اصلی جلوگیری شود. یک روش پیشگیری مؤثر، ترتیب دادن پردازش چنین دادههایی در یک ماژول و تعیین انجام عملیات مرتبط روی دادهها با بررسی پرچم ماشه است؛ در سایر بدنههای برنامه (عمدتاً وقفهها)، فقط پرچمهای ماشه را در جایی که دادهها نیاز به پردازش دارند، تنظیم کنید. --این تضمین میکند که اجرای دادهها قابل پیشبینی و منحصر به فرد است.
هفت خلاصه مهندسی برنامه نویسی میکروکنترلر
۱. عادت خوب خلاصه نویسی را در خود پرورش دهید. خلاصه نویسی نه تنها خلاصه ای از آموخته های خودتان است، بلکه مرور و تعمیق فرآیند یادگیری را نیز شامل می شود. همچنین می تواند از بروز اشتباهات در بار دوم جلوگیری کند.
۲. قبل از نوشتن یک برنامه، ابتدا باید درک آشنایی از پروژه داشته باشید، از آن آگاه باشید و یک چارچوب کلی را ترسیم کنید. بسیار مهم است که به دقت نحوه چیدمان و منطقیترین چیدمان را بررسی کنید. لازم است ابتدا تجزیه و تحلیل کنید که کدام ماژول را باید انجام دهید، مراحل خاص این ماژول، نحوه نامگذاری هر تابع، ارتباط با سایر ماژولها و غیره چیست. ایده خوبی است که یک تکه کاغذ بردارید و فرآیندهای مهم را یادداشت کنید.
۳. برای برنامهنویسی ماژولار به زبان C، ابتدا باید هر ماژول را تقسیم کنید، ماژول برنامه را به ماژول دیگر تقسیم کنید، یک توالی تعیین کنید، دنباله را دنبال کنید و سپس پس از موفقیتآمیز بودن ماژول، ماژول بعدی را بنویسید. برای فایلهای هدر، فایل هدر ماژول را پس از نوشتن ماژول بنویسید.
۴. وقتی هشدارها ظاهر میشوند، آنها را نادیده نگیرید. این بدان معناست که باید چیزی غیرمنطقی در برنامه وجود داشته باشد. شما باید منبع را پیدا کنید و راه حلی پیدا کنید. هنگام جستجوی منابع، دقیق باشید. میتوانید در اینترنت برای کسب اطلاعات در این زمینه جستجو کنید یا از دیگران راهنمایی بخواهید. به عنوان مثال، تابع اصلی در یک پروژه دیگر در واقع به این پروژه اضافه شده است. در واقع نام توابع تکراری وجود دارد. همچنین دلایلی برای تجزیه و تحلیل پدیدههای تجربی و پیشرفت گام به گام وجود دارد. همچنین هنگام تعریف پورت، رابط اشتباهی انتخاب شده است. گاهی اوقات، اگر واقعاً نمیتوانید آن را حل کنید، خوب است که کمی استراحت کنید و در مورد آن فکر کنید. مهم نیست که چقدر ساده باشد، باید به آن توجه کنید، زیرا ممکن است اشتباهاتی وجود داشته باشد.
در توسعه کاربردهای میکروکنترلر، مشکلاتی مانند کارایی استفاده از کد، عملکرد ضد تداخل و قابلیت اطمینان میکروکنترلرها هنوز با مشکل مواجه هستند. اکنون چندین مهارت اساسی را که باید در توسعه میکروکنترلر به آنها تسلط داشت، خلاصه میکنیم.
هشت
Microcontroller development skills
۱. چگونه اشکالات (باگها) را در برنامهها کاهش دهیم
در مورد چگونگی کاهش اشکالات برنامه، ابتدا باید پارامترهای مدیریتی خارج از محدوده زیر را که باید در حین کار سیستم در نظر گرفته شوند، در نظر بگیرید.
- پارامترهای فیزیکی: این پارامترها عمدتاً پارامترهای ورودی سیستم هستند که شامل پارامترهای تحریک، پارامترهای عملیاتی در طول پردازش اکتساب و پارامترهای نتیجه در پایان پردازش میشوند.
- پارامترهای منابع: این پارامترها عمدتاً منابع مدارها، دستگاهها و واحدهای عملکردی در سیستم هستند، مانند ظرفیت حافظه، طول واحد ذخیرهسازی و عمق انباشت.
- پارامترهای کاربردی: این پارامترهای کاربردی اغلب به عنوان شرایط کاربردی برخی از میکروکنترلرها و واحدهای عملکردی ظاهر میشوند. پارامترهای فرآیند: به پارامترهایی اطلاق میشود که در طول عملکرد سیستم به طور منظم تغییر میکنند.
۲ چگونه کارایی کد برنامهنویسی زبان C را بهبود بخشیم
استفاده از زبان C برای برنامهنویسی میکروکنترلر، یک روند اجتنابناپذیر در توسعه و کاربرد میکروکنترلرها است. اگر میخواهید هنگام برنامهنویسی به زبان C به حداکثر بهرهوری برسید، بهتر است با کامپایلر C که استفاده میکنید آشنا باشید. ابتدا تعداد خطوط دستورات زبان اسمبلی مربوط به هر کامپایل زبان C را آزمایش کنید تا بتوانید به وضوح از میزان بهرهوری مطلع شوید. هنگام برنامهنویسی در آینده، از دستوری با بالاترین بهرهوری کامپایل استفاده کنید. هر کامپایلر C تفاوتهای خاصی خواهد داشت، بنابراین بهرهوری کامپایل نیز متفاوت خواهد بود. طول کد و زمان اجرای یک کامپایلر C عالی برای سیستمهای تعبیهشده، تنها ۵ تا ۲۰ درصد بیشتر از همان تابع نوشته شده به زبان اسمبلی است.
برای پروژههای پیچیده با زمان توسعه محدود، میتوان از زبان C استفاده کرد، اما پیشنیاز این است که شما با زبان C و کامپایلر C سیستم MCU بسیار آشنا باشید. به انواع دادهها و الگوریتمهای پشتیبانی شده توسط سیستم کامپایل C توجه ویژه داشته باشید. اگرچه زبان C رایجترین زبان سطح بالا است، اما تولیدکنندگان مختلف MCU سیستمهای کامپایل زبان C متفاوتی دارند، به خصوص در عملکرد برخی از ماژولهای تابع خاص. بنابراین، اگر این ویژگیها را درک نکنید، در هنگام اشکالزدایی مشکلات زیادی وجود خواهد داشت که منجر به راندمان اجرای پایینتر نسبت به زبان اسمبلی میشود.
۳ چگونه مشکل ضد تداخل میکروکنترلر را حل کنیم
موثرترین راه برای جلوگیری از تداخل، حذف منبع تداخل و مسدود کردن مسیر تداخل است، اما اغلب انجام این کار دشوار است، بنابراین فقط میتوانیم ببینیم که آیا توانایی ضد تداخل میکروکنترلر به اندازه کافی قوی است یا خیر. در حالی که توانایی ضد تداخل سیستمهای سختافزاری بهبود مییابد، ضد تداخل نرمافزاری به دلیل طراحی انعطافپذیر، صرفهجویی در منابع سختافزاری و قابلیت اطمینان خوب، توجه بیشتری را به خود جلب میکند.
رایجترین پدیده تداخل میکروکنترلر، ریست شدن است. در مورد فرار برنامه، میتوان از تلههای نرمافزاری و نگهبانان برای بازگرداندن برنامه به حالت ریست استفاده کرد. بنابراین، مهمترین چیز برای نرمافزار میکروکنترلر جهت مقاومت در برابر تداخل، مدیریت حالت ریست است.
به طور کلی، میکروکنترلرها دارای برخی رجیسترهای پرچم هستند که میتوانند برای تعیین علت ریست شدن استفاده شوند. علاوه بر این، میتوانید خودتان نیز برخی از پرچمها را در RAM قرار دهید. هر بار که برنامه ریست میشود، با بررسی این پرچمها میتوان علل ریست شدن مختلف را تعیین کرد. همچنین میتوانید بر اساس پرچمهای مختلف مستقیماً به برنامه مربوطه بروید. این امر به برنامه اجازه میدهد تا به طور مداوم اجرا شود و کاربر هنگام استفاده از آن متوجه ریست شدن برنامه نخواهد شد.
۴ نحوه آزمایش قابلیت اطمینان سیستم میکروکنترلر
وقتی طراحی یک سیستم میکروکنترلر تکمیل شد، موارد و روشهای تست مختلفی برای محصولات مختلف سیستم میکروکنترلر وجود خواهد داشت، اما برخی از آنها باید آزمایش شوند:
- تست کامل بودن عملکرد نرمافزار میکروکنترلر
- تست روشن و خاموش شدن دستگاه
- آزمون پیری
- آزمایشهایی مانند ESD و EFT
Sometimes, we can also simulate the damage that may occur during human use. For example, deliberately rub the contact port of the microcontroller system with the human body or clothing fabric to test the anti-static ability. Use a high-power electric drill to work close to the microcontroller system to test the ability to resist electromagnetic interference.
به طور خلاصه، میکروکامپیوتر تک تراشهای به جنبه مهمی از توسعه و کاربرد کامپیوتر تبدیل شده است. اهمیت مهم کاربرد میکروکامپیوتر تک تراشهای این است که اساساً ایدهها و روشهای طراحی سیستم کنترل سنتی را تغییر میدهد.
بیشتر عملکردهایی که در گذشته باید توسط مدارهای آنالوگ یا مدارهای دیجیتال پیادهسازی میشدند، اکنون میتوانند از طریق روشهای نرمافزاری با استفاده از میکروکنترلرها پیادهسازی شوند. این نوع فناوری کنترل که در آن نرمافزار جایگزین سختافزار میشود، فناوری میکروکنترل نیز نامیده میشود که انقلابی در فناوری کنترل سنتی است.
علاوه بر این، در طول فرآیند توسعه و کاربرد، باید بر مهارتها تسلط پیدا کنیم و کارایی را بهبود بخشیم تا بتوان از آن برای طیف وسیعتری از اهداف استفاده کرد.
نه نفر
خلاصه عملکرد تراشه عملیات روی تراشه عمدتاً عملیات روی رجیسترهای موجود در تراشه است. رجیسترهای موجود در تراشه آدرسهای منحصر به فرد خود را دارند که روی حافظه نگاشت شدهاند، که همان عملیات روی آدرس مربوطه است. هنگام مشاهده تراشه، ابتدا به نمودار زمانبندی نگاه کنید، سپس رجیسترهای مربوطه را درک کنید، نحوه عملکرد آنها را بفهمید، پورتهای مورد نیاز (که توسط برنامه قابل شناسایی هستند) را تعریف کنید، و رویههای عملیات نوشتن و خواندن را بنویسید.
چگونه دادهها را روی تراشه بنویسیم، چگونه دادهها را بخوانیم و از کدام پورت برای ورود یا خواندن استفاده کنیم (مهمترین چیز).
هنگام اتصال تراشهها از طریق یک گذرگاه، ابتدا باید پروتکل گذرگاه را درک کنید. تراشه متصل به گذرگاه I2C عمدتاً تراشه را از طریق این گذرگاه کنترل میکند.
۱. یک ۷۴hc۵۹۵ در ماتریس نقطهای برای انتخاب ستون و دو تای دیگر برای انتخاب رنگ استفاده میشوند. ماتریس نقطهای معادل مجموعهای از دیودها است.
Only when one end is given a high level and the other end is given a low level can the diode light up. It's just that when one end is selected differently, different colors will light up.
انتخاب حالت کاری تایمر: چهار بیت بالا، تایمر T1 را تنظیم میکنند و چهار بیت پایین، T0 را. سپس دو رقم آخر هر حالت، حالت کاری را تنظیم میکنند. هنگام تنظیم دو تایمر، مراقب باشید که از یا (|) استفاده کنید. هنگام استفاده از وقفهها، به پاک کردن آنهایی که باید پس از ورود به وقفه پاک شوند، توجه کنید.
۲. فرستنده/گیرنده پورت سریال: حالت ۲ (مقدار اولیه بارگذاری مجدد خودکار) معمولاً برای تنظیم نرخ انتقال داده استفاده میشود. از آنجا که دستگاههای مختلف قابلیتهای پردازش داده متفاوتی دارند، تنظیم نرخ انتقال داده عمدتاً برای مراقبت از دستگاههای کمسرعت و برقراری ارتباط با یکدیگر است. بیت پرچم وقفه باید توسط نرمافزار پاک شود. هنگام تنظیم وقفه پورت سریال، صرف نظر از اینکه کدام یک با ارسال یا دریافت ایجاد میشود، میتواند وارد تابع وقفه شود، بنابراین به تنظیم تابع وقفه توجه کنید. (خودحسگر معمولاً یک تابع را تنظیم میکند، به عنوان یک کامپیوتر میزبان یا یک کامپیوتر برده).
اگر از وقفه برای ارسال استفاده می کنید، باید نحوه ورود وقفه را برای اولین بار مشخص کنید، بنابراین ابتدا باید یک بار آن را ارسال کنید و سپس می توانید وقفه را وارد کنید. فقط یک بایت در هر زمان قابل ارسال است و بیت بعدی فقط پس از تنظیم TI قابل ارسال است.
۳. تبدیل Pcf8591ad چهار کانال ورودی دارد. هنگام خواندن pcf8591، کدام کانال انتخاب شود، ورودی ولتاژ توسط آن کانال خوانده میشود. دادههای تبدیل شده در تراشه ذخیره شده و سپس خوانده میشوند. هنگام خواندن، ابتدا آدرس تراشه، سپس زیر آدرس دستگاه (شماره کانال 0x40) و سپس دادههای خوانده شده را بنویسید.
۴. تبدیل Da به این صورت است که ابتدا آدرس دستگاه را در تراشه بنویسید، سپس زیر آدرس (0x40) را بنویسید و در نهایت کمیت دیجیتالی که باید تبدیل شود را بنویسید. اطلاعات تراشه آدرس دستگاه معرفی میشود.
۵. برای نمایشگر LCD، پس از نوشتن و نمایش دادهها، همیشه بدون بهروزرسانی مداوم نمایش داده میشود. اگر میخواهید آن را تغییر دهید، فقط میتوانید دوباره آن را وارد کنید.
۶. برای تراشه ساعت ds1302، هنگام خواندن اطلاعات، هنگام نوشتن اطلاعات، اولین داده در لبه پایین رونده ساعت هشتم خوانده میشود و سپس برای خروجی بعدی آماده میشود. به روش نوشتن برنامه و محل قرار گرفتن مقدار بازگشتی توجه کنید.
۷. ابتدا رجیستر Ds1302 را مشخص کنید و سپس دادهها را در آن بنویسید. رجیستر روی دادههای تراشه، آدرس را نشان میدهد. (من هنوز برنامه محافظت در برابر نوشتن را کاملاً درک نمیکنم. آیا همیشه نوشتن وجود ندارد؟ چرا محافظت در برابر نوشتن هنوز روشن است؟)
(طبق گفتهی قهرمان قبلی، میتوانید بعد از زمان مقداردهی اولیه، یک پرچم تنظیم کنید. اگر این پرچم وجود داشته باشد، نیازی به مقداردهی اولیهی زمان نیست. با این حال، اگر برق قطع شود، رم میکروکنترلر نمیتواند این پرچم را ذخیره کند، بنابراین میتوانید از رم DS1302 برای ذخیره پرچم و خواندن آن پس از روشن کردن استفاده کنید. من هم مبتدی هستم و قصد دارم اخیراً از DS1302 استفاده کنم. نمیدانم این درست است یا نه، و هنوز آن را پیادهسازی نکردهام. لطفاً بیشتر به اشتراک بگذارید.)
۸. بهتر است مقداردهی اولیه را یادداشت کنید تا در صورت فراموش کردن آن بعداً بتوانید آن را انجام دهید. گاهی اوقات هنگام خواندن یا نوشتن به این نکته توجه کنید که آیا کمترین بیت یا بالاترین بیت ابتدا اجرا میشود، که این موضوع را میتوان با توجه به نمودار زمانبندی قضاوت کرد.
۹. برای فرستنده/گیرنده مادون قرمز، هنگام دریافت، بر اساس زمان بین دو لبه پایین رونده، سطح بالا یا پایین بودن آن را تعیین میکند. هنگام نوشتن برنامه، ابتدا از یک تایمر برای تعیین زمان استفاده کنید، آن را ذخیره کنید و سپس آن را به دودویی تبدیل کنید (درباره نحوه نوشتن این برنامه بیشتر بخوانید، خیلی خوب است).
۱۰. موتور پلهای: عمدتاً برای سوئیچینگ استفاده میشود. گشتاور موتور پلهای با افزایش سرعت کاهش مییابد. عمدتاً برای تغذیه خودکار قطعات پردازش شده روی ماشینهای ابزار استفاده میشود. همچنین میتوان از آن در مکانهای کنترل با دقت بالاتر استفاده کرد.
موتور پلهای یک دستگاه موتور پلهای با المان کنترل حلقه باز است که سیگنالهای پالس الکتریکی را به جابجایی زاویهای یا جابجایی خطی تبدیل میکند. در شرایط بدون اضافه بار، سرعت و موقعیت توقف موتور فقط به فرکانس و تعداد پالسهای سیگنال پالس بستگی دارد و تحت تأثیر تغییرات بار قرار نمیگیرد. هنگامی که درایور پلهای سیگنال پالس دریافت میکند، موتور پلهای را برای چرخش در جهت تنظیم شده با زاویه ثابت، به نام "زاویه پله" هدایت میکند. چرخش آن گام به گام با زاویه ثابت انجام میشود. جابجایی زاویهای را میتوان با کنترل تعداد پالسها برای دستیابی به موقعیت دقیق کنترل کرد. در عین حال، سرعت و شتاب چرخش موتور را میتوان با کنترل فرکانس پالس برای دستیابی به تنظیم سرعت کنترل کرد.
11. سروو موتور: (سروو موتور) به موتوری اطلاق میشود که عملکرد اجزای مکانیکی را در سیستم سروو کنترل میکند. این یک دستگاه انتقال غیرمستقیم است که به موتور کمک میکند. سروو موتورها میتوانند سرعت و دقت موقعیت را بسیار دقیق کنترل کنند و میتوانند سیگنالهای ولتاژ را به گشتاور و سرعت چرخش برای هدایت اشیاء کنترل تبدیل کنند. سرعت روتور سروو موتور توسط سیگنال ورودی کنترل میشود و میتواند به سرعت پاسخ دهد. در سیستم کنترل اتوماتیک، از آن به عنوان محرک استفاده میشود و دارای ویژگیهای ثابت زمانی الکترومکانیکی کوچک، خطی بودن بالا، ولتاژ شروع و غیره است. میتواند سیگنال الکتریکی دریافتی را به خروجی جابجایی زاویهای یا سرعت زاویهای روی شفت موتور تبدیل کند. آنها به دو دسته تقسیم میشوند: سروو موتورهای DC و AC. ویژگی اصلی آنها این است که وقتی ولتاژ سیگنال صفر است، چرخشی وجود ندارد و با افزایش گشتاور، سرعت چرخش با سرعت ثابت کاهش مییابد. موتور DC: برد زیاد، همه در ماشینهای کوچک.
۱۲. مروری بر کاراکترهای چینی:
برای نمایش حروف چینی روی مانیتور یا چاپگر، حروف چینی طبق نمادهای گرافیکی به صورت ماتریس نقطهای طراحی میشوند و کد ماتریس نقطهای مربوطه (کد گلیف) به دست میآید.
روش کدگذاری یکپارچه مورد استفاده برای نمایش حروف چینی در رایانه، یک کدگذاری حروف چینی به نام کد داخلی (مانند کد استاندارد ملی) را تشکیل میدهد و کد داخلی منحصر به فرد است (معادل شماره شناسایی کاراکتر). کدگذاری حروف چینی که برای تسهیل ورود حروف چینی شکل گرفته است، یک کد ورودی است که یک کد خارجی از حروف چینی است. کد ورودی به دلیل روشهای کدگذاری مختلف، متفاوت و متنوع است. کد حروف چینی که برای نمایش و چاپ حروف چینی شکل گرفته است، یک کد حروف چینی است. رایانه کد حروف چینی را در کتابخانه مدل فونت از طریق کد داخلی حروف چینی پیدا میکند و تبدیل آن را انجام میدهد.
کد درون دوربین
According to the provisions of the national standard code, each Chinese character has a certain binary code, but this code will conflict with the ASCII code when processed internally by the computer. To solve this problem, add 1 to the first digit of each byte of the national standard code. Since the ASCII code only uses 7 bits, the "1" in the first place can be used as a mark to identify Chinese character codes. When the computer processes the code with "1" in the first place, it understands it as Chinese character information, and when it processes the code with "0" in the first place, it understands it as an ASCII code. The national standard code (internal code) processed in this way is the internal code.
اگر علامت "." در این تصویر "口" را با "0" جایگزین کنیم، میتوانیم کد گلیف "口" را به وضوح دریافت کنیم: 0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H. وقتی کامپیوتر میخواهد "口" را نمایش دهد، ابتدا اولین آدرس کتابخانه فونت نمایشگر را پیدا میکند، بر اساس کد داخلی "口" محاسبه میکند و سپس کد گلیف "口" را پیدا میکند و سپس از طریق کنترل مولد کاراکتر، صفحه را به ترتیب بر اساس کد گلیف (به صورت دودویی) اسکن میکند. جایی که کد دودویی "0" است، جایی که "0" است اسکن میشود و جایی که "1" است برای برجسته کردن اسکن میشود، بنابراین میتوان الگوی کاراکتر "口" را بدست آورد.
فونتهای حروف چینی به ترتیب کد استاندارد ملی مرتب شده و به شکل فایلهای دودویی در حافظه ذخیره میشوند و یک کتابخانه فونت حروف چینی را تشکیل میدهند که به آن کتابخانه حروف چینی یا کتابخانه حروف چینی نیز گفته میشود.
دو روش کدگذاری، به فایل هدر مراجعه کنید
GB1616.h//------------------ تعریف ساختار داده فونت حروف چینی ------------------------//structtypFNT_GB16 //ساختار داده فونت حروف چینی {unsignedcharIndex[3]; //شاخص کد داخلی کاراکتر چینی unsignedchar Msk[32];//داده کد ماتریس نقطهای }; // ... :Xu;عرض×ارتفاع (پیکسل):۱۶×۱۶------------------------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00, این ساختار بسیار ساده است: یکی کد داخلی و دیگری دنباله ماتریس نقطهای است. کتابخانه ماتریس نقطهای قبلی به ترتیب کد داخلی قرار داده شده بود و نیازی به شاخص کد داخلی نبود. اگر فقط تعدادی کاراکتر چینی قرار داده شده بود، به شاخص کد داخلی نیاز بود. (کاراکتر چینی "Xu" در جلو برای یافتن دنباله ماتریس نقطهای کلمه هنگام نمایش "Xu" است. این دنباله ماتریس نقطهای توسط خودم نوشته شده است. وقتی با 1602 نمایش داده میشود، زیرا تراشه دارای دنباله ماتریس نقطهای انگلیسی در حافظه است، نیازی به نوشتن آن نیست.) به طور کلی، دو بایت برای کد داخلی کافی است. اگر از یک بایت دیگر استفاده کنید، فقط یک 0 به انتهای آن اضافه میکنید. به این ترتیب، رشته کاراکتر چینی میتواند مستقیماً در کد داخلی کاراکتر چینی قرار گیرد.
codeGB_16[k].Index[0] codeGB_16[k] نشان میدهد که آرایهای با ساختار typFNT_GB16 به نام codeGB_16 وجود دارد. codeGB_16[k] عضو k+1 آرایه است. index عضوی از ساختار typFNT_GB16 است، بنابراین میتوان با codeGB_16[k].Index به آن اشاره کرد. در عین حال، index یک آرایه است، بنابراین میتوان آن را اندیسگذاری کرد[0]. If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && یک عملگر منطقی AND است، به این معنی که مقادیر دو طرف نماد && درست هستند. فقط مقدار && درست است، یعنی درست && درست = درست. این جمله به این معنی است: codeGB_16[k].Index[0]==c[0] و codeGB_16[k].Index[1]==c[1] به طور همزمان برقرار شدهاند. اگر دستور زیر اجرا شود، codeGB_16[] یک آرایه ساختار است، codeGB_16[k].Index[0] به معنی مقدار عنصر 0 از عضو شاخص ساختار K ام آرایه ساختار است.
۱۳. ال سی دی ۱۲۸۶۴: هر نقطه نمایش مربوط به یک عدد دودویی است، ۱ به معنی روشن و ۰ به معنی خاموش. حافظه رمی که این اطلاعات ماتریس نقطهای را ذخیره میکند، حافظه داده نمایشگر نامیده میشود. برای نمایش یک کاراکتر گرافیکی یا چینی خاص، باید اطلاعات ماتریس نقطهای مربوطه را در واحد ذخیرهسازی مربوطه نوشت.
شمارنده آدرس (AC) حافظه رم گرافیکی فقط آدرس افقی (محور X) را به صورت خودکار یک واحد افزایش میدهد. وقتی آدرس افقی = 0FH باشد، به 00H بازنشانی میشود. با این حال، آدرس عمودی را به صورت خودکار با یک رقم نقلی افزایش نمیدهد. بنابراین، وقتی چندین داده به طور مداوم نوشته میشوند، برنامه باید تشخیص دهد که آیا آدرس عمودی نیاز به بازنشانی دارد یا خیر.
۱۴. رم ترسیمی (GDRAM) حافظه رم نمایشگر رسم، ۱۲۸×۸ بایت فضای حافظه فراهم میکند. هنگام تغییر حافظه رم ترسیم، ابتدا مقادیر مختصات افقی و عمودی را به طور مداوم بنویسید و سپس دو بایت داده را در حافظه رم ترسیم بنویسید. شمارنده آدرس (AC) به طور خودکار آدرس افقی (آدرس X) را یک واحد افزایش میدهد. وقتی آدرس افقی ۰XFH باشد، به ۰۰H بازنشانی میشود؛ آدرس عمودی به طور خودکار ۱ واحد افزایش نمییابد. هنگام نوشتن در حافظه رم ترسیم، نمایشگر رسم باید خاموش باشد.
[cpp] نمایش نسخه ساده//نمایش کاراکترهای چینی voiddispString (uchar X, Y,uchar *msg)//کدام سطر X و کدام ستون Y است. msg کاراکترهای چینی است {if(X==0) write_data(*msg++); //نمایش حروف چینی }}/ ... }}//************تنظیمات محتوا را در نیمه پایین صفحه نمایش دهید for(i=0;i<32;i++) //{ write_com(0x80 + i); //تنظیم آدرس عمودی VERTICALADD write_com(0x88); //تنظیم آدرس افقی HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;} }} برای زبان C، فضا به طور خودکار برای یک متغیر تعریف شده اختصاص داده میشود و آدرس آن نام متغیر است. از طریق این نام، دادهها میتوانند در حافظه بازیابی شوند و دادههای جدید از طریق محاسبه به دست آیند. با این حال، در اسمبلی، برنامهنویس باید فضای ذخیرهسازی را تعریف کند و دادهها را برای محاسبه به انباره ارسال کند. هر مرحله نیاز به عملیات برنامهنویس دارد. در زبان C، این فرآیندها توسط کامپایلر تکمیل میشوند.
۱۵. چند پرسش و پاسخ مفید ۱. تخصیص حافظه متغیرها در زبان C میکروکنترلر چگونه انجام میشود؟ آیا ممکن است کامپایلر به طور هوشمند کد تخصیص و بازیافت را در طول فرآیند کامپایل اضافه کند؟ نکته کلیدی این است که برنامهای که من نوشتهام، چگونه میتوانم مطمئن شوم که خطای سرریز حافظه ندارد؟ اگر من یک عملیات بازگشتی انجام میدهم، محاسبه نیازهای حافظه توسط خودم دشوار است.
۲. آیا زبان برنامهنویسی C در میکروکنترلر در تعریف متغیر محدود خواهد بود؟ برای مثال، عملیات ضرب و تقسیم دادههای اعشاری از طریق اسمبلی نوشته میشوند و کد آن کاملاً پیچیده است. اگر مستقیماً به زبان C نوشته شود، آیا خیلی ساده نخواهد بود؟
۳. در فایل هگز تولید شده توسط زبان C میکروکنترلر، آیا توزیع آدرس ROM دستورالعملها و دادهها به طور خودکار توسط کامپایلر تعیین میشود؟ آیا کاربران میتوانند آن را تعیین کنند؟
پاسخ ۱: یک برنامه میکروکنترلر که به زبان C نوشته شده است، ابتدا توسط یک برنامه (به نظر میرسد c51.exe باشد) کامپایل میشود. پس از اتمام کامپایل، اندازه فضای ذخیرهسازی متغیرها مرتب شده است، اما آدرس خاص هنوز اختصاص داده نشده است (آدرس شناور است). در مرحله بعد، برنامه دیگری (به نظر میرسد a51.exe باشد) متصل میشود. پس از اتصال، آدرس خاص تعیین میشود.
اگر تعداد متغیرها خیلی زیاد باشد، کامپایلر اعلام میکند که قطعه داده خیلی بزرگ است. برای اطمینان از عدم وجود خطای سرریز حافظه، نکته اصلی این است که آیا پشته سرریز میشود یا خیر، و این به تجربه بستگی دارد.
زبان C میکروکنترلرها عموماً بازگشت را ممنوع میکند و عملیات بازگشتی عموماً اجتناب میشوند. از این گذشته، میکروکنترلرها کامپیوتر شخصی نیستند که بر سرعت تأثیر بگذارد. اگر میخواهید بازگشتی عمل کنید، استفاده از تراشه DSP مناسبتر است. به طور خلاصه، باید بتوانید تراشه مناسب را انتخاب کنید.
پاسخ ۲: اندازه متغیر (تعداد ارقام) عموماً برابر با تعداد ارقام موجود در انباره تراشه است. برای مثال، ۵۱ معمولاً از ۸ بیت استفاده میکند زیرا یک میکروکنترلر ۸ بیتی است.
میکروکنترلر میتواند متغیرهای بیتی را تعریف کند، اما نمیتواند آرایههای بیتی را تعریف کند. نوشتن به زبان C ساده به نظر میرسد، اما در واقع بیشترین حجم کد را تولید میکند. میکروکنترلری که برای کنترل استفاده میشود به سختی از عملیات ممیز شناور استفاده میکند که نه تنها کند است، بلکه دردسرساز است و فضا را اشغال میکند. اگر یک تراشه DSP باشد، اگر ساختار سختافزاری مناسبی داشته باشد، بسیار بهتر خواهد بود.
پاسخ ۳: عموماً، به طور خودکار تخصیص داده میشود. میتوان آن را با ترکیبی از زبان C و زبان اسمبلی برنامهریزی کرد، یا میتوان آن را به صورت آنلاین با استفاده از Keil C اسمبل کرد. تبادل داده بین تراشه و خارج از طریق پورت انجام میشود.
شماره تلفن شرکت: +86-0755-83044319
فکس/فکس: +86-0755-83975897
ایمیل: 1615456225@qq.com
QQ: 3518641314 مدیر لی
QQ: 332496225 مدیر کیو
آدرس: اتاق ۸۰۹، ساختمان C، ساختمان فناوری ژانتائو، پلاک ۱۰۷۹ خیابان مینزی، منطقه جدید لونگهوا، شنژن