KnowledgePlus.ir
5.48K subscribers
47 photos
11 videos
16 files
176 links
کانال مهندس اوژن کی نژاد
کلیه مطالب این کانال به جز مواردی که صریحا در متن آن ذکر شده باشد جنبه تالیفی دارد و از جایی کپی نشده است.
کانال اشتغال:
@KnowledgePlusir
@StepMotor
@MC3Delta
@FindChips
instagram.com/knowledgeplus.ir
aparat.com/KnowledgePlus
Download Telegram
یک روش سریع و زود بازده برای استفاده از قابلیت های سیستم عامل در کنار امکانات سخت افزاری میکروکنترلر که علیرغم قدیمی بودن، برای بسیاری از کاربردهای صنعتی به خوبی جواب می دهد و پیاده سازی آن هم بسیار ساده تر و سریع تر از خیلی از گزینه های دیگر است، استفاده از پورت RS232 در PC و اتصال آن به میکروکنترلر مورد نظر است. در این روش با نرم افزارهای سطح بالایی مانند VB می توان واسط کاربری لازم را ایجاد کرد و علاوه بر استفاده از امکانات متنوع سیستم عامل، بصورت همزمان می توان ازامکانات سخت افزاری میکروکنترلر مانند pwm و adc و spi و ... هم استفاده کرد.

@KnowledgePlus
اهمیت فاکتور زمان در انتخاب ابزارهای سخت افزاری و نرم افزاری برای انجام پروژه های الکترونیک:

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

@KnowledgePlus
یک نکته مهم و فنی درباره تایمرهای میکروکنترلرها:

در صورت نیاز به تغییر Prescaler در یک تایمر، در یک سری از کاربردها بسیار اهمیت دارد که این تغییر وضعیت بصورت سنکرون با آغاز سیکل انجام شود تا زمان در نظر گرفته شده برای هر سیکل توام با خطا نباشد. در کاربردهایی با تایمینگ دقیق که از Prescaler متناسب با هر سیکل تایمر استفاده می شود و مقدار تقسیمات Prescaler در سیکل های مختلف تغییر می کند، رعایت این مسئله برای برقراری زمان بندی صحیح ضروری است.

@KnowledgePlus
تمرین برنامه نویسی میکروکنترلر:

در سخت افزاری مبتنی بر هر میکروکنترلر دلخواه و با سه عدد کلید که آنها را set و up و down نامگذاری می کنیم و 5 عدد 7segment که با روش Multiplex به پورت های میکروکنترلر متصل هستند، برنامه ای بنویسید که اعدادی در محدوده مشخص (مثلا 178 تا 98432 با مقدار اولیه 178) روی رقم ها با این سه کلید به این صورت قابل تنظیم باشند که در هر لحظه یکی از رقم ها چشمک بزند و با کلید های up و down بتوان آن رقم را تنظیم کرد. فشار دادن کلید set باعث تغییر مکان رقم قابل تنظیم و در حال چشمک زدن از راست به چپ می شود و در انتها مکان نما دوباره به سمت راست منتقل می شود. حد مجاز هر رقم باید به گونه ای باشد که عدد کلی از محدوده حداکثر و حداقل مجاز فراتر نرود. مثلا در محدوده ذکر شده در این صورت مسئله اگر عدد جاری 88431 باشد و رقم سمت راست در حال تنظیم باشد، محدوده مجاز این رقم بین 0 تا 9 خواهد بود (معادل با 88430 تا 88439). اما اگر عدد کلی 98431 باشد، در این حالت محدوده مجاز برای رقم سمت راست فقط 0 تا 2 خواهد بود (معادل با 98430 تا 98432). یا به عنوان مثال دیگر اگر عدد جاری 190 باشد و رقم دوم از سمت راست در حال تنظیم باشد، فقط اعداد 8 و 9 برای این رقم مجاز هستند و در غیر این صورت مجموعه کل رقم ها از مقدار حداقل در این مثال کوچک تر خواهد شد. صفرهای سمت چپ عدد در این مسئله باید نمایش داده شوند و مثلا 178 بصورت 00178 نمایش داده می شود.

@KnowledgePlus
برای بدست آوردن رقم مورد نظر در سوال مطرح شده در پست:

https://telegram.me/KnowledgePlus/374

می توان از چندین روش استفاده کرد که یکی از آنها محاسبه خارج قسمت تقسیم عدد مذکور به ده به توان مرتبه رقم و در مرحله بعد محاسبه باقیمانده تقسیم این عدد به ده است. مثلا اگر عدد 1234567 را بر 10 به توان 5 یا 100000 تقسیم کنیم، خارج قسمت 12 خواهد شد و باقیمانده تقسیم 12 به 10 برابر با 2 خواهد بود. برای محاسبه ده به توان مکان رقم در عدد با سرعت بالا می توانیم از یک آرایه استفاده کنیم. اگر فرض کنیم یک عدد حداکثر با 8 زقم غیر صفر در متغیر data قرار داشته باشد و مرتبه رقم در عدد (با شروع از 0) در متغیر digit_position باشد، با فرض کدنویسی در IAR برای AVR، تابع get_digit رقم دلخواه را بر می گرداند:

unsigned long __flash digit_mask[]={1,10,100,1000,10000,100000UL,1000000UL,10000000UL};
...
unsigned char get_digit(unsigned long data,unsigned char digit_position)
{ return((data/digit_mask[digit_position])%10);}

@KnowledgePlus
توانایی در راه اندازی سخت افزارهای یک میکروکنترلر تنها جزء کوچکی از مهارت های لازم برای انجام پروژه های سنگین صنعتی و با ارزش افزوده بالا است و در این گونه پروژه ها معمولا پیاده سازی الگوریتم ها و فلوچارت های پیچیده است که بخش اصلی کار را تشکیل می دهد.

@KnowledgePlus
نکته ای در کدنویسی:

فرض کنیم که در یک سیستم مبتنی بر AVR با کلاک 16MHz به دلیل نیاز صورت مسئله لازم باشد توسط CPU به یکی از وقفه ها به تعداد 160.000 بار در ثانیه پاسخ داده شود و روتین آن وقفه اجرا شود. حال با توجه به اینکه CPU برای پاسخ دادن به وقفه مورد نظر تنها به میزان 100 سیکل کلاک فرصت دارد، بنابراین برای انجام عملیات متناوبی که از اولویت زمانی بالایی برخوردار نیستند و کمی تاخیر در حد چند کلاک مشکلی را ایجاد نمی کند (مانند اسکن کردن کلید ها یا Refresh کردن 7segment ها و مانند آن) بجای استفاده از وقفه یک تایمر برای انجام این نوع عملیات باید به روش Polling عمل شود و با بررسی فلگ وقفه مقایسه یا سرریز تایمر در حلقه اصلی، در فواصل زمانی مشخص روتین های لازم بصورت پریودیک اجرا شود. به بیان دیگر زمانی که لازم است اکثر وقت CPU برای انجام وقفه های Time critical و با تعداد دفعات وقوع بسیار بالا سپری شود، باید از فعال کردن وقفه برای عملیاتی که Time critical نیستند و توسط Polling هم قابل انجام هستند خودداری شود تا CPU توان پاسخگویی به انجام همه عملیات را داشته باشد.

@KnowledgePlus
نقل یک تجربه:

بسیاری از Mosfet های ارزان موجود در بازار تقلبی هستند و حد تحمل و مشخصات آنها به هیچ وجه در عمل با نمونه های اصلی مطابقت ندارد.

@KnowledgePlus
دقت موتورهای Encoder دار:

