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
نکته مهم در بکارگیری IC های درایور Mosfet و IGBT که به روش Bootstrap عمل می کنند:

در IC های درایوری که برای تامین تغذیه بخش High side از تکنیک Bootstrap استفاده می کنند و خازنی از طریق یک دیود، تغذیه این بخش را تامین می کند، سیگنال های فرمان اعمال شده به ورودی IC نباید به گونه ای باشند که بخش High side بیشتر از زمان مشخصی روشن بماند. در غیر اینصورت خازن تامین کننده تغذیه این بخش تخلیه می شود و به دلیل کافی نبودن تغذیه، عملکرد آن با اختلال مواجه می شود. برای جلوگیری از این مسئله باید سوییچ بخش Low side بصورت پریودیک روشن شود تا خارن تغذیه بخش High side بتواند از طریق دیود شارژ شود.

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

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

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

عبارت های زیر معادل با هم هستند و در آدرس 0x200 مقدار 0x98 را ذخیره می کنند:

(*(unsigned char*) 0x200)=0x98;
((unsigned char*) 0x200)[0]=0x98;

عبارت های زیر معادل با هم هستند و با فرض ساختار بایتی برای حافظه از آدرس 0x10002000 به بعد 4 بایت با مقدار 0x0000fe55 را ذخیره می کنند:

(*(unsigned long*) 0x10002000)=0xfe55;
((unsigned long*) 0x10002000)[0]=0xfe55;

همچنین نسبت به یک آدرس پایه می توان offset اعمال کرد. مثلا عبارت زیر یک بایت با مقدار 0x54 را در آدرس 0x206 ذخیره می کند:

((unsigned char*) 0x200)[6]=0x54;

در این روش اگر اشاره گر به بیش از یک بایت اشاره کند، به ازای هر واحد افزایش offset نسبت به آدرس پایه، آدرس مقصد به اندازه تعداد بایت مورد اشاره افزایش پیدا می کند. مثلا عبارت زیر باعث ذخیره سازی 0x54 در آدرس 0x204 و 0x00 در سه بایت بعدی خواهد شد:

((unsigned long*) 0x200)[1]=0x54;

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus
سرو موتورهای ترمز دار:

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

@KnowledgePlus
نکته آموزشی:

خروجی های Open collector یا Open drain در سنسورها یا IC های دیجیتال را می توان به هم متصل کرد و مجموعه خروجی ها با یک مقاومت Pull up به تغذیه مجاز وصل می شوند که در این حالت هر خروجی که فعال باشد، باعث Low شدن خروجی کلی خواهد شد. به این آرایش wired-AND هم گفته می شود. لازم به یادآوری است که یک سری از میکروکنترلرها هم برای پورت های خود از این نوع خروجی پشتیبانی می کنند.

@KnowledgePlus
توصیه ای برای موفقیت در استخدام:

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

@KnowledgePlus
نکته ای در استفاده از IC هایی مانند ADM485 و نظایر آن برای ارتباط rs485:

در استفاده از این IC ها معمول است که برای کنترل جهت ارتباط تنها با یک پین میکروکنترلر، پین های 2 و 3 به هم متصل شوند که در هنگام ارسال، این دو پین از طرف میکروکنترلر 1 و در هنگام دریافت 0 می شوند. با توجه به اینکه در این روش پین RO که به rx میکروکنترلر متصل می شود در هنگام ارسال دیتا از طرف میکروکنترلر در وضعیت High Z قرار می گیرد، به منظور جلوگیری از دریافت اطلاعات اشتباه در این محدوده زمانی به واسطه نویز، از دو روش می توان استفاده کرد. مورد اول قرار دادن مقاومت Pull up بصورت داخلی یا خارجی روی خط rx است و بصورت نرم افزاری هم می توان در هنگام ارسال از طرف میکروکنترلر، گیرنده USART را کلا غیر فعال و در فاز دریافت مجددا فعال کرد.

@KnowledgePlus
نکته آموزشی:

اسیلاتورهای RC داخلی در شماره های مختلف AVR دارای ساختارهای مختلف به لحاظ طراحی هستند و عملکرد آنها نسبت به تغییرات دما یکسان نیست. بنابراین در برخی شماره ها فرکانس اسیلاتورهای داخلی با افزایش دما کاهش می یابد (مانند ATmega8 و ATmega16 و ATmega32 و ATmega64) و در برخی از شماره های دیگر فرکانس آنها با افزایش دما افزایش می یابد (مانند ATtiny13 و ATmega48 و ATmega2560).

@KnowledgePlus
در Application Note منتشر شده از طرف شرکت Atmel به نام AVR1000 در مورد برنامه نویسی به زبان C برای خانواده XMEGA، نکات مفید و سودمندی درباره نحوه برنامه نویسی C ذکر شده که مطالعه آن به کسانی که قصد برنامه نویسی به این زبان برای میکروکنترلرها را دارند، توصیه می شود:

https://www.atmel.com/Images/doc8075.pdf

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

در هنگام شستشوی مدار چاپی، ریختن حلال های استفاده شده برای شستشو روی سوییچ های Push button و نفوذ آن به محل تماس کنتاکت ها معمولا باعث خرابی سوییچ می شود.

@KnowledgePlus
(مطلب زیر چند سال پیش در پاسخ به سوالی در یکی از انجمن های برق و الکترونیک نوشته شد)

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

در کنترل PID :
عامل حاصلضرب یک ضریب در خطا در مورد خطاهای لحظه فعلی قضاوت می کند.
عامل انتگرال تاثیر خطاهای گذشته را اعمال می کند.
و بخش مشتق هم به عنوان یک عامل پیش بینی خطا در زمان های آینده عمل می کند.

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

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus
قلاویز زنی هیت سینک های آلومینیومی:

برای نصب قطعات قدرت مانند mosfet و igbt و scr و غیره روی هیت سینک های آلومینیومی که دارای ضخامت کافی باشند، به غیر از استفاده از پیچ و مهره می توانیم از روش قلاویز کردن آلومینیوم هم استفاده کنیم. برای کسانی که با این روش آشنا نیستند، شیوه کار بصورت فهرست وار ذکر می شود:

1- ابتدا محلی را که قرار است قلاویز زده شود با سنبه نشان و چکش علامت می زنیم.

2- بوسیله دریل نصب شده روی پایه دریل و مته ای با قطر کوچکتر از قطر پیچ، محل مورد نظر را سوراخ می کنیم. برای هر سایز قلاویز مطابق جداول موجود، یک سایز مته مشخص شده که با توجه به کاربردهای الکترونیکی که پیچ های با قطرهای 3 و 4 میلیمتر معمولا جوابگو هستند از مته های زیر استفاده می کنیم:
مته 2.5 میلیمتر برای پیچ 3 میلیمتر
مته 3.3 میلیمتر برای پیچ 4 میلیمتر

3- قلاویز با سایز مناسب و از نوع ماشینی را روی پیچ گوشتی های برقی یا دریل هایی که دارای دور کم و قابلیت چپ گرد و راست گرد هستند نصب می کنیم. سپس سر قلاویز را به روغن آغشته می کنیم و عملیات قلاویز زنی را در دو مرحله رفت و برگشت انجام می دهیم.

4- بعد از پلیسه گیری می توان از محل قلاویز شده مانند مهره استفاده کرد و قطعات الکترونیک را بوسیله پیچ در آن محل نصب کرد.

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus
نگهداری اطلاعات در حافظه های flash و eeprom میکروکنترلرها دارای یک محدودیت زمانی است که معمولا حداقلی برای این زمان بر حسب محدوده دما از طرف کارخانه سازنده اعلام می گردد. به عنوان مثال شرکت Atmel زمان نگهداری اطلاعات برای برخی از شماره های AVR را حداقل 100 سال در دمای 25 درجه یا 20 سال در دمای 85 درجه ذکر کرده است. برای XMEGA هم حداقل 100 سال در دمای 25 درجه یا 25 سال در دمای 55 درجه ذکر شده است. یا به عنوان مثال دیگر در میکروکنترلرهای سری LPC1788 زمان نگهداری اطلاعات برای حافظه های flash و eeprom در محدوده دمای منفی 40 درجه تا 85 درجه در صورت اتصال میکروکنترلر به تغذیه حداقل 10 سال و در صورت عدم اتصال به تغذیه این زمان برای حافظه flash حداقل تا 20 سال ذکر شده است.

@KnowledgePlus
پاسخ به چند سوال متداول درباره وقفه ها در AVR:

سوال: آیا بین وقفه های AVR اولویتی وجود دارد؟

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

سوال: آیا امکان پذیرش وقفه در وقفه وجود دارد؟

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

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

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

سوال: آیا ممکن است به دلیل درخواست های مکرر چند منبع وقفه، برخی از آنها اصلا پذیرفته نشوند؟

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

سوال: آیا وقفه های پشت سر هم می تواند اجرای برنامه در حلقه اصلی را متوقف کند؟

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

(لطفا از کپی کردن پست ها خودداری و تنها به شکل فوروارد منتشر شود)

@KnowledgePlus
بخشی از برنامه نوشته شده برای یک کنترلر صنعتی معتبر و در حال کار با بیش از 20000 خط برنامه نویسی به زبان اسمبلی.

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

@KnowledgePlus
نمونه ای از قدرت برنامه نویسی اسمبلی:

پروژه نمایش متن دلخواه روی اسیلوسکوپ در مد Lissajous Pattern با استفاده از اعمال سیگنال های آنالوگ تولید شده توسط DAC به ورودی دو کانال اسیلوسکوپ:

https://knowledgeplus.ir/userimages/XYscope.jpg

این پروژه علاوه بر XMEGA با AVR هم انجام شده است. سورس پروژه در سایت موجود است.

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

قرار دادن یک خازن با ظرفیت کم (مثلا 1nF) روی پین های فعال وقفه خارجی می تواند باعث جلوگیری از وقفه های ناخواسته ناشی از نویز شود.

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

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

@KnowledgePlus
برد emi filter طراحی شده برای اتصال اینورتر و سرو موتور و شیر برقی و ... بصورت همزمان با تغذیه کنترلر و کامپیوتر به برق شهر. توضیح بیشتر:

https://telegram.me/KnowledgePlus/194

@KnowledgePlus
نمونه ای از مزیت های XMEGA نسبت به AVR:

در برخی از کاربردها لازم است که در تولید pwm علاوه بر بالا بودن فرکانس حامل (Carrier)، دقت (Resolution) در pwm هم تا حد امکان بالا باشد. اما بالا بردن دقت pwm، برای فرکانس حامل محدودیت ایجاد می کند. مثلا در AVR با فرض کلاک 16MHz و در مد Fast pwm، برای حداکثر دقت ممکن که 16 بیتی است، فرکانس حامل برابر 16000000/65536 یا 244.14 هرتز خواهد بود که ممکن است در یک سری از کاربردها کافی نباشد. اما در XMEGA با استفاده از مد High Resolution Plus و در کلاک 32MHz برای CPU امکان اعمال کلاک موثر تا 256MHz به تایمر وجود دارد که در تولید شکل موج pwm در مقایسه با AVR می تواند فرکانس حاملی تا 16 برابر یعنی 3906.25 هرتز در دقت 16 بیتی را ایجاد کند.

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

@KnowledgePlus