ардуино и неадекватный шим.

mikke2
Offline
Зарегистрирован: 19.03.2014

Не могу затавить arduino uno исправно крутить 4 бесколекторных мотора на( то есть при подключении одного мотора все хрошо и работает нормально, два тоже норм и даже 3, но когда дело доходит до 4-х моторов, один гаснет, при перестановке контактов, та же ситуация, значит проблемма не в мотроах и esc) 

#include <Servo.h> 
 
//Create the 4 esc objects
Servo esc1;
Servo esc2;
Servo esc3;
Servo esc4;
 
//Esc pins
int escPin1 = 6;
int escPin2 = 5;
int escPin3 = 9;
int escPin4 = 10;
 
//Min and max pulse
int minPulseRate        = 1000;
int maxPulseRate        = 2000;
int throttleChangeDelay = 50;
 
//SETUP
void setup() {
  Serial.begin(9600);
  Serial.setTimeout(500);
  
  //Init escs
  initEscs();
}
 
//LOOP
void loop() {
  // Wait for some input
  if (Serial.available() > 0) {
    
    // Read the new throttle value
    int throttle = normalizeThrottle(Serial.parseInt());
    
    // Print it out
    Serial.print("Setting throttle to: ");
    Serial.println(throttle);
    
    // Change throttle to the new value
    changeThrottle(throttle);
  }
 
}
 
//Change throttle value
void changeThrottle(int throttle) {
  int currentThrottle = readThrottle();
  
  int step = 1;
  if(throttle < currentThrottle) {
    step = -1;
  }
  
  // Slowly move to the new throttle value 
  while(currentThrottle != throttle) {
    writeTo4Escs(currentThrottle + step);
    
    currentThrottle = readThrottle();
    delay(throttleChangeDelay);
  }
}
 
//Read the throttle value
int readThrottle() {
  int throttle = esc1.read();
  
  Serial.print("Current throttle is: ");
  Serial.print(throttle);
  Serial.println();
  
  return throttle;
}
 
//Change velocity of the 4 escs at the same time
void writeTo4Escs(int throttle) {
  esc1.write(throttle);
  
  
  esc2.write(throttle);
  
  
  esc3.write(throttle);
  
  
  
  esc4.write(throttle);
  
  
}
 
//Init escs
void initEscs() {
  esc1.attach(escPin1, minPulseRate, maxPulseRate);
  esc2.attach(escPin2, minPulseRate, maxPulseRate);
  esc3.attach(escPin3, minPulseRate, maxPulseRate);
  esc4.attach(escPin4, minPulseRate, maxPulseRate);
  
  //Init motors with 0 value
  writeTo4Escs(0);
}
 
//Start the motors
void startUpMotors() {
  writeTo4Escs(50);
}
 
// Ensure the throttle value is between 0 - 180
int normalizeThrottle(int value) {
  if(value < 0) {
    return 0;
    
  } else if(value > 180) {
    return 180;
  }
  
  return value;
}

использую сей код, почему один мотор перестает работать?! пробовал подключить SoftwareServo.h ожидал что при наличии функции refresh() будут другие результаты.Еще переустановил по. Но увы. Может это проблемма платы или версии, вообщем жду любых мыслей.  Пмогите разобраться человеку, который уже трижды пожалел о покупке ардуины)

leshak
Offline
Зарегистрирован: 29.09.2011

Дык, а какая разница ардуина это или нет?  Как вы думаете чем ардуина отличается от голого avr?  Ответ: ничем.

А воообще, похоже на проблемы с питанием. Откуда и как вы питаете?

Причем питание может не хватать, как и "что-бы просто крутить", так и "на старте не хватает" (на старте движок-то хавает больше).

Если второе, то проверить это можно натыкав delay() escXXX.write(throttle). Сделать небольшую задержку между стартом движков.

Клапауций
Offline
Зарегистрирован: 10.02.2013

mikke2 пишет:

Еще переустановил по. Но увы.

нафиг его(по) переустанавливать? - скачал зип-архив, распаковал в любую папку и пользуй по.

mikke2
Offline
Зарегистрирован: 19.03.2014

про AVR:я просто квадрокоптер делаю, есть идея, которую пока еще никто не воплотил и уже оценив, память контроллеров avr и просто их возможности склоняюсь к тому что все равно потом придется менять мозги, на что-то вроде STM32F1xx и еще сейчас начинаю учить асемблер, для полного углубления в процессы)  

про питание: да возможно проблемма в этом, сейчас еще помозговал и примерно понял в чем беда, когда закончу с делами учебными попробую исправить) РЕАЛЬНО СПАСИБО leshak, ибо сам бы вряд-ли с этой стороны подошел)))

mikke2
Offline
Зарегистрирован: 19.03.2014

А по переустановил, ибо на форумах писли про улучшение библиотек серво, и просто иметь более позднюю врерсию всегда безопаснее)) БАГФИКСЫ)

Клапауций
Offline
Зарегистрирован: 10.02.2013

mikke2 пишет:

А по переустановил, ибо на форумах писли про улучшение библиотек серво, и просто иметь более позднюю врерсию всегда безопаснее)) БАГФИКСЫ)

я вам на "форумах писли", что незачем переустанавливать, если требуется иная версия - распаковываете в папки arduino-1.Х.Х и пользуете, какую хотите версию.