ардуино и неадекватный шим.
- Войдите на сайт для отправки комментариев
Пнд, 12/05/2014 - 23:43
Не могу затавить 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() будут другие результаты.Еще переустановил по. Но увы. Может это проблемма платы или версии, вообщем жду любых мыслей. Пмогите разобраться человеку, который уже трижды пожалел о покупке ардуины)
Дык, а какая разница ардуина это или нет? Как вы думаете чем ардуина отличается от голого avr? Ответ: ничем.
А воообще, похоже на проблемы с питанием. Откуда и как вы питаете?
Причем питание может не хватать, как и "что-бы просто крутить", так и "на старте не хватает" (на старте движок-то хавает больше).
Если второе, то проверить это можно натыкав delay() escXXX.write(throttle). Сделать небольшую задержку между стартом движков.
Еще переустановил по. Но увы.
нафиг его(по) переустанавливать? - скачал зип-архив, распаковал в любую папку и пользуй по.
про AVR:я просто квадрокоптер делаю, есть идея, которую пока еще никто не воплотил и уже оценив, память контроллеров avr и просто их возможности склоняюсь к тому что все равно потом придется менять мозги, на что-то вроде STM32F1xx и еще сейчас начинаю учить асемблер, для полного углубления в процессы)
про питание: да возможно проблемма в этом, сейчас еще помозговал и примерно понял в чем беда, когда закончу с делами учебными попробую исправить) РЕАЛЬНО СПАСИБО leshak, ибо сам бы вряд-ли с этой стороны подошел)))
А по переустановил, ибо на форумах писли про улучшение библиотек серво, и просто иметь более позднюю врерсию всегда безопаснее)) БАГФИКСЫ)
А по переустановил, ибо на форумах писли про улучшение библиотек серво, и просто иметь более позднюю врерсию всегда безопаснее)) БАГФИКСЫ)
я вам на "форумах писли", что незачем переустанавливать, если требуется иная версия - распаковываете в папки arduino-1.Х.Х и пользуете, какую хотите версию.