اطلاعیه

Collapse
No announcement yet.

سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

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

    سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

    سلام بر اساتید
    من یه وسیله با atmega8 درست کردم که دوتا ولتاژ میگرفت و با یه فرمولی تبدیل به یه ولتاژ دیگه می کرد الان میخوام فرمول را عوض کنم دوستان میتونن کمک کنن؟
    فرمول جدید:
    دو ولتاژ زیر 5V به دستگاه میدیم ولتاژ اول 0.6 ولت اضافه می کنیم . اگر ولتاژ دوم 2 ولت بود برای ولتاژ خروجی از ولتاژ اول 0.2 کم می کنیم اگر 1.8 ولت بود برای ولتاژ خروجی از ولتاژ اول 0.4 ولت کم می کنیم و اگر 1 ولت بود برای ولتاژ خروجی از ولتاژ اول 1.2 ولت کم می کنیم و اگر 0.5 ولت بود برای ولتاژ خروجی از ولتاژ اول 0 می کنیم و در غیر این صورت ولتاژ خروجی را برابر ولتاژ اول میزاریم.
    قطعه


    برنامه قبل

    کد:
    [FONT=Yekan]while (1)[/FONT]      {     
          v1=(read_adc(0)*0.249266862170088);
          v2=(read_adc(1)*0.249266862170088);
     
          v3=v1+v2; 
          v3=v3/2; 
          if(v3>2)PORTD.7=1;
          else PORTD.7=0;
          OCR1AL=v3;
          delay_ms(100);
         
    [FONT=Yekan]      }[/FONT]
    فایل ها

    #2
    پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

    دوستان خیلی واجبه کسی می تونه کمک کنه

    فایل شبیه ساز و سورس برنامه انتهای پست بالا هست
    جدیدترین ویرایش توسط mahmoudi68; ۲۰:۴۱ ۱۳۹۶/۰۷/۲۸.

    دیدگاه


      #3
      پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

      نوشته اصلی توسط mahmoudi68 نمایش پست ها
      دو ولتاژ زیر 5V به دستگاه میدیم ولتاژ اول 0.6 ولت اضافه می کنیم . اگر ولتاژ دوم 2 ولت بود برای ولتاژ خروجی از ولتاژ اول 0.2 کم می کنیم اگر 1.8 ولت بود برای ولتاژ خروجی از ولتاژ اول 0.4 ولت کم می کنیم و اگر 1 ولت بود برای ولتاژ خروجی از ولتاژ اول 1.2 ولت کم می کنیم و اگر 0.5 ولت بود برای ولتاژ خروجی از ولتاژ اول 0 می کنیم و در غیر این صورت ولتاژ خروجی را برابر ولتاژ اول میزاریم.
      من که نفهمیدم چی گفتی ولی میتونی اینجوری بنویسی که بهتر کمک بگیری
      اگر ولتاژ اول اینقدر بود و ولتاژ دوم اینقدر خروجی اینقدر
      اگر ولتاژ اول اینقدر بود ولتاژ دوم اینقدر خروجی اینقدر
      اگر ولتاژ اول اینقدر بود ولتاژ دوم اینقدر خروجی اینقدر
      و الی اخر

      دیدگاه


        #4
        پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

        ولتاژ اول هرچی بود 0.6 ولت اضافه میشه
        اگر ولتاژ دوم 2 ولت بود خروجی ولتاژ اول -0.2
        اگر ولتاژ دوم 1.8 خروجی ولتاژ اول -0.4
        اگر ولتاژ دوم 1 خروجی ولتاژ اول -1.2
        اگر ولتاژ دوم 0.5 خروجی صفر


        دیدگاه


          #5
          پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

          دوست عزیز اگه ولتاژات معلومه و بازه نداره میتونی از switch استفاده کنی و برای هر caseیه دستور بزاری. کاری که میخوای انجام بدی همش با دستورات شرطیه شما بهتره اول بری دستورات شرطی رو مطالعه کنی مثل if که صد در صد همین دستورو استفاده میکنی یا while شاید چیزی که میخوایو خودت راحت تر پیدا کنی. چیزی که من فهمیدم اینه که تا آدم خودش مطالعه نکنه و دونبالش نره هیچوقت کسی چیزی که میخوایو بهت نمیده

          شما اول بیا با adc دو تا ولتاژ ورودی رو بخون بعد یه pwm تولید کن و بده به مدار سوییچینگت. حالا بیا و از خروجیت با یه تقسیم ولتاژ دو باره با adc نمونه برداری کن. حالا دستت بازه و میتونی با توجه به ورودیت هر ولتاژی رو توی خروجی درست کنی اگه مثلا خروجی 2 ولت میخوای میگی سطح یک بودن pwm رو انقد کم کن تا به 2 برسه و اگه کمتر بود انقد زیاد کن تا به 2 برسه با این کار با 0.1 تلرانس یا کمتر ولتاژی که میخوای میتونی توی خروجی داشه باشی

          در ضمن من فک میکنم توی خروجی از یه مدار سوییچینگ بجای تقویت کننده opamp استفاده کنی خیلی بهتره.حتی با یه ترانزیستورم میتونی حلش کنی
          جدیدترین ویرایش توسط behnam909; ۰۹:۴۸ ۱۳۹۶/۰۷/۲۹.

          دیدگاه


            #6
            پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

            نوشته اصلی توسط behnam909 نمایش پست ها
            دوست عزیز اگه ولتاژات معلومه و بازه نداره میتونی از switch استفاده کنی و برای هر caseیه دستور بزاری. کاری که میخوای انجام بدی همش با دستورات شرطیه شما بهتره اول بری دستورات شرطی رو مطالعه کنی مثل if که صد در صد همین دستورو استفاده میکنی یا while شاید چیزی که میخوایو خودت راحت تر پیدا کنی. چیزی که من فهمیدم اینه که تا آدم خودش مطالعه نکنه و دونبالش نره هیچوقت کسی چیزی که میخوایو بهت نمیده

            شما اول بیا با adc دو تا ولتاژ ورودی رو بخون بعد یه pwm تولید کن و بده به مدار سوییچینگت. حالا بیا و از خروجیت با یه تقسیم ولتاژ دو باره با adc نمونه برداری کن. حالا دستت بازه و میتونی با توجه به ورودیت هر ولتاژی رو توی خروجی درست کنی اگه مثلا خروجی 2 ولت میخوای میگی سطح یک بودن pwm رو انقد کم کن تا به 2 برسه و اگه کمتر بود انقد زیاد کن تا به 2 برسه با این کار با 0.1 تلرانس یا کمتر ولتاژی که میخوای میتونی توی خروجی داشه باشی

            در ضمن من فک میکنم توی خروجی از یه مدار سوییچینگ بجای تقویت کننده opamp استفاده کنی خیلی بهتره.حتی با یه ترانزیستورم میتونی حلش کنی
            دستور شرطی را داده بودم اما کار نمی کرد با adc تبدیل کردم اما دستور را به صورت زیر مینویسم کار نمی کرد
            v1=v1+0.6 یا v out=v1-1.2
            پس من نمی تونم به صورت عادی ولتاژی که تبدیلش کردم به دیجیتال را زیاد و کم کنم؟

            دیدگاه


              #7
              پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

              ببین من فک میکنم وقتی adc رو میخونی درست تبدیلش نمیکنی . حد اکثر ولتاژی که میتونی به adc بدی همون ولتاژیه که توی برنامه و مدار برای پین رفرنست تعریف کردی(داخلی یا خارجی) هرچی بود مثلا ما x میگیریم فقط هرچی بود یادت باشه بیشترین ولتاژ در نظر میگیره باید اول مقدار خونده شده از adc رو توی متغییر ذخیره کنی . متغیرتو در 5 یا هر عددی که با تقسیم مقاومت کمش کردی میکنی ضرب کنی و به 1024 اگه adc 10 bit انتخاب کرده باشی تقسیم میکنی. توی برنامت تقسیمی نمیبینم شاید برای اینه که ولتاژو درست نمیخونی.
              شاید بهتره یه کم راجعبه adc و کنترول عرض پالس یا pwm بخونی

              دیدگاه


                #8
                پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

                نوشته اصلی توسط behnam909 نمایش پست ها
                ببین من فک میکنم وقتی adc رو میخونی درست تبدیلش نمیکنی . حد اکثر ولتاژی که میتونی به adc بدی همون ولتاژیه که توی برنامه و مدار برای پین رفرنست تعریف کردی(داخلی یا خارجی) هرچی بود مثلا ما x میگیریم فقط هرچی بود یادت باشه بیشترین ولتاژ در نظر میگیره باید اول مقدار خونده شده از adc رو توی متغییر ذخیره کنی . متغیرتو در 5 یا هر عددی که با تقسیم مقاومت کمش کردی میکنی ضرب کنی و به 1024 اگه adc 10 bit انتخاب کرده باشی تقسیم میکنی. توی برنامت تقسیمی نمیبینم شاید برای اینه که ولتاژو درست نمیخونی.
                شاید بهتره یه کم راجعبه adc و کنترول عرض پالس یا pwm بخونی
                فرض می کنیم من adc و pwm را درست تبدیل کنم اگر من بخوام ولتاژ ورودیم 2 ولت هست را در خروجی 2.6 داشته باشم میتونم متغیری که ولتاژ ورودی داخلشه را با 0.6 جمع کنم؟

                دیدگاه


                  #9
                  پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

                  نوشته اصلی توسط mahmoudi68 نمایش پست ها
                  دستور شرطی را داده بودم اما کار نمی کرد با adc تبدیل کردم اما دستور را به صورت زیر مینویسم کار نمی کرد
                  من فکر میکنم تو دستور شرطی از مساوی استفاده کردی مثلا گفتی اگر مساوی نیم بود فلان کار را بکن. بدست اوردن همچین دقتی از ADC غیر ممکنه چون در بهترین شرایط نویز داری
                  پس چی کار کنیم؟ باید از بزرگتر و کوچکتر تو شرط استفاده کنیم مثلا اگر از( 0/56 کوچکتر بود و از 0/45 بزرگتر بود). اینجوری میتونی مقدار 0/5 رو پیدا کنی . و چیزی که شما میخوای با همان روش شرط محقق میشه . اول باید دقیق اون چیزی که لازم داری را روی کاغذ بنویسی با ابزار( مداد و پاکن) و وقتی از منطق ان نتیجه گرفتی الگوریتم ان را در برنامه پیاده سازی کنی

                  دیدگاه


                    #10
                    پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

                    اره میتونی. خروجیتم میتونی مثل همه ی منبع تغذهای سووچینگ بخونی و تا خروجی مطلوبت نبود اونو بالا یا پایین ببری. کار سختی نیست فقط باید یه adc توی ورودیت باشه و یکی دیگه برای خروجیت

                    دیدگاه


                      #11
                      پاسخ : سوال: تبدیل دو ولتاژ ورودی به یک ولتاژ خروجی با ATmega 8

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

                      while (1)
                      {
                      v1=(read_adc(0)*0.249266862170088);
                      v2=(read_adc(1)*0.249266862170088);

                      v3=v1+v2;
                      v3=v3/2;
                      if(v3>2)PORTD.7=1;
                      else PORTD.7=0;
                      OCR1AL=v3;
                      delay_ms(100);

                      }

                      دلیل: ادغام دو پست برای جلوگیری از اسپم

                      نوشته اصلی توسط kamy007 نمایش پست ها
                      من فکر میکنم تو دستور شرطی از مساوی استفاده کردی مثلا گفتی اگر مساوی نیم بود فلان کار را بکن. بدست اوردن همچین دقتی از ADC غیر ممکنه چون در بهترین شرایط نویز داری
                      پس چی کار کنیم؟ باید از بزرگتر و کوچکتر تو شرط استفاده کنیم مثلا اگر از( 0/56 کوچکتر بود و از 0/45 بزرگتر بود). اینجوری میتونی مقدار 0/5 رو پیدا کنی . و چیزی که شما میخوای با همان روش شرط محقق میشه . اول باید دقیق اون چیزی که لازم داری را روی کاغذ بنویسی با ابزار( مداد و پاکن) و وقتی از منطق ان نتیجه گرفتی الگوریتم ان را در برنامه پیاده سازی کنی
                      اینا میدونستم از if استفاده میکردن داخل بازه میزاشتم از switch هم استفاده کردم نمیشه

                      دیدگاه

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