modesw

Переключатель режимов ардупилота

Описание самой последней версии платы находится тут


При управлении летательным аппаратом с полетным контроллером помимо 4 стандартных каналов управления требуется дополнительный для выбора режима, к этому каналу есть требование чтобы по нему передавалось несколько уровней сигнала, каждому из уровней соответствует определенный режим работы автопилота.

Однако во всех известных мне пультах многоступенчатые переключатели отсутствуют, поэтому подобную проблему решают двумя способами:
- микширование нескольких переключателей, при этом каждой комбинации переключателей соотвествует какой либо режим
- использование аналогового регулятора "крутилки"

Комбинации из микшированных переключателей крайне неудобны тем что в ответственный момент начинаешь теряться в управлении и совсем уже нет времени вспоминать нужную комбинацию для режима.
 "крутилки" - ими можно выбирать любой из режимов, но отсутствие дискретности делает их использование крайне неудобным, кроме того невозможно из первого режима переключиться сразу в пятый - необходимо прокрутить все промежуточные режимы. Мне ка начинающему "пилоту" показалось крайне сложным одновременно следить за моделью отслеживать высоту и положение модели и одновременно не теряться выставляя нужную позицию у "крутилки"


Собственно дальше речь пойдет о том как сделать дискретный переключатель.
У многих пультов есть входы управляемые напряжением, в такой цепи включен резистор - одной стороной он подключен к +5 вольт, второй к общему проводу а со среднего контакта снимается управляющий уровень напряжения. В этом случае для того чтобы достичь цели необходим переключатель выдающий в зависимости от положения один из уровней напряжения.

Предлагаемое решение содержит микропроцессор 5 светодиодов, 5 кнопок и аналоговый выход. Программный код позволяет контролировать переключение на один из режимов и выдавать в соответствии с заложенном в настройки один из  уровней выходного напряжения


Настройка  Пульта управления


Для настройки пульта понадобится кабель (Драйвер по ссылке, вкладка files) соединяющий компьютер и передатчик и программа DigitalRadio
Задача в том чтобы  сконфигурировать "крутилку B" на канал 5 и достичь при ее вращении  диапазона длительности импульсов1000-2000мс. Остальные каналы также имеет смысл откалибровать таким образом чтобы они соответствовали типовому диапазону.

в качестве "монитора" можно использовать экран режимов в Mission Planner.

Для обеспечения надежного попадания переключателя в соответствующий режим следует изменяя значения BtnLevels соответствующие кнопкам достичь чтобы "current PWM" был близок к центральному значению каждого диапазона
в табличке приведены средние значения для каждого режима
 

Эскиз платы и лицевой панели



схема

- проект пяти позиционного переключателя режимов для переключения режимов автопилота


Ардуино - скетч


/*
s1 - s5 & LEDS connected to analog pins 1-5
its numbers from 14 to 18
 

*/
 
#define AnalogOut 10 // PWM out
 
int SelBtn = 14; // default
int BtnLevels[19];
 

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

//5 of 6 modes

BtnLevels[14] = 0; // 1 кнопка
BtnLevels[15] = 84;
BtnLevels[16] = 127;
BtnLevels[17] = 169;
BtnLevels[18] = 255; // 5 кнопка
 
 
//force pwm
TCCR1B = 0x01;
delay(100); 
 
pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevels[SelBtn]);
 
}
void loop()
{
ScanBtns();
delay(10);
}
 

void ScanBtns()
{
for  (int i=14; i <= 18; i++)
     ScanBtn(i);
}
 

void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin) 
{
pinMode(ScanPin, INPUT);
 
if (digitalRead(ScanPin)==0)
  {
      SelBtn = ScanPin;
      unsetOther(ScanPin);
      while (digitalRead(ScanPin)==0); // hold scaning until relise button
      pinMode(ScanPin, OUTPUT);
      digitalWrite(ScanPin,LOW);
 

  }
}
}
 
 
 
void unsetOther(int excludePin)
{
for  (int i=14; i <= 18; i++)
    {
    if (i != excludePin)
        pinMode(i, INPUT);
        digitalWrite(i,HIGH); 
    } 
 
analogWrite (AnalogOut, BtnLevels[excludePin]);
Serial.println(BtnLevels[excludePin]);  
}

Благодаря разгону PWM до 30кгц возможно более быстрое переключение, вместо трех каскадов сглаживания выходного напряжения достаточно одного-двух


Подключение вместо переменного резистора ("крутилки")  пульта Hobby King 2.4Ghz 6Ch  :

вариант размещения платы:
Три провода снятые с переменного резистора отлично достают до платы установленной снаружи.
через штыревой разъем сверху возможно залить персонализированный вариант скетча или настроек.
на заднем фоне MissionPlaner в котором отображается что включен режима rtl


 
 
на фото включен режим стабилизации и он же на заднем фоне MissionPlaner

уровни напряжения для каждой из кнопок задаются в скетче установкой переменных
BtnLevels[14] = 0;  // первая кнопка, 0 вольт
BtnLevels[15] = 84; // вторая кнопка, настроено на попадание в середину 5 режима
BtnLevels[16] = 127; // третья кнопка, середина 4 режима
BtnLevels[17] = 169; // четвертая кнопка, середина 3 режима
BtnLevels[18] = 255; // пятая кнопка, 5 вольт, 1 режим

Возможно вы заметили что в планере 6 режимов а переключатель 5-кнопочный. дело в том что пока я разрабатывал эту плату разработчики ардупилота увеличити число режимов до 6, в моем случае я не использую режим 2.

Для подбора режима используется миссион планер, в разделе калибровки стиков отображены длительности импульсов в милисекундах, я подобрал уровни сигнала таким образом чтобы каждая кнопка попадала в середину диапазона и обеспечивала стабильность.

19-20 мая 2012 были выполнены несколько первых полетов с переключателем режимов на arducopter2, отказы отсутствовали, поступило предложение в порядке усовершенствования добавить опцию  переключения режима в stablilize при переводе газа в "0" так как при использовании автоматических режимов при посадке в высокую траву стик газа полностью не выключает моторы, что приводит к наматыванию растительности на оси моторов. Предполагаю, что подобное реализовать достаточно просто, достаточно завести провод от потенциометра газа на свободный аналоговый вход и немного доработать программный код, чем и планирую заняться в ближайшее время.

Краткое описание платы:

на плате разведено посадочное место под ардуино процессор atmega328p-au с микросборкой резонатора murata 16MHZ, для того чтобы эту плату было возможно использовать не только в единственном проекте, но и для любых ардуино-проектов все выводы процессора разведены на штыревые разъемы, 5 выводов разведены на светодиоды и кнопки (возможно светодиоды и кнопки  устанавливать не в плату, а в корпус передатчика), на плате имеется место для установки LDO регулятора напряжения, в корпусе sot223, рекомендую использовать LM2940 он недорогой, выдерживает достаточно высокое входное напряжение и обеспечивает ток более 500ма (максимально допустимый ток нагрузки зависит от входного напряжения с тем чтобы не превысить уровень рассеиваемой мощности) для удобства разработки предусмотрены интерфейсы программирования AVR ISP (загрузка бутлоадера и прошивок с помощью программатора) и FTDI (для загрузки ардуино - скетчей)


Ниже приведен актуальный вариант схемы, чертеж печатной платы




Загрузить


Более сложная прошивка контроллера, позволяющая удобно подстраивать уровни каждого из каналов приложена в архиве в конце страницы.
Возможности

  • при замыкании пина D9 на GND после инициализации контролера происходит регулировка уровня выбранного канала в меньшую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
  • при замыкании пина D8 на GND после инициализации контролера происходит регулировка уровня выбранного канала в большую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
  • при замыкании пина D9 на GND в момент включения питания происходит сброс параметров на те что указаны в прошивке по умолчанию
  • На вывод D7 можно подключить пьезо - пищалку, при этом переключение каналов подтверждается писком. (Индуктивные пищалки следует зашунтировать защитным диодом параллельно пищалке, анодом на GND)

Это расширение возможностей позволит избежать трудоемкой процедуры калибровки аппаратуры и прошивки


Галерея от моделистов реализовавших этот проект

(присылайте фотки на kozin@mail.ru)


Игорь Тимофеев

Eduard Mark

сделано за 15 минут "на коленке" sasha pkhidenko



Сергей Говоров


Roman Lyamzin


Краткое руководство по подключению готового устройства
минус, плюс и выход сигнала подключаемый к проводу,

который был припаян к среднему контакту переменного резистора

фото Кузнечевского Юрия
SelectionFile type iconFile nameDescriptionSizeRevisionTimeUser
ċ

Скачать
Скетч с возможностью подстройки уровней каналов без программатора, c пищалкой 5ти и 6ти кнопочные версии. исправлен тон писка и возможность сохранения измененных параметров  2 кб версия 4 17 мар. 2013 г., 22:07 Alexey Kozin
ċ

Скачать
скетч с иным расположением кнопок под плату мегапилот версия 1  1 кб версия 1 4 нояб. 2013 г., 5:54 Alexey Kozin
ċ

Скачать
чертеж платы на 6 кнопок  343 кб версия 1 27 авг. 2014 г., 20:59 Alexey Kozin
ċ

Скачать
  1 кб версия 1 20 сент. 2013 г., 15:22 Alexey Kozin
Comments