اطلاعیه

Collapse
No announcement yet.

پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

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

    پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

    سلام

    من میخوام 4 عدد موتور دی سی با 4 عدد پره اپتوکانتر رو با یک میکرو Atmega128 کنترل موقعیت و کنترل سرعت کنم.
    واسه عملیات شمارش پالس هام اومدم از 4 عدد وقفه استفاده کردم . و واسه فیدبک سرعت گرفتن میخوام فاصله زمانیه بین دو پالس high رو اندازه بگیرم . واسه این کار از تایمر 0 استفاده کردم و 4 عدد متغیر t1,t2,t3,t4 معرفی کردم . تایمر 0 رو روی 10 میلی ثانیه تنظیم کردم. فرکانس 16mhz
    از تایمر 1و 3 هم بعنوان pwm استفاده شده (10 بیتی).

    مشکلاتی که دارم اینه که اطلاعات نمایشه داده شده t =فاصله زمانی بین دو پالس و c =تعداد پالس روی ال سی دی بهم میریزه .

    سوال_1: ایا ال سیدی رو با این شرایط میشه راه اندازی کرد بطوری که بهم نریزه ؟
    سوال_2: آیا با پورت سریال و برنامه هایپر ترمینال سهولت کار بیشتره و شدنیه؟
    سوال_2: در کل راهی که دارم میرم (استفاده از 4 وقفه -راه اندازی تایمر 0 - راه اندازی تایمر 1و3 واسه pwm) واسه انجام این پروژه کفایت میکنه یعنی این راه حل جواب میده .
    یه نکته ایم که باید در نظر گرفت اینه که من مدارم چاپ شدست و متاسفانه نمیشتونم از واحد کانتر استفاده کنم.(زبان برنامه نویسیمم bascom) کسی میتونه با این شرایط راه نمایی کنه کار ما راه بیافته؟

    #2
    پاسخ : پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

    نوشته اصلی توسط kargadan2
    سلام

    من میخوام 4 عدد موتور دی سی با 4 عدد پره اپتوکانتر رو با یک میکرو Atmega128 کنترل موقعیت و کنترل سرعت کنم.
    واسه عملیات شمارش پالس هام اومدم از 4 عدد وقفه استفاده کردم . و واسه فیدبک سرعت گرفتن میخوام فاصله زمانیه بین دو پالس high رو اندازه بگیرم . واسه این کار از تایمر 0 استفاده کردم و 4 عدد متغیر t1,t2,t3,t4 معرفی کردم . تایمر 0 رو روی 10 میلی ثانیه تنظیم کردم. فرکانس 16mhz
    از تایمر 1و 3 هم بعنوان pwm استفاده شده (10 بیتی).

    مشکلاتی که دارم اینه که اطلاعات نمایشه داده شده t =فاصله زمانی بین دو پالس و c =تعداد پالس روی ال سی دی بهم میریزه .

    سوال_1: ایا ال سیدی رو با این شرایط میشه راه اندازی کرد بطوری که بهم نریزه ؟
    سوال_2: آیا با پورت سریال و برنامه هایپر ترمینال سهولت کار بیشتره و شدنیه؟
    سوال_2: در کل راهی که دارم میرم (استفاده از 4 وقفه -راه اندازی تایمر 0 - راه اندازی تایمر 1و3 واسه pwm) واسه انجام این پروژه کفایت میکنه یعنی این راه حل جواب میده .
    یه نکته ایم که باید در نظر گرفت اینه که من مدارم چاپ شدست و متاسفانه نمیشتونم از واحد کانتر استفاده کنم.(زبان برنامه نویسیمم bascom) کسی میتونه با این شرایط راه نمایی کنه کار ما راه بیافته؟
    1- برای lcd که مشکلی نیست. چون کارتون داخل وقفه هست از lcd می تونید راحت استفاده کنید.
    2-با پورت سریال هم می تونید کار کنید. در مورد اینکه بهتره یا بدتره باید خودتون نسبت به کارتون بررسی کنید. و همینطوری نمیشه گفت کدوم بهتره اما خوب صد در صد پورت سریال اطلاعات را خیلی بهتر نمایش میده اما راه اندازیش نسبت به lcd کار سخت تریه و نویز بیشتر تاثیر میذاره روش که البته همه ی اینها به راحتی قابل حله.
    3- اگه سرعت پالس خوردن خیلی بالا نباشه با چهار تا وقفه مشکلی پیش نمیاد. فقط باید مواظب باشید کدی که داخل وقفه ها می نویسید خیلی کوتاه و بهینه باشه تا تداخل وقفه پیش نیاد به خصوص در وقفه تایمر 0

    دیدگاه


      #3
      پاسخ : پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

      نوشته اصلی توسط kargadan2
      سلام

      من میخوام 4 عدد موتور دی سی با 4 عدد پره اپتوکانتر رو با یک میکرو Atmega128 کنترل موقعیت و کنترل سرعت کنم.
      واسه عملیات شمارش پالس هام اومدم از 4 عدد وقفه استفاده کردم . و واسه فیدبک سرعت گرفتن میخوام فاصله زمانیه بین دو پالس high رو اندازه بگیرم . واسه این کار از تایمر 0 استفاده کردم و 4 عدد متغیر t1,t2,t3,t4 معرفی کردم . تایمر 0 رو روی 10 میلی ثانیه تنظیم کردم. فرکانس 16mhz
      از تایمر 1و 3 هم بعنوان pwm استفاده شده (10 بیتی).

      مشکلاتی که دارم اینه که اطلاعات نمایشه داده شده t =فاصله زمانی بین دو پالس و c =تعداد پالس روی ال سی دی بهم میریزه .

      سوال_1: ایا ال سیدی رو با این شرایط میشه راه اندازی کرد بطوری که بهم نریزه ؟
      سوال_2: آیا با پورت سریال و برنامه هایپر ترمینال سهولت کار بیشتره و شدنیه؟
      سوال_2: در کل راهی که دارم میرم (استفاده از 4 وقفه -راه اندازی تایمر 0 - راه اندازی تایمر 1و3 واسه pwm) واسه انجام این پروژه کفایت میکنه یعنی این راه حل جواب میده .
      یه نکته ایم که باید در نظر گرفت اینه که من مدارم چاپ شدست و متاسفانه نمیشتونم از واحد کانتر استفاده کنم.(زبان برنامه نویسیمم bascom) کسی میتونه با این شرایط راه نمایی کنه کار ما راه بیافته؟
      سلام یه سوال چه طوری می خواهید از تایمر های 1 و 3 هم برای شمارش یعنی کانتر و هم برای PWM یعنی تایمر استفاده کنید ؟ :cry:
      باد می وزد ...
      میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
      تصمیم با تو است ...

      دیدگاه


        #4
        پاسخ : پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

        تو این پروژه اصلا از کانتر استفاده نمیکنم من فقط از وقفه استفاده کردم و تایمر و pwm

        دیدگاه


          #5
          پاسخ : پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

          یه مشکلی که برخوردم تو فاصله ی زمانیه بین دو پالس هست. من تو این پروژه نمیتونم تایمر رو تو روتین وفقه استوپ یا استارت کنم چون این تایمر قرار برای هر 4 موتور کار کنه و از متغیرهای t1 t2 t3 t4 اومدم تایم های بین برنامه اصلی و رفتن به روتین وقفه رو اندازه گرفتم . اما تو برنامه هایپر ترمینال که نگاه میکنم بازم اون مقدار تثبیت شده ای که انتظار دارمو نمیبینم . ایا با این کار اندازه گیریه بین دو پالس شدنیه؟

          نمونه برنامه رو میذارمماله یک موتوره کسی میتونه اینو بهینش کنه و دقیق تر در بیاره . مرسی



          $regfile "m128def.dat"
          $crystal = 16000000

          '-------------------------------------------------------------------------------
          Config Porta = Output
          Config Portb = Output

          '-------------------------------------------------------------------------------
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
          '-------------------------------------------------------------------------------
          Config Timer3 = Pwm , Pwm = 9 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Compare C Pwm = Clear Down , Prescale = 64
          '---------------------------------------------------------------------------------------------------------------------------------
          Config Serialout = Buffered , Size = 200
          Baud = 9600
          '---------------------------------------------------------------------------------------------------------------------------------
          Config Timer0 = Timer , Prescale = 8
          Enable Interrupts
          Enable Timer0
          On Timer0 Timer_0
          '--------------------------------------
          Config Int0 = Rising
          Enable Int0
          On Int0 Counterr
          '-------------------------------------------------------------------------------


          Dim C As Integer
          Dim T1 As Integer
          Dim A As Word
          Dim I As Integer
          '------------------
          Dim P1 As Long
          Dim P2 As Long
          '------------------
          Dim C_t As Byte

          Dim T1_s As Single
          Dim T2_s As Single
          Dim T_s As Single

          Dim V1 As Single
          Dim V2 As Single

          Dim B1 As String * 10
          Dim B2 As String * 10





          '-------------------------------------------------------------------------------
          Cursor Off
          Cls
          '-----------
          Start Timer0
          Timer0 = 56
          I = 1
          C = 1
          P1 = 510
          P2 = 510


          Do

          V1 = P1 * 14.03
          V1 = V1 / 510

          V2 = P2 * 14.03
          V2 = V2 / 510

          If I = 1 Then : Reset Porta.2 : Set Porta.3 : Compare3b = P1 : V2 = 0 : End If
          If I = 2 Then : Set Porta.2 : Reset Porta.3 : Compare3b = P2 : V1 = 0 : End If

          If I = 3 Then

          Set Porta.2
          Set Porta.3

          T1 = 0
          T1_s = 0
          T2_s = 0




          If C = 5 Then : I = 2 : T_s = 1 : End If
          If C = 1 Then : I = 1 : T_s = 1 : End If

          End If



          B1 = Fusing(v1 , "#.&&&quot
          B2 = Fusing(t_s , "#.&&quot


          Print " Time= " ; B2 ; " c=" ; C ; " v1=" ; b1 ; " v2=" ; V2



          Loop

          '******************************************** ***********************************
          Timer_0:



          Stop Timer0
          Incr A
          If A = 100 Then


          Incr T1




          A = 0
          End If
          Timer0 = 56
          Start Timer0
          Return
          '******************************************** ***********************************
          Counterr:

          Incr C_t


          If I = 1 Then : Incr C : End If
          If I = 2 Then : Decr C : End If

          If C = 5 Then : I = 3 : End If
          If C = 1 Then : I = 3 : End If


          If C_t = 1 Then : T_s = T1 : T1 = 0 : C_t = 0 : End If






          Return
          '******************************************** ***********************************





          دیدگاه


            #6
            پاسخ : پروژه کنترل موقعیت و فیدبک سرعت 4 عدد موتور دی سی 10 rpm

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

            دیدگاه

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