Управление контроллером ESC через Ардуино

Kisar
Offline
Зарегистрирован: 23.01.2021

Всем доброго времени суток! Прошу помочь.

Собираю пушку для ребенка пульками Nerf. Подавать патроны буду с помощью сервомотора, а запускать их буду с помощью бесколлекторного двигателя. Искал в интернете код для управления и нашел.

Получилось вот так:

#include <Servo.h>
// создание объекта
Servo motor;
Servo myservo;  // create servo object to control a servo

//Пин подключения мотора
int mot_pin = 9;
//Максимальное значение ШИМ 2.3 мс
int max_pwm = 2300;
//Минимальное значени ШИМ 0.8 мс
int min_pwm = 800;

void setup()
{
  // запуск последовательного порта
  Serial.begin(9600);
  myservo.attach(3);
  // инициализация мотора
  motor.attach(mot_pin);
  // калибровка
  motor.writeMicroseconds(max_pwm);
  delay(2000);
  motor.writeMicroseconds(min_pwm);
  delay(2000);

}

void loop()
{

  motor.writeMicroseconds(1500);
  delay(1000);
  myservo.write(135);
  delay(1000);
  myservo.write(0);
  delay(1000);
}

Но к сожалению никак не могу понять как заставить вращаться двигатель и при этом подавать патроны. 

Заранее спасибо!

 

Kisar
Offline
Зарегистрирован: 23.01.2021

Забыл добавить! Моторы - BR2205, контроллер - bidireetional 20A 2s-4s.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Схему нарисуйте. Возможно мотор неправильно подключили. Или контроллер.

А предварительно тестером пройдитесь по всем соединениям. И по блоку питания, кстати.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

есть вероятность что ESC настроен для работы в реверсном режиме, тогда значение 1500 это нейтраль, 2000, вперёд, 1000 - назад, да и программа калибровки написана неправильно!!!

Kisar
Offline
Зарегистрирован: 23.01.2021

Постарался нарисовать, но не сказать что хорошо получилось(

Питание всей схемы 5 вольт.

Kisar
Offline
Зарегистрирован: 23.01.2021

И еще. Пока не включаю в код сервопривод двигатель запускается, но работает несколько секунд и отключается и так по кругу

 

про 1000 - 2000 сейчас попробую, спасибо))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
// скетч калибровки регуляторов ESC
// напряжение питания подаваемое на регулятор через цепь простейшего параметрического
// стабилизатора на 5 вольт через резистор 1 ком подать на mot_vccPin притянутый к GND
// через резистор 10 ком
// Калибровка, соединить всё по схеме
// 1. Подать питание на ардуино
// 2. Подать питание на мотор
// 3. мотор пропел одной тональностью, затем второй, через две секунды можно отключать
//    регулятор откалиброван на значения 1000 - 2000 (стандартные значения)


#include <Servo.h>
Servo motor;

//Пин подключения мотора
int mot_pin = 9;
int mot_vccPin = 10;

//Максимальное значение ШИМ 2.0 мс
int max_pwm = 2000;
//Минимальное значени ШИМ 1.0 мс
int min_pwm = 1000;

void setup()
{
  // запуск последовательного порта
  Serial.begin(115200);

  // инициализация мотора
  motor.attach(mot_pin);
  motor.writeMicroseconds(min_pwm);

  // калибровка
  while (!digitalRead(mot_vccPin)); // висим в цикле пока не подадим на регулятор питание
  delay(3000);
  motor.writeMicroseconds(max_pwm);
  delay(3000);
  motor.writeMicroseconds(min_pwm);
  delay(2000);
  Serial.println("Регулятор мотора откалиброван");

}

void loop()
{
  //Крутимся в цикле - мотор откалиброван и остановлен
}

 

Kisar
Offline
Зарегистрирован: 23.01.2021

Огромное спасибо! Сейчас буду пробовать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kisar пишет:

Огромное спасибо! Сейчас буду пробовать.

не проверял, так что результаты в студию, если что не так - поправлю
PS если есть БЭК на регуляторе 5 вольт  на пин mod_vccPin можно взять с него

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Kisar пишет:

