اطلاعیه

Collapse
No announcement yet.

pwm

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

    pwm

    با سلام من میخوام یه برنامه بنویسم که دو تا موج pwm بسازم با فرکانس 22-2 کیلو هرتز و پهنای پالس 10% تا 90% که فرکانس وپهنای پالس با کلید قابل تغییر باشد میخوام این کارا با مگا 64 و با کدویژن لطفا کمک کنید ممنونم

    #2
    پاسخ : pwm

    برای تغییر فرکانس میتونی مقادیر جدید مقسم یک تایمر رو حساب کنی و تایمرت رو جوری ست کنی که با فرکانس مورد نطرت روتیه وقفه اش صدا زده بشه و در اون فقط یک متغیر رو ++ کنی.
    برای تغییر duty cycle هم یک متغیر ثانوی میخوای که اون حاوی مقدار duty cycle ات باشه و خروجی pwm رو هم از مقایسه این دو متغیر با هم ست کنی. اگر یکی بزرگتر از اون یکی باشه خروجی رو ست کن و در غیر اینصورت ریست.

    دیدگاه


      #3
      پاسخ : pwm

      من میخوام یک dead time بین زمان onوoff داشته باشم یعنی وقتی زمان on تموم شد بلافاصله off نشود و با یک زمان کوچک که گذشت off شود برای این کار باید چی کار کنم؟ممنونم

      دیدگاه


        #4
        پاسخ : pwm

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

        دیدگاه


          #5
          پاسخ : pwm

          من در اصل دو موج pwm میخوام که از 0درجه تا 180 درجه باشه و dead time هم بین دو موجم باشه لطفا کمک کنید 0درجه تا 180 درجه را چطور ایجاد کنم ممنونم

          دیدگاه


            #6
            پاسخ : pwm

            اگر مقدار deadtime بر اساس پایه زمانی pwm حساب بشه میتونی در زمان تصمیم گیری برای تغییر pwm دو بیت پترن تولید کنی و بعد به ازای تیک های زمانی متفاوت هر بیت رو به کانال مربوطه ارسال کنی.

            دیدگاه


              #7
              پاسخ : pwm

              میشه یه مثال برنامه نویسی بزنید تا من متوجه بشم ممنون میشم

              دیدگاه


                #8
                پاسخ : pwm

                هر pwm در یک برهه زمانی متشکل از یک سری بیتهای 0 و 1 هست که بسته به duty cycle موج نسبت بین تعداد بیتهای 0 و 1 تغییر میکنه. مثلا:

                01010101 برای یک سیکل 50 درصدی.
                00010001 برای یک سیکل 25 درصدی.

                اما طول یک بیت بستگی به یک ثابت زمانی داره که فرکانس پایه اون حساب میشه (2 تا 22 کیلو هرتز) و تسط یک تایمر بایستی حساب بشه. و این پترن ها مرتب تکرار میشه.

                حالا برای داشتن duty cycle های متفاوت بایستی طول این پترن ثابت زیاد باشه و سرعت کلاک هم بالا. مثلا کلاک ثابت 22 کیلو هرتز (ثابت زمانی تقریبی 45 میکرو ثانیه) و پترنی به طول مثلا 36 بیت که با این حساب شما به دقتی در حدود 180/36 یا 5 درجه میرسین.

                در ابتدای ست کردن duty cycle بین 0 تا 180 درجه این پترن بایستی به تعداد مورد نیاز از 1 و 0 پر بشه. و در این مرحله deadtime با یک سری بیت بین این دو حالت اضافه یشه. بعد تایمر تنظیم شده و استارت بشه. سپس در روال تایمر بیت به بیت به پورت خروجی ارسال بشه و در صورت رسیدن به انتهای لیست از ابتدای اون دوباره شروع بشه.

                دیدگاه


                  #9
                  پاسخ : pwm

                  آیا با pwm میکرو میتونم این کارا انجام بدم؟میشه شما یه برنامه بنویسید من بهتر متوجه بشم؟ممنون میشم

                  دیدگاه


                    #10
                    پاسخ : pwm

                    لطفا کمک کنید گناه دارما :cry2:

                    دیدگاه


                      #11
                      پاسخ : pwm

                      من اینکه گفتم فقط با استفاده از یک تایمره نه بیشتر. شاید هم بشه برای راحتی از spi استفاده کرد ولی کدش رو شرمنده یک کمی سرم شلوغه اگر تونستم تا یکی دو روز دیگه انجام بدم خدمتتون میفرستم. ولی اصلش ایده اش است. بقیه اش یه کمی وقت بذاری خودت میتونی حلش کنی. (به کسی نگی شاید خودمم یه لافی اومدم توش موندم!!!)

                      دیدگاه


                        #12
                        پاسخ : pwm

                        آیا در بیسکام میتونم فرکانس pwmرا با کلید تنظیم کنم؟اگه میشه چه جوری باید این کارا بکنم ؟ممنونم

                        دیدگاه


                          #13
                          پاسخ : pwm

                          ولله من چیزی که از بسکام میدونم اینه که برای هر موردی یک shortcut گذاشته. حالا با این وضعیت بشه به صورت lowlevel کار کرد یا نه من خودم هنوز گیجم. بخاطر همین وقتی پای بسکام وسط میاد نمیدونم چی بگم. چون شما یک کدی مینویسین. ولی واقعا نمیشه گفت چه کدی داره اجرا میشه. اینجوری آدم یه کمی دقیقا موقعی که میخواد روی جزئیات کار کنه کر و کور میشه.

                          اگر C باشه تا حد زیادی میونم کد معادل رو براتون قید کنم اما بسکام شرمنده.

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


                          Dim Pattern(36) As Byte ' Storage for Pattern
                          Dim SendIndex As Integer ' Index of pattern bit to be send
                          Dim TriggerLevel As Integer ' Scaled PWM Level (0..36)
                          Dim I As Integer ' You know
                          Dim Preset As Integer ' PWM Level 0..100

                          SendIndex = 1

                          TriggerLevel = (Preset * 36) / 100 ' Preset in 0..100
                          for I=1 to 36
                          if i >= TriggerLevel Then
                          Pattern(i) = 1
                          Else
                          Pattern(i) = 0
                          EndIf
                          Next I

                          SetOut:
                          OutPort = Pattern(SendIndex)
                          SendIndex = SendIndex + 1
                          if SendIndex = 36 + 1 Then
                          SendIndex = 1
                          EndIf
                          Return



                          البته کد تولیدی این روتین خیلی خوب نیست. ولی باید جواب بده. مثلا عوض اینکه پترن 50 درصدی رو 01010101 تولید کنه بصورت 00001111 تولید میکنه. که خوب البته میشه الگوریتم بهتری استفاده کرد.

                          دیدگاه


                            #14
                            پاسخ : pwm

                            با تشکر از شما این کدی که نوشتید فقط برای تغییر پهنای پالسه؟یا فرکانس را هم تغییر میده؟

                            دیدگاه


                              #15
                              پاسخ : pwm

                              آقا یکی نیست به ما بگه تو بیسیک چه جوری فرکانسا عوض کنم :angry: میخوام فرکانسا از 2k تا 25k تغییر بدم

                              دیدگاه

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