تبريد PSU للكمبيوتر شبه السلبي

مرحبًا هذا الجهاز قابل للتطبيق ليس فقط في PSU للكمبيوتر ، ولكن سنتحدث عن كمبيوتر عاجل :)



تكنولوجيا التصنيع لإنتاج المعالجات تتناقص بثبات ، إلى جانب استهلاك الطاقة يتناقص أيضًا. تحتوي معالجات أحدث الأجيال على نظام فيديو رسومي مناسب للمهام اليومية. إذا لم تكن متطلبًا جدًا للأداء في ألعاب الفيديو ، فبالنسبة لميزانية متواضعة نسبيًا ، يمكنك التفكير في جهاز كمبيوتر هادئ يصدر أصواتًا فقط تحت عبء ثقيل ، والذي لا يحدث كثيرًا.

بعد ذلك تأتي رؤيتي لتكوين كمبيوتر للتبريد شبه السلبي.

يولد متوسط ​​وحدة المعالجة المركزية في ذروة حمولتها 65 وات من الحرارة ، ويمكن تبريدها بواسطة مبرد المصنع بطاقة أكبر (من العادية) من 120-150 واط عن طريق ضبط إعدادات BIOS بحيث تبدأ في الدوران فقط عندما يتم تحميل 30-40 ٪ من وحدة المعالجة المركزية أو عند درجة حرارة أعلى من 40 درجة مئوية.

مصدر آخر للضوضاء هو محرك الأقراص الصلبة ، ولكنه بسيط ، لقد استبدله بمحرك أقراص صلبة.

كانت هناك مروحة لإمدادات الطاقة تدور بشكل مستمر. يمكنك شراء سلبي بالكامل أو شبه سلبي في البداية ، ولكن إليك سعر السؤال: (من 150 دولارًا) ربما يكون من المنطقي توجيه هذه الأموال إلى إنتاجية أكبر؟

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

تحتوي مصادر الطاقة المختلفة على ميزات تصميم مختلفة ، ربما في بعض الحالات يكون تدفق الهواء المستمر ضروريًا. لذلك ، قبل إجراء تغييرات على تصميم PSU الخاص بك ، كن على دراية بأنك تفهم العملية ، لديك "يدا" إلى حد ما وأن التغييرات التي تم إجراؤها لن تؤثر سلبًا على تشغيل PSU والمعدات ذات الصلة. غالبًا ما يحدث أن يضخ PSU هواء وحدة النظام بالكامل. أي تعديلات قد تتلف جهاز الكمبيوتر الخاص بك!




تم أخذ الأساس Arduino nano استنادًا إلى ATMEGA168PA ، من أجزاء مختلفة من مشاريع الأشخاص الآخرين التي تم تجميعها خاصة بهم.



نظرًا لأن موارد وحدة التحكم تسمح بذلك ، فقد تقرر عمل مؤشر LED ثلاثي الألوان من نوع LED الذكي مع وميض ولون مختلفين اعتمادًا على درجة الحرارة.



يتم قياس درجة الحرارة بواسطة مستشعر DS18B20 ، اعتمادًا على درجة الحرارة ، تزداد سرعة المروحة أو تقل. عند الوصول إلى> 67 درجة مئوية ، يتم تنشيط كاشف الصوت. الترانزستور - أي NPN مع التيار> مروحة المروحة. حاولت أيضًا التحكم في مروحة بثلاثة أسلاك ، كل شيء يعمل ، ولكن لم أستطع إيقافه تمامًا.

في البداية ، استخدم تردد PWM الافتراضي (448.28 هرتز) ، ولكن بسرعات منخفضة جعل المبرد رنينًا بالكاد يمكن ملاحظته ، وهو ما لا يتطابق بأي شكل من الأشكال مع مفهوم التبريد الصامت. لذلك ، يتم رفع تردد برنامج PWM إلى 25 كيلو هرتز. بأدنى سرعات ، لا يمكن للمروحة أن تبدأ على الفور ، لذلك في أول ثانيتين يتم تغذية النبضة بالسرعة القصوى ، ثم السرعة وفقًا للبرنامج.

هنا فيديو يوضح تشغيل الجهاز.



لكن في الواقع ، رسم تخطيطي ، أطلب منك عدم الركل كثيرًا. هذا أول رسم لي لأردوينا :)

انقر لعرض الرمز.
// 2 - DS18x20 data // 3 - green LED (a 330 Ohm resistor is necessary) // 5 - orange LED (a 330 Ohm resistor is necessary) // 6 - red LED (a 330 Ohm resistor is necessary) // 9 - PWM Fan // 8 - Buzzer #include <OneWire.h> byte temp; // temperature of sensor byte greenLED = 3; byte orangeLED = 5; byte redLED = 6; byte FanSpeed = 0; int piezoPin = 8; //     byte modes[] = { 0B00000001, //  0B00000101, //  0B00010101, //  0.5  0B01010101, //     0B10101010, //      0B00010101, //      0B01010101 //   (4   ) }; uint32_t ms, ms1 = 0, ms2 = 0, ms3 = 0, ms4 = 0, ms5 = 0; uint8_t blink_loop = 0; uint8_t blink_mode = 0; uint8_t modes_count = 0; bool FirstRun = 0; OneWire ds(2); // on pin 10 (a 4.7K resistor is necessary) void analogWrite25k(int pin, int value) { switch (pin) { case 9: OCR1A = value; break; case 10: OCR1B = value; break; default: // no other pin will work break; } } void setup(void) { pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); pinMode(orangeLED, OUTPUT); pinMode(9, OUTPUT); modes_count = 1; blink_mode = modes[modes_count]; TCCR1A = 0; // undo the configuration done by... TCCR1B = 0; // ...the Arduino core library TCNT1 = 0; // reset timer TCCR1A = _BV(COM1A1) // non-inverted PWM on ch. A | _BV(COM1B1) // same on ch; B | _BV(WGM11); // mode 10: ph. correct PWM, TOP = ICR1 TCCR1B = _BV(WGM13) // ditto | _BV(CS10); // prescaler = 1 ICR1 = 200; // TOP = 320 // Serial.begin(9600); } void loop() { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius; if ( ( ms - ms3 ) > 1000 || ms < ms3 ){ ms3 = ms; if ( !ds.search(addr)) { // Serial.println("No more addresses."); // Serial.println(); ds.reset_search(); if ( ( ms - ms4 ) > 250 || ms < ms4 ){ ms4 = ms; //delay(250); return; } } // Serial.print("ROM ="); for( i = 0; i < 8; i++) { // Serial.write(' '); // Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { // Serial.println("CRC is not valid!"); return; } // Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end } //delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. if ( ( ms - ms2 ) > 900 || ms < ms2 ){ ms2 = ms; present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; temp = celsius; // Serial.println("TEMPERATURE IS:"); // Serial.println(temp); } ms = millis(); //    125  if( ( ms - ms1 ) > 125|| ms < ms1 ){ ms1 = ms; //       if ( temp <= 50 ) { digitalWrite(orangeLED, LOW); digitalWrite(redLED, LOW); if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(greenLED, HIGH); else digitalWrite(greenLED, LOW); blink_loop++; if ( temp <= 40 ) { blink_mode = modes[0]; analogWrite25k ( 9, 0); FirstRun = 0; } if ( temp >= 41 && temp <= 45 ) { blink_mode = modes[1]; // Make a push impulse for starting fan (1 sec) if ( FirstRun == 0 ) { ms5 = ms; FirstRun = 1; } if (FirstRun == 1 && (2000 > (ms - ms5))) { analogWrite25k ( 9, 33); // Fan start impulse } if (FirstRun == 1 && (2000 < (ms - ms5))) { analogWrite25k ( 9, 28); // first speed } } if ( temp >= 46 && temp <= 50 && FirstRun == 1) { blink_mode = modes[2]; analogWrite25k ( 9, 29); } } if ( temp >= 51 && temp <= 61 ) { digitalWrite(greenLED, LOW); digitalWrite(redLED, LOW); if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(orangeLED, HIGH); else digitalWrite(orangeLED, LOW); blink_loop++; if ( temp >= 51 && temp <= 54 ) { blink_mode = modes[0]; analogWrite25k ( 9, 30); } else if ( temp >= 55 && temp <= 58 ) { blink_mode = modes[1]; analogWrite25k ( 9, 31); } else if ( temp >= 59 && temp <= 61) { blink_mode = modes[2]; analogWrite25k ( 9, 32); } } if ( temp >= 62 && temp <= 120 ) { digitalWrite(greenLED, LOW); digitalWrite(orangeLED, LOW); if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(redLED, HIGH); else digitalWrite(redLED, LOW); blink_loop++; if ( temp >= 62 && temp <= 66 ) { blink_mode = modes[0]; analogWrite25k ( 9, 33); } if ( temp >= 67 && temp <= 70 ) { blink_mode = modes[1]; analogWrite25k ( 9, 34); } if ( temp >= 71 && temp <= 120) { blink_mode = modes[2]; analogWrite25k ( 9, 50); tone(piezoPin, 2500, 30); } } } } 

Source: https://habr.com/ru/post/ar421267/


All Articles