Подключение "модельного" регулятора хода.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Подключение "модельного" регулятора хода.

Сообщение Marvin » 26 апр 2011, 11:28

Имеется RC-модель Zaboon. Соответственно там стоит регулятор хода для коллекторного двигателя и рулевая серва. С сервой вроде как разобрался. С ходовым же двигателем не удалось. Если его регулятор подключить вместо сервы, то он крутит колеса в одну, затем в другую сторону на максимальных оборотах. Про ШИМ читал, но до конца не осознал. Есть описание работы регулятора хода. В котором написано:
Управление регулятором осуществляет канальный импульс с приемника аппаратуры радиоуправления. Напомним его параметры: период - 20 мс, длительность изменяется от 1 до 2 мс. В простейшем случае в задачу регулятора входит регулирование потока мощности от аккумулятора к двигателю. При длительности канального импульса 1 мс - двигатель выключен, при 2 мс - двигатель развивает максимальную мощность. В промежутке мощность плавно изменяется.
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 12:20

Чем управляете? Ардуиной?

Добавлено спустя 55 секунд:
И дайте точное название регулятора, а не ссылку на обзорную статью. Что за двигатель? Трехфазный бесколлекторный?

Добавлено спустя 2 минуты 24 секунды:
http://www.rcdesign.ru/reviews/auto/kyosho_zaboon
Это машинка. Машинка обычно управляется спец-аппаратурой - пистолетом. Газ регулируется курком. В нейтральном положении (длительность импульса 1,5мс) - двигатель выключен. В крайних положениях - 1 и 2 мс - полные обороты соответственно вперед и назад.

Добавлено спустя 1 минуту 15 секунд:
Вкурите внимательно эту картинку:
Изображение
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение boez » 26 апр 2011, 12:24

Там же написано, что коллекторный :) И судя по описанию - реверсивный.
Что-то не так значит. А, еще регуляторы хода бывают с всякими умностями, что-то там надо делать с ручкой газа при включении чтоб он нормально заработал. Читай инструкцию по регулятору внимательно. В данном контексте ШИМ и канальные импульсы - это одно и то же. Показывают как раз положение "ручки газа", 1 мс - крайнее нижнее, 2 мс - крайнее верхнее, 1.5 мс - среднее.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 12:26

С ручкой газа - это калибровка. Обычно они уже имеют некую предкалибровку, но если нет, то они истошно орут.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение Marvin » 26 апр 2011, 12:44

boez писал(а):Там же написано, что коллекторный :) И судя по описанию - реверсивный.
В данном контексте ШИМ и канальные импульсы - это одно и то же. Показывают как раз положение "ручки газа", 1 мс - крайнее нижнее, 2 мс - крайнее верхнее, 1.5 мс - среднее.

Да, двигатель коллекорный, реверсивный. На пульте есть калибровка. Вращением резистора нужно добиться, что бы машина стояла на месте.
Покажите кусок скейча для генерации 1, 1.5, 2 мс. импульсов.
При работе с сервой, тоже применяется ШИМ, чем в данном случае является pos ? А delay(15) нужен что бы серва успела отработать предидущую комманду?

Код: Выделить всё
void loop()
{
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 12:53

http://arduino.cc/en/Tutorial/Knob


Code

Код: Выделить всё
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение nsk-racer » 26 апр 2011, 13:49

Pos это угол сервы 0 минимум 180 максимум, в твоём случаи 90 это не едет, 180 полный вперёд и 0 полный назад у регулятора скорости модельного
Мой блог о роботах http://robo-world.ru
nsk-racer
 
Сообщения: 141
Зарегистрирован: 08 дек 2010, 19:27
Откуда: Новосибирск
прог. языки: C и PHP
ФИО: Павел

Re: Подключение "модельного" регулятора хода.

Сообщение boez » 26 апр 2011, 13:50

Marvin писал(а):При работе с сервой, тоже применяется ШИМ, чем в данном случае является pos ? А delay(15) нужен что бы серва успела отработать предыдущую команду?

pos - число от 0 до 180, некие "условные градусы", которое похоже жестко соответствует диапазону от 1 до 2 мс, если верить описанию команды write(). Соответственно для 1.5 мс будет pos=90. Есть еще writeMicroseconds(), которая принимает сразу микросекунды. Кстати, приведенный код вызывает плавный поворот сервы из крайнего левого положения в крайнее правое и обратно, а у регулятора хода это как раз будет вращение 100% назад, а потом плавный переход через стоп к вращению 100% вперед, ну и обратно.

В обшем соответствие такое:
1 мс - pos=0 ручка газа полный назад - серва в крайнем положении против часовой - регулятор полный назад
1.5 мс - pos=90 ручка газа посередине - серва в среднем положении - регулятор стоп
2 мс - pos=180 ручка газа полный вперед - серва в крайнем положении по часовой - регулятор полный вперед

А delay(15) нужен для плавности. 15*180 = 2.7 сек, вот за это время серва совершит полный поворот слева направо, который на самом деле будет состоять из "ступенек" величиной в 1 условный градус и длительностью в 15 миллисекунд. Кстати, это значит что реально вообще не все эти ступеньки до сервы дойдут, ведь она получает задание раз в 20 мс. Но это не страшно.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Подключение "модельного" регулятора хода.

Сообщение Marvin » 26 апр 2011, 15:25

Взял стандартный Knob, добавил вывод в serial port значения val, которое идет на регулятор хода. Выяснил, что при val=98 двигатель начинает работать. Если крутить дальше резистор 6,8кОм, то обороты резко начинают расти, примерно до 120, на слух. Но и "стартовых" 98 уже много. Пробовал увеличить delay, обороты падают, и возникает нестабильность. При delay=60 крутится не быстро, но через пару минут обороты упали совсем и двигатель начал дергаться.
З.Ы. в другою сторону двигатель работает при val=89-67.

Код: Выделить всё
#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  Serial.begin(9600);           // set up Serial library at 9600 bps
}

void loop()
{
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  val = map(val, 0, 1023, 0, 179);     // scale it to use it with the servo (value between 0 and 180)
  myservo.write(val);                  // sets the servo position according to the scaled value
  Serial.println(val);  // prints hello with ending line break
  delay(15);                           // waits for the servo to get there
}
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 15:49

Ну и что? ТС удовлетворен или у него вопросы?
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение Marvin » 26 апр 2011, 16:09

dccharacter писал(а):Ну и что? ТС удовлетворен или у него вопросы?
Действительно ли 98 это минимум или я что-то не так делаю. Кстати, пульт-то есть, как можно проснифить сигнал с приемника?
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 16:23

Marvin писал(а):
dccharacter писал(а):Ну и что? ТС удовлетворен или у него вопросы?
Действительно ли 98 это минимум или я что-то не так делаю. Кстати, пульт-то есть, как можно проснифить сигнал с приемника?

осциллографом.
как это минимум? Минимум - это 0.

Добавлено спустя 44 секунды:
кстати, доснифаетесь, сожжете приемник.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение Marvin » 26 апр 2011, 16:50

dccharacter писал(а):
Marvin писал(а):
dccharacter писал(а):Ну и что? ТС удовлетворен или у него вопросы?
Действительно ли 98 это минимум или я что-то не так делаю. Кстати, пульт-то есть, как можно проснифить сигнал с приемника?

осциллографом.
как это минимум? Минимум - это 0.

Имеется ввиду установка минимальной скорости для данной связки регулятор-двигатель.

dccharacter писал(а):кстати, доснифаетесь, сожжете приемник.
Такой осциллограф не сожжет приемник?

Еще вопросы: при включении питания модели кратковременно дергается двигатель, не надо ли поставить диод, что бы такие всплески в Arduino не попадали?
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

Re: Подключение "модельного" регулятора хода.

Сообщение dccharacter » 26 апр 2011, 17:10

1. В регуляторе есть все необходимые всплескоподавители
2. Жжет не осциллограф, жгут руки и голова (не в обиду)
3. "Имеется ввиду установка минимальной скорости для данной связки регулятор-двигатель." Вы не мудрите, вы пальцем покажите. Просто и по-русски, для домохозяек - что такое "минимум". Изучите картинку выше по ветке.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Подключение "модельного" регулятора хода.

Сообщение Marvin » 27 апр 2011, 03:03

dccharacter писал(а):1. В регуляторе есть все необходимые всплескоподавители
Согласен, приемник же жив до сих пор :)
dccharacter писал(а):2. Жжет не осциллограф, жгут руки и голова (не в обиду)
Плавали, знаем...
dccharacter писал(а):3. "Имеется ввиду установка минимальной скорости для данной связки регулятор-двигатель." Вы не мудрите, вы пальцем покажите. Просто и по-русски, для домохозяек - что такое "минимум". Изучите картинку выше по ветке.
Как установить минимальную скорость вращения двигателя.

Подключил другие регулятор-двигатель от HPI Wheely King. Интересная картина нарисовалась:
val - результат
89 - вой, двигатель стоит.
86 - начало вращения с воем
84 - нормальная работа
27 - примерно полный газ (на слух).
24 - медленно, без воя, с небольшой нестабильностью оборотов.

103 - писк
104 - старт
170 - примерный максимум
176 - стоп


На слух не удобно максимальную скорость отследить. Собрал схему на светодиоде и фоторезисторе, написал скетч, надо теперь на колесо бумажный диск прикрепить с вырезанным сектором и замерить скорости вращения при разных значениях val.
Использованы образцы скетчей Blink без delay и Практическое программирование Arduino/CraftDuino - фоторезистор. Итак:

Код: Выделить всё
/*
* Photoresistor
* тестовый скетч для работы с фоторезистором
*/

int photoPin = 0;  // фоторезистор подключен 0-му аналоговому входу
int ledPin = 13;    // Для красоты
int val = 0;       // переменная для хранения значения входного напряжения
int count = 0;    // количество срабатываний
long previousMillis = 0;   // здесь будет храниться время последнего замера
long interval = 1000;      // интервал замера в миллисекундах
bool isCaught = false;     // Было ли срабатывание на прошлом замере

void setup()
{
  Serial.begin(9600);
}

void loop()
{
   if (millis() - previousMillis > interval)
   {
    previousMillis = millis();   // Запоминаем текущее время
    Serial.println(count);       // Выводим результат
    count = 0;                  //Сбрасываем счетчик.
   }

  val = analogRead(photoPin);  // считываем значение с фоторезистора
  val = val/4;                 // конвертируем из 0-1023 к 0-255
  if(val > 100)
  {
      if(!isCaught)           //
      {
          digitalWrite(ledPin, HIGH); // Ёлочка, гори.
          count++;                   // Увеличиваем счетчик
          isCaught = true;           // Что бы не посчитать еще раз.
      }
     
  }
  else
  {
      digitalWrite(ledPin, LOW);    // Выключаем
      isCaught = false;             // Готово к следующему срабатыванию.
  }
}
Аватара пользователя
Marvin
 
Сообщения: 40
Зарегистрирован: 11 апр 2011, 21:31
Откуда: Россия, Москва, Ярославль
прог. языки: Кроме C# и Basic

След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21