И еще. Пока не включаю в код сервопривод двигатель запускается, но работает несколько секунд и отключается и так по кругу

Начните с того, что запитайте всю электромеханику от отдельного (более мощного) блока питания, а не от Ардуино.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Получилось?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я думаю что не надо программировать то что не надо программировать.
Купите "turnigy 9x" с приёмником, желательно старую на
Мега2560.
Недавно брал с тремя приемниками коллеге за 50 евро.
Катер он решил переделать двухмоторный без заднего хода.
Сервы и моторы подключаются втыканием разъёмов.
Максимум что вручную сделать - если захочется несколько реле включать то надо наТини13 платку собрать, прошивок и скетчей полный интернет.
Настраивается на компе , можно ваять любые чудеса.
В программе есть симулятор, очень помогает при настройке.
Программа называется eepe
http://www.er9x.com/
Катера, самолёты, коптеры, машинки и всё что угодно.

Kisar
Offline
Зарегистрирован: 23.01.2021

trembo пишет:
Я думаю что не надо программировать то что не надо программировать. Купите "turnigy 9x" с приёмником, желательно старую на Мега2560. Недавно брал с тремя приемниками коллеге за 50 евро. Катер он решил переделать двухмоторный без заднего хода. Сервы и моторы подключаются втыканием разъёмов. Максимум что вручную сделать - если захочется несколько реле включать то надо наТини13 платку собрать, прошивок и скетчей полный интернет. Настраивается на компе , можно ваять любые чудеса. В программе есть симулятор, очень помогает при настройке. Программа называется eepe http://www.er9x.com/ Катера, самолёты, коптеры, машинки и всё что угодно.

Спасибо, но очень хочется на ардуино сделать чтобы была большая гибкость! да и просто интересно)

Kisar
Offline
Зарегистрирован: 23.01.2021
// скетч калибровки регуляторов ESC
// напряжение питания подаваемое на регулятор через цепь простейшего параметрического
// стабилизатора на 5 вольт через резистор 1 ком подать на mot_vccPin притянутый к GND
// через резистор 10 ком
// Калибровка, соединить всё по схеме
// 1. Подать питание на ардуино
// 2. Подать питание на мотор
// 3. мотор пропел одной тональностью, затем второй, через две секунды можно отключать
//    регулятор откалиброван на значения 1000 - 2000 (стандартные значения)


#include <Servo.h>
Servo motor;

//Пин подключения мотора
int mot_pin = 1;
//int mot_vccPin = 10;

//Максимальное значение ШИМ 2.0 мс
int max_pwm = 2000;
//Минимальное значени ШИМ 1.0 мс
int min_pwm = 1000;

void setup()
{
  // запуск последовательного порта
  Serial.begin(115200);

  // инициализация мотора
  motor.attach(mot_pin);
  motor.writeMicroseconds(min_pwm);

  // калибровка
 // while (!digitalRead(mot_vccPin)); // висим в цикле пока не подадим на регулятор питание
//  delay(3000);
  motor.writeMicroseconds(max_pwm);
  delay(3000);
  motor.writeMicroseconds(min_pwm);
  delay(2000);
  Serial.println("Регулятор мотора откалиброван");

}

void loop()
{
  motor.writeMicroseconds(min_pwm);
  delay(1000);
  //Крутимся в цикле - мотор откалиброван и остановлен
}

Всем доброго времени суток! За код спасибо, но ничего не получилось( Он ведет себя странно. Сначала приветствует пиканьем, потом один "пик" и молчит. Если перезагрузить контроллер то он "пикает" второй раз, запускает двигатель и выключает его. Очень странное поведение.

Сейчас попробую залить видео. Только я убрал проверку питания, неудобно ее делать(

 

 

А вот и видео

 

https://1drv.ms/v/s!Ar7NPEo38wS2he1ObAYqhJUya0VPJQ?e=yLlRrI

Kisar
Offline
Зарегистрирован: 23.01.2021

andriano пишет:

Kisar пишет:

И еще. Пока не включаю в код сервопривод двигатель запускается, но работает несколько секунд и отключается и так по кругу

Начните с того, что запитайте всю электромеханику от отдельного (более мощного) блока питания, а не от Ардуино.


Электроника и мотор записаны от ЛБП 3005, так что все должно хватать)

Я так на схеме нарисовал потому что он выдает ошибку при подключении сервомотора к батарейке так как она на 9 вольт)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Полез посмотреть, что за регулятор Вы приобрели - это худшее, что можно было выбрать )))

