Задача
По мощности рассеяния рассчитать нужное тепловое сопротивление радиатора и его площадь.
Компоненты на форме
Edit (EditPower, EditTj, EditTa, EditRjc, EditRcs), Button (ButtonCalc), Memo (MemoResult).
Как работает
- Ввести мощность, предельную и окружающую температуры, тепловые сопротивления.
- Посчитать требуемое Rрад радиатора.
- Оценить площадь и проверить температуру кристалла.
Исходный код модуля
//---------------------------------------------------------------------------
// Проект 48. Расчёт радиатора
// Тепловое сопротивление и площадь охладителя по мощности
// рассеяния — чтобы транзистор или стабилизатор не сгорел.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
double RequiredThermalResistance(double Tj, double Ta, double P, double Rjc, double Rcs)
{
if (P <= 0) return 0;
return (Tj - Ta) / P - Rjc - Rcs;
}
//---------------------------------------------------------------------------
double HeatsinkArea(double Rth)
{
if (Rth <= 0) return 0;
return 50.0 / Rth;
}
//---------------------------------------------------------------------------
double JunctionTemp(double Ta, double P, double Rjc, double Rcs, double Rsa)
{
return Ta + P * (Rjc + Rcs + Rsa);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonCalcClick(TObject *Sender)
{
double P, Tj, Ta, Rjc, Rcs;
try {
P = StrToFloat(EditPower->Text); Tj = StrToFloat(EditTj->Text);
Ta = StrToFloat(EditTa->Text); Rjc = StrToFloat(EditRjc->Text); Rcs = StrToFloat(EditRcs->Text);
} catch (...) { MemoResult->Text = "Проверьте числа"; return; }
if (P <= 0) { MemoResult->Text = "Мощность должна быть больше нуля"; return; }
if (Tj <= Ta) { MemoResult->Text = "Предельная температура ниже окружающей"; return; }
double Rsa = RequiredThermalResistance(Tj, Ta, P, Rjc, Rcs);
MemoResult->Lines->Clear();
MemoResult->Lines->Add("Рассеиваемая мощность: " + FormatFloat("0.##", P) + " Вт");
MemoResult->Lines->Add("Перегрев допустим: " + FormatFloat("0.#", Tj - Ta) + " °C");
MemoResult->Lines->Add("");
if (Rsa <= 0) {
MemoResult->Lines->Add("Радиатор не спасёт: собственное тепловое");
MemoResult->Lines->Add("сопротивление корпуса уже превышает допустимое.");
MemoResult->Lines->Add("Нужен корпус мощнее, обдув или снижение мощности.");
return;
}
double area = HeatsinkArea(Rsa);
MemoResult->Lines->Add("Требуемое тепловое сопротивление радиатора:");
MemoResult->Lines->Add(" Rрад = " + FormatFloat("0.##", Rsa) + " °C/Вт");
MemoResult->Lines->Add("");
MemoResult->Lines->Add("Ориентировочная площадь: " + FormatFloat("0", area) + " см²");
MemoResult->Lines->Add(" (алюминий, естественная конвекция)");
MemoResult->Lines->Add("");
double Tjreal = JunctionTemp(Ta, P, Rjc, Rcs, Rsa);
MemoResult->Lines->Add("Проверка: температура кристалла составит " + FormatFloat("0.#", Tjreal) + " °C");
if (Rsa < 1.0) MemoResult->Lines->Add("Внимание: нужен очень эффективный радиатор с обдувом.");
}
//---------------------------------------------------------------------------
Пояснения
- Если требуемое Rрад ≤ 0 — корпус уже на пределе, радиатор не спасёт.
- Оценка площади эмпирическая, для алюминия в естественной конвекции.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.
Что дальше
Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.