با توجه به اینکه تغییرات دو فاز خروجی Encoder در هر سیکل جمعا دارای 4 تغییر وضعیت و لبه است، دقت در موتورهای Encoder دار در صورت استفاده از تمام لبه های سیگنال ها 4 برابر Resolution ذکر شده برای Encoder بر حسب پالس است. به همین دلیل در سرو موتورهای صنعتی در مد Position با فرض 1 بودن ضریب گیربکس الکترونیکی، تعداد پالسهای لازم برای چرخش موتور به میزان یک دور برابر با 4 برابر دقت نامی Encoder متصل به موتور است. به عنوان مثال در سرو موتوری با Encoder از نوع 2500 پالس و اگر ضریب گیربکس الکترونیکی 1 باشد، باید 10000 پالس اعمال شود تا موتور یک دور بچرخد. در مورد گیربکس الکترونیک قبلا در پست زیر توضیح داده شده است:

https://telegram.me/KnowledgePlus/72

@KnowledgePlus
محاسبه تعداد پالس برای طی مسافت دلخواه در مکانیزم پیچ و مهره:

فرض کنیم یک استپر موتور به یک مکانیزم پیچ و مهره بصورت مستقیم کوپل شده باشد، به نحوی که هر دور چرخش موتور باعث پیشروی خروجی مکانیزم به اندازه گام پیچ شود. برای محاسبه تعداد پالس مورد نیاز به منظور حرکت خروجی به میزان دلخواه می توانیم حاصلضرب تقسیمات درایور در مسافت را بر گام پیچ تقسیم کنیم. مثلا اگر یک پیچ و مهزه بال اسکرو با گام 4 میلیمتر به استپر موتور دو فازی در مد Half step کوپل شده باشد که به معنای تقسیمات 400 قسمت در یک دور است، تعداد پالس لازم برای طی مسافت N میلیمتر برابر با 400N/4=100N خواهد بود.

@KnowledgePlus
یک توضیح مفید در مورد بخش های Code و RO-data و RW-data و ZI-data در Keil:

https://www.edaboard.com/thread240300.html#post1028079

@KnowledgePlus
از آنجایی که پیشرفت اساسی و کسب مهارت و تسلط واقعی در بسیاری از حوزه های رشته الکترونیک بدون دسترسی به اسیلوسکوپ امر بسیار بعید و در مواردی ناشدنی است. بنابراین توصیه می شود برای فعالیت حرفه ای در این رشته، تهیه اسیلوسکوپ را جزء اولویت های اول قرار دهید.

@KnowledgePlus
تجربه ای در تعمیرات بردهای الکترونیک:

در هنگام تعمیر بردهای پیچیده ای که فاقد نقشه هستند و برد مشابه آنها هم در دسترس نیست، در جریان درآوردن قطعات و امتحان آنها و جدا کردن سیم ها و کاکتورها و غیره، این احتمال وجود دارد که شکل اولیه برد از نظر محل و جهت قطعات و کانکتورها و مانند آن در مراحل بعدی فراموش شود. بنابراین اکیدا توصیه می شود که قبل از هرگونه اقدام برای تعمیر اینگونه بردها، ابتدا شکل ظاهری و وضعیت اولیه آنها از طریق عکس یا فیلم یا رسم برای یاد آوری در مراحل بعد ثبت شود.

@KnowledgePlus
برای بالا بردن ضریب اطمینان در مدارات مبتنی بر میکروکنترلرها که انجام وظایف حساس و حیاتی را به عهده دارند و عملکرد ناصحیح آنها می تواند خسارت های بزرگی را ایجاد کند، از ولتاژ تغذیه توسط ADC می توان فیدبک گرفت و چنانچه نوسانات یا افزایش و کاهش غیر عادی در ولتاژ تغذیه مشاهده شود، قبل از آنکه این تغییرات به مراحل حدی مانند فعال شدن Brown out detection یا Power on reset برسد، روتین های حفاظتی مناسب مانند ایجاد آلارم و استفاده از تغذیه پشتیبان و غیره را می توان اجرا کرد. در برخی از میکروکنترلرها در همین راستا امکان اتصال ضریبی از ولتاژ تغذیه میکروکنترلر به ورودی ADC بصورت داخلی وجود دارد.

@KnowledgePlus
مثال برنامه نویسی C:

