اطلاعیه

Collapse
No announcement yet.

تولید موج PWM 100KHZ

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

    تولید موج PWM 100KHZ

    سلام دوستان کسی می دونه چطور می شه با اتمگا 128 دو موج PWM با فرکانس 100 کیلو هرتز تولید کرد یا اینکه بشه فرکانس رو بین یک کیلیو تا 100 کیلیو به صورت متغییر تنظیم کرد؟
    کسی از دوستان برنامه ای داره؟
    مرسی

    #2
    پاسخ : تولید موج PWM 100KHZ

    سلام
    میتونید از تایمر 1 استفاده کنید...
    برای اینکه متوجه بشید چطور فرکانس های دلخواه رو تولید کنید فرمول زیر رو ببینید:


    صفحه 122 دیتاشیت رو مطالعه کنید...
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


    ساخت کنترلر دما PID فازي با AVR [آموزشی]

    دیدگاه


      #3
      پاسخ : تولید موج PWM 100KHZ

      سلام انجام دادم - تا 40 کیلو هرتز نمی ره بالا با کریستال 10 مگا هرتز - با 16 مگا هرتز تا 60 کیلو هرتزمی شه یک نمونه برنامه که بشه 100 کیلو هرتز کرد رو بگذارید؟
      مرسی

      دیدگاه


        #4
        پاسخ : تولید موج PWM 100KHZ

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

        ببینید...تو اون فرمول بالا سه تا پارامتر هست که میتونه در فرکانس PWM شما تاثبر گذار باشه:

        1-کلاک میکرو (که با تغییر دادنش تونستید تاثیرشو بر فرکانس خروجی ببینید)
        2) Prescaler : که عددهای مشخصی رو میتونید واسش انتخاب کنید...حتما میدونید چی هست ولی اگر خواستید بپرسید تا توضیح بیشتر در موردش بدیم
        3) TOP: این مقدار بالای شمارنده هستش...بسته به مدی که انتخاب میکنید مقدار TOP قابل تنظیم یا غیر قابل تنظیم میشه...

        خب حالا فرض کنیم که فرکانس 100KHz مد نظر شما هست و کلاک میکروکنترلر هم 10MHz هست.
        حالا میتونیم با تنظیم Prescaler و TOP فرکانس دلخواهمون رو تولید کنیم.
        فرض میکنیم که از تایمر 1 استفاده شده:
        جدول زیر رو ببینید:



        شما با استفاده از این جدول میتونید مدهای کاری تایمر رو تنظیم کنید...مدهایی که دورشون کادر زرد رنگ کشیدم رو ببینید..در ستون TOP عددهای ثابتی واسشون قرار داده شده..یعنی TOP این مدهای PWM ثابت هست و در نتیجه تعداد فرکانس های دلخواهی که میتونید تولید کنید محدود هستند.

        کادر قرمز رنگ چیزیه که شما میخواهید.با فرض اینکه از کپچر تایمر استفاده نمیکنید میتونید توسط رجیستر ICR1 مقدار TOP رو تنظیم کنید.برای تنظیم تایمر روی این مد باید WGM3:0 ها رو در رجیسترهای مربوطه شون تنظیم کنید.

        خب حالا با فرض اینکه Prescaler مقدار 8 داشته باشه باید مقدار TOP رو برای داشتن فرکانس 10KHz تنظیم کنیم:

        کد:
        10KHz=10MHz/8*(1+TOP)
        8*(1+TOP)=1000
        1+TOP=125
        TOP=124
        بعضی وقت ها مقدار TOP اعشاری در میاد که شما باید به نزدیک ترین عدد صحیح اونو گرد کنید.که البته در این صورت فرکانس خروجی مقدار ناچیزی با فرکانس مدنظر شما فاصله داره.البته در اینجا مقدار صحیحی برای TOP بدست اومد که معنیش این هست فرکانس خروجی دقیقا 10KHz است.

        سوال دیگه ای بود حتما بپرسید
        موفق باشید
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازي با AVR [آموزشی]

        دیدگاه


          #5
          پاسخ : تولید موج PWM 100KHZ

          مرسی دوست من پس :
          icr1=124
          WGM3:0

          دیدگاه


            #6
            پاسخ : تولید موج PWM 100KHZ

            نوشته اصلی توسط mr12 نمایش پست ها
            مرسی دوست من پس :
            icr1=124
            WGM3:0
            خواهش میکنم
            خیر...
            WGM3:0 یعنی از WGM0 تا WGM3
            با توجه به همون جدول : WGM3=WGM2=WGM1=1 و WGM0=0
            برای تنظیم دیوتی سایکل هم باید OCR1 رو مقداری بین 0 تا مقدار TOP بدهید.
            تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

            www.intelart.ir


            ساخت کنترلر دما PID فازي با AVR [آموزشی]

            دیدگاه


              #7
              پاسخ : تولید موج PWM 100KHZ

              سلام
              من کریستال رو 8 مگاهرتز گذاشتم - پرسکالر رو هم 8 گذاشتم - مد 14 رو تو جدول انتخاب کردم
              تایمر 3 انتخاب شد
              فرکانس مد نظر = 100 کیلیو هرتز
              دو موج کلاک به صورت اینورت و بدون اینورت روی ocr3a , ocr3b
              طبق فرمول - Fpwm=f/n*1+top و جواب برابر 5 شد
              TCCR3A=(1<<COM3A1) | (0<<COM3A0) | (1<<COM3B1) | (1<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (1<<WGM33) | (1<<WGM32)| (1<<WGM31)| (0<<WGM30);
              TCCR3B=(1<<ICNC3) | (0<<ICES3) | (1<<WGM33) | (0<<WGM32) | (0<<CS32) | (0<<CS31) | (1<<CS30);
              OCR3AH=0x05;
              OCR3BH=0x05;
              امافرکانس از بین رفت
              نمی دونم کجا رو اشتباه کردم
              جدیدترین ویرایش توسط mr12; ۲۱:۵۳ ۱۳۹۵/۰۴/۱۹.

              دیدگاه


                #8
                پاسخ : تولید موج PWM 100KHZ


                امروز, 06:25
                Mahdi.Faani مشکل چیه؟
                جدیدترین ویرایش توسط mr12; ۲۱:۵۲ ۱۳۹۵/۰۴/۱۹.

                دیدگاه


                  #9
                  پاسخ : تولید موج PWM 100KHZ

                  منظورتون از اینکه میگید فرکانس از بین رفت چیه؟یعنی شکل موج مربعی ندارید؟
                  مقدار OCR رو تنظیم میکنید؟واسه امتحان مقدار OCR رو حدودای نصف TOP بذارید تا دیوتی سایکل 50درصد بشه...

                  یه نمونه کد میذارم واستون:
                  کلاک تایمر=10KHz
                  به فرض اینکه کلاک 8MHz باشه و Prescaler هم 8 باشه، مقدار TOP برای مد Fast PWM عدد 9 بدست میاد.


                  DDRB=(1<<5);
                  ICR1=9;
                  OCR1A=4;
                  TCCR1A=(1<<WGM11)|(COM1A1);
                  TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS11);


                  اینو امتحان کنید...
                  تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                  www.intelart.ir


                  ساخت کنترلر دما PID فازي با AVR [آموزشی]

                  دیدگاه


                    #10
                    پاسخ : تولید موج PWM 100KHZ

                    نه متاسفانه
                    TCCR3A=(1<<COM3A1) | (1<<WGM31);
                    TCCR3B= (1<<WGM31)|(1<<WGM32)| (1<<CS31) ;
                    OCR3AH=4;
                    OCR3BH=4;
                    ICR3=9;
                    فرکانس 15.6 کیلو هرتز

                    دیدگاه


                      #11
                      پاسخ : تولید موج PWM 100KHZ

                      با اوسیلوسکوپ چک میکنید دیگه؟
                      مگه قرار نبود مقدار رجیستر OCR بین 0 و TOP باشه؟..الان مقدار دسیمال OCR میشه 68....خب هیچ وقت مقدار شمارنده به 68 نمیرسه که بخاد سطح پالس رو تغییر بده...

                      کدتون مشکل داره...شما باید به OCR3AH و OCR3AL مقدار بدید...
                      کامپایلرتون چیه؟اگه با کدویژن کار مکینید باید ICR رو هم همینطور مقدار بدید...
                      ICR3L=9

                      واسه TCCR3B چرا از WGM31 استفاده کردید؟باید از WGM33 استفاده کنید...
                      تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                      www.intelart.ir


                      ساخت کنترلر دما PID فازي با AVR [آموزشی]

                      دیدگاه


                        #12
                        پاسخ : تولید موج PWM 100KHZ

                        من از اتمل استودیو 6 استفاده می کنم
                        باشه امتحان می کنم

                        دیدگاه


                          #13
                          پاسخ : تولید موج PWM 100KHZ

                          خب کامپایلر AVR-GCC خودش High byte و Low Byte رو کنار هم میذاره...شما فقط به صورت دسیمال بهش مقدار بدید..
                          مثلا ICR3=9 یا OCR1A=4
                          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                          www.intelart.ir


                          ساخت کنترلر دما PID فازي با AVR [آموزشی]

                          دیدگاه


                            #14
                            پاسخ : تولید موج PWM 100KHZ

                            انجام دادم نمی دونم چرا نمی شه
                            TCCR3A=(1<<COM3A1) | (0<<COM3A0) | (1<<COM3B1) | (1<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM33) | (0<<WGM32)| (0<<WGM31)| (0<<WGM30);
                            TCCR3B=(1<<ICNC3) | (0<<ICES3) | (1<<WGM33) | (0<<WGM32) | (0<<CS32) | (0<<CS31) | (1<<CS30);
                            OCR3AH=0x05;
                            OCR3BH=0x05;
                            OCR3L=9;

                            دلیل: ادغام دو پست برای جلوگیری از اسپم

                            من دو موج کلاک به صورت یکی = اینورت و دیگری غیر اینورت می خواد = انجام دادم
                            دیوتیش رو بتونم تنظیم کنم = انجام دادم
                            فقط مشکل تو کلاک پالس است چون یک 100 کیلو هرتز می خوام و یک 20 کیلیو هرتز
                            با همین برنامه من با کریستال 10 مگا هرتز 20 کیلو رو بهم می ده و و به جای 100 کیلو 40 کیلو هرتز بهم می ده
                            طبق دستور عمل شما هم رفتم ولی نمی دونم چرا کلاک 100 نمی شه - با کریستال 16 مگا هرتز به 65 کیلوهرتز می رسه
                            مشکل نمی دونم چیه؟!!!!!!!!!!!!!

                            دیدگاه


                              #15
                              پاسخ : تولید موج PWM 100KHZ

                              خب با این کد شما همه چی قاطی پاتی شده!!!
                              اول اینکه قرار شد به رجیستر مستقیما دسیمال مقدار بدید...
                              کدتون کلی مشکل داره:

                              اولا اینکه به جای اینکه رو Fast PWM تنظیم کنید روی Phase Correct PWM تنظیم کردید.فرمول محاسبه فرکانس تایمر در مد Phase Correct با مد Fast کلی تفاوت داره!تقریبا فرکانسش نصف مد Fast هست!این از اشکال اول

                              اشکال دوم اینکه به رجیستر های ICR و OCRها اینطور مقدار دادید:

                              ICR3=9
                              OCR3A=1280
                              OCR3B=1280


                              اصلا به حرف من گوش نمیکنی..
                              قرار شد با اتمل استودیو مستقیما مقدار دسیمال رو برای رجیستر ها قرار بدی.مثلا اگه میخای مقدار 5 بدی به OCR اینطوری مقدار بده:


                              OCR3A=5;
                              OCR3B=5;


                              دیگه از OCR3AL و OCR3AH استفاده نکن!!!!....مستقیم مقدار بده کامپایلر خودش کارو واست انجام میده...
                              الان شما به TOP 9 دادی و به OCR مقدار 1280 دادی...خب مشخصه که سیگنال نمیده دیگه...

                              واسه Phase Correct PWM هم باید از فرمول خودش استفاده کنی.داخل دیتا شیت هست...اگه پیدا نکردی بگو همینجا بذاریم واست...
                              تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                              www.intelart.ir


                              ساخت کنترلر دما PID فازي با AVR [آموزشی]

                              دیدگاه

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