NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3957 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 10 از 10

موضوع: راه اندازی سروو موتور با pic با دقت بالا

  1. #1
    عضو جدید
    تاریخ عضویت
    Jan 2011
    نام
    ایمان شعبان زاده
    نوشته ها
    7
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض راه اندازی سروو موتور با pic با دقت بالا

    با سلام خدمت دوستان عزیز
    من می خواستم 2 عدد سروو موتور رو با PIC18F452 راه اندازی کنم. به این صورت که میکرو با کامپیوتر با RS232 ارتباط برقرار می کنه و زاویه این 2 سروو رو از کامپیوتر دریافت می کنه.
    موفق به این کار شدم ولی مشکلی که وجود داره اینه که نمیتونم سروو رو خیلی دقیق درایو کنم. البته مجبور شدم از اسیلاتور خارجی 32MHz استفاده کنم با این حال تونستم 180 درجه رو به تقریبا 160 قسمت تقسیم کنم. همونطور که می دونین سروو 180 درجه حرکت می کنه. من میخوام دقت حرکت یک سوم درجه یا بیشتر باشه. یعنی هر درجه رو به سه قسمت یا بیشتر تقسیم کنم. در واقع 180 رو به 540 یا بیشتر قسمت تقسیم کنم. ممنون می شم اگه راهنمایی کنید. آیا اصلا با این میکرو میشه این کارو کرد یا نه؟ در ضمن اگه سوال من واضح نبود بفرمایید تا بیشتر توضیح بدم.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    عضو جدید
    تاریخ عضویت
    Jan 2011
    نام
    ایمان شعبان زاده
    نوشته ها
    7
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    باز هم سلام.
    از دوستان عزیز کسی پاسخ این سوال رو نمی دونه؟
    فکر نمی کردم اینقدر سوال سختی باشه.
    ممنون می شم اگه می دونین کمک کنید.

  4. #3
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    همه چیز بستگی به سرور داره ، مثلا ما قبلا روی یه سرور کار میکردیم ( توی سایت مطالبش هست ) که برای راه اندازیش باید پالسی مطابق شکل زیر ور بهش میدایم :

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

  5. کاربران : 3 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  6. #4
    عضو جدید
    تاریخ عضویت
    Jan 2011
    نام
    ایمان شعبان زاده
    نوشته ها
    7
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام.
    ممنون از پاسختون.
    من از موتور MG995 و کامپایلر Mikroc استفاده کردم. البته الان یه موتور گرفتم به شماره 9805MG که طریقه راه اندازیش مثل همونه. و اینکه باید بگم می خوام با استفاده از تایمرها این کارو انجام بدم. آخه بعضی ها با Delay کار می کنن. این سروو ها یک پالس 50 تا 55 هرتز می گیرن. یعنی دوره تناوب 20ms . حال اگه پالس مورد نظر تو این 20 ms به اندازه 0.5ms یک باشه، موتور به زاویه صفر درجه میره و اگه به اندازه 2.5ms یک باشه به زاویه 180 درجه میره. یعنی بازه 180 درجه رو با تغییر Pwm از 0.5ms به 2.5ms میزنه. با این نکات مشخصه که مثلا برای 90 درجه باید به اندازه 1.5ms از پالس رو یک کنیم. کلا سختی درایو کردن سروو موتورها اینه که محدوده کنترل اونا خیلی کمه یعنی همون از 0.5 تا 2.5 میلی ثانیه که میشه 2 میلی ثانیه. حالا اگه بتونیم این 2ms رو به قسمتهای کوچکتری تقسیم کنیم دقت ما بیشتر می شه. مثلا اگه اونو به 4 قسمت تقسیم کنیم هر قسمت میشه 0.5ms . این یعنی 0.5ms و 1ms و 1.5ms و 2ms و 2.5ms رو داریم. یعنی فقط می تونیم به زاویه های 0 درجه، 45 درجه، 90 درجه، 135 درجه و 180 درجه دسترسی داشته باشیم. حالا اگه 4 قسمت بشه 8 قسمت ما به زوایای بین زاویه های گفته شده هم دسترسی داریم. یعنی زوایای 0 و 22.5 و 45 و 67.5 و 90 و 112.5 و 135 و 157.5 و 180 . پس هر چقدر تقسیم ما بیشتر باشه کار ما دقیق تره. البته این مقدار تقسیم برای کار من اصلا مناسب نیست. چون میخوام سروو یک چهارم یا یک سوم درجه بزنه. پس باید این 2 میلی ثانیه رو به 540 یا 720 قسمت تقسیم کنم. اون وقت 0.5ms زاویه 0 درجه، 0.5027777ms یک چهارم درجه، 0.5055555ms دو چهارم یا نیم درجه و .... وهمینطور به ازای هر یک چهارم درجه باید مقدار یک بودن پالس ما به اندازه 0.00277777 میلی ثانیه تغییر کنه که این عدد از تقسیم 2 به 720 بدست می آد. 720 هم که از ضرب 180 در 4 بدست می آد. یعنی 2 میلی ثانیه رو به 720 قسمت تقسیم کردیم و باز هم این یعنی 20 میلی ثانیه کل پالس رو باید به 7200 قسمت تقسیم کنیم. حالا اگه بخواهیم به 0 درجه بریم باید از این 7200 قسمت، 180 قسمت رو یک و 7020 قسمت رو صفر کنیم. که مجموع 7020 و 180 میشه همون 7200 . برای دستیابی به زاویه 45 درجه باید 360 قسمت رو یک و 26840 قسمت رو صفر کنیم. برای 90 درجه 540 قسمت و .... همونطور که می بینید برای زوایای 0 تا 45 درجه باید بین 180 تا 360 قسمت تغییر داشته باشیم. که بازش میشه 180 قسمت. یعنی هر زاویه به 4 قسمت تقسیم شد. امیدوارم تونسته باشم منظورم رو کامل بیان کنم. حال من می خوام این پالس رو ایجاد کنم. البته نمی دونم بشه با این PIC ها این کارو کرد یا نه. شاید باید از میکروهای با فرکانس های بالاتر استفاده کرد. با تشکر.

  7. #5
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    توی آدرس زیر نحوه ی انجام دادن محاسبات مربوط به تایمر توضیح داده شده .
    http://ezinearticles.com/?PIC-Microc...tion&id=220132
    همون طور که می بنید با تایمر های 8 و 16 بیتی میکرو کنترلر های pic ، در صورتی که فرکانس میکرو برابر با 32 مگاهرتز ( که در داخل میکرو به 4 تقسیم میشه ) و مقدار prescaler رو هم 2 در نظر بگیریم ، مقدار زمان برابر خواهد بود با:
    Ft/c= Fosc/4
    1/(8MHz/2/256) = 64us
    روش دومی که وجود داره اینه که برای تایمر یه مقدار اولیه در نظر بگیریم ، مثلا در رجستر مقدار تایمر رقم 255 رو قرار بدیم تا تایمر بعد از شمردن یک رقم سرریز بشه ، در این صورت زمان ما میشه :
    Ft/c= Fosc/4
    1/(8MHz/2/1) =500ns
    این زمان حداقل مقداری هست که ما میونیم با pic بوجود بیاریم ، اما این وسط یک مشکل دیگه وجود داره ، میکرو در هر پالس کلاک یک دستور اجرا میکنه ، یعنی با فرکانس 32 مگا هرتز هر دستور در 0.000000125 ثانیه اجرا میشه ، پس ما نمیتونیم هر مقداری رو برای تایمر در نظر بگیریم .
    عاقلانه ترین راه این هست که شما زمان پایه ی 2.78 میکرو ثانیه رو ایجاد کنید و بعد با یک دستور شرطی از این زمان برای بدست آوردن زمان های دیگه استفاده کنید .
    طبق محاسباتی که من انجام دادم ، در صورتی که میکرو با فرکانس 32 مگا هرتز کار کنه و مقدار prescaler هم برابر با دو باشه ، اگه به تایمر ( تایمر های 8 بیتی ) مقدار اولیه 245 رو بدی میتونی زمان 2.75 میکرو ثانیه رو ایجاد کنی .

    ( وقتی که به تایمر مقدار می دیم ، دو تا از پریود های اون از بین میرن ، مثلا توی همین مقدار 245 ، مقداری که تایمر میشماره برابره با 9 + 2 یعنی 11 میشه ) .

    این برنامه رو باید تست کنی و ببنی میکرو میتونه انجامش بده یا نه ( من خودم با میکرو بیسیک کار نکردم ، وگرنه حتما برات برنامه رو مینوشتم ) .

  8. کاربران : 2 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  9. #6
    عضو جدید
    تاریخ عضویت
    Jan 2011
    نام
    ایمان شعبان زاده
    نوشته ها
    7
    تشکر
    2
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام.
    با تشکر.
    یه سوالی واسم پیش اومده. اینکه چرا Prescale رو 2 گرفتی؟ چرا یک نگرفتی؟
    اگه یک می گرفتی که بهتر می شد. اونوقت می شد بجای 245 مقدار 236 رو به عنوان مقدار اولیه داد.
    البته باز هم فکر می کنم که میکرو نتونه اجراش کنه. اونوقت باید حجم برنامه اصلی و برنامه داخل Intrupt خیلی خیلی کم باشه و از اونجاییکه من با سریال هم کار می کنم فکر نکنم حجم برنامه کم بشه.
    با این وجود یا باید فرکانس رو بالا ببرم که تا 40MHz بیشتر نمیشه بالا بردش یا باید میکروی دیگه ای رو پیدا کنم. تو خانواده PIC میکروای داریم که فرکانس بالاتر رو ساپورت کنه و ترجیحا 2تا پورت سریال داشته باشه؟
    و یه چیز دیگه، بنده عرض کردم با MikroC (میکرو سی) کار می کنم نه میکرو بیسیک.
    و این که من خودم این کارو انجام دادم و نتونستم مقدار اولیه تایمر رو از 195 بیشتر بدم. وقتی بیشتر از 195 می دادم، قسمت اصلی برنامه درست اجرا نمی شد. یعنی اختلاف تا سرریز باید حداقل 60 تا می بود تا درست کار میکرد.
    ممنون می شم به سوالاتم جواب بدین.

  10. #7
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    شما برنامه رو به صورت عملی تست کردید ؟
    با این وجود یا باید فرکانس رو بالا ببرم که تا 40MHz بیشتر نمیشه بالا بردش یا باید میکروی دیگه ای رو پیدا کنم. تو خانواده PIC میکروای داریم که فرکانس بالاتر رو ساپورت کنه و ترجیحا 2تا پورت سریال داشته باشه؟
    فکر کنم PIC24HJ32GP202/204 بدرد شما بخوره ( باید دیتا شیت ها رو ببنید )
    و یه چیز دیگه، بنده عرض کردم با MikroC (میکرو سی) کار می کنم نه میکرو بیسیک
    من با ccs کار کردم
    .................................................. .........................
    شما باید با توجه به فرمول های بالا مقادیر رو تغییر بدید تا بتونید زمان رو ایجاد کنید ، اگه امکان مقدار دهی تایمر وجود نداره ، توی میکرو سی ، مقدار دهی مستقیم رجیستر ها رو انجام بدید .
    در کل بهتره برنامه ای که نو شتید رو بزارید .

  11. #8
    عضو جدید
    تاریخ عضویت
    Dec 2009
    نوشته ها
    6
    تشکر
    1
    تشکر شده 1 بار در 1 پست

    پیش فرض

    با سلام
    منم دوتا از این سرو موتور های مدل 9805mg دارم که میخام اونها رو با avr و زبان بیسیک رواهاندازی کنم البته با دقت یک درجه لطفا منو در این مورد راهنمایی کنید

  12. #9
    عضو جدید
    تاریخ عضویت
    Jan 2012
    نوشته ها
    14
    تشکر
    4
    تشکر شده 1 بار در 1 پست

    پیش فرض

    سلام
    در مورد این موضوع یک سوال دارم؟؟
    ببینید اگر فرض کنیم که بشه با تایمرهای یک میکرو حالا چه pic و چه avr یا هر چیز دیگه ای , این زمانهای کوچک را بوجود بیاریم , آیا سروو این زمانهای کوچک را حساب میکنه؟؟ آخه سرووها یه چیزی به نام زمان مرده یا یه همچین چیزی دارند که اگه تغییر عرض پالس از اون حد کوچکتر باشه , اون را به حساب نمیارند و حرکت نمیکنند!!!
    در مورد این مسئله هم بد نیست توضیح بدید!!

  13. #10
    کاربر فعال
    تاریخ عضویت
    Aug 2011
    نام
    Dany
    نوشته ها
    257
    تشکر
    138
    تشکر شده 185 بار در 106 پست

    پیش فرض

    سلام
    من زیاد با این نوع سرووها کشتی گرفته ام شما به این زمان های کوچک با این نوع سرووها نخواهید رسید ( نیاز به سرووهای بهتری دارید)وقتی به صورت عملی تست کنید خودتان متوجه می شوید و دلیل اصلی ان این است که این سرووها به صورت خطی عمل نمی کنند تا یک جایی خطی می روند بعدش به صورت غیر خطی
    البته اگه فقط یک موتور داشته باشید می توانید تا حد زیادی ناحیه خطی را از غیر خطی مشخص کنید ولی وقتی تعداد موتورهای زیاد شود یا ولتاژ و جریان مدار به هر علتی تغییر کند این نقطه جابجا می شود کاری که من انجام می دادم این بود که با تغییر پالس از طریق استفاده از پورت سریال و نرم افزار vb به صورت چشمی زاویه مورد نظر را حساب می کردم و مقدار مقایسه ای برای تایمر را بدست می اوردم
    ویرایش توسط skiboys : 20-06-2013 در ساعت 23:45

موضوعات مشابه

  1. $$$$ سروو موتورها $$$$
    توسط REZA_KLNTR در انجمن موتورها و درایوها
    پاسخ: 6
    آخرين نوشته: 23-10-2018, 15:18
  2. پاسخ: 17
    آخرين نوشته: 09-02-2018, 15:50
  3. سروو موتور
    توسط mehrdad22 در انجمن موتورها و درایوها
    پاسخ: 7
    آخرين نوشته: 07-08-2013, 03:07
  4. مشکل در راه اندازی سروو موتور
    توسط Bio-Engineer در انجمن PIC
    پاسخ: 4
    آخرين نوشته: 14-01-2013, 15:30
  5. سروو موتور
    توسط usef در انجمن سنسور و ماژول های اندازه گیری
    پاسخ: 22
    آخرين نوشته: 15-04-2009, 15:26

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •