اطلاعیه

Collapse
No announcement yet.

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

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

  • hossein.m98
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

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

    یک دیدگاه بنویسید:


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

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

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

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    نوشته اصلی توسط 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 تغییر بدید.

    یک دیدگاه بنویسید:


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

    مهندس کد زیر رانوشتم همانطور که شما گفتید اما هر سه رقم صفر نمایش میده !
            
    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;

    یک دیدگاه بنویسید:


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

    نوشته اصلی توسط 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;
    }
    الان چکش میکنم و نتیجه رو میگم خدمتتون

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    نوشته اصلی توسط 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;
    }

    یک دیدگاه بنویسید:


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

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

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

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

    یک دیدگاه بنویسید:


  • saeed bagherani
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

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

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

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

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    نوشته اصلی توسط 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 یک پنجره داره که هر نمونه جدیدی که وارد میشه، آخرین نمونه از اون خارج میشه. درست مثل پنجره ای رو به بیرون اتاق که تنها قسمتی از محیط رو نشون میده. توی این فیلتر هر نمونه جدید که وارد پنجره میشه، تمام نمونه*های موجود در پنجره به ترتیب اندازه مرتب میشن. خروجی فیلتر اون نمونه*ای هستش که در وسط این لیست مرتب شده قرار بگیره. یعنی اگر برای مثال پنجره با سایز ۳ داشته باشیم و نمونه ها به شکل ۵ و ۶ و ۲۰ باشن، خروجی برابر ۶ خواهد بود. به این شکل پیک*های شدید در نمونه*ها فیلتر میشه.
    یکی از دوستان من این دوتا فیلتر رو به شکل کتابخونه پیاده سازی کرده که اگر بخوایید میتونید ازش استفاده کنید:

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

    یک دیدگاه بنویسید:


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

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

    k=vin/20;
    جدیدترین ویرایش توسط fmicro; 2022/01/02, 22:32.

    یک دیدگاه بنویسید:


  • hossein.m98
    replied
    پاسخ : نحوه کد نویسی میانگین گیری برای کاهش ریپل وبتاژ برق شهر ؟

    نوشته اصلی توسط 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 باشه نتیجه بهتره.

    یک دیدگاه بنویسید:


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

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

    k=vin/20;
لطفا صبر کنید...
X