PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : پروگرمر ارزان قيمت f84



nafise sadeghi
18th October 2008, 12:57 AM
اين مقاله سخت افزار و نرم افزار به کار رفته در کنترل دو موتور پله اي[1] را که براي روبوت هاي با درايور ديفرانسيلي , مناسب مي باشند را شرح مي دهد.اين مدار دو کلمه دو بيتي را مي پذيرد تا به هر يک از موتورها فرامين حرکت به جلو , عقب , تثبيت موقعيت و سکون را دهد.همچنين هرگاه يک پله(گام) شکل گرفت (طي شد) , يک سيگنال خروجي ايجاد مي کند.اين مدار طرحي مناسب مي باشد که با آن ميتوان تحريک سيم پيچ , سرعت موتور , شکل "کلمه کنترل [2] " وساير پارامترهاي موتورهاي تک قطبي و دو قطبي مبتني بر ميکروکنترلر را اصلاح کرد.نرم افزار آن نيز , به زبانهاي C و Assembly تهيه شده است.




◄ مدار سخت افزار:
مدار مذکور شامل 3 آي سي است: PIC16F84 وهمچنين دو درايور پل [3] H ,L293D براي موتورهاي پله اي دوقطبي(شکل پايين) يا دو ULN2803 براي موتور پله اي هاي تک قطبي.سواي منابع تغذيه , قطعات مدار تنها به :نوسانساز 4MHz , يک مقاومت بالاکش[4] 10 کيلو اهم و چند کانکتور محدود مي شود.در اين طرح يک بسته 6 تايي از باتري هاي 1.2 ولتي ,که اختلاف پتانسيل 7.2 ولت توليد مي کنند به طور خطي تنظيم(رگوله) مي شوند تا تغذيه منطقي 5 ولتي را تامين نمايند.افت ولتاژ ترانزيستورهاي دوقطبي درايور , به ولتاژ 7.2 ولت اجازه نمي دهد موتور را بيش از توان آن درايو کند.
" کلمه کنترل" به دو کلمه کنترل 2 بيتي شکسته شده است:دوبيت باارزش تر که بيتهاي 2و3 از PORTA هستند , موتورسمت چپ را کنترل نموده و دو بيت کم ارزش تر يعني بيتهاي 0 ,1 از PORTA موتور سمت راست را کنترل مي کنند.براي اين مقادير:00 ,01 ,10 ,11 , کلمه کنترل به موتورها به ترتيب فرامين:جلو ,عقب,تثبيت موقعيت و سکون را مي دهد.اين ترتيب را مي توان به سادگي عوض کرد(نرم افزار پايين را ببينيد)
بنا به مدار طراحي شده,امکان کنترل سرعت موتور فراهم شده است.بخصوص اين که به پالس هاي کنترلي متناوب براي پيشبرد موتورها نيازي نيست.بعلاوه هنگامي که يک گام(پله) طي شد,مداريک سيگنال خروجي در بيت 4 از PORTA توليد مي کند.کنترل کننده اصلي مي تواند اين سيگنال را بازبيني کند تا هنگامي که کلمه کنترل بايستي تغيير کند را مشخص کند.به عنوان مثال براي اينکه فاصله معيني به جلو حرکت نمايد, پردازنده اصلي , تعداد گام هاي لازم براي دستيابي به اين هدف را محاسبه نموده و به اين ترتيب فرمان رو به جلو را به موتور صادر مي کند.وقتي که تعداد گام هاي لازم طي شد ,کلمه کنترل مي تواند به وضعيت ايست تغيير کند يا مجددا حرکت نمايد.در اکثر پردازنده ها عمل شمردن گام ها(پله ها) را مي توان به يک فعاليت در پس زمينه موکول کرد تا اين امر در هر زمان وبدون دخالت کاربر صورت گيرد.

◄ نرم افزار:
دو نسخه از نرم افزار موجود است.اين يکي در C2C که نسخه اي خاص از زبان C است و ديگري در زبان اسمبلي که با کمک چند ماکرو ساختارهاي برنامه نويسي سطح بالا ايجاد مي کند.
برنامه اصلي به سادگي و به تناوب ,PORTA را جهت يافتن تغيير در کلمه کنترل مي خواند.اين فرايند هر از چند گاهي هنگامي که موتور به يک تحريک جديد نياز داشته باشد توسط وقفه TMR0 متوقف مي شود.چون تحريک موتور دوره اي است , کنترل موتور در پس زمينه اجرا مي شود.
نرم افزار موجود به ما اجازه تغييرات ساده اي در تحريک سيم پيچي موتور ,کلمه کنترل و سرعت موتور را مي دهد.بدين ترتيب مي توان به سادگي جدول تحريک را از لحاظ اندازه و محتوي براي نيم پله اصلاح کرد.کلمات کنترل تنها يک شمارش(از صفر تا چهار) هستند.بنابراين مي توانيم ترتيب آنها را انتخاب کرده و در صورت لزوم , عوض نمود.باتغيير مقدار اوليه TMR0 مي توان سرعت را در مبناي دو تغيير داد.تغييرات بهتر با ايجاد تغيير در مقدار اوليه TMR0 به دست مي آيند.
اين خطوط شبه کد نرم افزار هستند:
Constants
EXCITATION_TABLE_SIZE = 4 // number of excitations in sequence
TMR0_CNT_UP = 100 // 256 - duration (motor speed)
// Motor states
RIGHT_FORWARD = 0 // These can be re-ordered
RIGHT_BACKWARD = 1
RIGHT_HOLD = 2
RIGHT_IDLE = 3
LEFT_FORWARD = 0 // Above states shifted 2 bits left (multiplied by 4)
LEFT_BACKWARD = 4
LEFT_HOLD = 8
LEFT_IDLE = 12
GlobalVariables
leftExcitationCntr // current left motor excitation number
rightExcitationCntr // current right motor excitation number
motorState // 4 bit function word for both motors
excitations[] = {11000000b, // Excitation table - if the table is changed in size,
01100000b, // then the EXCITATION_TABLE_SIZE constant
00110000b, // must be changed
10010000b}
Functions
motorISR // Motor Interrupt Service Routine
// Modifies global variables leftExcitationCntr and rightExcitationCntr as a function of motorState.
// It uses these counters as indices to read the motor excitation from the table and outputs it to PORTB.
LocalVariables leftExcitation, rightExcitation
if (motorState is RIGHT_FORWARD)
if (rightExcitationCntr = EXCITATION_TABLE_SIZE-1)
rightExcitationCntr = 0
else
increment rightExcitationCntr
rightExcitation = excitations[rightExcitationCntr]
else if (motorState is RIGHT_BACKWARD)
if (rightExcitationCntr = 0)
rightExcitationCntr = EXCITATION_TABLE_SIZE-1
else
decrement rightExcitationCntr
rightExcitation = excitations[rightExcitationCntr]
else if (motorState is RIGHT_HOLD)
rightExcitation = excitations[rightExcitationCntr]
else // RIGHT_IDLE
rightExcitation = 0
shift rightExcitation 4 bits right
if (motorState is LEFT_FORWARD)
if (leftExcitationCntr = EXCITATION_TABLE_SIZE-1)
leftExcitationCntr = 0
else
increment leftExcitationCntr
leftExcitation = excitations[leftExcitationCntr]
else if (motorState is LEFT_BACKWARD)
if (leftExcitationCntr = 0)
leftExcitationCntr = EXCITATION_TABLE_SIZE-1
else
decrement leftExcitationCntr
leftExcitation = excitations[leftExcitationCntr]
else if (motorState is LEFT_HOLD)
leftExcitation = excitations[leftExcitationCntr]
else
leftExcitation = 0
PORTB = leftExcitation + rightExcitation
end motorISR
interrupt // Main interrupt service routine gets control when TMR0 overflows
if (TMR0 overflowed causing an interrupt)
bit 4 of PORTA = 1 // signal motor step on
call motorISR // call motor interrupt service routine
bit 4 of PORTA = 0 // signal motor step off
TMR0 = TMR0_CNT_UP; // reset TMR0 to proper count
end interrupt
main
set TMR0 prescaler = 64 // divides clock by value set
bit 4 of PORTA = 0 // signal motor step off
leftExcitationCntr = 0
rightExcitationCntr = 0
TMR0 = TMR0_CNT_UP;
enable TMR0 interrupts
while (1) // continuously update motorState (and wait
motorState = PORTA // for a TMR0 interrupt)
end main
◄ جمع بندي:
يک درايور معمولي موتور پله اي (هر چند ناقص) که مبتني بر ميکروکنترلر بود ,طراحي شده و با موفقيت ساخته شد.از آنجا که تنها 124 تا از 1024 کلمه حافظه PIC16F84 استفاده شد(در زبان اسمبلي) , مي توان خواصي نظير افزايش سرعت و کاهش سرعت را نيز به آن اضافه نمود.همه 13 خط ورودي/خروجي در طرح حاضر استفاده شدند , بنابراين سيگنال هاي کنترلي خارجي اضافه بر اين, به يک ارتقا در ميکروکنترلرPIC شما نيازمندند.با PIC16F876 که داراي امکاناتي همچون "مدولاسيون پهناي پالس [5] " و تبديل آنالوگ به ديجيتال است , ممکن است بتوانيد درايو برشگر[6] طراحي نماييد.
[1] Stepper Motor
[2] Control Word
[3] H-Bridge
[4] Pul-Up
[5] Pulse Width Modulation
[6] Chopper

پروگرمر ارزان قيمت F84

نويسنده: سام الدين شافعيان(دانشجوي کارشناسي برق و الکترونيک دانشگاه مازندران)
منبع اطلاعاتي: hessameddin.persianblog.com ايميل: shafeiyan@yahoo.com
http://www.fadack.com/Archive/Electronic/learn/Archive_0001.htm

hengameh
14th April 2010, 06:49 PM
چکیده: شکل 1 دیاگرام مدار پروگرمر F84 را نشان می دهد.برخی از پین های میکرو از طریق پروگرمر به پورت موازی مثل LPT1 متصل شده اند.Vdd از طریق D2 و با منطق منفی کنترل شده است.صفر منطقی در این پین , ترانزیستور 2N2907 را روشن کرده و 5 ولت را به پین شماره 14 اعمال می کند.به طور مشابه برای Vpp , با یک منطق منفی D3 ترانزیستور 2N2907 را کنترل نموده و ولتاژ نزدیک به 14 ولت را به پایه MCLR اعمال می کند.همان طور که می بینید , ولتاژ برنامه ریزی Vpp از بالا رفتن ولتاژ پایه GND رگولاتور 78L09 تا 5 ولت به دست می آید."خواندن" و "نوشتن" داده ,از پین RD7 استفاده می کند.D0 بسته های سریال را می فرستد در حالی که ACK در حین عمل برنامه ریزی آن را بازخوانی می کند.D1 کلاک خروجی روند برنامه ریزی همزمان است و ورودی DC بایستی حدود 17 ولت باشد.
http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/read1.gif

http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/1f84.jpg

http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/f84pro.jpg
شکل1-دیاگرام مدار پروگرمر F84
نرم افزار:
WPIC16.ZIP نسخه به روز شده و تحت ویندوز نرم افزار پروگرمر F84 است که توسط "نایجل گودوین" نوشته شده است.ممکن است بتوانید آخرین نسخه این برنامه را مستقیما از سایت (http://www.lpisley.co.th/SOFTWARE.HTM) اینترنتی او (http://www.lpisley.co.th/SOFTWARE.HTM) تهیه کنید.
مانند آنچه در شکل زیر می بینید, پنجره "Hardware Settings" -یعنی تنظیمات سخت افزاری- را تطبیق دهید.
http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/set.gif


دکمه های موجود در شکل فوق می توانند برای انطباق سخت افزاری بیت دلخواه را "بنشانند" یا "پاک" کند.در ضمن,این برنامه به وسیله کمپایلر PIC C قابل فراخوانی بوده و فایل Hex تولید شده بعد از عمل کمپایل کردن , در حافظه بافر(Buffer Memory) بار گذاشته می شود.با فشردن دکمه WRITE PIC می توانید کد Hex را در بافر تراشه بنویسید.بعدشم حالشو ببرید!
http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/read.gif



شکل2-مثالی از استفاده از دستور READ PIC
سخت افزار پروگرمر F84 می تواند به خوبی و بدون هیچ تغییری در مدار توسط EPICWIN (http://melabs.com/mel/epicbeta.htm) استفاده شود.بنابراین وقتی به برنامه ریزی PIC های نوع دیگری نیاز دارید ,تنها بایستی سوکت تراشه F84 را به شکلی مناسب برای PIC مورد نظرتان تغییر دهید.
http://chaokhun.kmitl.ac.th/%7Ekswichit/f84/epicwin.gif

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

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد