اطلاعیه

Collapse
No announcement yet.

نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

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

    نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    سلام من میخوام ولتاژ برق شهر را پس لز dc کردن روی سون سگمنت نمایش بدم اما ریپل خیلی زیاد است و خیلی در نایش خروجی پرپر میکنه و اصلا عدد ثابت روی سون سگمنت نمیمونه ! دوستان پیشنهاد نوشتن کد میانگیری رو دادن ، خلاصه پس از کلی تحقیق کد نوشتم اما اصلا جواب نمیده یعنی اون اعداد درستی هم که نشان میداد دیگه نمیده این کد میانگیری است از خروجی K هم میره برای الگوریتم نمایش سون سگمنت : لطفا راهمایی بفرمایید ممنون
    while (1)
    {
    for(j=0;j<20;j++)
    {
    vin=read_adc(0);
    vin=(vin*373)/1023;
    delay_us(500);
    }

    k=vin/20;
    خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

    #2
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    نوشته اصلی توسط fmicro نمایش پست ها
    سلام من میخوام ولتاژ برق شهر را پس لز dc کردن روی سون سگمنت نمایش بدم اما ریپل خیلی زیاد است و خیلی در نایش خروجی پرپر میکنه و اصلا عدد ثابت روی سون سگمنت نمیمونه ! دوستان پیشنهاد نوشتن کد میانگیری رو دادن ، خلاصه پس از کلی تحقیق کد نوشتم اما اصلا جواب نمیده یعنی اون اعداد درستی هم که نشان میداد دیگه نمیده این کد میانگیری است از خروجی K هم میره برای الگوریتم نمایش سون سگمنت : لطفا راهمایی بفرمایید ممنون
    while (1)
    {
    for(j=0;j<20;j++)
    {
    vin=read_adc(0);
    vin=(vin*373)/1023;
    delay_us(500);
    }

    k=vin/20;
    سلام
    اصولا میانگین یعنی جمع یک سری نمونه و تقسیم کردنش بر تعدادشون. من که جمعی نمیبینم اینجا، به همین دلیل هم فکر نمیکنم این کد میانگین بگیره!
    پیشنهاد میکنم فیلتر Median هم استفاده کنید که پرش ها کمتر بشه. یعنی ابتدا Median فیلتر اعمال بشه بعد میانگین. میانگین هم فکر کنم اگر به صورت Moving Average باشه نتیجه بهتره.

    دیدگاه


      #3
      پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

      جمع رو هم اضافه کردم ، فیلترmedian چطوریه مهندس کدش ؟
         while (1)
      {
      for(j=0;j<20;j++)
      {
      vin=read_adc(0);
      vin+=(vin*373)/1023;
      delay_us(500);
      }

      k=vin/20;
      جدیدترین ویرایش توسط fmicro; ۲۲:۳۲ ۱۴۰۰/۱۰/۱۲.
      خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

      دیدگاه


        #4
        پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

        نوشته اصلی توسط fmicro نمایش پست ها
        جمع رو هم اضافه کردم ، فیلترmedian چطوریه مهندس کدش ؟
           while (1)
        {
        for(j=0;j<20;j++)
        {
        vin=read_adc(0);
        vin+=(vin*373)/1023;
        delay_us(500);
        }

        k=vin/20;
        جسارتا باز هم این کد غلطه! از vin به شکل غلطی دارید استفاده میکنید.
        فیلتر Median یک پنجره داره که هر نمونه جدیدی که وارد میشه، آخرین نمونه از اون خارج میشه. درست مثل پنجره ای رو به بیرون اتاق که تنها قسمتی از محیط رو نشون میده. توی این فیلتر هر نمونه جدید که وارد پنجره میشه، تمام نمونه*های موجود در پنجره به ترتیب اندازه مرتب میشن. خروجی فیلتر اون نمونه*ای هستش که در وسط این لیست مرتب شده قرار بگیره. یعنی اگر برای مثال پنجره با سایز ۳ داشته باشیم و نمونه ها به شکل ۵ و ۶ و ۲۰ باشن، خروجی برابر ۶ خواهد بود. به این شکل پیک*های شدید در نمونه*ها فیلتر میشه.
        یکی از دوستان من این دوتا فیلتر رو به شکل کتابخونه پیاده سازی کرده که اگر بخوایید میتونید ازش استفاده کنید:

        این کتابخونه کمی قلق داره و شاید برای شما سخت باشه استفاده اش کنید ولی خوب به خوبی جواب میده و ما ازش استفاده کردیم قبلا.

        دیدگاه


          #5
          پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

          سلام
          همون طور که جناب hossein.m98 فرمودن شیوه جمع رو اشتباه نوشتی و همچنین باید حتما یک متغیر دیگه داشته باشی و معدل رو بگیری
          در ضمن باید متغیر رو رو هم درست تعریف کنی - INT به درد نمی خوره مقدارش کمه

          منخودم یه بار برای نمونه گیری این کار رو کردم
          50 تا نمونه می گرفتم
          معدلش رو دریافت می کردم
          انحجراف معیار رو بر اساس درصد دلخواه ( حدود 3 درصد ) بدست میاوردم
          مقادری خارج از انحراف معیار رو حذف می کردم
          مجددا معدل گیری می کردم و نتیجه بسیار خوبی داشت

          البته برای این کار با فرکانس 16 مگا هرتز خدود 0.7 ثانیه زمان لازم بود

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

          دیدگاه


            #6
            پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

            نوشته اصلی توسط hossein.m98 نمایش پست ها
            جسارتا باز هم این کد غلطه! از vin به شکل غلطی دارید استفاده میکنید.
            فیلتر Median یک پنجره داره که هر نمونه جدیدی که وارد میشه، آخرین نمونه از اون خارج میشه. درست مثل پنجره ای رو به بیرون اتاق که تنها قسمتی از محیط رو نشون میده. توی این فیلتر هر نمونه جدید که وارد پنجره میشه، تمام نمونه*های موجود در پنجره به ترتیب اندازه مرتب میشن. خروجی فیلتر اون نمونه*ای هستش که در وسط این لیست مرتب شده قرار بگیره. یعنی اگر برای مثال پنجره با سایز ۳ داشته باشیم و نمونه ها به شکل ۵ و ۶ و ۲۰ باشن، خروجی برابر ۶ خواهد بود. به این شکل پیک*های شدید در نمونه*ها فیلتر میشه.
            یکی از دوستان من این دوتا فیلتر رو به شکل کتابخونه پیاده سازی کرده که اگر بخوایید میتونید ازش استفاده کنید:

            این کتابخونه کمی قلق داره و شاید برای شما سخت باشه استفاده اش کنید ولی خوب به خوبی جواب میده و ما ازش استفاده کردیم قبلا.

            مهندس جان میشه لطف کنید صحیحشو برام بنویسید ؟
            خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

            دیدگاه


              #7
              پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

              نوشته اصلی توسط fmicro نمایش پست ها
              مهندس جان میشه لطف کنید صحیحشو برام بنویسید ؟

              int vin = 0;
              while (1)
              {
              vin = 0;
              for(j = 0; j < 20; j++)
              {
              vin += read_adc(0);
              delay_us(500);
              }


              k = (vin * 373 / 1023) / 20;
              }

              دیدگاه


                #8
                پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                نوشته اصلی توسط hossein.m98 نمایش پست ها

                int vin = 0;
                while (1)
                {
                vin = 0;
                for(j = 0; j < 20; j++)
                {
                vin += read_adc(0);
                delay_us(500);
                }


                k = (vin * 373 / 1023) / 20;
                }
                الان چکش میکنم و نتیجه رو میگم خدمتتون
                خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

                دیدگاه


                  #9
                  پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                  مهندس کد زیر رانوشتم همانطور که شما گفتید اما هر سه رقم صفر نمایش میده !
                          
                  int k;
                  unsigned char ykan,dahgan,sadgan;
                  int vin;
                  unsigned int j;
                  while (1)
                  {
                  vin=0;
                  for(j=0;j<20;j++)
                  {
                  vin+=read_adc(0);
                  delay_us(500);
                  }

                  k = (vin * 373 / 1023) / 20;
                  خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

                  دیدگاه


                    #10
                    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                    نوشته اصلی توسط fmicro نمایش پست ها
                    مهندس کد زیر رانوشتم همانطور که شما گفتید اما هر سه رقم صفر نمایش میده !
                            
                    int k;
                    unsigned char ykan,dahgan,sadgan;
                    int vin;
                    unsigned int j;
                    while (1)
                    {
                    vin=0;
                    for(j=0;j<20;j++)
                    {
                    vin+=read_adc(0);
                    delay_us(500);
                    }

                    k = (vin * 373 / 1023) / 20;
                    چند ولت به ورودی میدید؟
                    اگر k از نوع float نباشه این فرمول فقط قسمت صحیح عدد رو نگه میداره. اگر قسمت اعشاری براتون مهمه، هم k رو از نوع float کنید، هم 373 رو به 373.0 تغییر بدید.

                    دیدگاه


                      #11
                      پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                      نوشته اصلی توسط hossein.m98 نمایش پست ها
                      چند ولت به ورودی میدید؟
                      اگر k از نوع float نباشه این فرمول فقط قسمت صحیح عدد رو نگه میداره. اگر قسمت اعشاری براتون مهمه، هم k رو از نوع float کنید، هم 373 رو به 373.0 تغییر بدید.

                      ولتاژ ورودی بین 1 تا 5 ولتاژ ولت dc است
                      آقای مهندس میشه در مورد این حلقه for توضیح بدید که 20 بار میاد چیکار میکنه اگر ما بذاریم 40 چی میشه ، آیا بهتره ؟
                      خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

                      دیدگاه


                        #12
                        پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                        نوشته اصلی توسط fmicro نمایش پست ها
                        ولتاژ ورودی بین 1 تا 5 ولتاژ ولت dc است
                        آقای مهندس میشه در مورد این حلقه for توضیح بدید که 20 بار میاد چیکار میکنه اگر ما بذاریم 40 چی میشه ، آیا بهتره ؟
                        اگر ورودی ۱ ولت باشه باید عددی حدود ۷۴ در k ذخیره بشه. البته با این فرض که ولتاژ رفرنس ۵ و رزولوشن ADC هم ۱۰ بیت باشه.
                        اون for هم فکر کنم خیلی مشخصه. ۲۰ بار نمونه میگیره و با هم جمع میکنه. اگر بکنیدش ۴۰، اون تقسیم بر ۲۰ که توی مقداردهی k هست هم باید بشه ۴۰.

                        دیدگاه


                          #13
                          پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                          نوشته اصلی توسط hossein.m98 نمایش پست ها
                          اگر ورودی ۱ ولت باشه باید عددی حدود ۷۴ در k ذخیره بشه. البته با این فرض که ولتاژ رفرنس ۵ و رزولوشن ADC هم ۱۰ بیت باشه.
                          اون for هم فکر کنم خیلی مشخصه. ۲۰ بار نمونه میگیره و با هم جمع میکنه. اگر بکنیدش ۴۰، اون تقسیم بر ۲۰ که توی مقداردهی k هست هم باید بشه ۴۰.
                          بله مهندس جان معنی عملکرد for رو متوجه میشم اما مفهوم رو نمیگرم یعنی چطور با این میانگین گیری ریپل ورودی در نمایشگر نشان داده نمیشه ؟
                          خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

                          دیدگاه


                            #14
                            پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                            نوشته اصلی توسط fmicro نمایش پست ها
                            بله مهندس جان معنی عملکرد for رو متوجه میشم اما مفهوم رو نمیگرم یعنی چطور با این میانگین گیری ریپل ورودی در نمایشگر نشان داده نمیشه ؟
                            شما احتمالا باید مدرسه یا دانشگاه رفته باشید دیگه؟ هر دانش آموز یا دانشجو در هر ترم توی درسای مختلف نمرات مختلفی میگیره. اما وقتی از نمراتش میانگین (معدل) گرفته میشه یه عددی مابین نمرات درس ها در میاد که بیشتر متمایل به اون سمتیه که تعداد نمرات توش بیشتر باشه.
                            برای ریپل ولتاژ هم همینه. ریپل یعنی کم و زیاد شدن دامنه. با میانگین گیری اثر کم و زیاد شدن تا حدی خنثی میشه. البته اگر بخوایید نتیجه بهتر بگیرید لازمه به همین یک کار اکتفا نکنید و از فیلترای دیگه هم استفاده کنید.

                            دیدگاه


                              #15
                              پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

                              نوشته اصلی توسط hossein.m98 نمایش پست ها
                              شما احتمالا باید مدرسه یا دانشگاه رفته باشید دیگه؟ هر دانش آموز یا دانشجو در هر ترم توی درسای مختلف نمرات مختلفی میگیره. اما وقتی از نمراتش میانگین (معدل) گرفته میشه یه عددی مابین نمرات درس ها در میاد که بیشتر متمایل به اون سمتیه که تعداد نمرات توش بیشتر باشه.
                              برای ریپل ولتاژ هم همینه. ریپل یعنی کم و زیاد شدن دامنه. با میانگین گیری اثر کم و زیاد شدن تا حدی خنثی میشه. البته اگر بخوایید نتیجه بهتر بگیرید لازمه به همین یک کار اکتفا نکنید و از فیلترای دیگه هم استفاده کنید.
                              ممنون مهندس اگر لطف کنید یک رفرنس یا منبعی دیگر معرفی کنید برای یادگیری بقیه فیلترها و کد نوشتنشون در زبان سی ممنون می شویم.
                              خدایا یکی بزرگترین آرزویهایم در این دنیا این است که همه مردم حالشان خوب باشد و احساس خوشبختی داشته باشند....

                              دیدگاه

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