ARDUINO сгорает mx1508

trofimkarmanov

✩✩✩✩✩✩✩
12 Апр 2025
4
0
Взываю о помощи, я никак не могу понять почему ничего не получается. Делаю наипростейшую машинку с наипростейшей схемой. у меня уже какой раз возникают просто неизвестные проблемы. в том числе и сейчас. я подключил все абсолютно правильно и точно, все перепроверил, поставил на тестировку. вроде все моторчики крутились как надо, нужное напряжение подавалось, и тут просто без дыма, без ничего, моторчики начинают работать, что то начинает кипеть и микросхемы взрываются с хлопком. вот тут даже видно на картинках как отлетели куски пластика. я вообще не понимаю как такое возможно.напряжение в цепи около 8 вольт. черный понижающий преобразователь до 5 вольт питает ардуино, 8 вольт от батарей идут напрямую в драйвера. все подключал точно и корректно. за отсуствием шим портов в достаточном количестве, комбинировал программный и аналоговый шимы. прикреплю сюда код


#include <SoftPWM.h>
const int IN1 = 2;
const int IN2 = 3;
const int IN3 = 4;
const int IN4 = 5;
const int IN5 = 6;
const int IN6 = 7;
const int IN7 = 9;
const int IN8 = 10;
int i = 0;
const bool hardwarePWMPins[] = {
false, false, false, true, false, true, true, false, false,
true, true, true, false, false, false, false, false, false, false, false
};
const int Engine1[2] = { IN1, IN2 };
const int Engine2[2] = { IN3, IN4 };
const int Engine3[2] = { IN5, IN6 };
const int Engine4[2] = { IN7, IN8 };
// const int Pin_Ox_1 = A2;
// const int Pin_Oy_1 = A3;
// const int Pin_Ox_2 = A4;
// const int Pin_Oy_2 = A5;
// const int Pin_Ox_3 = A4;
// const int Pin_Oy_3 = A5;
// const int Pin_Button = A1;
// int sensorValue = 0;
bool isHardwarePWM(int pin) {
if (pin >= 0 && pin < sizeof(hardwarePWMPins)) {
return hardwarePWMPins[pin];
}
return false;
}
void setup() {
SoftPWMBegin();
SoftPWMSet(IN1, 0);
SoftPWMSet(IN3, 0);
SoftPWMSet(IN6, 0);
pinMode(IN2, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IN5, OUTPUT);
pinMode(IN7, OUTPUT);
pinMode(IN8, OUTPUT);
Serial.begin(9600);
Serial.println("System started");
}
void loop() {
static unsigned long timer = 0;
if (millis() - timer >= 5000) {
timer = millis();
Serial.print("Action ");
Serial.print(i);
Serial.print(": ");
switch (i) {
case 0:
EngineControl(-255, Engine1);
Serial.println("Engine 1 ➔ FORWARD 100%");
break;
case 1:
EngineControl(127, Engine1);
Serial.println("Engine 1 ➔ BACKWARD 50%");
break;
case 2:
EngineControl(0, Engine1);
Serial.println("Engine 1 ➔ STOPPED");
break;
// Тестирование мотора 2
case 3:
EngineControl(-255, Engine2);
Serial.println("Engine 2 ➔ FORWARD 100%");
break;
case 4:
EngineControl(127, Engine2);
Serial.println("Engine 2 ➔ BACKWARD 50%");
break;
case 5:
EngineControl(0, Engine2);
Serial.println("Engine 2 ➔ STOPPED");
break;
// Тестирование мотора 3
case 6:
EngineControl(-255, Engine3);
Serial.println("Engine 3 ➔ FORWARD 100%");
break;
case 7:
EngineControl(127, Engine3);
Serial.println("Engine 3 ➔ BACKWARD 50%");
break;
case 8:
EngineControl(0, Engine3);
Serial.println("Engine 3 ➔ STOPPED");
break;
// Тестирование мотора 4
case 9:
EngineControl(-255, Engine4);
Serial.println("Engine 4 ➔ FORWARD 100%");
break;
case 10:
EngineControl(127, Engine4);
Serial.println("Engine 4 ➔ BACKWARD 50%");
break;
case 11:
EngineControl(0, Engine4);
Serial.println("Engine 4 ➔ STOPPED");
break;
case 12:
// Все моторы вперед 100%
EngineControl(-255, Engine1);
EngineControl(-255, Engine2);
EngineControl(-255, Engine3);
EngineControl(-255, Engine4);
Serial.println("All engines ➔ FORWARD 100%");
break;
case 13:
// Все моторы назад 50%
EngineControl(127, Engine1);
EngineControl(127, Engine2);
EngineControl(127, Engine3);
EngineControl(127, Engine4);
Serial.println("All engines ➔ BACKWARD 50%");
break;
case 14:
// Левая сторона вперед, правая назад (поворот)
EngineControl(-200, Engine1);
EngineControl(-200, Engine3);
EngineControl(200, Engine2);
EngineControl(200, Engine4);
Serial.println("Left side FORWARD, Right side BACKWARD (Rotation)");
break;
case 15:
// Разнонаправленное движение (имитация танка)
EngineControl(-200, Engine1);
EngineControl(200, Engine2);
EngineControl(200, Engine3);
EngineControl(-200, Engine4);
Serial.println("Tank-style rotation");
break;
case 16:
// Диагональное движение (если моторы расположены по углам)
EngineControl(-150, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(-150, Engine4);
Serial.println("Diagonal movement (forward-left)");
break;
case 17:
// Волновое движение (последовательный запуск)
EngineControl(-200, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 1 active");
break;
case 18:
EngineControl(0, Engine1);
EngineControl(-200, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 2 active");
break;
case 19:
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(-200, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 3 active");
break;
case 20:
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(-200, Engine4);
Serial.println("Wave movement - Engine 4 active");
break;
case 21:
// Все моторы остановлены
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("All engines ➔ STOPPED");
break;
}
i = (i >= 21) ? 0 : i + 1;
}
// int Ox_1 = DeadZone(map(analogRead(Pin_Ox_1), 0, 1023, -255, 255), 5);
// int Oy_1 = DeadZone(map(analogRead(Pin_Oy_1), 0, 1023, -255, 255), 5);
// int Ox_2 = DeadZone(map(analogRead(Pin_Ox_2), 0, 1023, -255, 255), 5);
// int Oy_2 = DeadZone(map(analogRead(Pin_Oy_2), 0, 1023, -255, 255), 5);
// int Ox_3 = DeadZone(map(analogRead(Pin_Ox_3), 0, 1023, -255, 255), 5);
// int Oy_3 = DeadZone(map(analogRead(Pin_Oy_3), 0, 1023, -255, 255), 5);
}
// int DeadZone(int Number, int DeadZone) {
// if (abs(Number) <= DeadZone) {
// return 0;
// }
// if (Number > 0) {
// return map(Number, DeadZone, 255, 0, 255);
// } else {
// return map(Number, -DeadZone, -255, 0, -255);
// }
// }
static void EngineControl(int ThrottleValue, const int Engine[2]) {
int IN1 = Engine[0];
int IN2 = Engine[1];
if (ThrottleValue > 0) {
if (isHardwarePWM(IN1)) {
analogWrite(IN1, ThrottleValue);
} else {
SoftPWMSet(IN1, ThrottleValue);
}
if (isHardwarePWM(IN2)) {
analogWrite(IN2, 0);
} else {
SoftPWMSet(IN2, 0);
}
return;
}
if (ThrottleValue < 0) {
if (isHardwarePWM(IN2)) {
analogWrite(IN2, abs(ThrottleValue));
} else {
SoftPWMSet(IN2, abs(ThrottleValue));
}
if (isHardwarePWM(IN1)) {
analogWrite(IN1, 0);
} else {
SoftPWMSet(IN1, 0);
}
return;
}
if (ThrottleValue == 0) {
if (isHardwarePWM(IN1)) {
analogWrite(IN1, 0);
} else {
SoftPWMSet(IN1, 0);
}
if (isHardwarePWM(IN2)) {
analogWrite(IN2, 0);
} else {
SoftPWMSet(IN2, 0);
}
return;
}
}
photo_2025-04-12_15-38-50.jpgphoto_2025-04-12_15-38-53.jpgphoto_2025-04-12_15-38-55.jpg


Заранее благодарю за любую помощь!
 

VAF

✩✩✩✩✩✩✩
15 Июл 2023
51
1
Москва
Было похожее. Схема для безотрывного питания ESP32. От зарядного устройства к аккумулятору, аккумулятор, повышающее и ESP через USB.Неделю проработали два комплекта, потом в одну ночь сразу обе ESP потеряли способность соединяться по USB. Теперь могу работать только по старой программе, но это не интересно.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
574
92
По моему скромному мнению драйвера очень слабые для моторов.
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
688
164
C++:
#include <SoftPWM.h>
const int IN1 = 2;
const int IN2 = 3;
const int IN3 = 4;
const int IN4 = 5;
const int IN5 = 6;
const int IN6 = 7;
const int IN7 = 9;
const int IN8 = 10;
int i = 0;
const bool hardwarePWMPins[] = {
false, false, false, true, false, true, true, false, false,
true, true, true, false, false, false, false, false, false, false, false
};
const int Engine1[2] = { IN1, IN2 };
const int Engine2[2] = { IN3, IN4 };
const int Engine3[2] = { IN5, IN6 };
const int Engine4[2] = { IN7, IN8 };
// const int Pin_Ox_1 = A2;
// const int Pin_Oy_1 = A3;
// const int Pin_Ox_2 = A4;
// const int Pin_Oy_2 = A5;
// const int Pin_Ox_3 = A4;
// const int Pin_Oy_3 = A5;
// const int Pin_Button = A1;
// int sensorValue = 0;
bool isHardwarePWM(int pin) {
if (pin >= 0 && pin < sizeof(hardwarePWMPins)) {
return hardwarePWMPins[pin];
}
return false;
}
void setup() {
SoftPWMBegin();
SoftPWMSet(IN1, 0);
SoftPWMSet(IN3, 0);
SoftPWMSet(IN6, 0);
pinMode(IN2, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(IN5, OUTPUT);
pinMode(IN7, OUTPUT);
pinMode(IN8, OUTPUT);
Serial.begin(9600);
Serial.println("System started");
}
void loop() {
static unsigned long timer = 0;
if (millis() - timer >= 5000) {
timer = millis();
Serial.print("Action ");
Serial.print(i);
Serial.print(": ");
switch (i) {
case 0:
EngineControl(-255, Engine1);
Serial.println("Engine 1 ➔ FORWARD 100%");
break;
case 1:
EngineControl(127, Engine1);
Serial.println("Engine 1 ➔ BACKWARD 50%");
break;
case 2:
EngineControl(0, Engine1);
Serial.println("Engine 1 ➔ STOPPED");
break;
// Тестирование мотора 2
case 3:
EngineControl(-255, Engine2);
Serial.println("Engine 2 ➔ FORWARD 100%");
break;
case 4:
EngineControl(127, Engine2);
Serial.println("Engine 2 ➔ BACKWARD 50%");
break;
case 5:
EngineControl(0, Engine2);
Serial.println("Engine 2 ➔ STOPPED");
break;
// Тестирование мотора 3
case 6:
EngineControl(-255, Engine3);
Serial.println("Engine 3 ➔ FORWARD 100%");
break;
case 7:
EngineControl(127, Engine3);
Serial.println("Engine 3 ➔ BACKWARD 50%");
break;
case 8:
EngineControl(0, Engine3);
Serial.println("Engine 3 ➔ STOPPED");
break;
// Тестирование мотора 4
case 9:
EngineControl(-255, Engine4);
Serial.println("Engine 4 ➔ FORWARD 100%");
break;
case 10:
EngineControl(127, Engine4);
Serial.println("Engine 4 ➔ BACKWARD 50%");
break;
case 11:
EngineControl(0, Engine4);
Serial.println("Engine 4 ➔ STOPPED");
break;
case 12:
// Все моторы вперед 100%
EngineControl(-255, Engine1);
EngineControl(-255, Engine2);
EngineControl(-255, Engine3);
EngineControl(-255, Engine4);
Serial.println("All engines ➔ FORWARD 100%");
break;
case 13:
// Все моторы назад 50%
EngineControl(127, Engine1);
EngineControl(127, Engine2);
EngineControl(127, Engine3);
EngineControl(127, Engine4);
Serial.println("All engines ➔ BACKWARD 50%");
break;
case 14:
// Левая сторона вперед, правая назад (поворот)
EngineControl(-200, Engine1);
EngineControl(-200, Engine3);
EngineControl(200, Engine2);
EngineControl(200, Engine4);
Serial.println("Left side FORWARD, Right side BACKWARD (Rotation)");
break;
case 15:
// Разнонаправленное движение (имитация танка)
EngineControl(-200, Engine1);
EngineControl(200, Engine2);
EngineControl(200, Engine3);
EngineControl(-200, Engine4);
Serial.println("Tank-style rotation");
break;
case 16:
// Диагональное движение (если моторы расположены по углам)
EngineControl(-150, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(-150, Engine4);
Serial.println("Diagonal movement (forward-left)");
break;
case 17:
// Волновое движение (последовательный запуск)
EngineControl(-200, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 1 active");
break;
case 18:
EngineControl(0, Engine1);
EngineControl(-200, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 2 active");
break;
case 19:
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(-200, Engine3);
EngineControl(0, Engine4);
Serial.println("Wave movement - Engine 3 active");
break;
case 20:
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(-200, Engine4);
Serial.println("Wave movement - Engine 4 active");
break;
case 21:
// Все моторы остановлены
EngineControl(0, Engine1);
EngineControl(0, Engine2);
EngineControl(0, Engine3);
EngineControl(0, Engine4);
Serial.println("All engines ➔ STOPPED");
break;
}
i = (i >= 21) ? 0 : i + 1;
}
// int Ox_1 = DeadZone(map(analogRead(Pin_Ox_1), 0, 1023, -255, 255), 5);
// int Oy_1 = DeadZone(map(analogRead(Pin_Oy_1), 0, 1023, -255, 255), 5);
// int Ox_2 = DeadZone(map(analogRead(Pin_Ox_2), 0, 1023, -255, 255), 5);
// int Oy_2 = DeadZone(map(analogRead(Pin_Oy_2), 0, 1023, -255, 255), 5);
// int Ox_3 = DeadZone(map(analogRead(Pin_Ox_3), 0, 1023, -255, 255), 5);
// int Oy_3 = DeadZone(map(analogRead(Pin_Oy_3), 0, 1023, -255, 255), 5);
}
// int DeadZone(int Number, int DeadZone) {
// if (abs(Number) <= DeadZone) {
// return 0;
// }
// if (Number > 0) {
// return map(Number, DeadZone, 255, 0, 255);
// } else {
// return map(Number, -DeadZone, -255, 0, -255);
// }
// }
static void EngineControl(int ThrottleValue, const int Engine[2]) {
int IN1 = Engine[0];
int IN2 = Engine[1];
if (ThrottleValue > 0) {
if (isHardwarePWM(IN1)) {
analogWrite(IN1, ThrottleValue);
} else {
SoftPWMSet(IN1, ThrottleValue);
}
if (isHardwarePWM(IN2)) {
analogWrite(IN2, 0);
} else {
SoftPWMSet(IN2, 0);
}
return;
}
if (ThrottleValue < 0) {
if (isHardwarePWM(IN2)) {
analogWrite(IN2, abs(ThrottleValue));
} else {
SoftPWMSet(IN2, abs(ThrottleValue));
}
if (isHardwarePWM(IN1)) {
analogWrite(IN1, 0);
} else {
SoftPWMSet(IN1, 0);
}
return;
}
if (ThrottleValue == 0) {
if (isHardwarePWM(IN1)) {
analogWrite(IN1, 0);
} else {
SoftPWMSet(IN1, 0);
}
if (isHardwarePWM(IN2)) {
analogWrite(IN2, 0);
} else {
SoftPWMSet(IN2, 0);
}
return;
}
}
Зачем функция EngineControl возвращает статическое ничего? Зачем каждый раз в loop инициализируется пересоздается переменная temp = 0, сделайте её глобальной и не придется подпирать её костылём "static". Зачем массив Engine в функции EngineControl имеет модификатор const, если при каждом вызове в него нужно перезаписывать данные?
 
Изменено:

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,445
987
59
Марий-Эл
Да похуй. Пусть сгорает.
Люди, которые думают, что сделают ракету лучше чем у Илона Маска не имеют права на жизнь.
Вы думаете, что увидев паяльник первый раз сделаете лучше, чем у других?
Ошибаетесь.
Не читая мануалов. Не смысля ничего в электронике, вы пытаетесь что то сделать?
Захерачив кучу ошибок. Не способные выложить код в читаемом формате. В коде куча строк строк закомментированных и не подлежащих компиляции?
Зачем ??????
Что бы получить правильный ответ, нужно задать правильный вопрос.
Вы этого даже не умеете !!!!!!
Потерянное поколение.
Даже мысль сформулировать не можете.
Студенты стали скучными. Даже помогать не хочется.
 

trofimkarmanov

✩✩✩✩✩✩✩
12 Апр 2025
4
0
@Эдуард Анисимов, По твоему люди добиваются успехов без ошибок? Или лучше бухать, хуярить наркоту, чем пытаться разобраться в электронике которую мне даже не преподают. Ты вдумайся в свои слова, вдумайся в то, что ты навыдумывал. Ебланоид, я хоть раз образно сказал что хочу сделать лучше чем у профессионалов(Люди, которые думают, что сделают ракету лучше чем у Илона Маска не имеют права на жизнь.)? я хоть раз сказал что увидев паяльник в первый раз сделаю лучше чем у других? Я так не думаю и никогда не думал, я думаю что я начинающий который допускает ошибки начинающего, не более. и мой вопрос даже близко на это намека не содержит.Ты в курсе сколько я перелопатил информации по своим возможностям чтобы решить проблему самому? форум последняя надежда. Ты пришел на этот вопрос чтобы навязать свое мнение,рассказать всем о своем профессионализме, что доказывается тем, что ты буквально выдумал мои слова, которые я не говорил. Правильный ответ, несмотря на то, что я начинающий, у людей выше тебя, у этих людей есть умения и навыки, и нет завышенного чсв как у тебя. они в отличие от тебя попытались помочь начинающему, я извлеку из их слов полезные для себя вещи, а из твоих слов, я извлеку только то, насколько жалкое ты посмешище, которое пытается найти повод показать насколько много оно все таки знает. Помогать не хочется? Иди блять значит своей дорогой и не помогай, не высирай нахуй никому не нужное мнение о потерянном поколении, оставь свои проблемы в жизни при себе. Мир до и после этого высера не изменится никак. Бесполезнее и позорнее сообщения этого не видел. боже.
 

trofimkarmanov

✩✩✩✩✩✩✩
12 Апр 2025
4
0
@bort707,спасибо что натолкнули на мысль. и я похоже понял почему это произошло, когда моторы стартуют останавливаются они катаются по столу, в один из таких запусков один врезался в контакты другого и 2 моста смежных на платах сгорели.