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

موضوع: کنترل دور موتور توسط pwm با تغییر دما ؟

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    28
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض کنترل دور موتور توسط pwm با تغییر دما ؟

    با سلام
    نحوه نوشتن یه برنامه که بتوان با تغییر دما سرعت یک موتور را با pwm تغییر داد چطوریه ؟ من یه برنامه نوشتم ویه دستور شرطی گذاشتم که اگر مثلاtemp>>40 شد OCR0 زیاد بشه اما نمی دونم چرا این دستور در عمل اجرا نمیشه چون موتور خودش کم وزیاد می شه ؟ اگر کسی از دوستان برنامه ای در این زمینه داره بذاره لازم به ذکر است من از برنامه کتاب آقای بادامی نجان استفاده کردم .

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

  3. #2
    مدیر انجمن Division آواتار ها
    تاریخ عضویت
    Jan 2010
    نام
    افشین علیزاده
    نوشته ها
    628
    تشکر
    206
    تشکر شده 1,013 بار در 407 پست

    پیش فرض

    سلام

    شما تست كن ببين رجيستري هاي تايمر هات (كه اينجوري كه مشخصه از تايمر صفر استفاده كردين) رو فعال كردي؟ (براي حالت pwm)

    اگر رجيستري ها رو عدد دهي كردين به سوالات زير جواب دهيد :
    1- مشخصات موتور شما چيه ؟(ولتاژ كاري و جريان مصرفي)
    2- فركانس و نوع pwm انتخابي
    3- مقدار دقيق عدد دهي رجيستري هاي تايمر مورد استفاده
    4- شماره ميكرو

    البته تصور من اينه كه شما تو راه اندازي دماسنج هيچ مشكلي نداريد و فقط در قسمت pwm به مشكل برخوردين .
    سادگی نهایت کمال است
    یه مدتی میشه که نیستم... ولی به زودی بر می گردم...

  4. #3
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    28
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض

    سلام یک موتور با ولتا کاری 9 ولت از تایمر صفر استفاده کردم فرکانس کاری 16 مگاهرتز ( از کریستال خارجی 16 مگاهرتز) از مد fast pwm استفاده کردم وبعد TCCR0=0x63 دادم ocr0 رو هم مقدار اولیه صفر دادم همین و بعد گفتم :
    if(dama>=high){
    OCR0++;
    delay_us(10);
    }
    else
    {
    OCR0--;
    delay_us(10);
    }
    یعنی فقط با افزایش دما سرعت زیاد بشه ! لازم به ذکر است در این برنامه از تایمر یک برای نمایش ساعت استفاده کردم . من در راه اندازی دما مشکلی ندارم چون دما نشون داده میشه حتی ساعت هم مشکلی نداره نمی دونم چرا شبه دستورات بالا در عمل اجرا نمیشن بارها جاشونو عوض کردم اما نتیجه ای نداشته اینو هم بگم پالس pwm در خروجی ocr0 تولید میشه اما بدون توجه به شرط بالا عمل میکنه باور کنید دیگه برام شده معما چون دیگه چیز خاصی نداره که بخوام عوض کنم !

  5. #4
    عضو جدید
    تاریخ عضویت
    Aug 2010
    نوشته ها
    5
    تشکر
    0
    تشکر شده 1 بار در 1 پست

    پیش فرض

    فقط کافیه عددی رو که ازadc میخونی رو بزاری تو یک متغییر و بعذش اون متغییرو برابر مقدار pwm1a/b بزاری البته باید Compare B/a Pwm = Clear Down بزاری

  6. #5
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    28
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض

    سلام من مقدار ADC رو درون متغیر high گذاشتم اگر ممکنه بیشتر توضیح بدید کامل متوجه منظورتون نشدم !

  7. #6
    مدیر انجمن Division آواتار ها
    تاریخ عضویت
    Jan 2010
    نام
    افشین علیزاده
    نوشته ها
    628
    تشکر
    206
    تشکر شده 1,013 بار در 407 پست

    پیش فرض

    نقل قول نوشته اصلی توسط nefel نمایش پست ها
    سلام یک موتور با ولتا کاری 9 ولت از تایمر صفر استفاده کردم فرکانس کاری 16 مگاهرتز ( از کریستال خارجی 16 مگاهرتز) از مد fast pwm استفاده کردم وبعد TCCR0=0x63 دادم ocr0 رو هم مقدار اولیه صفر دادم همین و بعد گفتم :
    if(dama>=high){
    OCR0++;
    delay_us(10);
    }
    else
    {
    OCR0--;
    delay_us(10);
    }
    یعنی فقط با افزایش دما سرعت زیاد بشه ! لازم به ذکر است در این برنامه از تایمر یک برای نمایش ساعت استفاده کردم . من در راه اندازی دما مشکلی ندارم چون دما نشون داده میشه حتی ساعت هم مشکلی نداره نمی دونم چرا شبه دستورات بالا در عمل اجرا نمیشن بارها جاشونو عوض کردم اما نتیجه ای نداشته اینو هم بگم پالس pwm در خروجی ocr0 تولید میشه اما بدون توجه به شرط بالا عمل میکنه باور کنید دیگه برام شده معما چون دیگه چیز خاصی نداره که بخوام عوض کنم !
    با سلام

    دوست عزيز شما كه به سوالات من درست و حسابي جواب ندادي كه اي بابا

    اصلا فركانس كاري pwm كه باشه همون فركانس كاري تايمر صفر ميكرو رو ننوشتي آيا از واحد پرسكيلر مختص تايمر صفر استفاده كردي يا نه ؟ (به خاطر همين ميگم مقداردهي رجيستري ها رو اعلام كن ديگه)
    چرا جريان مصرفي تو حالت نرمال موتور رو اعلام نكردي ؟؟؟؟
    شماره ميكرو رو هم نگفتي ؟؟؟؟؟

    برنامه اي هم كه نوشتي به لحاظ اجرايي از بيخ اشتباهه .

    راه حل
    : شما بايد شمرده شمرده به سوالاتي كه من از مدارتون ميپرسم جواب بدين تا منم بتونم براي جواب دادن تمركز كنم خب
    سادگی نهایت کمال است
    یه مدتی میشه که نیستم... ولی به زودی بر می گردم...

  8. تشکرها از این نوشته :


  9. #7
    همکار rfbook آواتار ها
    تاریخ عضویت
    Dec 2009
    نام
    سعید علیان
    نوشته ها
    193
    تشکر
    160
    تشکر شده 458 بار در 139 پست

    پیش فرض

    سلام

    فقط کافیه عددی رو که ازadc میخونی رو بزاری تو یک متغییر و بعذش اون متغییرو برابر مقدار pwm1a/b بزاری البته باید Compare B/a Pwm = Clear Down بزاری
    ایشون از تایمر 0 استفاده کردن .

    منظورشون اینه که مثلا وقتی دما را از ADC میخونی و تبدیل میکنی اونو برابر با OCR0 قرار بده .

    دقت کن که تایمر 0 میکرو های AVR مد 8 بیتی هست .

    مثلا دمای بدست آمده شما توی متغییر high هست .

    این متغیر را برابر با OCR0 قرار بده !

    البته دمای شما اگر 0 تا 100 هست عدد بدست اومده برای دما را * 2.55 کنید و روی پایه OCR0 قرار بدین .
    www.hoperf12.ir

    وبسایت تخصصی ماژول های RF



  10. #8
    کاربر علاقه مند
    تاریخ عضویت
    May 2009
    نوشته ها
    28
    تشکر
    0
    تشکر شده 2 بار در 2 پست

    پیش فرض

    از scale اولی استفاده کردم یعنی 000 یا تقسیم بر1 . از مد phase correct استفاده کردم . بعدش مقدار رجیستررو نوشتم TCCR0=0x63

    دوست عزیز آقای rfbook منظور منو متوجه نشدن ببینید فرض کنید سنسور مربوطه یه دمای را اندازه گرفته وبه متغییری از قبل یه مقداری دادم مثلا 30 . حال به میکرو میخوام بفهمونم که اگر دما برابر این متغییر شد یعنی 30 مقدار ocr0 زیاد بشه ودر نتیجه با افزایش ocr0 سرعت موتور زیاد بشه با افزایش دماااااا سرعت موتور زیاد بشه .............

    جریان مصرفی موتور در حالت نرمالو رو دقیق نمی دونم فرض کنید یک فن 12 ولت باشه .ببینید فرکانس کاری میکرو 16 مگاهرتز است از کریستال خارجی 16 مگاهرتز استفاده کردم تایمر صفر هم بر این اساس باید کار بکنه دیگه بیشتر از این متوجه منظورتون نمی شم ... قطعا از واحد پریسکیلر تایمر صفر استفاده کردم . برنامه pwm برای کنترل سرعت موتور بدون ترکیب کردن با برنامه ADC جواب میده اماوقتی با PWM ترکیبش می کنم ADC خوب کار میکنه اما سرعت موتور تابع تغیرات دما دما نیست !
    میکروی من مگا 16 است .

  11. #9
    مدیر انجمن Division آواتار ها
    تاریخ عضویت
    Jan 2010
    نام
    افشین علیزاده
    نوشته ها
    628
    تشکر
    206
    تشکر شده 1,013 بار در 407 پست

    پیش فرض

    از مد phase correct استفاده کردم
    همين ديگه شما تو قسمت قبلي گفتي از fast pwm استفاده كردي الانم كه داري ميگي از حالت phase correct استفاده كردي

    خب به حر حال اگه شما مقدار رجيستري TCCR0=0x63 عدددهي كردين اين يعني كه شما فركانس كاري تايمر صفر رو clk/32 رو انتخاب كردين يعني عملاً شما از واحد prescaler مگا 16 براي تايمر صفر بهره بردين حالت كاري تصحيح فاز رو براي pwm انتخاب كردين و وضعيت پايه خروجي oc0 رو بعد از هر تطالبق هميشه صفر در نظر گرفتين

    اشتباه شما اينجاست كه pwm شما تو خروجي پايه oc0 مگا 16 بعد از هر تطابق هميشه صفر ميشه كه بايد هميشه toggle بشه (رجوع به ديتا شيت مگا 16 صفحه 81 جدول 39)

    پس با اين حساب

    1- تقسم فركانس سي پي يو به عدد 32 (كه البته اين مقدار بستگي به توان كاري موتور شما داره و هر چه موتورتون كوچيكتر باشه بهتره اين عدد كوچيك تر بشه و براي موتورهاي پرتوان از ضريب تقسيم هايي مثل 64 يا 128 يا 1024 استفاده مي كن كه به اين پارامتر فركانس كاري تايمر تو مد كاري pwm گفته ميشه )

    2- عدم پيكربندي درست خروجي مقايسه كننده براي عملكرد pwm
    پيشنهاد : شما مقدار TCCR0=0x61 رو تست كنيد ايشالا جواب ميگيريد .

    در ضمن وضعيت فيوز بيت ها رو هم دقت كنيد كه دقيقا روي اسيلاتور خارجي تنظيم باشن يعني فيوزبيت هاي cksel0...3=1111 باشه و فيوز بيت ckopt حتما صفر برنامه ريزي كنيدش .

    شما يه باره ديگه تست بزن اگر ديديد نشد من روش ديگه اي رو براتون مطرح كنم .
    سادگی نهایت کمال است
    یه مدتی میشه که نیستم... ولی به زودی بر می گردم...

  12. #10
    تازه وارد
    تاریخ عضویت
    May 2016
    نام
    نادره شاکری
    نوشته ها
    1
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

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

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

  1. پاسخ: 14
    آخرين نوشته: 06-03-2014, 19:56
  2. تغییر جهت سریع موتور براشلس
    توسط saeed210 در انجمن AVR
    پاسخ: 0
    آخرين نوشته: 18-07-2013, 15:56
  3. تغییر جهت سریع موتور
    توسط M3R در انجمن موتورها و درایوها
    پاسخ: 13
    آخرين نوشته: 04-02-2011, 10:49
  4. راه اندازي موتورها توسط avr
    توسط M3R در انجمن AVR
    پاسخ: 33
    آخرين نوشته: 21-03-2010, 11:26
  5. کنترل سرعت موتور توسط 555
    توسط arsalan681 در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 0
    آخرين نوشته: 02-02-2010, 16:38

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

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