نمایش نتایج: از 1 به 8 از 8
Like Tree11 لایک
  • 4 Post By parsd
  • 1 Post By magmagmary
  • 1 Post By shobeir90
  • 1 Post By parsdc
  • 2 Post By parsdc
  • 2 Post By parsdc

موضوع: آموزش کامل راه اندازی bmp280

Threaded View

  1. #5
    Junior Member
    تاریخ عضویت
    May 2016
    نوشته ها
    13
    سلام دوباره
    خوب در پست های بالا ما فشار و دما رو به صورت خام خوندیم حالا برای تبدیل این عددهای خام به دما و فشار باید مراحل زیر رو بگذرونیم
    1 خوندن دما و فشار خام
    2 خوندن عدد های ثابت کالیبره
    3 ستفاده از فرمول شرکت سازنده حهت رسیدن به دما و فشار واقعی

    عدد های کالیبره چیست؟
    هر سنسور رفتاری متفاوت در مقابل تغییرات دما و فشار دارد و سنسوری که شما دارید ممکن است کمی با سنسوری که من دارم تغییرات را متفاوت حس کند، برای رفع این مشکل شرکت سازنده این رفتار را برا هر سنسور بررسی کرده و اعدادی رو در بخشی از حافظه سنسور به صورت فقط خواندی ذخیره کرده که اگر این اعداد در فرمول قرار گیرد عدد دما و فشار بسیار به واقعیت نزدیک خواهد شد
    این عداد ثابت هستند برا هر سنسور و تغییر نخواهند کرد پس فقط یک بار آنها را از سنسور خواهیم خواند و نیاز نیست هر بار برای گرفتن دما و فشار آنها خوانده شوند

    این اعداد مطابق جدول صفحه 24 در آدرس 0xA1…0x88 قرار دارند
    اعداد به صورت دو بیتی و سه عدد برا دما و 9 عدد برا فشار هستند که برخی علامت دار و برخی بی علامت هستند که این نکته مهمی است در تعریف متغییر در ادامه به تعریف متغییر ها دقت کنید بدون علامت ها از نوع word تعریف شده اند
    جهت دیدن اطلاعات دقیق صفحه 12 جدول 17 رو ببینید


    خوب حالا تعریف متغییرها



    Dim Dig_t1 As Word , Dig_t2 As Integer , Dig_t3 As Integer
    Dim Dig_p1 As Word , Dig_p2 As Integer , Dig_p3 As Integer
    Dim Dig_p4 As Integer , Dig_p5 As Integer , Dig_p6 As Integer
    Dim Dig_p7 As Integer , Dig_p8 As Integer , Dig_p9 As Integer

    دوستان دقت کنید نوع این متغییرها خیلی مهم هست که مثل بالا باشه
    در متغییر هم در بالا داشتیم که دما و فشار خام رو ریختم داخلش
    Dim Adc_t As Long , Adc_p As Long


    چند متغییر زیر هم برای انجام محاسبات نیاز داریم، چون محاسبات ریاضی در اکثر میکروهای ضعیف تر باید به صورت خط به خط و در هر خط یک محاسبه قابل انجام هست به این متغییرها نیاز داریم
    Dim T_fine As Single
    Dim Var1 As Single
    Dim Var2 As Single
    Dim T As Single
    Dim P As Single
    Dim Z As Single
    Dim Y As Single

    متغییر p و t برای اعداد واقعی دما و فشار تعریف کردیم
    متغییر z,y,var1,var2 جهت انجام محاسبات ریاضی هست
    متغییر T_fine مهم هست و این متغییر عددی وابسته به دما رو در خودش خواهد داشت که در محاسبات فشار کاربرد داره

    متغییرهای زیر هم جهت ریختن بایت های با ارزش و کم ارزش هر متغییر بزرگتر و به هم وصل کردن آنها هست
    Dim P1 As Byte , P2 As Byte , P3 As Byte , T1 As Byte , T2 As Byte , T3 As Byte

    حالا خوندن سه عدد اصلی کالیبره دما

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H88
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop


    Dig_t1 = Makeint(p1 , T1)
    Dig_t2 = Makeint(p2 , T2)
    Dig_t3 = Makeint(p3 , T3)

    دستورات بالا سه متغییر Dig_t3 Dig_t2 Dig_t1 را کامل کرده و از حافظه خونده و در این متغییرها میریزد که برای محاسبات دما نیاز داریم

    و حالا خوندن اعداد کالیبره فشار
    ابتدا سه عدد اول از 9 عددی که باید خوانده شود

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H8E
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p1 = Makeint(p1 , T1)
    Dig_p2 = Makeint(p2 , T2)
    Dig_p3 = Makeint(p3 , T3)


    سه عدد بعدی

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H94
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p4 = Makeint(p1 , T1)
    Dig_p5 = Makeint(p2 , T2)
    Dig_p6 = Makeint(p3 , T3)


    و سه عدد آخر

    I2cstart
    I2cwbyte Ic_w
    I2cwbyte &H9A
    I2cstart
    I2cwbyte Ic_r

    I2crbyte P1 , Ack
    I2crbyte T1 , Ack

    I2crbyte P2 , Ack
    I2crbyte T2 , Ack

    I2crbyte P3 , Ack
    I2crbyte T3 , Nack

    I2cstop
    Waitms 5

    Dig_p7 = Makeint(p1 , T1)
    Dig_p8 = Makeint(p2 , T2)
    Dig_p9 = Makeint(p3 , T3)

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

    صفحه 45 این فرمولها وجوددارد اما مناسب برای بسکام نیست و من مدل شکافته شده اون رو برای بسکام به شکل زیر درآورده ام

    Var1 = Adc_t / 16384
    Z = Dig_t1 / 1024
    Var1 = Var1 - Z
    Var1 = Var1 * Dig_t2
    Var2 = Adc_t / 131072
    Z = Dig_t1 / 8192
    Var2 = Var2 - Z
    Var2 = Var2 ^ 2
    Var2 = Var2 * Dig_t3
    T = Var1 + Var2
    T_fine = T
    T = T / 5120

    با محاسبات بالا دمای واقعی با چند رقم اعشار در t ریخته شده هست و میتوانید ان را نمایش دهید این سنسور اینقدر حساس هست که صحبت کردن شما و بازدم شما روی خروجی دما تاثیر خو اهد داشت
    عدد و متغییر T_fine فراموش نکنید برای محاسبات فشار نیاز داریم



    حالا محاسبات فشار

    Y = T_fine / 2
    Y = Var1 - 64000

    Var2 = Y ^ 2
    Var2 = Var2 * Dig_p6
    Var2 = Var2 / 32768
    Var2 = Var2 + Y
    Var2 = Var2 * Dig_p5
    Var2 = Var2 * 2
    Var2 = Var2 / 4
    Z = Dig_p4 * 65536
    Var2 = Var2 + Z

    Var1 = Dig_p3 * Y
    Var1 = Var1 * Y
    Var1 = Var1 / 524288
    Z = Dig_p2 * Y
    Var1 = Var1 + Z
    Var1 = Var1 / 524288
    Var1 = Var1 / 32768
    Var1 = Var1 + 1
    Var1 = Var1 * Dig_p1
    If Var1 = 0 Then
    P = 0
    Else
    P = 1048576 - Adc_p
    Z = Var2 / 4096
    P = P - Z
    P = P * 6250
    P = P / Var1
    Var1 = Dig_p9 * P
    Var1 = Var1 * P
    Var1 = Var1 / 2147483648
    Var2 = P * Dig_p8
    Var2 = Var2 / 32768
    Z = Var1 + Var2
    Z = Z + Dig_p7
    Z = Z / 16
    P = P + Z
    End If

    فشار د ر متغییر p به پاسکال ریخته شده و کار تمام شد
    میتوانید آن را به psi یا بار تبدیل کنید



    من زیاد حرفه ای نیستم و ممکن هست برای شما دوستان حرفه ای برخی قسمتها ساده و پیش پا افتاده باشه، به هر حال امیدوارم برای افرادی که قصد کار با این سنسور ارزان قیمت و دقیق رو دارند مناسب بوده باشه

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

    موفق باشید
    ویرایش توسط parsdc : 06-03-2016 در ساعت 05:15 AM

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO