 |
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
|
|
نشاط [ عبدالله حجازى ]
قوة السمعة:111
|
|
05-06-2020, 01:47 AM
المشاركة 1
|
|
السلام عليكم ورحمه الله
في هذة المشاركة اقدم لكم دائرة الكترونيه لمراقبة درجة الحرارة
وحماية التطبيقات المختلفة من الحرارة الذائدة وتوزيع الأحمال
مثل المحركات والأجهزة والماكينات ..
تعتمد هذة الدائرة في قياس الحرارة علي الحساس LM35
مدي قرأة الحرارة من ( 0 الي 150 درجة مئوية)

امكانيات الدائرة..
تستطيع اختيار ثلاث قيم للحرارة
القيمة الأولي تسمي قيمة التشغيل وسوف نتعرف عليها بالتفاصيل
القيمه الثانيه تسمي قيمة الوسط
القيمه الثالثه تسمي قيمة الفصل
جميع القيم المدخلة تحفظ في حالة انقطاع التيار وعودته
تحتوي الدائرة علي ثلاث شاشات رقمية لإظهار درجة الحرارة
توزيع الأحمال عند بداية التشغيل
شرح الدائرة واستخدامتها
هذة الدائرة تعمل علي تخفيف تحميل الأحمال الثقيله علي القواطع الكهربيه
بحيث لو يوجد عندنا 10 أجهزة قدرة كل جهاز 1800 واط بمجموع 18000 الف واط
وهذه الأحمال لو تم دخولها علي الشبكه الكهربائيه دفعه واحدة تتسبب في
سحب تيار عالي ومفاجئ لمفاتيح القواطع وتسبب مع مرور الوقت في تلف
هذة القواطع
وتعمل هذة الدائرة علي تخفيف ادخال الأحمال عند بداية التشغيل
حيث يبدأ برنامج الدائرة في ادخال أول حمل علي الشبكة الكهربية وينتظر
الي 2 سانيه ويدخل الجهاز الثاني وينتظر 2 سانيه ويدخل الجهاز الثالث
الي أن يتم تحميل ال 10 أجهزة علي الشبكة الكهربية وهذا لتفادي
التحميل العالي والمفاجئ علي الشبكه مما قد يتلف عداد الكهرباء
ويتلف القواطع الكهربيه
ايضا بيتم اختيار قيمه حرارة القصوي لحمايه الأجهزة
مثال لو عندنا جهاز كهربي أقصي قيمه لدرجة الحرارة اللتي يتحملها هي 80 درجه
هنا بيتم ضبط واختيار هذة القيمة في الدائرة وهي درجة الفصل
ايضا توجد درجة الوسط وهي لكي تتحكم في تشغيل وفصل مراوح للتبريد
وتوجد درجة حرارة للتشغيل
حيث لو تم فصل الجهاز علي درجة حرارة 80 درجة الدائرة تنتظر نزول درجة
حرارة الجهاز الي درجه التشغيل اللتي ادخلناها
كود:
// TEMP CONTROL //
// LM35 //
// ENG ABDALLA HYGAZY //
// DATA 2020/5/31 //
// Frequency 4 MHz //
#define seg_data1 PORTB
#define seg_data2 PORTB
#define seg_data3 PORTB
#define seg_data4 PORTB
#define DP PORTB.f7
#define BUZ PORTA.F5=1; delay_ms(250); PORTA.F5=0; delay_ms(80);
#define DDS4 delay_ms(2000);
#define DDS5 delay_ms(800);
//********************========************************//
unsigned int adc_rd,DATA,DATA_X,STOP=0,NEXT;
unsigned int DATA_LOW,DATA_MEDEM,DATA_HAY;
unsigned int RD_DATA=0,RD_DATA1=0,RD_DATA2=0;
unsigned int AA1=0,AA2,AA3,AA4=0,AA5=0,AA6=0 ;
long tlong;
unsigned short mask(unsigned short num);
unsigned int a1=0,m1=0,e1=0,w1=0,k1=0;
//********************========************************//
//======================= show_adc ==========================================//
void show_adc() {
adc_rd = ADC_Read(0);
tlong = (long)adc_rd * 5000;
tlong = tlong / 1023;
}
//=============== show_adc === END ========================================//
//=========================== void SETENG ================================//
void SETENG(){
while (NEXT==0) {
DATA_LOW = RD_DATA / 1000;
PORTE=1;
PORTB=mask(DATA_LOW); DATA_LOW=0;
delay_ms(1);
DATA_LOW = (RD_DATA % 1000)/100;
PORTE=2;
PORTB=mask(DATA_LOW); DATA_LOW=0;
delay_ms(1);
DATA_LOW = (RD_DATA % 1000)%100/10;
PORTE=4;
PORTB=mask(DATA_LOW); DATA_LOW=0;
delay_ms(1);
DATA_LOW = (RD_DATA % 1000)%100%10;
PORTE=8;
PORTB=mask(DATA_LOW); DATA_LOW=0;
delay_ms(1);
//********************************************************//
if(PORTC.F0==1){ RD_DATA++; delay_ms(20);}
if(PORTC.F1==1){ RD_DATA--; delay_ms(20);}
if(RD_DATA>1500){ RD_DATA =1500; delay_ms(20);}
if(RD_DATA<0){ RD_DATA =0; delay_ms(20);}
if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
//********************************************************//
} RD_DATA = RD_DATA/10;
EEPROM_Write(0, RD_DATA); delay_ms(10);
RD_DATA = RD_DATA*10;
NEXT=0; PORTD.F7=0; PORTD.F6=1;
//-----------------------------------------------------------//
while (NEXT==0) {
DATA_MEDEM = RD_DATA1 / 1000;
PORTE=1;
PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
delay_ms(1);
DATA_MEDEM = (RD_DATA1 % 1000)/100;
PORTE=2;
PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
delay_ms(1);
DATA_MEDEM = (RD_DATA1 % 1000)%100/10;
PORTE=4;
PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
delay_ms(1);
DATA_MEDEM = (RD_DATA1 % 1000)%100%10;
PORTE=8;
PORTB=mask(DATA_MEDEM); DATA_MEDEM=0;
delay_ms(1);
//********************************************************//
if(PORTC.F0==1){ RD_DATA1++; delay_ms(20);}
if(PORTC.F1==1){ RD_DATA1--; delay_ms(20);}
if(RD_DATA1>1500){ RD_DATA1 =1500; delay_ms(20);}
if(RD_DATA1<0){ RD_DATA1 =0; delay_ms(20);}
if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
//********************************************************//
} RD_DATA1 = RD_DATA1/10;
EEPROM_Write(1, RD_DATA1); delay_ms(10);
RD_DATA1 = RD_DATA1*10;
PORTD.F6=0; PORTD.F7=0; STOP=0; NEXT=0;
//=================================================================//
//=========================== ALARM =============================//
while (NEXT==0) {
DATA_HAY = RD_DATA2 / 1000;
PORTE=1;
PORTB=mask(DATA_HAY); DATA_HAY=0;
delay_ms(1);
DATA_HAY = (RD_DATA2 % 1000)/100;
PORTE=2;
PORTB=mask(DATA_HAY); DATA_HAY=0;
delay_ms(1);
DATA_HAY = (RD_DATA2 % 1000)%100/10;
PORTE=4;
PORTB=mask(DATA_HAY); DATA_HAY=0;
delay_ms(1);
DATA_HAY = (RD_DATA2 % 1000)%100%10;
PORTE=8;
PORTB=mask(DATA_HAY); DATA_HAY=0;
delay_ms(1);
//*******************************************************
if(PORTC.F0==1){ RD_DATA2++; delay_ms(20);}
if(PORTC.F1==1){ RD_DATA2--; delay_ms(20);}
if(RD_DATA2>1500){ RD_DATA2 =1500; delay_ms(20);}
if(RD_DATA2<0){ RD_DATA2 =0; delay_ms(20);}
if(PORTC.F2==1){BUZ BUZ NEXT=1; delay_ms(500);}
//*******************************************************
} RD_DATA2 = RD_DATA2/10;
EEPROM_Write(2, RD_DATA2); delay_ms(10);
RD_DATA2 = RD_DATA2*10;
PORTD.F5=0; PORTD.F6=0; PORTD.F7=0; NEXT=0; STOP=0;
}
//=============== void SETENG ===== END ==============================//
//============ Timer0 =========== InitTimer0 ========================//
//Timer0
//Prescaler 1:8; TMR0 Preload = 6; Actual Interrupt Time : 1 ms
//Place/Copy this part in declaration section
void InitTimer0(){
OPTION_REG = 0x82;
TMR0 = 6;
INTCON = 0xA0;
}
//======================== END ===============================//
//======================== Interrupt ===============================//
void Interrupt(){
if (TMR0IF_bit){
TMR0IF_bit = 0;
TMR0 = 6;
//Enter your code here
AA4++; AA5++; AA6++;
if( AA4==1 ) { show_adc(); }
if( AA4==1000 ) { AA4=0; }
if(STOP==0)
{
if(AA5==1)
{
a1 = tlong / 1000;
if(a1==0){ PORTE=0;}
else PORTE=1;
PORTB=mask(a1); a1=0;
}
if(AA5==2)
{
a1 = (tlong % 1000)/100;
PORTE=2;
PORTB=mask(a1); a1=0;
}
if(AA5==3)
{
a1 = (tlong % 1000)%100/10;
PORTE=4;
PORTB=mask(a1); a1=0;
}
if(AA5==5)
{
a1 = (tlong % 1000)%100%10;
PORTE=8;
PORTB=mask(a1); a1=0;
}
if(AA5==6){ AA5=0;}
}
if(AA6==1 ){ PORTD.F7=1;}
if(AA6==400 ){ PORTD.F7=0;}
if(AA6==800){ AA6=0; }
if( tlong > RD_DATA ){ DATA_LOW=1; PORTD.F6=1; }
if( tlong < RD_DATA ){ DATA_LOW=0; PORTD.F6=0; }
if( tlong > RD_DATA1 ){ DATA_MEDEM=1; PORTD.F5=1; }
if( tlong < RD_DATA1 ){ DATA_MEDEM=0; PORTD.F5=0; }
if(PORTC.F3==1){ BUZ BUZ STOP=1; PORTE=0; SETENG();}
}
}
//=================== Interrupt == END ===============================//
//======================== void START ================================//
void START()
{ delay_ms(250); AA2=1; AA3=0;
PORTC.F6=1; DDS4
PORTC.F5=1; DDS4
PORTC.F4=1; DDS4
PORTD.F3=1; DDS4
PORTD.F2=1; DDS4
PORTC.F7=1; DDS4
PORTD.F4=1; DDS4
PORTD.F0=1; DDS4
PORTD.F1=1; DDS4
}
//======================== END ============================//
//======================== void OFF_ALL =======================//
void OFF_ALL()
{ delay_ms(250); AA3=1; AA2=0;
PORTC.F6=0; DDS5
PORTC.F5=0; DDS5
PORTC.F4=0; DDS5
PORTD.F3=0; DDS5
PORTD.F2=0; DDS5
PORTC.F7=0; DDS5
PORTD.F4=0; DDS5
PORTD.F0=0; DDS5
PORTD.F1=0; DDS5
}
//======================== END ==========================//
//======================== void OF_ALL ======================//
void OF_ALL()
{
PORTC.F6=0;
PORTC.F5=0;
PORTC.F4=0;
PORTD.F3=0;
PORTD.F2=0;
PORTC.F7=0;
PORTD.F4=0;
PORTD.F0=0;
PORTD.F1=0;
}
//======================== END ==========================//
//======================== void main ==========================//
void main() {
TRISB=0; PORTB=0;
TRISD=0; PORTD=0;
TRISC=15; PORTC=0;
TRISE=0; PORTE=0;
TRISA=1; PORTA=0;
ADCON0=0x00;
CMCON=0;
InitTimer0();
RD_DATA = EEPROM_Read(0); delay_ms(10);
RD_DATA = RD_DATA *10;
RD_DATA1 = EEPROM_Read(1); delay_ms(10);
RD_DATA1 = RD_DATA1 *10;
RD_DATA2 = EEPROM_Read(2); delay_ms(10);
RD_DATA2 = RD_DATA2 *10;
delay_ms(1000);
BUZ BUZ
OF_ALL();
if( tlong <=15 )
{
while(AA1==0)
{
delay_ms(3000); BUZ
if( tlong >=15 ){ AA1=1; }
}
}
if( tlong >=15 ){ START(); }
while(1){
if( DATA_LOW==0 && DATA_MEDEM==0 && tlong >=15 && AA2==0 ){ START(); }
if( DATA_MEDEM==1 && AA3==0){ OFF_ALL(); }
if( tlong <=15 ) { OFF_ALL(); }
}
}
//====================== void main === END ==========================//
//======================== switch (num) ==========================//
unsigned short mask(unsigned short num){
switch (num){
case 0 : return 0xC0;
case 1 : return 0xF9;
case 2 : return 0xA4;
case 3 : return 0xB0;
case 4 : return 0x99;
case 5 : return 0x92;
case 6 : return 0x82;
case 7 : return 0xF8;
case 8 : return 0x80;
case 9 : return 0x90;
}
}
//======================== END ==========================//
مخطط الدائرة المطبوعه
لتحميل المشروع كامل
كود / ملف محكاة / دائرة مطبوعه /
https://drive.google.com/drive/folde...U0?usp=sharing
بالتوفيق للجميع
..
التعديل الأخير تم بواسطة : عبدالله حجازى بتاريخ 05-06-2020 الساعة 02:05 AM
|