Технические характеристики Регулятора скорости Bidirectional 20A 2-4s UBEC 2A 5V:

  • Его можно использовать в автомобилях, лодках, и самолетах.
  • Двунаправленное вращение мотора 1к1, без тормоза, прямой реверс, быстрый отклик.
  • Не требует калибровки.
  • Не программируется.

Примечание:

1. Использование на лодках и автомобилях (режим с реверсом):

  • в центральном положении мотор не вращается (нейтральное положение)
  • уменьшение газа - вращение в обратном направлении
  • Увеличение газа - вращение в прямом направлении

2. Использование на самолетах (Весь стик газа регуляровка в одном направлении) - возможно только применение в аппаратурах позволяющих изменять кривую газа, чтобы сдвинуть значения уровня газа в диапазон 50-100%

 

Вывод - ставим нейтраль - это 1500, вперёд 2000, назад 1000, дальше думайте, как с этим жить )))

Kisar
Offline
Зарегистрирован: 23.01.2021

Огонь! Дай вам бог здоровья! Сейчас побегу проверять)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kisar пишет:

Огонь! Дай вам бог здоровья! Сейчас побегу проверять)

запитать все можно от UBEC 2ампера 5 вольт регулятора и серву и ардуину

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

trembo пишет:
Катер он решил переделать двухмоторный без заднего хода.

катер, двух моторный и без раздрая? некошерно )))

Kisar
Offline
Зарегистрирован: 23.01.2021
#include <Servo.h>
// создание объекта
Servo motor;
Servo myservo;  // create servo object to control a servo

//Пин подключения мотора
int mot_pin = 1;
//Максимальное значение ШИМ 2.3 мс
int max_pwm = 2000;
//Минимальное значени ШИМ 0.8 мс
int min_pwm = 1500;

void setup()
{
  // запуск последовательного порта
  Serial.begin(9600);
  myservo.attach(3);
  // инициализация мотора
  motor.attach(mot_pin);
  // калибровка
  motor.writeMicroseconds(max_pwm);
  delay(2000);
  motor.writeMicroseconds(min_pwm);
  delay(2000);

}

void loop()
{

  motor.writeMicroseconds(1600);
  delay(1000);
  motor.writeMicroseconds(1500);

}

Спасибо, все получилось! Вот только теперь я его остановить не могу(((

 

 

 

Дико извиняюсь!))) забыл delay(1000) добавить.

 

ОГРОМНОЕ СПАСИБО за помощь!

 

А регулятор взял самый дешевый) а то и так двигатели вышли 2500 за 4 штуки, решил немного сэкономить)

Kisar
Offline
Зарегистрирован: 23.01.2021

А это как????? Это выход 3-пин из регулятора? Он с стабилизатором напряжения?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

чёрный - минус, красный - +5вольт, на оранжевый подаём PWM, для работы машинки только один аккумулятор и потребуется, я бы взял 2S - 3S

Kisar
Offline
Зарегистрирован: 23.01.2021

Блин, круто. не знал. Спасибо!

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

ua6em пишет:

trembo пишет:
Катер он решил переделать двухмоторный без заднего хода.

катер, двух моторный и без раздрая? некошерно )))


Самое смешное что при размере 70 сантиметров, пластик,
цена была 170 евро, ему отдали за 80.
Загнав один раз в кувшинки и сплавав за ним просит меня сделать задний ход.
Аппа на 25 мегагерц.
Я из жалости сказал: оставляем только моторы, а все остальное на помойку.
Ну и тут Турнига за 50 подвернулась.
Регули с реверсом уже приехали, если бы не ковид может быть и собрал бы уже.
Кстати регули брал попроще, пока для пробы.
У него же моторчики обычные коллекторные.