اطلاعیه

Collapse
No announcement yet.

کمک در تولید پالس با PWM

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

    #16
    پاسخ : کمک در تولید پالس با PWM

    نوشته اصلی توسط Ma3oud
    یکی کمک کنه!
    این سروو چرا خل میشه؟!؟ تایمر صفر رو جوری نوشتم تا بشه با دو تا سوییچ زمان 1 بودن پالس pwm رو از 1 تا 2 میلی ثاینه تغییر داد. با 11 بار زدن کلید ها، سروو هر دفعه 15 درجه جابجا میشه تا بازه 165 درجه رو طی کنه. خروجی oc0 میکرو رو هم با اسکوپ نگاه کردم، از یک تا دو میلی ثانیه تغییر میکنه. پس برنامه لابد درسته. اصلاً اینم فایلش، ببینید:
    http://www.2shared.com/file/12775967/55db86f2/blink_led.html

    ولی همه اینا تو تئوری و پروتئوس و دستگاه اسکوپ جواب داده! در عمل سروو فقط 90 درجه میچرخه!! چرا؟ مگه چی میخواد؟ از هر 10 بار امتحان عملی، فقط 1 بار درست عمل میکنه، ولی همون یکبار هم 90 درجه میچرخه! بقیه دفعات همش قیژ قیژ میکنه و گاهی الکی چپ و راست میشه... :angry: :angry: :cry2: :cry2:

    اینم کد برنامه:
    کد:
    #include <mega16.h>
    #include <delay.h>
    #define xtal 12000000
    #define up PINA.0
    #define down PINA.1
    unsigned int x=34;
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
     TCCR0=0X00;
     TCNT0=22;
     OCR0=x;
     TCCR0=0X6D;
     }
     void main ()
     {
     PORTA=0x03;
     DDRA=0x00;
     PORTB=0x00;
     DDRB=0x08;
     TCNT0=22;
     OCR0=34;
     TIMSK=0X01;
     TCCR0=0X6D;
     #asm ("sei")
     while (1)
     {
      if (down==0)
      {
      delay_ms(20);
      if (down==0)
      {
       if (x>33 && x!=34) x-=1;
       while (down==0);
      }
      }
      if (up==0)
      {
      delay_ms(20);
      if (up==0)
      {
       if (x>22 && x<46 && x!=45) x+=1;
       while (up==0);
      }
      }
      };
      }
    سلام دوست عزیز
    اگر سروو درست کار نمیکنه یا فرکانس خیلی زیاده یا خیلی کم
    اگر فرکانس رو تنظیم کنی درست میشه

    موفق باشی

    دیدگاه


      #17
      پاسخ : کمک در تولید پالس با PWM

      من هم شبیه سازی مدار رو گذاشتم (فقط 80 کیلوبایته، ببینید)، هم متن کد برنامه رو (محاسباتش مشخصه). پالس خروجی دقیقاً 50 هرتزه. البته رو اسیلوسکوپ دیدم، زمان high بودن پالس هم بین 1 تا 2 میلی ثانیه.
      ولی روی دستگاه اسکوپ، فرکانس تقریباً 52 هرتز بود و زمان high بودن از 1.36 تا 2 میلی متغیر بود. oo:

      با تمام این اوصاف، سروو همچنان 90 تا بیشتر نمیچرخه!! :cry: مدلش sg5010 هست.

      حتی کریستال 12000000 گذاشتم، دیگه نمیدونم چجوری از این دقیقتر پالس تولید کنم... :cry2: :angry:
      دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

      دیدگاه


        #18
        پاسخ : کمک در تولید پالس با PWM

        نوشته اصلی توسط Ma3oud
        با تمام این اوصاف، سروو همچنان 90 تا بیشتر نمیچرخه!! :cry: مدلش sg5010 هست.
        مگه باید چقدر بچرخه؟
        تاجایی که من میدونم هاردلیمینر بعضی سرووها رو 45- تا 45+ تنظیم شدن و برای افزایشش باید سروو رو انگولک کرد
        ما که یه بار چوب تو سروو کرذیم خراب شد!
        {خلاف قوانین - امضا ویرایش شد}

        دیدگاه


          #19
          پاسخ : کمک در تولید پالس با PWM

          نوشته اصلی توسط nanoware

          مگه باید چقدر بچرخه؟
          تاجایی که من میدونم هاردلیمینر بعضی سرووها رو 45- تا 45+ تنظیم شدن و برای افزایشش باید سروو رو انگولک کرد
          ما که یه بار چوب تو سروو کرذیم خراب شد!
          دوست عزیز، این سروو باید 180 تا بچرخه، چون تو مشخصاتش نوشته.

          راستی! بالاخره تونستم 180 تا بچرخونمش!! :wow:
          خودم رو کشتم تا حالیش کنم! از قرار معلوم این سرووس کله شق ما اصلاً با پالس 1-2 ms سازگار نیست! oo: منم برنامه رو عوض کردم و هر چی مقدار مجاز برای OCR0 بود رو انداختم به جون سروو تا ببینم با چه سازی میرقصه! بدین گونه کشف شده که حضرت آقا به ازای 420us میره به 90-، و با 2390us میرود به 90+ درجه!! oo:
          البته در حوالی صفر درجه (تقریبا ً1360us) کمی کندتر میچرخه. یعنی گویا سرعتش در کران ها (90+/-) بیشتره. :surprised:


          ولی همچنان سوال دارم! :redface:
          1-این "پهنای باند مرده" چیه؟

          2- میکرو روشنه و پالس میده. زمین سروو وصله. vcc سروو رو وصل میکنم، کمی جابجا میشه و می ایسته. وقتی سیم سیگنال رو وصل میکنم، از هر 4~5 دفعه، یکبار درست عمل میکنه و طبق زاویه میچرخه. در بقیه دفعات، حرکتی نوسانی نامنظمی میکنه و شروع به لرزش خفیف و صدا میکنه که مجبور میشم vccش رو قطع کنم... گفتم نکنه به خاطر اثر bounce سیم سیگنال باشه، واسه همین از ابتدا سیم سیگنال رو وصل کردم و بعد vcc، ولی همچنان این مشکلی که گفتم پابرجاست.

          خواهش میکنم لطف کنید این سوالا رو کمک کنید، داغون شدم والا تا اینو راه بندازم. :cry:
          دلي دارم که از تنگي در او جز غم نمي گنجد........ غمي دارم ز دلتنگي که در عالم نميگنجد

          دیدگاه


            #20
            پاسخ : کمک در تولید پالس با PWM

            سلام دوست عزیز من به زبانc تسلط ندارم :sad: ولی منم مثل شماو خیلی از دوستان با همین سروو کار کردم . منم در ابتدا همین مشکل جابه جاشدن الکی سروو در ابتدارو داشتم وکلی در گیرش بودم و بالاخره کاشف به عمل اوردم که زمانیکه سروو سیگنال دریافت نمیکنه یا خیلی سیگنال پرتی دریافت میکنه این اتفاق میفته ولی بالاخره با کمک دوست خوبم اقا ایمان تونستم اونو راه اندازی کنم .در مورد درست کار کردن سروو هر چند یکبار اگر تغذیه اصلی از اداپتوره بعد از هر بار قطع و وصل حتما چند ثانیه صبر کن و حتما برای امتحان از کلید استفاده کن نه در اوردن وجا زدن سیم. چون این سروو از محصولات فله ای دوستان خوب چینیمونه بسیار حساسه و هیچ رنج پالس ثابتی نداره پس تنها راه به دست اوردن طول پالسها همان سرو کله زدن باهاشه. در زمن من تنها با تولید پالس با تعریف تایمر در مد pwm جواب گرفتم وبا هیچ روش دیگه ای جواب نداد حتی زمانی که با دستورات همان طول پالس رو ایجاد میکردم( نمیدونم چرا) ولی هر چی هست مرتبط با پهنای باند مرده ست.
            موفقيت بدست آوردن چيزيست كه دوست داري و خوشبختي دوست داشتن چيزيست كه بدست آوردهآ‌اي.

            دیدگاه


              #21
              پاسخ : کمک در تولید پالس با PWM

              اما چیزی که من از پهنای باند مرده فهمیدم :
              deadband is basically how much movement back and forth the servo can move without responding or having a command sent to maintain its position. the lower the deadband the better it will be able to hold a more precise position.
              یا:
              A servo that has some deadband will stay still (not move) so long as subsequent commands are within the deadband timing pulse width

              The deadband was introduced as a way to keep a servo from dancing itself to death. For instance: If the new command isn't at least five microseconds different from the old command, then don't bother moving the servo. ...and that would be a 5us deadband.


              موفقيت بدست آوردن چيزيست كه دوست داري و خوشبختي دوست داشتن چيزيست كه بدست آوردهآ‌اي.

              دیدگاه


                #22
                پاسخ : کمک در تولید پالس با PWM

                سلام
                prescaler یعنی چی مثلا 32 prescaler یعنی چی ؟

                دیدگاه


                  #23
                  پاسخ : کمک در تولید پالس با PWM

                  من میخوام که با AVR پالسهای PWM تولید کنم از دو تا کلید هم برای تغییر پالس باید استفاده کنم تا حالا هم باهاش کار نکردم لطفا کمکم کنید ا

                  دیدگاه


                    #24
                    پاسخ : کمک در تولید پالس با PWM

                    نوشته اصلی توسط mohammad.ch
                    سلام
                    prescaler یعنی چی مثلا 32 prescaler یعنی چی ؟
                    باسلام
                    اگه بخوام در حدی که خودم می دونم بگم اینه :
                    Prescaler برابر با نسبت فرکانس اصلی آی سی بر فرکانس تایمر است( prescaler = system clock / timer clock ) که می تونه اعدادی چون 1 و 8 و 64 و 256 و 1024 باشه یعنی اگه بخوام ساده تر توضیح بدم این که مثلا یه برنامه می نویسی که سرعت آی سی و کریستالش 8MHz با و دراین صورت می تونی با انتخاب یک Prescaler برای یکی از تایمر ها ( مثلا تایمر 0 ) سرعت اون تایمر رو تنظیم کنی مثلا برای همین کریستال که گفتم با Prescaler 32 سرعت تایمری که این Prescaler رو براش انتخواب کردی می شه 250KHz
                    که برای تنظیم Prescaler می تونی از بیت های CS00 و CS01 و CS02 استفاده کنی که البته این بیت ها برای تایمر 0 آی سی Atmega32 , Atmega16 می باشد.

                    دیدگاه


                      #25
                      پاسخ : کمک در تولید پالس با PWM

                      این برنامه ای هستش که برای راه اندازی سرو موتور نوشته شده و جواب داده است، کسی میدونه برای چی TCNT0=0x28;
                      در اینتراپت (زیر برنامه interrupt [TIM0_OVF] void timer0_ovf_isr(void) ) دوباره تعریف شده است؟


                      #include <mega16.h>
                      #define xtal 11059200
                      #include <delay.h>
                      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                      {
                      TCNT0=0x28;
                      }
                      void main(void)
                      {
                      PORTD.0=1; //pull up
                      PORTD.1=1; //pull up
                      DDRB=0x08;
                      TCNT0=0x28; //TCNT0 = 40
                      OCR0=0x6B; //OCR0 = 107
                      TIMSK=0x01;
                      #asm("sei&quot
                      TCCR0=0x6D;
                      while (1)
                      {
                      if( (PIND.0==0) && ((OCR0+1)>=0x28) ) OCR0++;
                      if( (PIND.1==0) && ((OCR0-1)>=0x28) ) OCR0--;
                      delay_ms(100);
                      }
                      }

                      دیدگاه


                        #26
                        پاسخ : کمک در تولید پالس با PWM

                        با سلام
                        اولین مقدار دهی، تو MAIN که برای اتفاق افتادن اولین وقفه هست و دومییش تو سرویس وقفه هست که باعث تکرارش میشه.
                        کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                        دیدگاه


                          #27
                          پاسخ : کمک در تولید پالس با PWM

                          کسی بلده با PWM ، پالس مربعی 50hz چطوری درست میکیی؟

                          دیدگاه


                            #28
                            پاسخ : کمک در تولید پالس با PWM

                            [با سلام.من اولین بارم هست که دارم از این سایت استفاده میکنم.امیدوارم زود بهم جواب بدین.میخوام یه pwm با پریود 20ms بسازم.طبق کتاب inafar :فرکانس=مقدار کریستال/prescale .من میخوام با کریستال 8 مگا این pwm بسازم .طبق این فرمول هر چی محاسبه میکنم درست در نمیاد.چطور باید یه pwm با عرض 20ms یا فرکانس 50hz بسازم؟

                            دیدگاه


                              #29
                              پاسخ : کمک در تولید پالس با PWM

                              سلام.من میخوام یه pwm با عرض پالس متغیر بین 55.ms و 2.40ms به زبان بسکام درست کنم .از برنامه زیر استفاده کردم.سعی کردم با پتانسیومتر عرض پالس را عوض کنم عوض میشه ولی نه اونی که من میخوام.لطفا راهنمایی کنید.اینم برنامم:
                              $regfile "m16def.dat"
                              $crystal = 8000000
                              Dim W As Word
                              Config Lcd = 16 * 2
                              Config Portc = Output
                              Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Prescale = 8
                              Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0
                              Config Adc = Single , Prescaler = Auto
                              Start Adc
                              Cls
                              Do
                              Locate 1 , 1
                              Lcd "hello"
                              W = Getadc(0)
                              Locate 2 , 1
                              Lcd W
                              Pwm1a = W
                              Waitms 100
                              Cls
                              Loop

                              دیدگاه


                                #30
                                پاسخ : کمک در تولید پالس با PWM

                                با سلام خدمت دوستان کسی هست که با AVR بتونه یه سری سنگنال رو تو پورت مثلاA بده . هرکی میتونه من هزینشم حاضرم بدم. ممنون

                                دیدگاه

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