11 لایک
-
4
Post By parsd
-
1
Post By magmagmary
-
1
Post By shobeir90
-
1
Post By parsdc
-
2
Post By parsdc
-
2
Post By parsdc
-
سلام دوباره
خوب در پست های بالا ما فشار و دما رو به صورت خام خوندیم حالا برای تبدیل این عددهای خام به دما و فشار باید مراحل زیر رو بگذرونیم
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