اطلاعیه

Collapse
No announcement yet.

طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

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

    طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

    سلام خدمت اساتید
    من در حال طراحی مداری هستم تا بتونم مقدار جریان rms عبوری از یک سیم با جریان متناوب رو بطور لحظه ای بخونم

    در اصل میخوام جریان عبوری از سیم برق تغذیه یک درایو سروو یک کیلو وات که با برق تک فاز کار میکنه رو بطور لحظه ای بخونم

    میکروی من lpc 1768 هست که از adc داخلی اون میخوتم استفاده کنم
    ظاهرا بهترین سنسور موجود در بازار acs712 هستش با خروجی ولتاژ و کاملا خطی
    اما من برای اندازه گیری جریان به چند دلیل مشکل دارم
    یکی فرکانس برق شهر 50 هرتز
    دوم اثرات pwm درایور روی فیلترهای پسیو پایین گذر
    سوم سرعت نمونه برداری نسبتا بالا حدود 150 نمونه دقیق و فیلتر شده برای فید بک

    آیا برای استفاده از فیلترهای دیجیتال نیاز به dsp هست یا از پردازنده ارم و با نرم افزار میتونم این سرعت رو بگیرم ؟

    لطفا راهنماییم کنید که بهترین روش برای طراحی کلی مدارم چی هستش ؟

    ظاهرا مجبورم از فیلترهای fir استفاده کنم

    #2
    پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

    با سلام

    بر اساس برداشت اولیه از مطالب شما:

    1- سرعت نمونه برداری برای حلقه کنترلی شما 150 هرتز است.
    2- سیگنال نمونه برداری شما(جریان ac ورودی به درایو) غیر از فرکانس اصلی 50هرتز ، دارای نویز های pwm است .
    3- مقدار rms سیگنال مورد نظر شماست.

    با توجه به ردیف 1 و 2 ، یک نمونه یکسان سیگنال برای 3 بار تکرار حلقه کنترلی شما وارد می شود( نسبت 150 به 50 )

    مقدار rms به صورت ذیل بدست می آید.
    با فرض اینکه فرکانس pwm درایور ، برابر با 50000 هرتز است.
    با سرعت ثابت(دو برابر بالایی) 100000 نمونه در ثانیه از سیگنال جریان(همان سنسور با افزودن Vcc/2 به خروجی آن برای جبران سیکل منفی )
    نمونه برداری با a2d انجام می دهید.( از نتایج a2d مقدار نصف حداکثر را کسر می کنید.)
    تعداد 5000 نمونه برای یک سیکل برق شهری خواهید داشت.
    لذا برای توالی 5000 تایی سیگنال نمونه برداری شده a2d = Sn ، فرمول زیر را اجرا می کنید.
    res1=(sum(Sn^2))/5000 ok :یعنی هر کدام را در خودش ضرب می کنید و با هم جمع می کنید و نتیجه را بر 5000 تقسیم می کنید.
    rms=sqrt(res1) ok جذر عدد فوق به ما مقدار rms را می دهد.

    (طبیعتا برای تبدیل شدن به آمپر ، به یک ضریب ثابت نیاز داریم که از مشخصات سنسور و a2d بدست می آید.)

    نکات:
    - از یک آشکار ساز عبور از صفر برای شروع نمونه برداری هر سیکل برق شهری استفاده کنید.
    - آرایه بافر را 6000 تایی فرض کنید تا برای فرکانس کم و زیاد شونده برق شهری ، جا داشته باشید.
    - بر اساس فرکانس میانگین pwm محاسبات فرکانس و نمونه برداری را تغییر دهید.
    - اگر با اسیلوسکوپ ، نمونه جریان ورودی درایور را در حین کار دیدید و سینوسی قابل قبولی بود، از آثار pwm ,و فرکانس نمونه برداری بالا
    صرفنظر کنید و با سرعت 500 تا 1000 نمونه در ثانیه کار را انجام دهید.
    - lpc1768 کاملا از عهده این کار بر می آید و نیاز به محاسبات dsp نیست و فیلتر fir .
    - نتایج محاسبات در پایان هر سیکل برق شهر آماده است.

    - می توان به صورت متوالی ، در انتظار عبور از صفر و شروع سیکل برق شهر نماند
    بلکه از هرجایی از سیکل برق شهر شروع کرد و تا 20 میلی ثانیه ، نمونه برداری نمود و محاسبات را انجام داد
    که در این حالت به سرعتهای بیش از 50 rms در ثانیه می توان رسید.

    با سپاس
    گشتی در لاله زار
    http://www.eca.ir/forum2/index.php?topic=76138.0

    http://www.eca.ir/forum2/index.php?topic=76141

    دیدگاه


      #3
      پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

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

      د رمورد نویز فیلتر سخت افزاری در مدار با وجود نویزهای حاصل از موتور و خود بخشهای دیجیتال مدار میکرو کنترلر استفاده از چه نوع فیلتری برای ورود حداقل نویز به a2d و را مناسب میدونید؟
      آیا استفاده از a2d های دارای فیلتر و سیگما دلتا مثل cs5532 یا ad7190 و یا مواردی مثل این ضروری هست؟
      با توجه به توضیحات برای محاسبات خروجی و اینکه در برنامه میکرو من محاسبه موقعیت و سرعت موتور از طریق شفت انکودر سروو موتور و همینطور ارسال اطلاعات با پورت یو اس بی بصورت hid - bulk انجام میشه آیا احتمال کاهش سرعت در محاسبات هست ؟؟ یا سرعت 1768 باز کافی خواهد بود؟

      و سوال آخر آیا طراحی یک درایور سروو موتور با این میکرو برای موتورهای ac برای کنترل سرعت و موقعیت کاری ساده در اجرا در ایران با وجود قطعات بخش قدرت اون مثل igbt ها و غیره میباشد؟؟

      با تشکر فراوان

      دیدگاه


        #4
        پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

        با سلام

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

        د رمورد نویز فیلتر سخت افزاری در مدار با وجود نویزهای حاصل از موتور و خود بخشهای دیجیتال مدار میکرو کنترلر استفاده از چه نوع فیلتری برای ورود حداقل نویز به a2d و را مناسب میدونید؟

        چون مبدل acs712 یک قطعه کاملا ایزوله می باشد ( اثر هال ) لذا بخش اعظم نویز مزاحم را حذف می کند.
        اگر پاسخ فرکانسی این قطعه برای 100khz کافی باشد، یک فیلتر RC پایین گذر به مقاومت 1K و خازن 1nF کافی است که در ورودی a2d قرار گیرد.
        طبیعتا ، قواعد گراندینگ ستاره ای را برای بخش a2d و دیجیتال و رفرنس مناسب را باید رعایت کنید.
        مسایل مربوط به نویز را در تاپیک کاهش نویز در مدارات میکروکنترلری بررسی و لحاظ فرمایید.


        آیا استفاده از a2d های دارای فیلتر و سیگما دلتا مثل cs5532 یا ad7190 و یا مواردی مثل این ضروری هست؟
        این a2d ها کند هستند و برای سرعت نمونه برداری بیش از 5000 نمونه در ثانیه ، مناسب نیستند،( گرچه رزولوشن بالاتری دارند.)
        فقط در صورتی که شکل موج جریان ، نزدیک به سینوسی و قابل قبول باشد، می توانید برای سرعت 1000 نمونه در ثانیه از ad7190 استفاده نمایید.


        با توجه به توضیحات برای محاسبات خروجی و اینکه در برنامه میکرو من محاسبه موقعیت و سرعت موتور از طریق شفت انکودر سروو موتور و همینطور ارسال اطلاعات با پورت یو اس بی بصورت hid - bulk انجام میشه آیا احتمال کاهش سرعت در محاسبات هست ؟؟ یا سرعت 1768 باز کافی خواهد بود؟


        محاسبات ضرب 5000 نمونه و جمع زدن آنها در LPC1768 در حدود حداکثر 100000 سایکل طول می کشد.( حداکثر : 20 سایکل برای محاسبه آدرس درایه و لود و ضرب و جمع و ذخیره هر نمونه a2d)
        با فرکانس 100 مگاهرتز برای LPC1768 ، هر سایکل برابر 10 نانو ثانیه است، لذا هر محاسبه 5000 تایی ، 1000000 نانوثانیه = 1 میلی ثانیه طول می کشد.
        اگر برای سایر محاسبات و پردازش ها در هر دوره فوق ، 4 میلی ثانیه در نظر بگیریم ( که خیلی بالا دست در نظر گرفته شده ) ، هر دوره = 5 میلی ثانیه = 200 هرتز
        بنابراین LPC1768 به خوبی و با کمتر از نصف توانایی خود، کار مورد نظر شما را انجام می دهد.


        و سوال آخر آیا طراحی یک درایور سروو موتور با این میکرو برای موتورهای ac برای کنترل سرعت و موقعیت کاری ساده در اجرا در ایران با وجود قطعات بخش قدرت اون مثل igbt ها و غیره میباشد؟؟


        کار طراحی با این روش شدنی است و در ایران نیز امکان پذیر است گرچه جزو کارهای ساده محسوب نمی شود. و نمونه نزدیک به این کار را جناب طراح انجام داده اند(کنترل سرعت سه فاز با اینورتر ) که در ویدیو های ایشان در بخش xmega می توانید ببینید.
        گرچه می دانیم ، درایو سروو ، بیشر اهداف موقعیتی دارد تا دوران دایمی،


        با تشکر فراوان
        با سپاس

        مشخصات cortex-m3 برای LPC1768

        1.2.2 Processor core
        The processor core implements the ARMv7-M architecture. It has the following main
        features:
        • Thumb-2 (ISA) subset consisting of all base Thumb-2 instructions, 16-bit and
        32-bit.
        • Harvard processor architecture enabling simultaneous instruction fetch with data
        load/store.
        • Three-stage pipeline.
        • Single cycle 32-bit multiply.
        • Hardware divide.
        • Thumb and Debug states.
        • Handler and Thread modes.
        • Low latency ISR entry and exit.
        — Processor state saving and restoration, with no instruction fetch overhead.
        Exception vector is fetched from memory in parallel with the state saving,
        enabling faster ISR entry.
        — Support for late arriving interrupts.
        — Tightly coupled interface to interrupt controller enabling efficient
        processing of late-arriving interrupts.
        — Tail-chaining of interrupts, enabling back-to-back interrupt processing
        without the overhead of state saving and restoration between interrupts.
        • Interruptible-continued LDM/STM, PUSH/POP.
        • ARMv6 style BE8/LE support.
        • ARMv6 unaligned.
        گشتی در لاله زار
        http://www.eca.ir/forum2/index.php?topic=76138.0

        http://www.eca.ir/forum2/index.php?topic=76141

        دیدگاه


          #5
          پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

          با تشکر مجدد

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

          دیدگاه


            #6
            پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

            نوشته اصلی توسط mortezai
            با تشکر مجدد

            متاسفانه من نتونستم سرعت مناسب در مورد محاسبات رو بگیرم و حداکثر سرعت من برای 4000 نمونه با معدل گیری قابل انجام بود و و در صورت انجام عملیات جزر و مربع سرعت من به شدت افت میکنه
            با سلام
            لطفا کد محاسباتی این بخش را در اینجا قرار دهید،

            فقط از اعداد صحیح مثبت 16 بیتی(برای a2d ) و 32 بیتی(برای نتیجه جمع) استفاده کنید ، و از float استفاده نکنید
            unsigned short int , unsigned int
            مربع یا توان 2 را فقط با ضرب نمودن یک عدد در خودش محاسبه کنید .تا از دستور تک سایکلی ضرب خود میکرو استفاده شود.

            چون a2d 12 بیتی تا عدد 4095 می باشد لذا مربع آن تا 16770000 و جمع مربعات تا 83800000000(84 میلیارد) بالا می رود، و از 32 بیت بیشتر می شود.
            لذا نتیجه هر مربع را بر 32 تقسیم کنید(با شیفت 5 بیتی به راست) ، سپس با نتیجه قبلی جمع کنید. تا جمع مربعات ، در محدوده 32 بیت باقی بماند.(4 میلیارد)
            سپس جمع مربعات را بر 625 تقسیم کنید و بعد 2 بیت به چپ شیفت دهید( در 4 ضرب شود) تا با سرعت مناسب و بدون از دست دادن صحت اعداد ، کار انجام شود
            5000=625*8 و 32=8*4


            جذر ،عملیات وقت گیری است،
            لذا با دانستن حدود حداکثر و حداقل برای مجموع مربعات و جذر آنها، با استفاده از یک صفحه اکسل،
            ( و اینکه می دانیم a2d ما 10 یا 12 بیتی است لذا 1024 یا 4096 عدد مهم برای ما وجود دارد.)
            می توانید تعداد 4096 عدد مهم را از میان آنها انتخاب و به صورت جدول lookup table شامل اعداد 0 تا مثلا 4095 به عنوان اندیس آرایه و مربع آنها
            ( 4096تا عدد 32 بیتی ) در حافظه برنامه ذخیره کنید و وقتی مربعات (میانگین مربعات ) را محاسبه نمودید،
            در جدول فوق با یک جستجوی 2000 سایکلی سریع (شبیه جستجوی باینری)، دو عدد بالاتر و پایینتر را یافته و در صورت نیاز میانگین گیری نمایید. تا نتیجه بدست آید.

            با سپاس

            پ.ن:
            پیشنهاد : کدی شبیه به این:


            کد PHP:

            const unsigned int a2d_12bit_sqr_lookuptable[4096]=    // squre of numbers from 0,1,2,3 to  4093, 4094, 4095
                
            {
                
            0,        1,        4,        9,        16,        25,        36,        49,        64,        81,
                
            100,        121,        144,        169,        196,        225,        256,        289,        324,        361,
                .................
                
            16728100,    16736281,    16744464,    16752649,    16760836,    16769025 
                
            } ;


            unsigned short int   a2d_samples_buffer[6000]  , my_rms;
            unsigned int  square_sum ;
            unsigned int  a2d_from_buffer ;

            unsigned short int i j;

            square_sum ;

            for ( 
            5000 >= -- )
                {
                
            a2d_from_buffer = (unsigned int)a2d_samples_buffer[i]
                
            a2d_from_buffer *= a2d_from_buffer // a2d^2 ;
                
            a2d_from_buffer >>= ;
                
            square_sum += a2d_from_buffer ;
                }

            square_sum /= (unsigned int)625 ;    //  sum / 625

            square_sum <<= ;    // sum * 4

            for ( 4095 >= -= 256 )    // find     the boundary of number in 256 index range    // 16 comparisionn loop
                
            {
                if ( 
            square_sum >= a2d_12bit_sqr_lookuptable[i] ) break ;
                }
                
            for ( 
            i+256 >= -= 16 )    // find     the boundary of number in 16 index range    // 16 comparisionn loop
                
            {
                if ( 
            square_sum >= a2d_12bit_sqr_lookuptable[j] ) break ;
                }

            for ( 
            j+16 >= -- )    // find     the upper and lower number    // 16 comparisionn loop
                
            {
                if ( 
            square_sum >= a2d_12bit_sqr_lookuptable[k] ) break ;
                }

                
            // 3*16=48 the total  comparisionn loop
                
            my_rms // !!! this the RMS value 
            گشتی در لاله زار
            http://www.eca.ir/forum2/index.php?topic=76138.0

            http://www.eca.ir/forum2/index.php?topic=76141

            دیدگاه


              #7
              پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

              با سلام و تشکر فراوان بابت راهنماییتان
              من میخوام از تایمر استفاده کنم و هر وقت زمان اون به بیسا میلی ثانیه رسید عمل نمنه برداری و جمع رو متوقف کنه و عمل جذر گیری رو شروع کنه و نتیجه عدد rms رو به یو اس بی بده اما نمیدونم چرا اینقدر کند میشه

              اگه زحمتی نیست من سورس برنامه رو براتون میفرستم تا شما چک بفرمایید.

              دیدگاه


                #8
                پاسخ : طراحی فیلتر fir برای اندازه گیری دقیق و سریع جریان

                جناب سولسال
                لینک دانلود فایل رو قرار دادم http://parsaspace.com/files/8391404884/?c=1096

                با تشکر

                دیدگاه

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