الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مجس الحرارة Lm335z

مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني الاعزاء تحية طيبة،،

في الفترة الماضية ، وبعد ان قمت بتركيب دائرة الميكروكونترولار الاساسية pic 16F877 (تمت برمجتها بلغة pic c)، قمت بوصل مجس حرارة lm335z معها على امل أخذ قرائته عبر البك الى الكمبيوتر ، غير ان القراءة التي ظهرت لم تكن معبّرة.

السؤال : كيف يُمكن لي معايرة ذلك المجس،، وهل وصلي له بشكل مباشرمع البك هو امر صحيح؟

الرجاء الحار من اهل الخبرة المساعدة في هذا الشهر الكريم.

#2

هذا السنسور يعطي لكل 10 ميللي فولت ، 1 درجة C ، ستحول القرأءة من الADC إلي فولت بالضرب في 5000 و القسمة علي 1024

و من ذلك تقوم بالقسمة علي 10 لتعطي 1 درجة لكل 10 ميل فولت

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#3

الاخ احمد صالح ذكر لك مشكورا الفكرة العامة

واعتقد انه من المفيد ذكر الخطوات العامة الواجب اتباعها للتحويل من analogue

الى digital (مأخوذة من الداتا شيت لـ pic16f877 )

اقتباس
These steps should be followed for doing an A/D Conversion:

1. Configure the A/D module:

• Configure analog pins/voltage reference and digital I/O (ADCON1)

• Select A/D input channel (ADCON0)

• Select A/D conversion clock (ADCON0)

• Turn on A/D module (ADCON0)

2. Configure A/D interrupt (if desired):

• Clear ADIF bit

• Set ADIE bit

• Set PEIE bit

• Set GIE bit

3. Wait the required acquisition time.

4. Start conversion:

• Set GO/DONE bit (ADCON0)

5. Wait for A/D conversion to complete, by either:

• Polling for the GO/DONE bit to be cleared

(with interrupts enabled); OR

• Waiting for the A/D interrupt

6. Read A/D result register pair

(ADRESH:ADRESL), clear bit ADIF if required.

7. For the next conversion, go to step 1 or step 2,

as required. The A/D conversion time per bit is

defined as TAD. A minimum wait of 2TAD is

required before the next acquisition starts.

وكل خطوة من هذه الخطوات مشروحة بالتفصيل في الداتا شييت...

كنت قد كتبت روتينا للتعامل مع قيم درج الحرارة القادمة من LM35 عن طريق

analogue input باستخدام pic16f877 لكنني لم اجرب هذا الكود بعد...

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;temperature : 10 bits = t10:t0 
;
;when using the 10 bits , we'll get a temp range of 0 to (.48*1024)
; = 0 to 491 degree cel. using only 8 bits gives 0-122 degree cel
;and is sufficient .
;Also , 0.48 will be approximated to 0.5 (sufficient accuracy)
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

	wait_acquisition_time
	bsf	adcon0,go;start A/D process
L77	btfsc	adcon0,go;finished ?
	goto	L77;
	bsf		status,rp0;
	movf	adresL,w;low part of a/d result
	movwf	some_variable;
	divide_by_2;i.e. mult. by 0.5
	movwf	some_variable;now , some_variable = correct temp in C

end101
	nop
	endm
;################################################################
divide_by_2		macro
	movlw	2
L50	subwf	some_variable,f;
	incf	divide_counter;
	btfsc	some_variable,7;is some_variable < 0 ??
	goto	finish;yes
	goto	L50;not yet
finish
	decf	divide_counter;
	movf	divide_counter,w;
	endm
;################################################################
wait_acquisition_time	macro
	movlw	.10;this should be appx 23~24 uSec.
	movwf	temp
L89	decfsz	temp
	goto	L89

	endm

تم تعديل هذه المشاركة بواسطة allko في 25 سبتمبر 2008 في 06:34

#4
احمد صالح كتب:
هذا السنسور يعطي لكل 10 ميللي فولت ، 1 درجة C ، ستحول القرأءة من الADC إلي فولت بالضرب في 5000 و القسمة علي 1024

و من ذلك تقوم بالقسمة علي 10 لتعطي 1 درجة لكل 10 ميل فولت

توضيح لو سمحت !!

ماهذه القيم المضروبه فالقارئ سوف يتوه بها أن ام توضح

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#5

يا اخي و هل انا اتكلم مع قارىء جاهل لا يعرف اساساً ما هو الADC ?? المفروض ان عارف ما هو في الاساس !!

غريب و الله .. علي العموم التفسير اللي مفروض اي مهندس الكترونيات و اتصالات شغال في مشروع زي ده يكون عارفه

cc4fd1f2f00f76ec4e3b69026ac979cc.png

Q= VP /N 
VP = Peak Volt of ADC  ,  which is 5V 
N= resoultion , N=10  in Pic , hence the number 1024

للاستفاضة

http://en.wikipedia.org/wiki/Analog-to-digital_converter

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#6

الكود الموجود في هذه الصفح يشرح عملية التحويل بالكامل

http://forum.sourceboost.com/index.php?showtopic=3673

ربما الاختلاف في حالة سنسور الحرارة LM35 انك بحاج لاستخدام amplifier لان هذا

السنسور يعطي خرج في مدى millivolts وانت في البيك تتعامل مع مدى 0-5 فولت

لذلك سيكون من الافضل تكبير خرج السنسور

#7

الاخ أحمد ربنا يوفقك يارب عمرك ما قصّرت .. أخي أحمد أنا بس حابب أنوه إلى انو هادا السينسور في الداتا شيت الخاص فيه كاتب انو التغير فيه بمقدار 10 mv/k .. بالتالي وجدت إنو حساسيتو قليله جدا .. وبالتالي وكما قال الاخ العزيز alllko كان يجب ان استخدم المضخم.

ولما كان السينسور هذا عند درجة حرارة 0C يُعطي القيمة 2.73 ، فقد قمت في دائرة المضخم ، وقبل المضخم تحديدا بتصفير تلك القيمة عند درجة 0C ، لتصبح القيمة المأخوذة من السينسور تساوي الصفر عند درجة 0C .

لكن لدي اخوتي الاعزاء سؤال بسيط .. لما اصبحت القيمة التي تأخذ من السينسور تترواح من 0 إلى 5 فولت مثلا ، فما الفائدة على وجه التحديد من استخدام البك ، وكيف يقوم الادك بمقابلة القيمة التي تأخذ من السينسور ؟؟؟

خذوني في حلمكم ، وكل الامتنان لحضرتكم.

بالمناسبة ، وحتى تعم الفائدة على الجميع ، فقد قمت بلغة البك سي بكتاية الكود اللازم حتى نأخذ القراءة من السينسور ، وهو كالتالي :

#include "C:\Documents and Settings\KHALED.SAQER\Desktop\k\main.h"

void main()

{

float val =0;float val1 =0;

setup_adc_ports(AN0_AN1_AN2_AN3_AN4);

setup_adc(ADC_CLOCK_INTERNAL);

setup_psp(PSP_DISABLED);

setup_spi(SPI_SS_DISABLED);

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1);

// TODO: USER CODE!!

printf("start code\n\n");

while (true){

restart_wdt();

set_adc_channel(0);

val = read_adc();

val1 = val /1024;

val1 = val1 * 5;

printf("\nvalue from ADC = %4.4f VAL in voltage = %1.8f\n",val,val1);

delay_ms(1000);

}

}

تم تعديل هذه المشاركة بواسطة خالد حاتم كخن في 26 سبتمبر 2008 في 02:41

#8

اخي لا تحتاج مضخم ، فهذا سيعقد المسألة انا عملت مثل هذا المشروع اخي في ثواني :( ... ارجوك اسمع ما اقوله

http://www.digital-diy.net/16F%20Examples/LM35DZ.aspx

هذا هو المشروع لصديق لي و لم كنت ارد ان اضعه الا بعد محوالتك فيه ...

هناك اخطاء في كودك

val = read_adc();
val1 = val /1024;
val1 = val1 * 5

change to 
val=read_adc(); 

val1= val*5000/1024; 
val1= val/10;  

// then print the adc value it is the actual temprature in C

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#9
احمد صالح كتب:
يا اخي و هل انا اتكلم مع قارىء جاهل لا يعرف اساساً ما هو الADC ?? المفروض ان عارف ما هو في الاساس !!

غريب و الله .. علي العموم التفسير اللي مفروض اي مهندس الكترونيات و اتصالات شغال في مشروع زي ده يكون عارفه

cc4fd1f2f00f76ec4e3b69026ac979cc.png

Q= VP /N 
VP = Peak Volt of ADC  ,  which is 5V 
N= resoultion , N=10  in Pic , hence the number 1024

للاستفاضة

http://en.wikipedia.org/wiki/Analog-to-digital_converter

شكراً عزيزي الاخ أحمد صالح

على كل حال أنت قمت بتوضيح المعادله وأنا سوف اقوم بتوضيح أكثر البسط في المعادله هو اعلى peak للقيمه والـ resolution هو المدى اللذي سوف نعمل به أي أننا سوف نعمل على 10 Bit لذلك 2^10 = 1024 والقيمه 5000 هي mv القيمه العليا لدينا هي 5v والقيم المدخله بالmv لذلك قمنا بالضرب ايضاً بالـ mv

للتوضيح أكثر لكل شخص طريقته بالبرمجه أو التخطيط أو رسم البلوك المعين لدائرته لذلك تختلف الافكار ولكن المهم أن النتيحه واحده مهما ابتعدت الدقه أو اقترب فهنا نحن نكون في منطقة error range

joseph.gif

logo.gif

CCNA 640-802

مدونتي

#10

الاخ Eng.Fedail شكرا جزيلا لمشاركتك .. الاخ أحمد انا قرأت مشاركتك بتمعن .. سأباشر بتطبيق ذلك الكود الذي اعتقد انك كتبت آخر سطر فيه سهوا

val1= val/10; بدلا من val1= val1/10;

أخ أحمد لو سمحت فقط أريد منك استشارة فيما يلي :

kkk.GIF - 0.00MB

الصورة السابقة أخ احمد تمثل مداخل/مخارج ذلك السينسور .. وبناء على الداتا شيت قمنا بوصل كل رجل في المكان الصحيح ، إلا ان القيمة التي كانت تُقرا كانت لا تتغير بشكل منطقي ، فلما كانت تزداد درجة الحرارة في البيئة حوله .. كانت قراءة السينسور تقل قليلا ثم تزداد قليلا وهكذا والعكس صحيح ( حتى لو كان الكود المُستعمل هو الكود الذي وصف بالخاطئ ، فعلى الاقل كان ينبغي ان يكون هناك تناسب طردي بين القيمة المقروءة من قبل السينسور ودرجة حرارة الجو المحيط).

وبعد سؤالي لصديق كان قد استعمل ذلك السينسور ، قال بأن الرجل الثالثة ( المخرج الذي نأخذ منه فولتية السينسور للقراءة) تُشبك مع الرجل الثانية ( التي منها تدخل الفولتية للسينسور)؟؟؟؟ وعليه ، فإنني اريد التأكد من حضرتكم وبناء على الكود الذي كتبته مشكور عن كيفية شبك كل رجل من السينسور ، وهل هذا السينسور يحتاج لمقاومة خارجية كي تشبك معه في اي مكان أو جهة ، أم يشبك مباشرة؟؟؟؟

أحب تضمين خصائص ذلك المجس lm335z :

Features

Directly calibrated in °Kelvin

1°C initial accuracy available

Operates from 400 μA to 5 mA

Less than 1W dynamic impedance

Easily calibrated

Wide operating temperature range

200°C overrange

Low cost

LM335.rar

تم تعديل هذه المشاركة بواسطة خالد حاتم كخن في 26 سبتمبر 2008 في 16:42

#11

اسف جداً ، كنت اعتقد انك تتكلم علي LM35 ،

المهم ، تشبيكه كالتالي كما في الصفحة الخامسة V---------->Resistor--------------->Zener------Gnd

و تاخذ الخرج من كاثود الزينر ، و تترك طرف الADJ ، و كما قرآتOperates from 400 μA to 5 mA، و كأي دايود يحتاج biasing و ستضع جهد مقداره 15 فولت و مثلا مقاومة 6 كيلو ، ليصبح التيار 2.5 ميلي امبير ، و بالتالي الزينر يعمل و كما تري اننا لم نتخطي max forward current و هو 10 ميلي امبير و إلا الزنر يحترق ..

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#12

sensor-lm335z-1.GIF

post-63827-1223332348_thumb.gif

الاخ أحمد ...

على ضوء ما ذكر سابقا ، أيّ من التعيينات على كل رسمة من الرسمتين السابقتين يُعتبر صحيحا ؟؟؟

إضافة إلى ذلك .. ولما كانت الفولتية الداخلة للسينسور تأتيه من البك فهي على ما اعتقد ستساوي 5 فولت كحد أقصى .. ولما كان اقصى تيار يَعمل عليه هو 5 مللي أمبير ، فإن المقاومة الواجب استخدامها اذن ستساوي حاصل قسمة 5 فولت على 5 مللي أمبير لتساوي 1 كيلوأوم ، فما رأيك أخي العزيز؟

تحتي الى حضرتكم.

تم تعديل هذه المشاركة بواسطة نــور في 7 أكتوبر 2008 في 01:33 — السبب: برجاء رفع الصور على سيرفر المنتدى بدلا من ر&#

#13

الرسمة الاولي الصحيحة ، و الحسابات صحيحة مع ملاحظة منحني صفحة 5 الثاني VF & IF ، سيكون هناك جهد واقع علي الزينر مقداره 0.8 فولت تقريبا عندما يكون التيار الامامي 5 ميل امبير و درجة الحرارة 25 درجة اي ان

5-0.8/1k = 4.8 m A

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#14

مشكور أخي أحمد كتير .. غلبتك معي .. انا نفسي اباشر بالتجربة .. لكن للاسف الجامعة اغلقت ابوابها مؤقتا بسبب عطلة العيد .. فور انتهاء العطلة الاسبوع القادم سوف اطلعك على النتائج بإذن الله.

تحيتي لحضرتكم.

#15

بارك الله فيك أخي أحمد .. التجربة نجحت .. ونحن الآن نفكر بأن نزيد دقة القيمة المقروءة بأن نستخدم دارة أمبيليفاير.

وفقكم الله.

#16

علي الرحب و السعة :) .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

مواضيع مشابهة