Ардуино нано.управление шим мощной нагрузкой

Не могу разобраться с правильной схемой и расчетами обвязки.Дано: шим на ардуино нано опторазвязка PC817 дальше мосфет IRF1404 , нагрузка электровентилятор 12 вольт 24 ампера ,диод шотки. управление от штатного датчика температуры.Даже подходящей схемы не нашел. Может кто поможет, обьяснит как расчитать сопротивления обвязки.

‘’’

 // Конфигурация пинов
const int fanPwmPin = 9;        // Пин ШИМ для управления вентилятором
const int tempSensorPin = A0;    // Пин датчика температуры

// Параметры работы
const float tempMinPWM = 65.0;   // Температура включения вентилятора на 20 % (°C)
const float tempMaxPWM = 80.0;     // Температура включения вентилятора на 100 % (°C)
const int pwmMin = 51;             // Минимальная ШИМ-заполненность: 20 % от 255 ≈ 51
const int pwmMax = 255;            // Максимальная ШИМ-заполненность: 100 %

// Характеристики датчика температуры
const float voltageAt100C = 0.7;  // Напряжение при 100 °C (В)
const float voltageAt20C = 3.5;    // Напряжение при 20 °C (В)

// Переменные
float currentTemp = 0;
int pwmValue = 0;

void setup() {
pinMode(fanPwmPin, OUTPUT);
Serial.begin(9600);  // Для отладки
analogReference(DEFAULT);  // Опорное напряжение 5 В (стандартное для Arduino Nano)
}

void loop() {
readTemperature();        // Считываем температуру
calculatePWM();         // Рассчитываем значение ШИМ
applyPWM();             // Подаём сигнал на вентилятор
printDebugInfo();       // Выводим отладочную информацию
delay(1000);          // Задержка 1 с между измерениями
}

// Функция считывания температуры с учётом характеристик датчика
void readTemperature() {
int sensorValue = analogRead(tempSensorPin);
float voltage = sensorValue * (5.0 / 1023.0);  // Преобразование в напряжение (0–5 В)

// Линейная интерполяция для расчёта температуры
// При 20 °C → 3.5 В, при 100 °C → 0.7 В
if (voltage >= voltageAt20C) {
currentTemp = 20.0;  // Если напряжение выше 3.5 В, считаем температуру 20 °C
} else if (voltage <= voltageAt100C) {
currentTemp = 100.0; // Если напряжение ниже 0.7 В, считаем температуру 100 °C
} else {
// Расчёт температуры по линейной зависимости
float tempRange = 100.0 - 20.0;
float voltageRange = voltageAt100C - voltageAt20C;
currentTemp = 20.0 + (voltage - voltageAt20C) * tempRange / voltageRange;
}
}

// Расчёт значения ШИМ в зависимости от температуры
void calculatePWM() {
if (currentTemp < tempMinPWM) {
pwmValue = 0;  // Вентилятор выключен, если температура ниже 65 °C
} else if (currentTemp >= tempMaxPWM) {
pwmValue = pwmMax;  // Максимальная скорость (100 %), если температура ≥ 80 °C
} else {
// Линейная зависимость между tempMinPWM и tempMaxPWM
float tempRange = tempMaxPWM - tempMinPWM;
float pwmRange = pwmMax - pwmMin;
pwmValue = pwmMin + (int)((currentTemp - tempMinPWM) * pwmRange / tempRange);
}
}

// Подача ШИМ-сигнала на вентилятор
void applyPWM() {
analogWrite(fanPwmPin, pwmValue);
}

// Вывод отладочной информации в Serial Monitor
void printDebugInfo() {
Serial.print(“Напряжение датчика: “);
Serial.print(analogRead(tempSensorPin) * (5.0 / 1023.0), 2);
Serial.print(” В, Температура: “);
Serial.print(currentTemp, 1);
Serial.print(” °C, ШИМ: “);
Serial.print(pwmValue);
Serial.print(” (”);
Serial.print((pwmValue * 100.0) / 255.0, 1);
Serial.println(“% )”);
}

‘’’

1 - вставьте код по правилам форума.

2 - мы тоже не можем, схему тоже покажите.
3 - более вменяемо объясните, чего вы хотите от форума.

Для того, чтобы что-то рассчитать, нужны исходные данные.
В данном случае для начала необходимы входная емкость затвора и характерное время ШИМ.
В качестве характерного времени ШИМ можно взять период ШИМ, деленный на максимальное количество шагов.
Номиналы резисторов следует выбирать так, чтобы постоянная времени с входной емкостью была намного меньше характерного времени ШИМ.
Ну и заодно по справочнику проверить, что время срабатывания оптрона также либо меньше, либо одного порядка с постоянной времени с входной емкостью.

Вы планируете шимить эту нагрузку? Электромагнитные помехи будут же очень большими.

Может проще посмотреть в сторону 3х фазных моторов и ПЧ управление?

И заменить линейное регулирование на ПИД.

Может и проще(хотя при чём тут енто), но задание не студент выбирает, а препод :slightly_smiling_face:

Хренасе вентилятор. У Карлсона отжал чтоли?

Электровентилятор Транспортер Т4. Схему собрал по другому. Как сделать картинку не знаю.

Какую схему!? Зачем по другому!?

Как выражаются художники, - “Картины пишут”(художники).

Если вам для себя любимого, то нафига вам “Может кто поможет, обьяснит как расчитать сопротивления обвязки”? Что мешает взять готовую схему и зачем вам схема для p-канального при желании использовать IRF1404? Сколько вопросов! Ужасть.

как то так.собрал но не проверил

«Рванёт»! Нельзя так делать.

Можете пояснить?

Что будет с переходом эммитер-коллектор оптопары, когда он откроется?

С питания на коллектор сопротивление нужно ставить? Как расчитать?

ЗЫ: Скачай и изучи:

смысл рисовать схему когда в принципе не рабочее решение, для этого транзистора драйвер нужен, оптопара не вытянет

FAN3111CSX такой подойдет? тогда без оптопары? гальваническая развязка?

конечно, только он неинвертирующий

в чем суть? какой лучше?

твоему транзистору, он тяжёлый по затвору, нужен драйвер на ток миллиампер 200-300, этот на 2 ампера, потянет влёгкую, но неинвертирующий, то-есть оптопара открывать его будет 0, цепь затвора обычная 10 ом 10 килоом думаю вполне подойдёт, а вот снаберы-хераберы тут надо знать нагрузку, может TVS диод вольт на 18-20 между истоком-стоком воткнуть ну и естественно нагрузку мощным шоттки зашунтировать

проще взять схему BOOMа ,заменить сопротивление и мосфет на IRF1404 ? на 24 ампера радиатор нужен будет. большой?