در کد زیر در پایان اجرای حلقه for و با فرض تعریف قبلی متغیرهای x و y و i از نوع char، ترتیب بیت های x معکوس می شود و در y قرار می گیرد. مثلا بیت 0 در x به بیت 7 در y منتقل می شود و بیت 1 در x به بیت 6 در y منتقل می شود و به همین ترتیب. به عنوان مثال عددی اگر x برابر 0xc2 باشد، y برابر با 0x43 خواهد بود.

for(i=0,y=0;i<8;i++) y|=((x&(1«i))?(1«(7-i)):0);

@Knowledgeplus
تجربه ای در تولید محصولات الکترونیک:

شبیه به حاصلضرب گین در پهنای باند که ملاکی برای ارزیابی مشخصات یک مدار الکترونیکی است، در تولید محصولات الکترونیک هم با فرض لحاظ کردن ارزش زمان صرف شده در محاسبه هزینه ها، حاصلضرب تعداد محصول در سود واحد، ملاکی برای توجیه پذیر بودن تولید آن محصول به لحاظ اقتصادی است. در شرایط فعلی و با توجه به وجود رقبای چینی، تولید محصولات ارزان قیمت ولی پر تیراژ معمولا به دلیل وجود معادل ارزان چینی چندان به صرفه نیست. اما با فرض وجود دانش فنی و سرمایه کافی محصولاتی هم با سود واحد چند ده تا چند صد هزارتومان و با نیاز به تعداد کافی در عرصه های صنعتی و پزشکی و ... وجود دارند که می توانند گزینه های مناسب تری برای تولید باشند. برگ برنده تولید کننده ایرانی در رقابت با تولیدکنندگان خارجی، انعطاف در طراحی و customize کردن محصول بر اساس نیاز مشتری و ارائه پشتیبانی و خدمات پس از فروش مناسب و امکان حضور فیزیکی نسبت به رقبای خارجی می باشد.

@KnowledgePlus
چگونه CPU می تواند از صحت کلاک واقعی خود اطلاع پیدا کند؟

فرض کنیم که در یک مدار حساس با کاربردهای صنعتی یا پزشکی و غیره، کلاک CPU از یک اسیلاتور خارجی یا اسیلاتور داخلی مبتنی بر کریستال خارجی تامین شود . حال اگر به دلایلی مانند خرابی یا اشتباه در انتخاب قطعات، تفاوت قابل توجهی بین فرکانس واقعی کلاک با مقدار ایده آل وجود داشته باشد، CPU از چه طریقی می تواند از وجود این خطا در فرکانس کلاک اطلاع حاصل کند تا بتواند روتین های حفاظتی مناسب را اجرا کند؟ در این رابطه چند راهکار پیشنهاد می شود:

1- اولین روش کلی برای سنجش صحت فرکانس کلاک، استفاده از یک منبع مستقل تولید فرکانس به عنوان مرجع است. این مرجع فرکانسی می تواند از اسیلاتورهای داخلی یا خارجی یا سایر سخت افزارهای خارجی که دارای کلاک مربوط به خود هستند (مانند میکروکنترلرهای دیگر یا کامپیوتر) یا هر مبنای زمانی مستقل مانند فرکانس برق شهر تامین شود. در این روش باید به نحوی امکان مقایسه بین فرکانس کلاک CPU با فرکانس مرجع فراهم شود. مثلا اگر تایمری با کلاک مستقل در سیستم وجود داشته باشد (مانند RTC)، تایمر دیگری را می توان با کلاک CPU یا تقسیمات آن راه اندازی کرد و از مقایسه تغییرات دو تایمر، صحت کلاک مورد سنجش را بررسی کرد.
از مبناهای زمانی در دسترس مانند فرکانس برق شهر هم با تمهیدات مناسب می توان برای این ارزیابی استفاده کرد. به عنوان یک مثال اگر کلاک تایمری با Prescaler=8 از کلاک CPU تامین شود و منبع کلاک اسیلاتوری با کریستال 16MHz باشد، فاصله زمانی نیم سیکل از برق شهر که دو بار گذر از صفر در آن اتفاق می افتد برابر 10ms است و انتظار می رود که مقدار شمارنده در این مدت زمان 20000 واحد تغییر کند. حال اگر بجای کریستال 16MHz به اشتباه یک کریستال 8MHz قرار داده شده باشد، در فاصله دو گذر از صفر مقدار شمارنده بجای 20000 واحد فقط 10000 واحد تغییر می کند که از مقایسه این مقدار با مقدار ایده آل می توان به وجود خطا در فرکانس کلاک پی برد و به این نتیجه رسید که فرکانس واقعی اسیلاتور نصف مقدار مطلوب است.

2- روش کلی دیگر، استفاده از تکنیک های آنالوگ است. با استفاده از روش های آنالوگ به طرق مختلفی می توان فرکانس را به یک کمیت آنالوگ مرتبط کرد و آن را اندازه گرفت. مثلا می توان موجی با فرکانس مشخص را توسط میکروکنترلر تولید کرد و بعد از اعمال آن به مدار مبدل فرکانس به ولتاژ، این ولتاژ را توسط ADC اندازه گیری کرد که مقدار اندازه گیری شده ملاکی برای سنجش فرکانس خواهد بود. یا به عنوان مثال دیگر در روشی که جنبه تقریبی دارد، یک پله ولتاژ به مدار RC با مقادیر معلوم اعمال می شود و ولتاژ دو سر خازن تا رسیدن به حد معینی توسط ADC اندازه گیری می شود و تایمری بصورت همزمان با کلاک CPU یا تقسیمات آن راه اندازی می شود. با توجه به معلوم بودن مقدار خازن و مقاومت و فرکانس تایمر، میزان تغییرات تایمر بصورت تقریبی تا شارژ خازن مشخص است (ولتاژ دو سر خازن در زمان RC به 0.63 حداکثر مقدار خود می رسد). بنابراین بعد از رسیدن ولتاژ خازن به حد مشخصی با مقایسه مقدار واقعی تایمر با مقدار مورد انتظار می توان صحت فرکانس کلاک CPU را احراز کرد.

@KnowledgePlus
نکته ای در طراحی مدار چاپی:

از آنجایی که وجود سخت افزار ارتباطی RS485 روی یک برد، امکانی را برای شبکه کردن چند برد و اتصال برد به HMI و با مبدل مناسب به کامپیوتر و تغییر firmware داخلی از طریق Bootloader و موارد مشابه را فراهم می کند. بنابراین در صورت احتمال برای نیاز به این نوع ارتباط در توسعه های بعدی و موجود بودن فضای کافی روی برد و در دسترس بودن پین های ارسال و دریافت USART و یک پین دیگر برای جهت ارتباط، خالی از فایده نیست که در هنگام طراحی مدار چاپی بخشی برای این نوع ارتباط روی برد در نظر گرفته شود (حتی اگر برای کاربرد جاری نیازی به این سخت افزار نباشد و قطعات آن لحیم نشود).

@KnowledgePlus
روش هایی برای شناسایی سیم ها و کابل های شیلد با مغزی غیر مسی به نقل از یکی از فروشندگان بازار:

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

@KnowledgePlus
استفاده از بردها و سخت افزارهای آماده و مسئله خدمات پس از فروش:

برای استفاده از بردها و سخت افرارهایی مانند Cubieboard، Beaglebone، Raspberry و ... در محصولات صنعتی که نیاز به پشتیبانی و خدمات پس از فروش چند ساله دارند، علاوه بر مواردی مانند قیمت و کارایی باید به این نکته توجه داشته باشیم که اگر مثلا 5 سال دیگر این برد به هر دلیلی خراب شد و نیاز به تعویض داشت، آیا همچنان در دسترس هست که بتوانیم آن را جایگزین کنیم؟

@KnowledgePlus
به بهانه حادثه تاسف بار ساختمان پلاسکو:

اگر حتی یک بیت علم جدید تولید نمی کردیم و همین علم موجود را درست مصرف می کردیم، کیفیت زندگی خیلی بهتر می شد.

@KnowledgePlus