peyman sadeghian 30244 اشتراک گذاری ارسال شده در 2 فروردین، ۱۳۹۰ این سنسور برای اندازه گیری دما درمحدوده -45C تا +130Cبه کار می رود . مزیت این سنسور نسبت به سنسورهای آنالوگ دما نظیر LM35 این است که خروجی سنسور SMT160 دیجیتال و به صورت مدولاسیون عرض پالس (PWM) است و نیازی به مبدل آنالوگ به دیجیتال ندارد و همچنین خروجی CMOS آن باعث شده تا بتوان سنسور را با کابلی به طول 20 متر به میکرو وصل کرد .در دیاگرام زمانی زیر نمونه ای از پالس خروجی سنسور SMT160 را مشاهده می کنید . این پالس از دو قسمت (T1 سطح مثبت و T2 سطح صفر) تشکیل شده است . در این سنسور زمان کل یعنی T1+T2 ثابت است ولی نسبت یک بودن T1 به T2 متناسب با دما تغییر می کند که به آن D.C (Duty sycle) گفته می شود و ما باید D.C را اندازه گیری کنیم , سپس از فرمول زیر استفاده نماییم . در فرمول زیر temp بر حسب درجه سانتی گراد است سنسوری SMT160 دارای سه نوع بسته بندی است سنسوری که ما در این پروژه استفاده می کنیم از نوع بسته بندی TO – 18 بوده است . ولتاژ کاری SMT160 در محدوده ی 4.75 تا 7 ولت است و حداکثر جریان مصرفی آن 200 میکرو آمپر است . در این برنامه برای خواندن دما باید زمانT1 و T2 موج مربعی خروجی سنسور را اندازه گیری کنیم تا توسط فرمول ذکر شده بتوانیم دما را به دست آوریم . برای اندازه گیری زمان از وقفه خارجی صفر و تایمر یک استفاده می کنیم . موقعیکه لبه پایین رونده پالس سبب وقفه خارجی می شود محتویات تایمر را در متغییرT1 قرار می دهیم و تایمر را Reset و وقفه را حساس به لبه بالا رونده می کنیم و موقعیکه لبه بالا رونده پالس سبب وقفه خارجی می شود محتویات تایمر را در متغییر T2 ذخیره و مجددا وقفه را حساس به لبه پایین رونده می کنیم و تایمر را Reset می کنیم . بدین ترتیب ما هر دو زمان پالس را داریم و می توانیم زمان وظیفه (Duty sycle ) را اندازه بگیریم . 3 لینک به دیدگاه
raminrayat 22 اشتراک گذاری ارسال شده در 18 مرداد، ۱۳۹۰ سلام به دوستان عزیز من مشکلی برام پیش اومده اونم اینه که برای اندازه گیری دما با سنسور smt160 تو عمل مقدار واقعی رو نشون نمیده تو پروتؤس دقیقه اما در عمل چیزی نزدیک به 5 درجه اختلاف داره و تو دمای کاملا ثابت (دستگاه جوجه کشی) نوسان 2 الی 3 درجه ای داره.در صورتیکه می بایست دقت 0.1 رو حداقل می داشت (مقاومت 4.7k بین portd.0 و زمین رو هم گذاشتم)برنامه ای هم که تو میکرو ریختم اینه لطفا راهنماییم کنید با تشکر فراوان ======================================================= '--------------------------------main------------------------------------------- $regfile = "m32def.dat" $crystal = 8000000 '-------------------------------lcd--------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 '--------------------------------dim------------------------------------------- Dim Yazdkit_reset As Word Dim Yazdkit_set As Word Dim Temp As Single Dim Duty As Single Dim X As Integer '------------------------------------------------------------------------------- Config Timer1 = Timer , Prescale = 1 Enable Timer1 '--------------------------------main------------------------------------------ Config Pind.4 = Input '------------------------------------------------------------------------------ Config Single = Scientific , Digits = 2 Cursor Off Cls Locate 1 , 5 Lcd "Hello" Locate 2 , 1 Lcd "WWW.YAZDKIT.COM" Waitms 50 Cls Smt160: Do Gosub Read_data_sm160 Locate 1 , 1 Lcd "T= " ; Temp ; "c "; Waitms 50 Loop '------------------------------------------------------------------------------- Read_data_sm160: Bitwait Pind.4 , Set Bitwait Pind.4 , Reset Bitwait Pind.4 , Set Bitwait Pind.4 , Reset Bitwait Pind.4 , Set Bitwait Pind.4 , Reset Stop Timer1 Bitwait Pind.4 , Set Timer1 = 0 Start Timer1 Bitwait Pind.4 , Reset 'Xl = Timer1 Yazdkit_set = Timer1 Timer1 = 0 Start Timer1 Bitwait Pind.4 , Set 'Xf = Timer1 Yazdkit_reset = Timer1 X = Yazdkit_set + Yazdkit_reset Duty = Yazdkit_set / X Duty = Duty - 0.32 Waitms 1 Temp = Duty / 0.0047 Waitms 1 'Locate 1 , 1 'Temp = Round(temp) Stop Timer1 Return $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ======================================================= ======================================================= با این تغییر هم تست کردم نشد. '--------------------------------main------------------------------------------- $regfile = "m32def.dat" $crystal = 8000000 '-------------------------------lcd--------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 '--------------------------------dim------------------------------------------- Dim Yazdkit_reset As Word Dim Yazdkit_set As Word Dim Temp As Single Dim Duty As Single Dim X As Integer Config Single = Scientific , Digits = 2 '------------------------------------------------------------------------------- Config Timer1 = Timer , Prescale = 1 Enable Timer1 '--------------------------------main------------------------------------------ Config Pind.4 = Input '------------------------------------------------------------------------------ Cursor Off Cls Locate 1 , 5 Lcd "Hello" Locate 2 , 1 Lcd "WWW.YAZDKIT.COM" Waitms 50 Cls Smt160: Do Gosub Read_data_sm160 Locate 1 , 1 Lcd "T= " ; Temp ; "c "; Waitms 50 Loop '------------------------------------------------------------------------------- Read_data_sm160: Bitwait Pind.4 , Reset Stop Timer1 Timer1 = 0 Bitwait Pind.4 , Set Start Timer1 Bitwait Pind.4 , Reset Yazdkit_set = Timer1 Bitwait Pind.4 , Set Stop Timer1 Timer1 = 0 Bitwait Pind.4 , Reset Start Timer1 Bitwait Pind.4 , Set Yazdkit_reset = Timer1 Stop Timer1 X = Yazdkit_set + Yazdkit_reset Duty = Yazdkit_set / X Duty = Duty - 0.32 Temp = Duty / 0.0047 'Locate 1 , 1 'Temp = Round(temp) Stop Timer1 Return برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 6 لینک به دیدگاه
raminrayat 22 اشتراک گذاری ارسال شده در 4 شهریور، ۱۳۹۰ سلام دوستان .من (رامین چمن ارا)از طرف خودم شهادت امام علی (ع)رو تسلیت میگم نمازوروزتون قبول ایشالا خیلی بد و دلسرد کنندست که هیچ کس جز تشکر کار دیگه ای (نظر یا راهنمایی) نمی کنه ولی من وفاداریم و ثابت قدمیم رو دنبال میکنم بلاخره تونستم نوسان دما رو کاملا از بین ببرم اما یه مشکل دارم تو واقعیت هنوز دما 0.9 درجه بیشتر از چیزیه که اندازه گیری میشه لطفا راهنماییم کنید $regfile = "m32def.dat" $crystal = 1000000 '-------------------------------lcd--------------------------------------------- Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.2 , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 '--------------------------------dim------------------------------------------- Dim Yazdkit_reset As Word Dim Yazdkit_set As Word Dim Temp As Single Dim Duty As Single Dim X As Integer Dim L As Single Dim K As Single Dim J As Single Dim M As Word Dim N As Word Dim O As Word Dim P As Word L = 0 : K = 0 : M = 0 : N = 0 Config Single = Scientific , Digits = 1 '------------------------------------------------------------------------------- Config Timer1 = Timer , Prescale = 1 Enable Timer1 '--------------------------------main------------------------------------------ Config Pind.4 = Input '------------------------------------------------------------------------------ Cursor Off Cls Locate 1 , 5 Lcd "Hello" Locate 2 , 1 Lcd "WWW.YAZDKIT.COM" Waitms 50 Cls Smt160: Do Gosub Read_data_sm160 'L = Temp + L M = Yazdkit_set + M N = Yazdkit_reset + N K = K + 1 If K = 16 Then K = 0 'J = L / 5 O = M / 16 P = N / 16 X = O + P Duty = O / X Duty = Duty - 0.32 Temp = Duty / 0.0047 Locate 1 , 1 Lcd "T= " ; Temp ; "c "; O = 0 : P = 0 End If 'Locate 1 , 12 : Lcd K Locate 2 , 1 : Lcd Yazdkit_set Locate 2 , 7 : Lcd Yazdkit_reset Waitms 50 Loop '------------------------------------------------------------------------------- Read_data_sm160: Bitwait Pind.4 , Reset Stop Timer1 Timer1 = 0 Bitwait Pind.4 , Set Start Timer1 Bitwait Pind.4 , Reset Yazdkit_set = Timer1 Bitwait Pind.4 , Set Stop Timer1 Timer1 = 0 Bitwait Pind.4 , Reset Start Timer1 Bitwait Pind.4 , Set Yazdkit_reset = Timer1 Stop Timer1 'X = Yazdkit_set + Yazdkit_reset 'Duty = Yazdkit_set / X 'Duty = Duty - 0.32 'Temp = Duty / 0.0047 'Locate 1 , 1 'Temp = Round(temp) Stop Timer1 Return 3 لینک به دیدگاه
Mehdi.Aref 26781 اشتراک گذاری ارسال شده در 4 شهریور، ۱۳۹۰ ممنون رامین جان تو چه شرایطی این ازمایشات رو انجام دادی و این اندازه گیریها رو کردی؟ 0.9 درجه اختلاف میتونه به عوامل زیادی مثل سنسور اندازه گیری و نویزهای موجود بستگی داشته باشه . اگه تمام شرایط رو اوکی کرده بودی و بازهم این اختلاف رو مشاهده کردی به ضرایب و تبدیلاتی که تو برنامت گذاشتی توجه کن شاید ضرایب pid که استفاده کردی چندان دقیق نبوده و جواب مورد نظر رو نمیده 4 لینک به دیدگاه
Control 1576 اشتراک گذاری ارسال شده در 7 شهریور، ۱۳۹۰ برای راحتی کارتون می تونید از سنسورهای دما و کنترل کننده های دمای آماده ( برای این کارتون از pid استفاده بکنید چون ممکنه on off برای دقت مد نظرتون پاسخ گو نباشه) این کار رو انجام بدید. هزینه سخت افزاری اون در مقابل هزینه زمانی طراحی مدار میکروکنترلری برای اولین بار خیلی به صرفه تره بعد از ساخت نمونه اولیه بعدا شروع به ساخت نمونه میکروکنترلری بکنید اول از کار جواب بگیرید و بعد به فکرمسائل دیگه باشید. 2 لینک به دیدگاه
raminrayat 22 اشتراک گذاری ارسال شده در 17 اسفند، ۱۳۹۰ سلام من بعد از چندین ماه برگشتم چون تو این سایت کسی به من جواب نداده بودو منم ناامیدشدم دیگه به اینجا سرنزدم. تا امروز که دوباره یادتون افتادم.خواستم بگم بدون تغییر دادن برنامه اولی هم میشد به بالاترین دقت رسید. مشکل اصلی اینجا بود که حتما واسه دقت های بالا باید از کریستال خارجی استفاده کرد.به همین راحتیو خوشمزگی همه چی حل شد.به هر حال ممنون از نظرهاتون:hapydancsmil: 3 لینک به دیدگاه
Mehdi.Aref 26781 اشتراک گذاری ارسال شده در 19 اسفند، ۱۳۹۰ سلام من بعد از چندین ماه برگشتم چون تو این سایت کسی به من جواب نداده بودو منم ناامیدشدم دیگه به اینجا سرنزدم.تا امروز که دوباره یادتون افتادم.خواستم بگم بدون تغییر دادن برنامه اولی هم میشد به بالاترین دقت رسید. مشکل اصلی اینجا بود که حتما واسه دقت های بالا باید از کریستال خارجی استفاده کرد.به همین راحتیو خوشمزگی همه چی حل شد.به هر حال ممنون از نظرهاتون:hapydancsmil: اینو که نگفته بودی از چه کریستالی استفاده کردی !! برای همین پرسیدم تو چه شرایطی اندازه گیری کردی و به چه روشی؟ معمولا تو برنامه هایی که نیاز به ثبت زمان و استفاده از تایمر میکرو هست باید که از کریستال خارجی استفاده کرد.ضمنا معذرت هم بابت پاسخگویی دیر 1 لینک به دیدگاه
ارسال های توصیه شده