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
چگونه می توان از طریق PC با usart میکروکنترلر با فرمت 9 بیتی ارتباط برقرار کرد:

برای برقراری ارتباط PC از طریق پورت com با usart میکروکنترلر با طول دیتای 9 بیتی باید به این نکته توجه کنیم که در سمت PC در تنظیمات بیت Parity علاوه بر وضعیت های Odd و Even و None، دو وضعیت Mark و Space هم قابل انتخاب هستند که در صورت انتخاب گزینه Mark، بیت نهم از طرف PC در وضعیت 1 و در صورت انتخاب Space بیت نهم در وضعیت 0 ارسال می شود و با این روش می توان بیت نهم ارسال شده از طرف PC را تعیین کرد.

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

@KnowledgePlus
مثالی از vb6 برای نحوه تنظیم Parity در ارتباط 9 بیتی:

پیرو مطلب قبلی (https://telegram.me/KnowledgePlus/273) در مورد ارتباط 9 بیتی، با فرض Baud Rate=9600 bps و Data=8 و Stop bit=1 برای ارسال بیت نهم برابر با 1 می توان این تنظیم را قبل از ارسال از طرف PC انجام داد:

MSComm1.Settings = "9600,m,8,1"

و برای ارسال بیت نهم برابر با 0 می توان این تنظیم را قبل از ارسال از طرف PC انجام داد:

MSComm1.Settings = "9600,s,8,1"

و در طول برنامه بر حسب نیاز با تغییر بین این دو وضعیت بیت نهم را 0 یا 1 ارسال کرد.

@KnowledgePlus
استفاده از ترکیب مقایسه کننده آنالوگ و DAC بجای ADC های سریع:

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

@KnowledgePlus
حداکثر سرعت تغییرات پورت در AVR چقدر است؟

در خانواده AVR با استفاده از دستور اسمبلی OUT می توان تنها در یک سیکل کلاک cpu، وضعیت یک پورت را تغییر داد. مثلا در کد زیر در یک مرحله از برنامه در فاصله 6 سیکل کلاک، 6 بار وضعیت کلیه بیت های PORTA تغییر می کنند و 0 و 1 می شوند :
CLR R16
SER R17
...
OUT PORTA,R16
OUT PORTA,R17
OUT PORTA,R16
OUT PORTA,R17
OUT PORTA,R16
OUT PORTA,R17
....

با استفاده از دستورات SBI و CBI هم در برخی از شماره ها در دو سیکل و در برخی شماره های دیگر تنها در یک سیکل کلاک cpu می توان وضعیت یک پین را set یا clear کرد. برای اطلاع از زمان اجرای این دستورالعمل ها باید به بخش Instruction Set Summary در datasheet شماره مورد نظر مراجعه شود. مثال:

SBI PORTA,0
CBI PORTC,7

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

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

@KnowledgePlus
معرفی یک نرم افزار مفید برای تبدیل فایل های محتوی data به آرایه معادل در C:

نرم افزار xxd.exe می تواند برای تبدیل اطلاعات موجود در فایل های حاوی data به آرایه معادل در زبان C مورد استفاده قرار بگیرد که این امکان برای پیاده سازی برخی از کاربردها مانند پخش صدا از روی flash میکروکنترلر و مواردی نظیر آن بسیار مفید است. اگر فرض کنیم فایل مبدا که اطلاعات آن قرار است به آرایه تبدیل شود دارای نام data.bin و فایل مقصد که آرایه معادل بصورت متنی در آن ذخیره می شود دارای نام data.c باشد، برای تبدیل باید در خط فرمان دستور زیر را اجرا کنیم:

xxd -i data.bin data.c

بعد از ایجاد فایل data.c می توان آرایه موجود در آن را کپی کرد و به شکل مناسب در سورس برنامه اصلی قرار داد.

لینک دانلود فایل بصورت zip شده:

https://knowledgeplus.ir/userfiles/xxd.zip

توضیح بیشتر:

https://www.avrfreaks.net/comment/642033#comment-642033

@KnowledgePlus
ایجاد dead time بصورت نرم افزاری در میکروکنترلرهایی که فاقد امکان اضافه کردن آن به شکل موج هستند:

برای اعمال فرمان به سوییچ های نیمه هادی در مداراتی مانند پل های قدرت باید به سیگنال های متقارن، dead time اعمال شود تا به سوییچ های موجود در هر بازو آسیبی وارد نشود. اما در برخی از میکروکنترلرها مانند AVR، تایمرها دارای قابلیت اضافه کردن dead time در تولید شکل موج نیستند. با استفاده از روش نرم افزاری که در ادامه توضیح داده می شود در این نوع میکروکنترلرها هم می توان این اثر را در شکل موج ها ایجاد کرد. برای این کار باید ابتدا دو واحد تولید شکل موج در یک تایمر را به گونه ای تنظیم کنیم که منطق سیگنال های خروجی آنها مخالف یکدیگر باشند و مثلا اگر یک خروجی در هنگام افزایش مقدار تایمر در شرایط compare match از high به low تغییر وضعیت می دهد، خروجی دوم در شرایط compare match از low به high تغییر وضعیت بدهد. روش نرم افزاری برای ایجاد dead time در این وضعیت به این ترتیب است که مقادیر قرار گرفته در رجیسترهای compare نباید با یکدیگر برابر باشند. بلکه بسته به کلاک تایمر و میزان dead time مورد نیاز باید با هم اختلاف داشته باشند. مثلا اگر کلاک تایمر برابر 2MHz باشد، برای رسیدن به dead time=1us باید 2 واحد اختلاف در مقدار دو compare register وجود داشته باشد. به عنوان مثال عددی اگر compare register در یک کانال با 100 مقداردهی شده باشد و خروجی این کانال در هنگام افزایش تایمر در عبور از مقدار 100 از high به low تغییر وضعیت بدهد، برای کانال دوم باید مقدار 102 در compare register قرار بگیرد تا به میزان دو کلاک معادل با 1us هر دو خروجی low باشند و بعد با گذر مقدار تایمر از 102، خروجی دوم high شود. در این مثال در هنگام کاهش تایمر و گدر از 102 به 101 ابتدا خروجی دوم low می شود و باز به میزان 1us هر دو خروجی low می مانند و در ادامه خروجی اول در گذر از 100 به 99 مجددا high می شود. برای سایر مقادیر dead time هم می توان از همین روش با ایجاد اختلاف مناسب در مقادیر compare register استفاده کرد.

@KnowledgePlus
معرفی چند میکروکنترلر 6 پین:

ATtiny4-ATtiny5-ATtiny9-ATtiny10-PIC10F200-PIC10F202-PIC10F204-PIC10F206-PIC10F220-PIC10F222-PIC10F320-PIC10F322

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

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

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

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

@KnowledgePlus
پاسخ سوال مطرح شده در پست https://telegram.me/KnowledgePlus/271

اجرای دستورات زیر مجموعا در هر 16 سیکل کلاک cpu محتوای پورت A را می خواند و بیت های شماره 0 و 2 و 4 و 6 و 7 خوانده شده را بعد از Not کردن به ترتیب در بیت های شماره 5 و 0 و 1 و 3 و 4 پورت B قرار می دهد.

loop:
IN R16,PINA
COM R16
IN R17,PORTB
BST R16,0
BLD R17,5
BST R16,2
BLD R17,0
BST R16,4
BLD R17,1
BST R16,6
BLD R17,3
BST R16,7
BLD R17,4
OUT PORTB,R17
RJMP loop

هدف ار مطرح کردن این صورت مسئله، نمایش تفاوت زبان های برنامه نویسی در پیاده سازی حداکثر قابلیت یک میکروکنترلر است. در این مثال می توان مشاهده کرد که AVR توانایی انجام صورت مسئله مطرح شده را بر مبنای مجموعه دستورالعمل هایش دارد و اگر با برنامه نویسی به زبان های C و BASIC و ... نمی توان به چنین قابلیتی رسید، اشکال در روش و ابزار برنامه نویسی و نه در قابلیت AVR است. پس این گونه نیست که زبان های برنامه نویسی مختلف لزوما دارای عملکرد یکسان و هم رده ای نسبت به یکدیگر باشند.

@KnowledgePlus
در درایورهای استپر موتور صنعتی معمولا حفاظتی وجود دارد که چنانچه برای مدت معینی - مثلا 0.5 تا 1 ثانیه - پالسی به درایور وارد نشود و موتور ثابت باشد، جریان موتور توسط درایور به میزان مشخصی (معمولا نصف جریان تنظیم شده) کاهش می یابد تا موتور بیش از حد داغ نشود.

@KnowledgePlus
نمونه ای از یک محصول صنعتی تولید شده:

نسخه جدید برد کنترلر CNC با قابلیت های زیر:
- فرمان از طریق RS422 یا RS485
- امکان اتصال به 5 محور سرو موتور یا استپر موتور با قابلیت ایجاد 500.000 پالس برای هر محور
- قابلیت اتصال به Shaft Encoder برای کنترل دستی محورها
- قابلیت تغییر سرعت دو محور اسپیندل از طریق خروجی 0 تا 10v آنالوگ
- دارای چندین ورودی سنسور و میکروسوییچ
- خروجی حفاظت شده رله برای اتصال به شیر برقی
- مدار فرمان برای ترمز سروموتور
- نرم افزار اختصاصی و فارسی روی PC با قابلیت دریافت فایل از Artcam

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

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

در بعضی از قطعات قدرت مانند انواعی از دیودهای جریان بالا که امکان نصب روی Heat sink را ندارند، پایه های خارج شده از قطعه به نوعی نقش Heat sink را به عنوان مسیری برای دفع دما ایفا می کنند. به عنوان مثال در مشخصات دیود BYV28 سه منحنی دما بر حسب جریان و به ازای طول های مختلف پایه های دیود رسم شده که در جریان 3.5A به ازای طول پایه های 20mm، دما حدود 50C و به ازای طول پایه های 10mm دما بیش از 90C ذکر شده است که نشان دهنده تاثیر طول پایه ها در افزایش دمای دیود می باشد. به همین دلیل طول پایه ها در برخی شرایط نباید بیشتر از یک حد کوتاه شوند تا قطعه بیش از حد داغ نشود.

@KnowledgePlus
روشی برای ذخیره سازی اطلاعات در هنگام قطع تغذیه:

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

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

@KnowledgePlus
فایل PCB هدر برد XMEGA های 100 پین مانند ATXMEGA128A1U در سایت قرار داده شد. رجوع به:

https://knowledgeplus.ir/download.aspx

@KnowledgePlus
یک روش پیشنهادی برای طراحی پنل دستگاه ها در تعداد کم:

برای طراحی و نصب پنل در پروژه ها و دستگاه هایی که به تعداد کم و بصورت نمونه ساخته می شوند، یک روش ساده و نسبتا ارزان به شرح زیر است:

1- ابتدا بوسیله ابزارهای مناسب روی سطح پنل دستگاه، جای کلید و کانکتور و ولوم و سایر موارد لازم را در می آوریم.
2- طرح مورد نظر خود را در یک نرم افزار طراحی مانند Coreldraw بصورت یک به یک و در ابعاد دقیق و با اشکال و رنگ های دلخواه طراحی می کنیم.
3- از طرح فوق بسته به نیاز بصورت رنگی یا سیاه و سفید پرینت می گیریم.
4- روی سطح بیرونی طرح، سلفون شفاف چسب دار و پشت آن را چسب دو طرفه می چسبانیم. در مواردی که LCD و 7segment و نظایر آن وجود داشته باشد باید ابتدا دور آنها را در طرح پرینت گرفته شده برش دهیم و علاوه بر چسباندن سلفون روی طرح، در وجه پشت آن هم سلفون بچسبانیم و در مرحله بعد روی سلفون وجه پشت، در نواحی غیر از داخل کادر LCD و 7segment چسب دو طرفه بچسبانیم.
5- دور طرح را با تیغ برش می دهیم. در محل نصب قطعات روی پنل هم باید برش مناسب انجام داده شود.
6- پوشش چسب دو طرفه در پشت طرح را بر می داریم و طرح را در محل خود روی جعبه دستگاه می چسبانیم.
7- قطعاتی مانند کلید ها و کانکتور ها و غیره را در محل خود نصب می کنیم.
(تاکید به جهت فرهنگ سازی: لطفا بصورت فوروارد و با ذکر منبع منتشر شود)

@KnowledgePlus
چند سال پیش مجموعه مطالبی در مورد کار و اشتغال در برق و الکترونیک در انجمن ECA نوشته شد که مطالعه آن برای دوستانی که هنوز در ابتدای مسیر کاری خود هستند ممکن است مفید باشد:

https://www.eca.ir/forums/thread22602.html

@KnowledgePlus
معرفی یک کتاب مفید برای مباحث طراحی آنالوگ:

نام کتاب: A Practical Introduction to Electronic Circuits
مولف: Martin Hartley Jones
این کتاب توسط بهزاد رضوی و همایون نیکوکار با نام "روشهای الکترونیک از تئوری تا عملی" ترجمه شده است. اما ترجمه آن احتمالا منطبق با آخرین ویرایش کتاب نیست.

@KnowledgePlus