اطلاعیه

Collapse
No announcement yet.

فرکانس کار

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    فرکانس کار

    سوالی که داشتم اینه که فرکانس کاریavr با توجه به چه نکاتی باید تعیین کنیم .
    مثلا تو بعضی از برنامه ها 1000000 و 80000000 و ...
    کلا فرکانس بر چه مبنایی تعیین میکنن ؟؟؟
    با مثال توضیح بدین تا بفهمم .
    :eek: :eek: :eek: oo: oo: :angry:

    #2
    پاسخ : فرکانس کار

    1- هر چی فرکانس بالاتر باشه دستورات سریعتر اجرا میشند چون تو هر کلاک یه دستور اجرا میشه
    2- تو بعضی موارد شما نیاز داری که از کلاک خاصی استفاده کنی مثلا برای داشتن یه ارتباط سریال که بدون خطا باشه مثلا باید از کریستالهای 11.059 یا 14.7456 یا 7.3728 مگ باید استفاده کنی
    3- یه وقتایی نیاز داری که زمانهای خیلی کوچیک رو اندازه بگیری اونوقت باید فرکانست بالا باشه
    اما یه وقت نیاز داری که زمانهای خیلی بزرگ رو اندازه بگیری اونوقت کار با فرکانس پایین تر راحت تره
    4- کلا با فرکانس بالا فکر کنم که دستت باز تره :nice:

    دیدگاه


      #3
      پاسخ : فرکانس کار

      نوشته اصلی توسط mojalan
      1- هر چی فرکانس بالاتر باشه دستورات سریعتر اجرا میشند چون تو هر کلاک یه دستور اجرا میشه
      2- تو بعضی موارد شما نیاز داری که از کلاک خاصی استفاده کنی مثلا برای داشتن یه ارتباط سریال که بدون خطا باشه مثلا باید از کریستالهای 11.059 یا 14.7456 یا 7.3728 مگ باید استفاده کنی
      3- یه وقتایی نیاز داری که زمانهای خیلی کوچیک رو اندازه بگیری اونوقت باید فرکانست بالا باشه
      اما یه وقت نیاز داری که زمانهای خیلی بزرگ رو اندازه بگیری اونوقت کار با فرکانس پایین تر راحت تره
      4- کلا با فرکانس بالا فکر کنم که دستت باز تره :nice:
      ممنون از جوابتون .
      خوب منی که الان میخوام با میکرو کار کنترل سرعت موتور dc انجام بدم با توجه به فرکانس pwm باید از چه محدوده فرکانسی استفاده کنم ؟؟؟ :cry: :cry:

      دیدگاه


        #4
        پاسخ : فرکانس کار

        خوب بستگی به این داره که رنج دقت یا پله هایی که نیاز داری چقدر هست اما
        تو اینجا به طور کامل بحث شده:
        http://www.eca.ir/forum2/index.php?topic=51858.0


        :read: :read:
        mer30

        دیدگاه


          #5
          پاسخ : فرکانس کار

          نوشته اصلی توسط mohsenmax70
          خوب بستگی به این داره که رنج دقت یا پله هایی که نیاز داری چقدر هست اما
          تو اینجا به طور کامل بحث شده:
          http://www.eca.ir/forum2/index.php?topic=51858.0


          :read: :read:
          منظور از پله ها پله هایی هست که تایمر ایجاد میکند یا موتور پله ای ؟؟؟

          دیدگاه


            #6
            پاسخ : فرکانس کار

            خیر. منظور اینه که ما چه تعداد پله برای تنظیم دور موتور داشته باشیم (فکر کن ما موتورو مثلا تو 100 پله یا دور مختلف میتونیم بچرخونیم یا بازم مثلا تو 1000 دور سرعتی مختلف بچرخونیم)
            ما وقتی که موتورو با pwm راه اندازی میکنیم بسته به فرکانس اسیلاتور میکرو(چه داخلی یا خارجی) و اعمال پیش تقسیم کننده یا prescal و یه عددی که به رجیستر timer میدیم فرکانس pwm رو تعیین میکنیم که اون عدد رنج دقت (پله ها)ما میباشد.

            اگه سوال داشتی بپرس.. :smile: :smile: :smile:
            mer30

            دیدگاه


              #7
              پاسخ : فرکانس کار

              ممنون از جوابتون ،
              سوال دیگه ای که داشتم این بود که دو روش برای تولید pwm هست :
              1 . توسط کلاک سیستم ( تایمر ) که از wizard برنامه میشه استفاده کرد .
              2 . خودمون به صورت تناوبه پرت دلخواهی 0 و 1 کنیم به شکل زیر
              پورت d.1 برای 0.5 میلی ثانیه روشن و برای 0.5 میلی ثانیه خاموش را در یک حلقه بی نهایت قرار دهیم

              میخواستم تفاوت های دو روش ذکر شده رو بدونم ؟؟؟؟ oo: :angry: :eek: :eek: : :cry: :cry:
              من دو سرعت مختلف برای موتور بیشتر نمیخوام V , 2V با توجه به این کدوم روش بهتره ؟؟

              دیدگاه


                #8
                پاسخ : فرکانس کار

                نوشته اصلی توسط PEDRAM-PMS
                ممنون از جوابتون ،
                سوال دیگه ای که داشتم این بود که دو روش برای تولید pwm هست :
                1 . توسط کلاک سیستم ( تایمر ) که از wizard برنامه میشه استفاده کرد .
                2 . خودمون به صورت تناوبه پرت دلخواهی 0 و 1 کنیم به شکل زیر
                پورت d.1 برای 0.5 میلی ثانیه روشن و برای 0.5 میلی ثانیه خاموش را در یک حلقه بی نهایت قرار دهیم

                میخواستم تفاوت های دو روش ذکر شده رو بدونم ؟؟؟؟ oo: :angry: :eek: :eek: : :cry: :cry:
                من دو سرعت مختلف برای موتور بیشتر نمیخوام V , 2V با توجه به این کدوم روش بهتره ؟؟
                ]

                دوست خوبم شما با چی میخوای نیم میلی ثانیه ای پورت رو خاموش روشن کنی ؟
                اگه منظورت توابعی مثل delay هستن که دقت این تابع بسیار پایین هست و بیشتر به درد کار های ساده میخوره و برای تولید موج مناسب نیست .
                کد ویزارد هم که میبینی خود تایمر خروجی pwm قلنبه تحویلت میده اون برا راحتی کاره وگرنه شما میتونی با یک تایمر و چند خط کد چندین موج مختلف مربعی روی پورت هات داشته باشی .
                بنا بر این بهترین روش همون استفاده از تایمر ها و تنظیم رجیستر های مربوطه هست .
                کلا فکر استفاده از delay_ms() رو برا این پروژه فراموش کن .

                دیدگاه


                  #9
                  پاسخ : فرکانس کار

                  سلام
                  بله استفاده از ()delay پروژه رو ناکارآمد میکنه و استفاده از اون بیشتر برای تازه کاراست چراکه در مدت زمانی که این تابع اجرا میشه پردازنده میکرو کاملا بی کار میشینه.

                  اما اگه هدفتون استفاده از این جور توابع هست ()delay-us با دقت میکرو ثانیه هست که با درج عدد 500 میشه نیم میکرو ثانیه, اگه دقت بیشتری هم میخواید میتونی
                  از کلاک میکرو(نهایتا 16 مگ)استفاده کنی

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

                  دیدگاه


                    #10
                    پاسخ : فرکانس کار

                    نوشته اصلی توسط microjo
                    سلام
                    بله استفاده از ()delay پروژه رو ناکارآمد میکنه و استفاده از اون بیشتر برای تازه کاراست چراکه در مدت زمانی که این تابع اجرا میشه پردازنده میکرو کاملا بی کار میشینه.

                    اما اگه هدفتون استفاده از این جور توابع هست ()delay-us با دقت میکرو ثانیه هست که با درج عدد 500 میشه نیم میکرو ثانیه, اگه دقت بیشتری هم میخواید میتونی
                    از کلاک میکرو(نهایتا 16 مگ)استفاده کنی

                    اما یکی از بهترین راه حلها محاسبه مدت زمان اجرای دستوراته در اینصورت یه تابع بدردبخور میسازید که فراخونیش تو برنامه مثلا 500 میکرو ثانیه زمان میگیره و بجای delay از اون استفاده میکنی اینجوری دیگه cpu بیکار نیست.(برای این کار بهتره کتاب ساختمان داده ها رو مطالعه کنید)

                    اون تیکه که قرمز کردم یعنی چی؟ میشه یه مثال از تابع مذکور بنویسید؟
                    ممنون...
                    اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                    دیدگاه


                      #11
                      پاسخ : فرکانس کار

                      فرض کنید تو پروژه میخواید یه آرایه 100 عنصری رو پردازش کنی
                      کد:
                      float delay2 (double& a[]){
                      int i=0;
                      float b=1,c=1,d=1;
                      for(i=0;i<100;i++) 
                      { 
                      b=a[i];
                      c=b+b*b/d-d;
                      c=b+b*b-d*d;
                      c=b+b*b/d-d;
                      c=b+b*b/d-d;
                      c=b+b*b/d-d;
                      c=b+b*b/d-d;
                      a[i]=c;
                      {
                      {
                      شماره تکرار حلقه بالا رو خوب یادم نیست باید دوباره آزمایش کنم ولی حدودا 1 ثانیه سی پی یو مشغول میکرد.
                      شما با دستکاری شرط حلقه و کم کردن شماره حلقه میتونید به مدت زمان مکس دلخواه برسید.
                      اینم اضافه کنم برای آزمایش باید حلقه خیلی بیشتر از اینا تکرار بشه و حتما با میکرو آزمایش بشه از یه ثانیه شمار هم استفاده کنید
                      بعد با کم کردن تکرار میتونید حتی به میلی ثانیه هم برسید.
                      البته استفاده از این روش سخته و نیاز به محاسبه دقیق و طراحی الگوریتم قوی داره تا استفاده از این دسته توابع بیشتر بدرد بخوره
                      *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                      *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                      دیدگاه


                        #12
                        پاسخ : فرکانس کار

                        نوشته اصلی توسط microjo
                        فرض کنید تو پروژه میخواید یه آرایه 100 عنصری رو پردازش کنی
                        کد:
                        float delay2 (int& a[]){
                        int i=0;
                        float b=1,c=1,d=1;
                        for(i=0;i<100;i++) 
                        { 
                        b=a[i];
                        c=b+b*b/d-d;
                        c=b+b*b-d*d;
                        c=b+b*b/d-d;
                        c=b+b*b/d-d;
                        c=b+b*b/d-d;
                        c=b+b*b/d-d;
                        a[i]=c;
                        {
                        {
                        شماره تکرار حلقه بالا رو خوب یادم نیست باید دوباره آزمایش کنم ولی حدودا 1 ثانیه سی پی یو مشغول میکرد.
                        شما با دستکاری شرط حلقه و کم کردن شماره حلقه میتونید به مدت زمان مکس دلخواه برسید.
                        اینم اضافه کنم برای آزمایش باید حلقه خیلی بیشتر از اینا تکرار بشه و حتما با میکرو آزمایش بشه از یه ثانیه شمار هم استفاده کنید
                        بعد با کم کردن تکرار میتونید حتی به میلی ثانیه هم برسید.
                        البته استفاده از این روش سخته و نیاز به محاسبه دقیق و طراحی الگوریتم قوی داره تا استفاده از این دسته توابع بیشتر بدرد بخوره
                        که این تاخیر هم بسته به فرکانس کاری میکرو تغییر میکنه، درسته؟ یعنی ممکنه فقط برای فرکانس 8مگ بشه یه میلی ثانیه و واسه بقیه نه
                        اونچیزی که در دانشگاه یاد میگیرید، "الفبایی" هست برای نوشتن یک "رمان" !!

                        دیدگاه


                          #13
                          پاسخ : فرکانس کار

                          نــــــــــــــــــــــــــــــــــــــــــــه

                          این روش ها خیلی خیلی غیر اصولی هستند


                          oo: oo: oo: oo: oo:

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

                          روشی که گفتین فوق العاده بی دقت و غیر اصولیست .

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


                          به جای اشغال سی پی یو شما باید از تایمر استفاده کنید . میکرو کنترلر ها معمولا 4 تایمر و حدودا 15 مود کاری دارند .


                          پیشنهاد میکنم کتاب آقای سپاس یار که تو همین سایت هست رو بخونید .

                          این مثال رو ببینید :

                          (ایجاد پالس مربعی با دوره تناوب 512 میکرو ثانیه

                          while(1){
                          TCCR0=0x00;
                          TCNT0=0x00;
                          TCCR0=0B00000010; // Timer Clock = CLK/8
                          while(!TIFR&0x01); // Wait Until Overflow
                          TIFR=TIFR|0B00000001; // Clear TOV0
                          TCCR0=0x00;


                          خوب حالا این مثال و براتون توضیح میدم :
                          فرض میکنیم فرکانس کاری میکرو 4 مگا هرتز باشه .
                          تو خط اول با رجیستر TCCR0 تایمر 0 رو راه اندازی کردیم و منبع کلاک اون رو کلاک داخلی تنظیم کردیم .
                          تو خط دوم مقدار تایمر رو 0 قرار میدیم . رجیستر TCNT همیشه مقدار تایمر رو در خودش داره .
                          تو خط سوم pre scale رو تنظیم کردیم . یعنی فرکانس کاری رو برای تایمر تقسیم بر 8 میکنیم .
                          یعنی میشه 500 کیلو هرتز .
                          خط چهارم چی کار میکنه ؟
                          تا زمان سر ریز تایمر صبر میکنه . یعنی وقتی تایمر از 0 تا 255 میشمره .
                          یعنی 500000 تقسیم بر 256 که میشه : 1953.125
                          خط پنج و ششم هم پرچم سر ریز و مقدار تایمر رو صفر میکنن و حلقه دوباره اجرا میشه .
                          خوب حالا در هر ثانیه تایمر 1953.125 بار سر ریز میکنه یعنی به این فرکانس دست پیدا کردیم .
                          [glow=red,2,300]خوب حالا با تقسیم 1 بر .1953.125 به عدد : 0.000512 یا همون 512 میکرو ثانیه رسیدیم .[/glow]

                          در این روش من بدون استفاده از کد ویزارد و بدون استفاده از کانال های pwm این موج رو تولید کردم . اگه بخواین از کد ویزارد استفاده کنید که خیلی خیلی ساده تر خواهد بود .

                          ضمنا میکرو جو ی عزیز دلیل این که گفتم استفاده از delay اشتباهه به خاطر این نیست که مال تازه کارهاست بلکه اتفاقا تابع به درد بخوریم هست . اما چون این تابع از تایمر watchdog میکرو استفاده میکنه دقت بسیار بسیار بسیار پایینی داره .
                          چه delay_ms چه delay_us فرقی نداره .

                          دیدگاه


                            #14
                            پاسخ : فرکانس کار

                            نوشته اصلی توسط moein2
                            نــــــــــــــــــــــــــــــــــــــــــــه

                            این روش ها خیلی خیلی غیر اصولی هستند


                            oo: oo: oo: oo: oo:

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

                            روشی که گفتین فوق العاده بی دقت و غیر اصولیست .

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


                            به جای اشغال سی پی یو شما باید از تایمر استفاده کنید . میکرو کنترلر ها معمولا 4 تایمر و حدودا 15 مود کاری دارند .


                            پیشنهاد میکنم کتاب آقای سپاس یار که تو همین سایت هست رو بخونید .

                            .....
                            معلوم میشه شما پستهای بالا رو خوب مطالعه نکردید
                            به این نوشته که من در بالا اوردم دقت کنید:
                            "یکی از بهترین راه حلها محاسبه مدت زمان اجرای دستوراته در اینصورت یه تابع بدردبخور میسازید که فراخونیش تو برنامه مثلا 500 میکرو ثانیه زمان میگیره"

                            "فرض کنید تو پروژه میخواید یه آرایه 100 عنصری رو پردازش کنی"
                            منظورم رو واضحتر میگم:
                            فرض بر اینه که توی برنامتون نیاز دارید 100ns مکس ایجاد کنید یا اینکه 100ns زمان رو اندازه گیری کنید(کاری که در تایمر کانتر انجام میشه)
                            اگه سعی کنید دستورات پراکنده توی برنامتون رو داخل یه تابع جمع آوری کنید(با فرض اینکه اون دستورات 100ns پردازنده را مشغول میکنن)
                            با فراخوانی تابع مذکور در جایی که نیاز به مکس دارید میتونید هم دستورات لازم برنامرو اجرا کنی و هم مکس ایجاد کنید.
                            حالا اینکه تو انتخاب اون دستورات پراکنده و محاسبه زمان دستورات چقدر توانایی داشته باشید بستگی به پشتوانه علمی خودتون داره (سخته)

                            پس نتیجه میگیرید که برنامه بالا که ارایه بزرگی توش بود فقط یه مثال بود که دوستمون بابابرقی پرسیدن

                            این روش از تایمر/کانتر هم بهتره چون عملیات مدهای مختلف تایمر/کانتر با شرط و عمل جمع امکان پذیره که cpu بدبخت انجامش میده
                            *یادگیری علم زمانی مشکل است که قبل از یادگیری آن را پیچیده تصور کنیم.
                            *چرا فکر میکنیم مباحث مهم و پیشرفته و سطح بالا باید پیچیده باشند.

                            دیدگاه


                              #15
                              پاسخ : فرکانس کار

                              نوشته اصلی توسط microjo
                              معلوم میشه شما پستهای بالا رو خوب مطالعه نکردید
                              به این نوشته که من در بالا اوردم دقت کنید:
                              "یکی از بهترین راه حلها محاسبه مدت زمان اجرای دستوراته در اینصورت یه تابع بدردبخور میسازید که فراخونیش تو برنامه مثلا 500 میکرو ثانیه زمان میگیره"

                              منظورم واضحتر میگم:
                              فرض بر اینه که توی برنامتون نیاز دارید 100ns مکس ایجاد کنید یا 100ns زمان رو اندازه گیری کنید(کاری که در تایمر کانتر انجام میشه)
                              اگه سعی کنید دستورات پراکنده توی برنامتون رو داخل یه تابع جمع آوری کنید(با فرض اینکه اون دستورات 100ns پردازنده را مشغول میکنن)
                              با فراخوانی تابع مذکور در جایی که نیاز به مکس دارید میتونید هم دستورات لازم برنامرو اجرا کنی و هم مکس ایجاد کنید.
                              حالا اینکه تو انتخاب اون دستورات پراکنده و محاسبه زمان دستورات چقدر توانایی داشته باشید بستگی به پشتوانه علمی خودتون داره (سخته)
                              چرا با دقت خوندم .
                              کاملا گرفتم منظورتو .اجرای هر دستور ممکنه به یک یا بیشتر سیکل کلاک نیاز داشته باشه که مکث ایجاد میشه.[glow=red,2,300]شدنیه اما کاملا اشتباهه .[/glow] معایبش رو تو پست قبلی نوشتم .
                              به جای اینکه بخش زیادی از حافظه رم میکرو به خاطر این کار اشغال بشه ، سی پی یو مشغول بشه و ...

                              خوب تایمر با اون همه امکانات و برا کی و کجا ساختن ؟؟ اونم با این همه مد کاری و امکانات .

                              کافیه 6-7 خط دستور بنویسی تا هر نوع موج یا هر نوع تایمری که میخوای در اختیار داشته باشی .

                              با روشی که شما گفتین فقط با حالت normal top برابری میکنه ، اما حالت هایی مثل , ctc top , ctc mode , fast pwm , phase & correct fr , یا وقفه سر ریز ، یا پرچم TOV اینا همه امکاناتی هستن که خاک خواهند خورد در حالی که برای راحتی ما طراحی شدن .

                              بنا بر این این کار اصلا اصولی و دقیق نیست . مخصوصا که این دوستمون میخواد موج مربعی بسازه.

                              دیدگاه

                              لطفا صبر کنید...
                              X