Где можно программировать сервомашинки emax
Перейти к содержимому

Где можно программировать сервомашинки emax

  • автор:

Arduino и сервопривод

Сервопривод, он же сервомашинка, он же просто серво – простейший “модельный” актуатор, использовался в радиоуправляемых моделях ещё до появления Ардуино. Сервопривод поворачивает свой выходной вал в диапазоне ~180 градусов и обладает вполне приличным моментом для перемещения частей механизмов. В маленьком корпусе располагаются:

  • Коллекторный моторчик
  • Редуктор (пластиковый или металлический)
  • Потенциометр обратной связи
  • Контроллер (драйвер мотора, обратная связь, управление по интерфейсу PWM)

Серво комплектуется набором “качалок” и винтами для крепления

Характеристики 9-граммового сервопривода:

  • Напряжение питания: 3.. 7.2V
  • Крутящий момент:
    • 1.2кг/см при 4.8V
    • 1.6кг/см при 6.0V

    Сервопривод управляется ШИМ сигналом, точнее длиной импульса: минимальная (0 градусов) и максимальная (~180 градусов) длина импульса колеблется в зависимости от модели и производителя сервопривода.

    Подключение

    • Коричневый: GND
    • Красный: VCC
    • Жёлтый: цифровой пин

    Примечание: сервопривод потребляет довольно приличный ток (стартовый до 1А), поэтому рекомендуется питать его от внешнего источника. При питании от компьютера напряжение может просесть и МК перезагрузится, при высокой нагрузке (с 2 и больше приводов) может выгореть защитный диод на плате Arduino!

    Библиотеки

    Для управления сервоприводом можно использовать стандартную библиотеку Servo. Эта библиотека отбирает у микроконтроллера первый таймер, поэтому в некоторых случаях будет удобно использовать библиотеку SoftServo. Стандартная библиотека управляет сервоприводом очень резко, на максимальной скорости, поэтому для реальных применений лучше использовать библиотеку плавного движения серво – ServoSmooth.

    Servo.h

    Библиотека стандартная и идёт в комплекте с Arduino IDE. Подключаем и создаём объект сервопривода. При создании никакие аргументы не передаются:

    #include Servo myservo;

    Библиотека имеет следующие методы:

    uint8_t attach(int pin); // "подключить" с указанием пина uint8_t attach(int pin, int min, int max); // "подключить" с указанием пина и мин. макс. сигнала void detach(); // отключить void write(int value); // повернуть на угол в градусах void writeMicroseconds(int value); // повернуть на длину импульса

    При “подключении” серво через attach(pin) диапазон длины импульса устанавливается стандартный: 544.. 2400 мкс (задан в библиотеке). Если есть желание настроить серво идеально, чтобы она работала на весь диапазон – нужно попробовать покрутить её через writeMicroseconds() в крайних значениях диапазона и найти минимум и максимум, при которых серво “упирается”.

    Примеры

    Крутим туда сюда быстро

    Вращаем туда сюда быстро (как blink, только серво):

    #include Servo myservo; void setup() < myservo.attach(3); // подключаем на пин 3 >void loop() < myservo.write(0); // поворот на 0 градусов delay(1000); myservo.write(180); // поворот на 180 градусов delay(1000); >

    Крутим туда сюда плавно

    Поворачиваем туда сюда плавно, блокирующее выполнение:

    #include Servo myservo; void setup() < myservo.attach(3); >void loop() < for (int i = 0; i for (int i = 180; i > 0; i--) < myservo.write(i); delay(15); >>

    Крутим туда сюда плавно асинхронно

    Поворачиваем туда сюда плавно, асинхронное выполнение:

    #include Servo myservo; void setup() < myservo.attach(3); >uint32_t tmr; // переменная таймера int val = 0; // переменная яркости int dir = 2; // скорость и направление яркости void loop() < // асинхронный таймер на миллис if (millis() - tmr >= 20) < tmr = millis(); val += dir; // прибавляем скорость if (val >= 180|| val >

    Домашнее задание

    • Попробовать библиотеку ServoSmooth

    Связанные уроки

    • Документация на ServoSmooth
    • Функции времени

    EMAX

    YINYAN Model Tech MFT. более известны под брендами EMAX (Емакс) и LOONG-MAX. Основные продукты компании: бесколлеторный двигатель, регулятор оборотов, винт для самолёта, сервомеханизм, зарядное устройство, зумер и множество комплектующих для авиамоделизма.

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

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

    Купить запчасти Емакс в Минске (Emax) можно в магаззине«Хобби Парк». Мы предоставляет гарантию и постгарантийное обслуживание на все комплектующие Emax купленные у нас.

    Также став нашим клиентом, вы получите скидочную карточку для последующих выгодных покупок в сети магазинов «Хобби Парк».

    Работаем с сервоприводами

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

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

    Сервоприводы имеют несколько составных частей. Привод — электромотор с редуктором. Зачастую скорость вращения мотора бывает слишком большой для практического использования. Для понижения скорости используется редуктор: механизм из шестерней, передающий и преобразующий крутящий момент.

    Включая и выключая электромотор, можно вращать выходной вал — конечную шестерню сервопривода, к которой можно прикрепить нечто, чем мы хотим управлять — рычаг в форме круга, крестовины или перекладинки для передачи вращающего движения на рабочий орган. Для контроля положения используется датчик обратной связи — энкодер, который будет преобразовывать угол поворота обратно в электрический сигнал. Для этого часто используется потенциометр. При повороте бегунка потенциометра происходит изменение его сопротивления, пропорциональное углу поворота. Таким образом, с его помощью можно установить текущее положение механизма.

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

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

    Servo

    Крутящий момент и скорость поворота

    Крутящий момент — векторная физическая величина, равная произведению радиус-вектора, проведённого от оси вращения к точке приложения силы, на вектор этой силы. Характеризует вращательное действие силы на твёрдое тело. Эта характеристика показывает, насколько тяжёлый груз сервопривод способен удержать в покое на рычаге заданной длины. Если крутящий момент сервопривода равен 5 кг×см, то это значит, что сервопривод удержит на весу в горизонтальном положении рычаг длины 1 см, на свободный конец которого подвесили 5 кг. Или, что эквивалентно, рычаг длины 5 см, к которому подвесили 1 кг.

    Скорость сервопривода измеряется интервалом времени, который требуется рычагу сервопривода, чтобы повернуться на 60°. Характеристика 0,1 с/60° означает, что сервопривод поворачивается на 60° за 0,1 с. Из неё несложно вычислить скорость в более привычной величине, оборотах в минуту, но так сложилось, что при описании сервоприводов чаще всего используют такую единицу.

    Иногда приходится искать компромисс между этими двумя характеристиками, так как если мы хотим надёжный, выдерживающий большой вес сервопривод, то мы должны быть готовы, что эта могучая установка будет медленно поворачиваться. А если мы хотим очень быстрый привод, то его будет относительно легко вывести из положения равновесия. При использовании одного и того же мотора баланс определяет конфигурация шестерней в редукторе.

    Виды сервоприводов

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

    Шестерни для сервоприводов бывают из разных материалов: пластиковые, карбоновые, металлические.

    Пластиковые, чаще всего нейлоновые, шестерни очень лёгкие, не подвержены износу, более всего распространены в сервоприводах. Они не выдерживают больших нагрузок, однако если нагрузки предполагаются небольшие, то нейлоновые шестерни — лучший выбор.

    Карбоновые шестерни более долговечны, практически не изнашиваются, в несколько раз прочнее нейлоновых. Основной недостаток — дороговизна.

    Металлические шестерни являются самыми тяжёлыми, однако они выдерживают максимальные нагрузки. Достаточно быстро изнашиваются, так что придётся менять шестерни практически каждый сезон. Шестерни из титана — фавориты среди металлических шестерней, причём как по техническим характеристикам, так и по цене. Они достаточно дорогие.

    Существует три типа моторов сервоприводов: обычный мотор с сердечником, мотор без сердечника и бесколлекторный мотор.

    Обычный мотор с сердечником (справа) обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника. Мотор с полым ротором (слева) обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.

    Сервоприводы с бесколлекторным мотором появились сравнительно недавно. У бесколлекторных моторов нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.

    Подключение к Arduino

    Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:

    • красный — питание; подключается к контакту 3.3/5V или напрямую к источнику питания
    • коричневый или чёрный — земля
    • жёлтый или белый — сигнал; подключается к цифровому выходу Arduino

    Servo

    Обычный хобби-сервопривод во время работы потребляет более 100 мА. При этом Arduino способно выдавать до 500 мА. Поэтому, если вам в проекте необходимо использовать мощный сервопривод, есть смысл задуматься о выделении его в контур с дополнительным питанием.

    На большинстве плат Arduino библиотека Servo поддерживает управление не более 12 сервоприводами, на Arduino Mega — 48. При этом есть небольшой побочный эффект использования этой библиотеки: если вы работаете не с Arduino Mega, то становится невозможным использовать функцию analogWrite() на 9 и 10 контактах независимо от того, подключены сервоприводы к этим контактам или нет. На Arduino Mega можно подключить до 12 сервоприводов без нарушения функционирования ШИМ/PWM, при использовании большего количества сервоприводов мы не сможем использовать analogWrite() на 11 и 12 контактах.

    Библиотеки для управления сервоприводами (Servo) и для работы с приёмниками/ передатчиками на 433 МГц VirtualWire используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2.

    Сервоприводы обычно имеют ограниченный угол вращения 180 градусов, их так и называют «сервопривод 180°». Но существуют сервоприводы с неограниченным углом поворота оси. Это сервоприводы постоянного вращения или «сервоприводы 360°».

    Иногда при подключении серводвигателя не отрабатывают заданные команды или отрабатывают некорректно. Причина в том, что сервомоторы требуют достаточно большую мощность для питания, особенно в начале движения ротора. Эти резкие скачки потребляемой мощности могут сильно «просаживать» напряжение на Arduino. Может произойти даже перезагрузка платы. Если подобное происходит, вам надо добавить конденсатор (470 мкФ или больше) между рельсами GND и 5V на вашей макетке. Конденсатор выполняет роль своеобразного резервуара для электрического тока. Когда серводвигатель начинает работать, он получает остатки заряда с конденсатора и от источника питания Arduino одновременно. Длинная нога конденсатора — это позитивный контакт, она подключается к 5V. Отрицательный контакт часто маркируется символом ‘-‘.

    Управляем через импульсы

    Для начала попробуем управлять вручную без библиотек. Считываем показания из Serial Monitor — нужно ввести число от 0 до 9. Эти значения равномерно распределим на 180 градусов и получим 20 градусов на каждую единицу показаний.

     int servoPin = 9; // сигнальный провод от серво на порт 9 int val; void setup() < pinMode(servoPin, OUTPUT); Serial.begin(9600); Serial.println("Servo is ready"); >void loop() < // convert number 0 to 9 to corresponding 0-180 degree angle val = Serial.read(); if (val >= '0' && val > > // define a servo pulse function void servoPulse(int pin, int angle) < // convert angle to 500-2480 pulse width int pulseWidth = (angle * 11) + 500; digitalWrite(pin, HIGH); // set the level of servo pin as high delayMicroseconds(pulseWidth); // delay microsecond of pulse width digitalWrite(pin, LOW); // set the level of servo pin as low delay(20 - pulseWidth / 1000); >

    Библиотека Servo

    Можно генерировать управляющие импульсы самостоятельно, но это настолько распространённая задача, что для её упрощения существует стандартная библиотека Servo.

    Сервопривод постоянного вращения можно управлять с помощью библиотек Servo или Servo2. Отличие заключается в том, что функция Servo.write(angle) задаёт не угол, а скорость вращения привода.

    Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:

    • attach() — присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin — номер пина, к которому присоединяют сервопривод, min и max — длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.
    • write() — отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle — угол, на который должен повернуться сервопривод
    • writeMicroseconds() — отдаёт команду послать на сервопривод имульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS — длина импульса в микросекундах. Возвращаемого значения нет.
    • read() — читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0 до 180
    • attached() — проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае
    • detach() — производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()

    В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс — для 0° и 2400 мкс — для 180°.

    Пример подключения двух сервоприводов.

     #include // создаём объекты для управления сервоприводами Servo myservo1; Servo myservo2; void setup() < // подключаем сервоприводы к выводам 11 и 12 myservo1.attach(11); myservo2.attach(12); >void loop() < // устанавливаем сервоприводы в серединное положение myservo1.write(90); myservo2.write(90); delay(500); // устанавливаем сервоприводы в крайнее левое положение myservo1.write(0); myservo2.write(0); delay(500); // устанавливаем сервоприводы в крайнее правое положение myservo1.write(180); myservo2.write(180); delay(500); >

    Библиотека Servo не совместима с библиотекой VirtualWire для работы с приёмником и передатчиком на 433 МГц, так как они используют одно и то же прерывание. Это означает, что их нельзя использовать в одном проекте одновременно. Существует альтернативная библиотека для управления сервомоторами — Servo2. Все методы библиотеки Servo2 совпадают с методами Servo.

    При работе с сервоприводами на 360 градусов функции работают по другому.

    Функция Arduino Сервопривод 180° Сервопривод 360°
    Servo.write(0) Крайне левое положение Полный ход в одном направлении
    Servo.write(90) Среднее положение Остановка сервопривода
    Servo.write(180) Крайне правое положение Полный ход в обратном направлении

    Sweep

    Скетч File | Examples | Servo | Sweep постоянно поворачивает насадку на 180 градусов и возвращает её обратно. В примере используется встроенная библиотека Servo.

    Общая схема — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9).

    Sweep

     #include Servo myservo; // создадим объект сервопривода int pos = 0; // начальная позиция void setup() < myservo.attach(9); // сервопривод на выводе 9 >void loop() < for (pos = 0; pos for (pos = 180; pos >= 0; pos -= 1) < // от 180 до 0 градусов myservo.write(pos); // просим повернуться на позицию значения переменной 'pos' delay(15); // ждём 15ms для достижения позиции >> 

    Knob

    Скетч File | Examples | Servo | Knob управляет сервоприводом при помощи потенциометра. В примере используется встроенная библиотека Servo.

    Общая схема: у сервопривода — красный провод идёт к питанию 5V, чёрный или коричневый идёт к GND, а жёлтый или белый к выводу платы (в нашем примере вывод 9). У потенциометра средняя ножка соединяется с аналоговым выходом A0, остальные к питанию и земле.

    Knob

     #include Servo myservo; // создадим объект сервопривода int potpin = 0; // аналоговый выход A0 для потенциометра int val; // значение, получаемое от аналогового выхода void setup() < myservo.attach(9); // сервопривод на выводе 9 >void loop() < val = analogRead(potpin); // считываем данные с потенциометра (от 0 до 1023) val = map(val, 0, 1023, 0, 180); // Преобразуем в интервал от 0 до 180 myservo.write(val); // устанавливаем позицию сервопривода delay(15); // небольшое ожидание, чтобы сервопривод успел выполнить команду >

    Случайные повороты

    Будем поворачивать серводвигатель на случайную величину. Практического смысла немного, но для демонстрации подойдёт.

     #include Servo servo; // создадим объект сервопривода long randomNumber; void setup() < servo.attach(9); randomSeed( analogRead(A0) ); >void loop()

    Alex_EXE

    Управление множеством сервомашинок с PIC16F628A

    Управление сервоприводами с ПК

    Сервоприводы (часть 3)

    В предыдущих статьях было рассмотрено устройство сервопривода и управление одним сервоприводом с помощью контроллера. Но ранее рассмотренным способом можно управлять одним – двумя сервомашинками, при большем их количестве это уже будет трудно, тем более, если контроллер выполняет и другие задачи. В этой статье будет рассмотрено, как управлять множеством сервомашинок с одного МК при помощи таймера TMR1. Также этими сервоприводами будем управлять с компьютера.

    2 подключенных сервопривода

    2 подключенных сервопривода

    Идея

    Идея в следующем: таймер отсчитывает такты на высокой частоте, при каждом такте переменная T увеличивается на 1 (подсчитывает такты). Эти такты формируют посылки для управления сервоприводами. В начале каждой посылки T=0 и на всех вывода, которые идут на сервомашинки, установлен высокий уровень сигнала. При каждом «тике таймера» значение переменной T сверяется с максимальным количеством тактов в посылке и со значениями количества тактов позиций всех сервоприводов, на совпавших приводах будет установлен низкий уровень сигнала. По достижению конца посылки, T обнулиться и на всех выходах будет установлен высокий уровень сигнала, т.е. текущая посылка будет завершена и начнётся всё с начала.

    Посылки для сервоприводов

    Все эти действия происходят в обработчике прерываний (по прерываниям от таймера), в фоне, и не мешают выполнению главной функции.

    Посылка через COM порт

    Вид посылки через COM порт

    В примере в главной функции разместилась связь с компьютером через USART. Для облегчения работы и уменьшению размера посылки, но в небольшой ущерб количеству позиций валов сервоприводов, была выбрана одно байтовая посылка через COM порт. 6 младших бит в этом байте отвечают за положение вала, всего 64 позиции, старшие 2 бита отвечают за выбор одного из 4-х сервоприводов. 64 позиции – это 2,8 градуса для сервопривода со 180 градусным ходом вала, соответственно для 90 градусного шаг составит 1,4 градуса, для большинства задач этого вполне достаточно. Также в качестве индикации о приходе байта будет мигать светодиод.

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

    Прошивка

    В главной функции разместилась обработка посылки с последовательного порта.

    if(RCIF) // Ожидание прихода байта < temp=getch_Usart(); // Чтение байта temp2=temp%64+20; // Вычисление положение вала (первые 6 разрядов) switch(temp/64) // Выбор сервопривода (старшие 2 разряда) < case 0:T1=temp2;break; //Запись позиции вала 1 сервопривода case 1:T2=temp2;break; case 2:T3=temp2;break; case 3:T4=temp2;break; >LED=40; // Мигнём светодиодом LED_on(); >

    Установки регистров для таймера выглядит следующим образом:

    INTCON=0b10100000;//Глобальные прерывания и от TMR0 разрешены. OPTION=0b00001000;

    В обработчике прерываний обрабатываются прерывания только от таймера TRM0. Происходящее здесь было описано выше.

    void interrupt isr(void) // Обработчик прерываний < if(T0IF) // Произошло прерывание по таймеру < T++; //Увеличение счётчика if(T==T1) //Сработка 1 сервопривода < ClrBit(BUF,7);//Низкий уровень сигнала на 1 серве >if(T==T2) //Сработка 2 сервопривода < ClrBit(BUF,6); //Низкий уровень сигнала на 2 серве >if(T==T3) //Сработка 3 сервопривода < ClrBit(BUF,5); //Низкий уровень сигнала на 3 серве >if(T==T4) //Сработка 4 сервопривода < ClrBit(BUF,4); //Низкий уровень сигнала на 4 серве >if(T==600) //Конец посылки < BUF|=0xF0; //Высокие уровень логического сигнала на всех сервах T=0; //Обнуление счётчика >PORTB=BUF; //Запись в порт TMR0=180; //Установка начального значения 0 таймера T0IF=0; //Обнуление флага > >

    Программа на ПК

    Для управлениями сервами с компьютера была написана небольшая программа.

    Программа для управления сервами

    Программа для управления сервами

    Программа позволяет управлять положением валов сервоприводов, как с помощью ползунков, так и выставлять их вручную, также предусмотрено управление с клавиатуры, с джойстика и «автопилот». Из настроек только выбор COM порта.

    Небольшое видео, демонстрирующее работу. К сожалению всего 2 сервопривода в наличие.

    Плата

    Схема

    Питание платы производиться стабилизированными 5 вольтами. В схеме применена развязка цепи контроллера от сервоприводов с помощью диода шотки D1 и сглаживающего конденсатора C1. Плата при работе сервоприводов может потреблять ток до 0,8 А и больше, в зависимости от используемых сервоприводов и их количества. При больших токах ёмкость входного конденсатора C2 следует увеличить.

    Печатка

    Печатная плата содержит микроконтроллер PIC16F628A, MAX232 и разъём DB-9M для согласования уровней USART для связи с компьютером через COM порт и обвязку. Для связи с компьютером нужен 0-модемный кабель. Можно подключить по USB, для этого понадобиться COM-USB переходник.

    Одно из возможных применений данной конструкции – управление камерой.

    Существую и другие алгоритмы управления множеством сервоприводов с одного контроллера, мной же был реализован такой.

    Статья обновлена 30.07.2011

    24 комментария на « Управление множеством сервомашинок с PIC16F628A»

    1. В пишет 31.05.2011 в 16:38 #

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

    Эта тема не нова. Видел ту статью. Не только она послужила толчком для начала работы с сервоприводами, большее впечатление оказали видео ролики на youtube 6-ти ногих роботов жуков.
    По сравнению со статьей на easyelectronics тут использован другой метод управления сервоприводами.

    Отлично то что нужно, соберем опробуем. Спасибо)

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

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

    Подредактировал исходник – скачать . Константы MIN и MAX отвечают за крайние положения вала.

    Приветствую. Очень понравилась ваша работа. Подскажите пожалуйста, можно ли настроить управление сервомашинками через data-кабель от мобильного телефона.

    Теоретически можно, практически не знаю, смотреть нужно.
    К старым моделям, например Siemens, у которых есть UART и возможен диалог по средствам AT команд – можно, к примеру с помощью СМС. Но понадобиться небольшой движок, для диалога с телефоном.

    собрал схему, при старте двиг дергается и ни на что не реагирует

    Со схемой разобрался, все работает как и ожидалось, огромное СПАСИБО Alex_EXE . за поддержку, много переписывались, он объяснял что и к чему, к сожалению это была моя невнимательность при разработке печатки, конструкция очень понравилась, мои ожидания оправдала.

    Доброго времени суток! Можно сделать так, что бы записать в программу десяток-другой фиксированных точек положений (разных для каждой сервы) и потом включать работу их нажатием кнопки на экране монитора? Спасибо!

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

    А сколько раз в секунду происходит прерывание по таймеру?

    Очень много, если не ошибаюсь то около 150000.
    Этот метод устарел, как доделаю новую плату начну писать статью по более оптимальному алгоритму управления сервами.

    просто я AVRщик (регистры INTCON и OPTION мне ни о чем не говорят) и мне из-за простоты понравился сам принцип управления.
    а из более оптимальных (по крайней мере значительно более оптимальных) я встречал только посылку импульсов при помощи аппаратной шим, но там можно управлять только стольким количеством сервомашинок, сколько ножек у микроконтроллера могут выдавать аппаратную шим. а этого мало

    Есть у меня более оптимальный алгоритм, он позволяет подключить несколько сервопрводов с большой точностью и меньше грузит камень, на его принципе построен сервотестер , но повторюсь, что материал по тому алгоритму ещё не готов.
    Кстати, с этой платой он будет совместим.

    Здравствуйте!
    Может не по теме — и в этой ветке решил написать )))
    У меня такой вопрос:
    Есть передатчик 9 каналов и есть приемник — набор для авиамоделизма. Но задача в том чтоб с приемника сигналы ШИМ — через AVR — получать логические сигналы. Т.е. сервы работают от передатчика самим собой, но хотелось бы с пульта посылать сигналы логики для включения фар освещения или другой функционал.
    Спасибо

    В данной ветке не по теме.
    Но такой проект у меня есть, правда он все еще закрытый, — в разделе авиа — PPM ключ.

    Большое спасибо за разработку.
    Но есть вопрос. Мне надо управлять сервомашинками заслонок вентиляции. Т.е. контроллер будет где-то в центре дома, а сероприводы на удалении более 10м. Посольку Вы работаете с сервомашинками может быть у Вас встречалась аналогичная проблема(большое расстояние)? Если «ДА», то как Вы её решали? Я вот думаю через интерфейс RS485. Но может зря волнуюсь?

    А сервомашинки стоят промышленные или хоббийные? Т.к. у промышленных серв может быть не PPM интерфейс, а что-нибудь по интереснее.
    В паре своих проектов кидал PPM сигнал на удаление до 5м от пульта, всё работало нормально, дальше не пробовал.
    На большие же расстояния лучше применять специальные промышленные линии, например известный и надёжный Rs-485. С ним работа, впечатления хорошие, но опубликованных наработок по нему у меня мало.

    Alex_EXE, здравствуйте, собрал вашу плату, проблема как у Александра, отписавшегося выше, — при подключении серво слегка дергается и все, затем ноль реакции, можете оказать помощь?

    Уважаемый Alex_EXE !
    Почему файл с программой для ПК поврежден ? (exe. — o байт)
    Можно дать ссылку на рабочий файл ? или эта тема уже закрыта ?
    Спасибо !

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

    Здравствуйте, не могли бы Вы пояснить некоторые моменты алгоритма, в частности для чего нужная строка
    TMR0=180; //Установка начального значения 0 таймера
    Почему начальное значение не 0?
    И при каких исходных параметрах этот код работает (частота кварца, делителя и прочее)?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *