وبلاگ همه برو بچ رشته برق
 

با سلام...

اين يک پروژه ساده اما جالبه.در قالب فايل zip اينجا می ذارم.

------+++++++++++++++-------------------+++++++++++-----------

 

ساخت یک فرستنده با فرمان کامپیوتری

 

Building a computer controlled transmitter عنوان اصلی مقاله:

آیا دوست دارید پیغام های متنی خود را بدون استفاده از سیم , بدون هیچ اتصال اینترنتی و بدون پرداخت هزینه ماهانه ,به دوستانتان ارسال کنید؟

در این پروژه ما یک فرستنده رادیویی خیلی ساده می سازیم که بایستی آن را به پورت سریال کامپیوترتان متصل کنید.آن گاه کامپیوتر , یک برنامه رایگان را اجرا می کند و کلماتی که شما تایپ کردید را به سیگنالهای رادیویی تبدیل می نماید تا به وسیله یک کامپیوتر دیگر و با استفاده از کارت صدا[1] و یک گیرنده رادیویی ارزان , رمزگشایی[2] شود....

 

دوستان عزيز! شما می توانيد کل اين مطلب را در قالب فايل Zip از اين آدرس داونلود کنيد


اين يک جزوه عملی خوب برای شروع کار با ميکرو های PIC است

با تشکر از آقا سعيد ديداری پسر دايی عزيزم

سه‌شنبه ٢۸ تیر ،۱۳۸٤ - hessameddin shafeiyan | لینک دائم | پيام هاي ديگران () | Add to Del.icio.us  digg this post  add to google bookmarks  add to technorati   add to shadows  

 

 

 پروژه  روباتیک:مودم RF

 

 

عنوان اصلی مقاله:RF MODEM ROBOTICS PROJECT

 

bot.jpg (34313 bytes)

RufBOT  از سیستم TWS434RF  استفاده می کند

 

استفاده از RF   در طرحهایتان راه حل مناسبی است. ولی اگر شما نیز مانند من مبتدی باشید , ساختن موفقیت آمیز یک فرستنده-گیرنده  Solid RF سخت است.

وقتی که من شروع به کار کردم ,نمی دانستم فلز برد بورد[1]  مانند خازنهای کوچکی عمل نموده و باعث اعوجاج سیگنال فراوانی شده ,که در نتیجه عملکرد و پویایی مدار تغییر میکند.

پس از تحقیق زیاد جفت فرستنده-گیرنده TWS 434 و RWS 434  از Reynolds Electronics  را پیدا کردم.البته من تولیدات مشابهی از MING Microsystems و  Radioshack   را نیز امتحان کردم, اما محصول  Reynolds Electronics از لحاظ قابلیت , قیمت و راحتی کار با آن بهتر از بقیه بود.بنابراین به کمک آن و نیز دو میکروکنترلر PIC16F84  [2]   کار کردن روی رابط سریال RF  خود که واسط بین کنترل گر(جوی استیک[3]) و روبوت بود را  شروع کردم.شما می توانید این قطعات را در  www.rentron.com/rf_remote_control.htm   بیابید.

 

 

 overhead.jpg (45407 bytes)

نمای بالای ساختمان روبوت که روی یک برد بورد کوچک قرار دارد

 

rws434.gif (12850 bytes) 

شماتیک مدار

 

من متوجه شدم جفت مدار  فرستنده-گیرنده و ارتباط سریال تعبیه شده در زبان برنامه نویسی PICBasic موجود در PIC  های من,با یکدیگر به خوبی کار می کنند.من مطمئن نبودم , مدار با تبادل سریال غیرهمزمان و با  نرخ[4] (باود)  9600  خوب کار کند چون در سرعتهای بالا انتظار یک سری مشکلات را داشتم, اما در عمل به اشکالات اندکی برخورد کردم.من به سادگی موقعیت پتانسیومتر موجود در  جوی استیک را با استفاده از دستور  POT که از دستورات PICBasic  است, خواندم و نتیجه را در موقعیت B0  قرار دادم. و از آنجا با دستور SEROUT   محتوای B0   حافظه را به پایه 6 فرستنده TWS 434  ارسال نمودم تا داده دریافتی  از پین 3 , RWS 434 را خوانده  و حاصل را در B0   قرار دهدم.

مقادیر موجود در B0  با موقعیت جوی استیک رابطه مستقیم دارد.ورودی بالاتر از 150 نشانگر "راست" است , پایین تر از 106 علامت چرخش به "چپ" بوده و میان این دو , نشان دهنده "مرکز" است.با استفاده از این اعداد می توان یک محدوده تعریف کرد.

                                                                                                         

 

 

 overhead1.jpg (36761 bytes)tx.jpg (29525 bytes)

PIC  اطلاعات دسته بازی(جوی استیک) را خوانده و ارسال می نماید

 

tws434.gif (14114 bytes)

شماتیک مدار فرستنده

 

در این نقاط اشارات(جهت حرکت دسته بازی) به سادگی  قابل مشاهده است.از طریق اعداد فرستاده شده می توانیم مسیر(راست ,چپ و غیره) و همچنین میزان انحراف به چپ  و راست را تعریف کنیم. با این داده ها  امکان تعریف "کنترل سرعت" وجود دارد.برای اعداد دورتر از  128 (مرکز) سرعت بیشتری اعمال شده است[5].در مورد این مدار , من از پایه های  PORTA از PIC  برای کنترل مسیر موتور استفاده کردم ولی کنترل سرعت نکردم.از آنجا که داده سریال ده بیتی است(یک بیت شروع ,هشت بیت داده و یک بیت پایانی) می توانیم در عرض یک ثانیه , 960 دستور را به PIC   گیرنده بفرستیم که برای قطعات زیر 20 دلار بد نیست.با استفاده از آنتن هایی که برای تلفن های بیسیم 900 MHz ساخته شده است , توانستم در فضای آزاد به برد 350 فوت[6]   برسم و هنگامی که تغذیه گیرنده را کمی از 12 ولت بیشتر کردم به بورد 500 فوت[7]  نیز رسیدم(این کار توصیه نمی شود).

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

قطعه کد زیر نشان می دهد که قطعات موجود در  سیستم شما چقدر ساده  کار می کنند.

 

 

TX CODE:
symbol trisb = 134
symbol trisa = 133
symbol portb = 6
symbol porta = 5
poke trisa, 1
low 1                  'use this line if enable pin on 245 is not grounded.
input 0
start:
B0 = 0
pot 0,25,B0
serout 1,n9600,(B0)
goto start
left:
serout 1,n2400,(255)
goto start
right:
serout 1,n2400,(1)
goto start
end
 
RX CODE:
symbol trisb = 134
symbol trisa = 133
symbol portb = 6
symbol porta = 5
poke trisa ,0
poke porta ,0
low 0
input 1
start:
B0 = 0
serin 1,n9600,B0
if B0 > 150 then right
if B0 < 106 then left
goto stop
right:
poke porta, 6
goto start
left:
poke porta, 9
goto start
stop:
poke porta, 0
goto start
end

 

 

 

 



[1] Breadboard

[2] است MICROCHIP پر استفاده ترین میکروکنترلر دنیا که محصولی است از شرکت

[3] Joystickدسته بازی-

[4] Baud

[5] البته به نظرمن تنها در صورتی این گفته درست است که سرعت  واکنش بازیکن برای همه حرکات از جمله راست و چپ و مرکز, به یک اندازه باشد.چون میتوان به عنوان مثال دسته را به آرامی و طی زمان نسبتا طولانی به سمت راست منحرف کرد و بالعکس.

[6] حدود 107 متر

[7] بیش از 152 متر

دوشنبه ٢٠ تیر ،۱۳۸٤ - hessameddin shafeiyan | لینک دائم | پيام هاي ديگران () | Add to Del.icio.us  digg this post  add to google bookmarks  add to technorati   add to shadows  

 

سلام

اين هم دو مقاله خوب


 

درایو دو موتور پله ای با میکروکنترلر PIC

 

مقدمه:

این مقاله سخت افزار و نرم افزار به کار رفته در کنترل دو موتور پله ای[1]  را که برای روبوت های با درایور دیفرانسیلی , مناسب می باشند را شرح می دهد.این مدار دو کلمه دو بیتی را می پذیرد تا به هر یک از موتورها فرامین حرکت به جلو , عقب , تثبیت موقعیت و سکون را دهد.همچنین هرگاه یک پله(گام) شکل گرفت (طی شد) , یک سیگنال خروجی ایجاد می کند.این مدار طرحی مناسب می باشد که با آن میتوان تحریک سیم پیچ , سرعت موتور , شکل "کلمه کنترل [2] " وسایر پارامترهای موتورهای تک قطبی و دو قطبی مبتنی بر میکروکنترلر را اصلاح کرد.نرم افزار آن نیز , به زبانهای C  و Assembly تهیه شده است.

 diagram.jpg (49775 bytes)

مدار سخت افزار:

مدار مذکور شامل سه آی سی است: 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] طراحی نمایید.

 

ارتباطات ولینک ها:

نویسنده: J.- L. (John) Girard

وب پیچ: John Girard's Embedded Systems

C2C C-compiler



[1] Stepper  Motor

[2] Control Word

[3] H-Bridge

[4] Pul-Up

[5] Pulse Width Modulation

[6] Chopper-Drive


 

مقاله بعدی هم آماده است.در اسرع وقت آپديت می کنم

 

جمعه ۱٧ تیر ،۱۳۸٤ - hessameddin shafeiyan | لینک دائم | پيام هاي ديگران () | Add to Del.icio.us  digg this post  add to google bookmarks  add to technorati   add to shadows  

 

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

و اما..

۱-به زودی زود يک سری ترجمه مقاله همراه با لينکش اينجا ميزارم....

۲-سايت آقا اشکان که از مرور اون لذت بردم

۳-يک نرم افزار بسيار خوب برای شبيه سازی و اديت ۸۰۵۱ به زبانهای سی و اسمبلی نرم افزار فرانکلين يا proview32 است.يه سر به وبلاگ مهندس نحوی بزنيد


مجموعه ای از مدارات راديويی و صوتی و مبتنی بر کامپيوتر و...

 

دوشنبه ۱۳ تیر ،۱۳۸٤ - hessameddin shafeiyan | لینک دائم | پيام هاي ديگران () | Add to Del.icio.us  digg this post  add to google bookmarks  add to technorati   add to shadows