اطلاعیه

Collapse
No announcement yet.

ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

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

    ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

    در میکروکنترلر AVR اصولا برای ساخت یک زمان کاملا دقیق که به تناوب کاری در آن انجام شود و هیچ خطای نرم افزاری هم وجود نداشته باشد، از مد CTC و فعال سازی وقفه تایمر استفاده می شود. سپس در روتین وقفه تایمر مذکور، عمل مورد نظر انجام می شود و می توان در مضاربی از زمان ساخته شده هم کارهای دیگری را انجام داد. مثلا اگر یک زمان یک میلی ثانیه بصورت دقیق ساخته شود، می توان در هر 100 بار وقوع این وقفه که معادل 1. ثانیه است، کار دیگری را انجام داد و در مضارب دیگر هم به همین ترتیب عمل کرد. البته باید توجه کرد که منظور در اینجا زمان های کاملا دقیق هستند و استفاده از روش هایی مانند دستورات delay و مانند آن مورد نظر نیست و حتی یک سیکل خطای میکروکنترلر هم قابل قبول نیست.
    هدف در این تاپیک توضیح دادن روشی است که بتوان با یک تایمر واحد AVR به تعداد رجیسترهای OCR تایمر، زمان های کاملا مستقل و دقیقی را که هیچ ربطی هم به هم ندارند و مضربی از یکدیگر نیستند، ایجاد کرد. مثلا در ATmega64 بتوان 8 وقفه زمانی کاملا مستقل و دقیق را که رابطه ای بین آنها وجود نداشته باشند، ایجاد کرد(در mega64 تعداد 8رجیستر OCR وجود دارد).
    قبل از توضیح روش مذکور از دوستانی که بصورت پیشرفته با AVR برنامه نویسی می کنند درخواست می شود نظر و راه حل خود را درباره این صورت مسئله بیان کنند.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    #2
    پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

    فرض کنیم که تعدادی درایور موتور صنعتی که با روش CLOCK-DIRECTION عمل می کنند به یک میکرو کنترلر AVR متصل باشند و هدف کنترل همزمان و مستقل این موتورها با سرعت چند ده هزار CLOCK برای هر موتور باشد. چنین نیازی در دستگاه های صنعتی و مثلا کنترل کننده های CNC مطرح است و صورت مسئله ای که مطرح شد، دقیقا در راستای پاسخ گویی به این گونه کاربردهاست.

    برای ایجاد علاقه مندی بیشتر خدمت دوستان عرض می کنم که امثال چنین کاربردهایی در AVR می تواند به یک سخت افزار چند ده هزارتومانی، ارزش میلیونی بدهد و کنترل کننده هایی که دارای قابلیت کنترل همزمان چند موتور بصورت مستقل هستند از قیمت بالایی برخوردار هستند. البته رعایت سایر نکات فنی برای یک مدار صنعتی هم جزء لوازم کار است، اما اصلی ترین نکته همان امکان ساخت زمان های مستقل و بدون خطاست که هیچ ربطی به یکدیگر نداشته باشند و فرکانس بالایی را هم بتوانند تامین کنند.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #3
      پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

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

      ما منتظریم ادامه بدی. اگه ادامه ندی خودم یه چیزایی میگم مجبور بشی بیای اصلاح کنی ها ...

      ممنون
      https://www.linkedin.com/in/mohammadhosseini69

      http://zakhar.blog.ir

      دیدگاه


        #4
        پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

        از آنجا که در این سایت دوستان فعال و با انگیزه ای مشغول فعالیت هستند و با توجه به بحث هایی که در مورد توانایی های کامپایلرهای مختلف می شود، تصمیم گرفتم با موضوع این تاپیک از منظر متفاوتی برخورد شود.
        در رابطه با موضوع مطرح شده این امکان وجود دارد که در یک تاریخ و ساعت از پیش تعیین شده، صورت مسئله مشخص و دقیقی را مطرح کنم و هر کس پاسخ صحیح آن را زودتر از بقیه بصورت برنامه ای با عملکرد درست بنویسد، جایزه نسبتا خوبی از طریق سایت به او پرداخت شود. مبلغ این جایزه را هم شخصا تقبل می کنم و در صورت تحقق این مسابقه، به حساب سایت واریز خواهد شد.
        اگر مدیریت سایت برای این مورد آمادگی دارند، بفرمایند تا توضیحات لازم داده شود.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #5
          پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

          پست قبلی بنا به انگیزه های شخصی برای تشویق دوستان فعال و علاقه مند منتشر شد و معنی اجرایی آن این بود که سوال مورد نظر این تاپیک به مسابقه گذاشته شود و به کسی که بتواند صورت مسئله را بدرستی درک کند و راه حلی برای آن ارائه دهد، جایزه ای ( مثلا یک نیم سکه بهار آزادی) با هزینه شخصی تعلق بگیرد.
          اما به هر دلیل تحرکی در این مورد مشاهده نشد و بنابراین این مسئله جایزه مشمول Timeout شد و منتفی گردید و هزینه آن هم Save شده تلقی می شود.
          اما به لحاظ اصل صورت مسئله، هدف ایجاد 8 شکل موج با فرکانس های کاملا دقیق و مستقل در خروجی های 8 گانه PWM مربوط به mega64 است به نحوی که خطایی از نظر زمانی در شکل موج ها وجود نداشته باشد. به عبارت دیگر هدف آن است که به تعداد رجیسترهای OCR بتوان زمان مستقل تولید کرد. در ادامه و در صورتی که راه حلی در این مورد پیشنهاد نشود، پاسخ این صورت مسئله بیان خواهد شد.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #6
            پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

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

            متشکرم
            I ❤️ ECA

            دیدگاه


              #7
              پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

              اما به لحاظ اصل صورت مسئله، هدف ایجاد 8 شکل موج با فرکانس های کاملا دقیق و مستقل در خروجی های 8 گانه PWM مربوط به mega64 است به نحوی که خطایی از نظر زمانی در شکل موج ها وجود نداشته باشد. به عبارت دیگر هدف آن است که به تعداد رجیسترهای OCR بتوان زمان مستقل تولید کرد. در ادامه و در صورتی که راه حلی در این مورد پیشنهاد نشود، پاسخ این صورت مسئله بیان خواهد شد.
              لطفا یه مقدار فرصت بدید، مثلا اگه میشه یک هفته. شخصا به موضوعاتی که شما مطرح میکنید خیلی علاقمندم ولی دیگه کمتر فرصت میکنم پستهاروپیگیری کنم
              {خلاف قوانین - امضا ویرایش شد}

              دیدگاه


                #8
                پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                من درست متوجه نشدم! clock-direction چیه؟
                هدف تولید موج pwm ؟ خوب این که بنظر سخت نمیرسه!
                البته انگار باید فرکانسش هم تنظیم بشه... ؟ یعنی هم پهنای پالس و هم فرکانس با هم در خروجی. درسته؟
                فکر میکنم با توضیح clock-direction متوجه بشم چی می خواین...
                https://www.linkedin.com/in/mohammadhosseini69

                http://zakhar.blog.ir

                دیدگاه


                  #9
                  پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                  نوشته اصلی توسط محمد حسینی
                  من درست متوجه نشدم! clock-direction چیه؟
                  هدف تولید موج pwm ؟ خوب این که بنظر سخت نمیرسه!
                  البته انگار باید فرکانسش هم تنظیم بشه... ؟ یعنی هم پهنای پالس و هم فرکانس با هم در خروجی. درسته؟
                  فکر میکنم با توضیح clock-direction متوجه بشم چی می خواین...
                  بحث Clock-Direction درباره کاربرد صورت مسئله است و توضیح آن در مباحث انجمن CNC موجود است. اما شما به صورت مسئله خارج از کاربرد اجرایی آن فکر کنید و بررسی کنید که چگونه می توان 8 فرکانس مختلف در 8 خروجی PWM تولید کرد. به نحوی که هیچ خطایی در شکل موج ها از نظر زمانی وجود نداشته باشد و فرکانسها هم مستقل از یکدیگر باشند.
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #10
                    پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                    سلام دوست عزیز این طرح چطوره؟

                    $regfile = "m32def.dat"
                    $crystal = 8000000

                    Config Portb = Output
                    Config Timer1 = Timer , Prescale = 8
                    Enable Interrupts
                    Enable Ovf1
                    On Ovf1 Ref_time
                    Start Timer1

                    Dim Control As Byte
                    Dim Cnt(8) As Word
                    Dim Pulse As Bit
                    Dim I As Byte
                    Dim J As Byte
                    Dim T(8) As Word

                    T(1) = 1
                    T(2) = 4
                    T(3) = 14
                    T(4) = 68
                    T(5) = 150
                    T(6) = 312
                    T(7) = 640
                    T(8) = 890
                    'T(1-8) (ms) = 1000/frequency(hz)

                    Do
                    If Pulse = 1 Then
                    Pulse = 0
                    For I = 1 To 8
                    J = I - 1
                    Incr Cnt(i)
                    If Cnt(i) => T(i) Then
                    Toggle Control.j
                    Cnt(i) = 0
                    End If
                    Next
                    End If
                    Loop

                    '500us
                    Ref_time:
                    Timer1 = -496
                    Pulse = 1
                    Portb = Control
                    Return

                    این هم فایل پروتوسش
                    http://www.4shared.com/file/A4HHKsoK...Frequency.html
                    زندگی را تو بساز ،
                    نه بدان ساز که سازند و پذیری بی حرف ،
                    زندگی یعنی جنگ ، تو بجنگ ،
                    زندگی یعنی عشق ، تو بدان عشق بورز.

                    دیدگاه


                      #11
                      پاسخ : ایجاد زمان های دقیق و مستقل با یک تایم&#1585

                      نه دیگه! این که اصلا خوب نیست. دقیقا منظور طراح همین بوده که از روش نرم افزاری استفاده نشه که هیچ خطایی نداشته باشیم.
                      خوب من میگم 3 تا تایمر رو در مد CTC راه اندازی کنیم. 8 تا OCR هم داریم که با توجه به فرمول فرکانس در مد CTC ، مقدار OCRها رو مشخص میکنیم و خروجی های مورد نظر رو بدست میاد. جواب مسئله اینه؟ (البته دوتا از پایه های OCR تو mega64 مشترک هستن! 7 تا خروجی میشه درست کرد)
                      https://www.linkedin.com/in/mohammadhosseini69

                      http://zakhar.blog.ir

                      دیدگاه


                        #12
                        پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                        دوست عزیز شما اگه فایل پروتیوس رو اجرا کنید میبینی که این نرم افزار تمام اون 8 فرکانس رو بطوط مجزا میده و تنها با یه تایمر کار میکنه
                        فقط باید مقدار لود تایمر رو برای زمان دقیق کالیبره کنید :read:
                        شاید هم من منظور دوستان رو اشتباه متوجه شدم :cry:
                        موفق باشید
                        زندگی را تو بساز ،
                        نه بدان ساز که سازند و پذیری بی حرف ،
                        زندگی یعنی جنگ ، تو بجنگ ،
                        زندگی یعنی عشق ، تو بدان عشق بورز.

                        دیدگاه


                          #13
                          پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                          نوشته اصلی توسط محمد حسینی
                          خوب من میگم 3 تا تایمر رو در مد CTC راه اندازی کنیم. 8 تا OCR هم داریم که با توجه به فرمول فرکانس در مد CTC ، مقدار OCRها رو مشخص میکنیم و خروجی های مورد نظر رو بدست میاد. جواب مسئله اینه؟ (البته دوتا از پایه های OCR تو mega64 مشترک هستن! 7 تا خروجی میشه درست کرد)
                          در مد CTC تنها OCR1A یا ICR1 برای TIMER1 و OCR3A یا ICR3 برای TIMER3 عمل می کنند.
                          در مورد BASCOM هم به این نکته توجه کنید که دقت مورد نظر در اینجا در حد نانوثانیه است و در ادامه راجع به این مسئله توضیح داده خواهد شد.
                          برای روشن شدن هرچه بهتر این صورت مسئله و بررسی ظرفیت هایی از AVR که تا حدی مغفول مانده است، مثال های عددی برای مسئله ذکر می شود. با توجه به تذکر بجای جناب حسینی مبنی بر مشترک بودن پایه های OC1C و OC2، فرض می کنیم که بخواهیم 7 شکل موج با دوره تناوب به ترتیب 49 و 49.25 و 49.5 و 49.75 و 50 و 50.25 و 50.5 میکرو ثانیه روی خروجی های OC0 و OC1A و OC1B و OC1C و OC3A و OC3B و OC3C تولید شود که حتی به اندازه یک سیکل کلاک(125 نانوثانیه به ازای کلاک 8 مگاهرتز) هم خطا نداشته باشند. فرض می کنیم TIMER2 در دسترس نیست و در کار دیگری مورد استفاده قرار گرفته است.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #14
                            پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                            من دیگه جلوی این مسئله، سپر انداختم!! چند ساعته دارم در مورد رجیسترهای تایمر و عملکردهاش می خونم. ولی به نتیجه نمیرسم! (البته اطلاعاتم خیلی خیلی بیشتر شد...)
                            فکر می کنم دیگه نوبت استاد طراح باشه که از رمز و رموز ناشناخته ای از avr پرده برداره. :applause: شدیدا کنجکاوم بدونم چطوری میشه اینکارو کرد که حتی 1 سیکل هم خطا نداشته باشه! oo: (امیدوارم از از سطح درک من بالاتر نباشه که بدجوری حالم گرفته میشه!)
                            https://www.linkedin.com/in/mohammadhosseini69

                            http://zakhar.blog.ir

                            دیدگاه


                              #15
                              پاسخ : ایجاد زمان های دقیق و مستقل با یک تایمر در AVR

                              راه حل این روش در یک پست قابل بیان است و "معما چو حل گشت آسان شود". اما قبل از آن مایلم بدانم دوستانی که در مباحثی مانند "کدام کامپایلر بهتر است؟" با قوت به میدان می آیند و از روش برنامه نویسی مورد نظر خود دفاع می کنند، چرا برای محک زدن ابزارهای برنامه نویسی روی این صورت مسئله وارد عمل نمی شوند و حداکثر ظرفیت آن را امتحان نمی کنند؟
                              جالب است بدانید ظرفیتی که هر روش برنامه نویسی در تولید حداکثر فرکانس در این مسئله ایجاد می کند متفاوت از بقیه است و به غیر از اصل صورت مسئله، محک زدن روش برنامه نویسی هم می تواند از نتایج پاسخگویی به این سوال باشد.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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