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

Кому интересно, прошу под кат.

Идея


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

Знания


Всем известно, что опыт и знания помогают творить и находить решения. На страницах Гиктаймса немало примеров использования сервопривода с применением контроллеров. В них подробно рассказано про систему управления сервоприводом. Примем этот опыт других разработчиков за знания необходимые нам для решения задачи. Сервопривод SG90 управляется ШИМ сигналом, параметры которого определяют положение ротора. Период ШИМ около 20 мС, длительность сигнала управления от 500 до 2100 мкС.

Задача


Идея и знания порождают задачу, которую необходимо решить. Сформулируем задачу для воплощения идеи. Это что-то вроде Технического Задания. Кажется, все просто, надо взять генератор импульсов с изменяемой скважностью, подключить питание к сервоприводу, а с генератора подать управляющий сигнал. Особо отметим, что в требованиях есть изменения скважности — то есть должны быть органы управления или пользовательский интерфейс.

Реализация


Вот тут и начинаются муки творчества: что взять и где взять? Можно найти готовый лабораторный импульсный генератор, например Г5-54 с ручками, кнопками, выставить нужные параметры, подключить генератор к сервоприводу. Однако это громоздко и не все могут позволить себе такую роскошь. Поэтому разработчики, опираясь на свой опыт и знания, пытаются совместить желание (идею-задачу) и возможности (материальные и творческие) для реализации задачи. Материальные возможности — это та “жаба”“А сколько и чего я хочу потратить на реализацию идеи?” Творческие возможности — это, “посмотрю-ка я, что у меня уже есть”. Это не обязательно какие-то материальные ценности, а опыт и знания предыдущих разработок, которые можно приспособить под реализацию. Также не лишним будет поискать (погуглить), что кто-то уже реализовывал что-то подобное. Для сокращения вариантов решения необходимо самому добавлять дополнительные требования, ограничивающие фантазии реализации. Например, добавим к требованиям еще одно условие, пусть это будет материальное ограничение, реализация должна быть недорогой.

Поиск альтернатив


Воспользовавшись интернетом, поищем варианты, которые предлагает СЕТЬ. Зададим в поиске: “генератор прямоугольных импульсов с переменной скважностью”. Получим очень много вариантов, как с применением интегральных таймеров NE555 (отечественный аналог КР1006ВИ1), так и на логических микросхемах. Из всего разнообразия я выбрал вариант генератора на инверторе с триггером Шмитта на входе. Во-первых, он самый простой, во-вторых, требует минимум деталей и самое интересное использует единственный логический элемент из шести, если, например, использовать микросхему 74HC14.

Схема такого генератора выглядит так:


Немного теории


Теория гласит, что частота такого генератора равна f = 1/T = 1/(0.8*R*C). Для получения требуемой частоты требуется выбрать номинал одного из элементов, задающих частоту. Так как логический элемент выполнен по технологии КМОП, то имеет большое входное сопротивление, поэтому можно применять элементы задающие небольшие рабочие токи. Выберем емкость С1 из ряда распространенных номиналов, например 0.47 мкФ. Тогда для получения требуемой частоты (50Гц) резистор должен быть приблизительно 53 кОм, но такого резистора в стандартном ряду нет, поэтому выберем 51 кОм.


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

Тогда схема примет следующий вид:


Казалось бы: все, задача решена, но в крайних положениях переменного резистора поведение сервопривода нестабильно. Это связано с тем, что значение длительности импульсов, в крайних положениях переменного резистора, не соответствует требуемым. Лично мне также не по душе применение переменного резистора, поэтому я хочу изменить интерфейс управления, добавив новую “хотелку” в техническое задание, например чтобы скважность менялась в зависимости от освещенности. Для этого есть простое и недорогое решение: применить в качестве регулирующего элемента фоторезистор GL55xx (используют в проектах Arduino), изменение сопротивления которого лежит в широком диапазоне.

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

Итоговая схема принимает следующий вид:


Пояснения к итоговой схеме


Конденсатор С1 номиналом 0.47 мкФ, определяет время перезаряда. Резистор R1 номиналом 51 кОм задает основную частоту повторения импульсов в районе 50 Гц. Комбинация резисторов R2-R4 в сумме будет изменяться в диапазоне от 2.5 кОм до 24 кОм в зависимости от освещенности. Вместе с диодом D1 эти резисторы будут влиять на время перезаряда конденсатора С1 при действии положительного импульса на выходе логического элемента, тем самым определять его длительность.

Результат


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



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

Дерзайте и удачи!
Поделиться с друзьями
-->

Комментарии (46)


  1. uterr
    16.01.2017 11:56

    Иногда такая схема может быть полезна, но учитывая стоимость (мизерную) ардуинок — для любителей может и не понадобиться, хотя для более серьезных разработок может оказаться находкой.

    ОУ можно применить любой?


    1. ProstoUser
      16.01.2017 12:30
      +2

      Если я ничего не путаю, это не операционный усилитель, а инвертор — элемент «НЕ».

      Ну и заодно, в качестве «применения» для этой схемы могу предложить «Аналоговый люксомер» :-)


      1. Alyoshka1976
        16.01.2017 13:34

        Отличная идея! Стрелка, шкала и готово — сервопривод как имитация механического электроизмерительного прибора.


      1. parapetof
        16.01.2017 18:52

        для автоматизированных жалюзей ))


        1. Camellan
          16.01.2017 21:28

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


          1. Alexeyslav
            17.01.2017 15:29

            Там скорей мощи не хватит, а не угла… угол поворота меняется шестерёнками(их можно из фанеры вырезать лазерной резкой), с потерей силы.


            1. Camellan
              17.01.2017 17:29

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


              1. Alexeyslav
                18.01.2017 17:51

                Значит, полушестерёнку присобачить 1 к 2 и будет угол вместо +-90 градусов +-180 градусов и угла хватит, но момент уменьшится в 2 раза.


    1. Sworfly
      16.01.2017 13:35
      +1

      Там не операционный усилитель, а логический элемент НЕ(инвертор) из микросхемы 74HC14. И лучше усилить его включением оставшихся элементов микросхемы параллельно. Хоть ток и мизерный должен быть, но мало ли что на входе китайской сервы поставят.


      1. scolonel
        16.01.2017 15:24

        Не думаю, что есть необходимость усиливать выход. Один элемент тянет 25 мА. Ардуинка один выход до 40 мА.


        1. Sworfly
          16.01.2017 17:06

          Да, в таком случае с запасом. Буду чаще заглядывать в даташиты =)


    1. xruyn
      16.01.2017 13:35
      +1

      Это триггер Шмитта.


    1. aproof
      16.01.2017 13:35
      +2

      На схеме обозначен Hex inverting Schmitt trigger https://www.nxp.com/documents/data_sheet/74HC_HCT14.pdf
      Ардуинка вряд ли может сравниться как по компактности, так и по стоимости (за плюс-минус бакс можно собрать шесть каналов). К тому же абсолютно аппаратное решение не требует установки IDE/библиотек/программирования, что снижает порог входа для начинающего DIY электронщика. Поэтому, автору респект!


      1. clawham
        20.01.2017 20:26

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


    1. AllexIn
      16.01.2017 14:45

      зачем здесь ардуина, если tiny голый справится без проблем?


      1. SADKO
        16.01.2017 14:49

        Что-бы pinMode(Pin, OUTPUT) и analogWrite(Pin, value);
        (-: хотя на самом деле, тиньку тоже можно за ардуинить…


  1. SADKO
    16.01.2017 14:45

    Эхъ, сейчас какой-нибудь дуринщик запостит картинку про буханку и троллейбус :-)
    … а меня в SG90 и иже с ним, больше всего парит то, что внутри там опять-же микроконтроллер простаивает, вот если бы да ка бы, да за пилили китайцы возможность в оном прошивку менять, было бы классно, хочешь 90 градусов, а хочешь цифра, хочешь шим…


    1. Alyoshka1976
      16.01.2017 21:38

      Там сами по себе элементы не слишком сложные внутри — датчик углового положения (потенциометр, нарример), драйвер ДПТ (можно обычный MOSFET) и контроллер, считываюший показания датчика и управляющий двигателем так, чтобы обеспечить требуемое положение, по заданному алгоритму. Если писать самому ПО для контроллера, можно разные алгоритмы попробовать и всякие свои хотелки реализовать. Но здесь у каждого свои подходы. Я вот так и не допаял сверхрегенератор для авиадиапазона — слушаю ACARS через все-таки приехавший (через Якутию? :-) приемник на RTL, удобнее и без не слишком уже интересных мне усилий :-) В качестве апофеоза противоположного подхода могу привести запавшую в память стародавнюю заметку в журнале «Радио» — автор предлагал ПИЛИТЬ погоревшие КЦ405—е, чтобы использовать уцелевшие диоды :-)


      1. follow39
        17.01.2017 22:29

        А вы уверены что там вообще есть контроллер? Не думаю что для такой простой системы он вообще нужен.


        1. Alyoshka1976
          18.01.2017 00:29

          Да :-) Вот то, что у SG90, как говорится, «инсайд»:
          image
          " Inside the micro servo, you will find the pieces from the above image. The top cover hosts the plastic gears while the middle cover hosts a DC motor, a controller, and the potentiometer."
          И не такой уж там и простой алгоритм.


          1. follow39
            18.01.2017 00:55

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


            1. Alyoshka1976
              18.01.2017 09:33

              Спасибо за уточнение!!!


    1. Alexeyslav
      17.01.2017 16:34

      Разве там микроконтроллер? Там обычная аналоговая схема с компаратором. ШИМ преобразуется в аналог, аналог сравнивается с сигналом от потенциометра компаратором и разница выдаётся на мостовой драйвер управления двигателем. Какие там микроконтроллеры…


      1. Alyoshka1976
        18.01.2017 00:45

        Описанный Вами алгоритм слежения, конечно, удобен, но можно и PID-алгоритм применить. Вот здесь статья, в которой автор из Arduino и ДПТ сделал самодельную серву именно с ПИД-регулятором: http://abigmagnet.blogspot.com.by/2008/10/dc-motor-control-part-one.html
        В SG90 вот эта ИС внутри стоит: SERVO MOTOR CONTROLLER AA51880 http://pdf.datasheetcatalog.com/datasheets2/28/289004_1.pdf


        1. Alexeyslav
          18.01.2017 08:02

          Так и я про что… нет там цифрового контроллера, чисто аналоговая схема с некоторой логикой.
          image

          ПИД в серве это хорошо, но не с тем быстродействием и мощностью как у SG90.


          1. Alyoshka1976
            18.01.2017 09:33

            Да, верно, спасибо за уточнение!!! Как оказалось, у SG90 два вида серв:
            аналоговые SG90 Analog
            image
            и цифровые SG90 Digital
            image
            Вот для примера сравнение аналоговых и цифровых серв Futaba:
            image


  1. alexhott
    16.01.2017 15:01
    +1

    так и на 555 таймере наверно можно также сделать


    1. killik
      16.01.2017 15:41
      +4

      Или мультивибратор на МП42 ;)


      1. Alexeyslav
        18.01.2017 10:55

        Пфффф… слишком современный транзистор взяли, на МП21!!! Или на экзотике — ГТ109, размером со спичечную головку.


  1. fotofan
    16.01.2017 16:25

    Купил себе по случаю кучку PIC10F202, по 11,5 руб Думаю, вопрос с дешевизной можно закрыть. Осталось развести и настравить под них столько же макеток на все случаи. А может у кого есть готовые?


    1. scolonel
      16.01.2017 16:26

      Я рассматривал вариант без микроконтроллера.


      1. fotofan
        16.01.2017 17:39

        Да, я понимаю. И схема получилась «спартанской», я такие люблю. Просто написал, что при цене МК, стремящейся к нулю, смысл изобретать на логике разве что в целях тренировки ума. Я сам половину простейших схем, когда надо вот прям сейчас, делаю на uln2003, включая триггеры. Для этого купил их мешок


  1. YurBurGer
    16.01.2017 16:25

    А ещё ведь есть такой вариант. Тоже, вроде как, недорого.


  1. mihmig
    16.01.2017 16:54
    +1

    А для чего в сервоприводах используется ШИМ-метод управления а не аналоговый уровень напряжения/тока? Для исключения помех?


    1. Sworfly
      16.01.2017 17:05

      Скорее всего для удобства разделения каналов. Дешифратор для восьмиканальной системы получается на одной-двух микросхемах. Очень неплохо это дело описано у Г. Миля(не уверен, что его фамилия склоняется) в книге «Электронное дистанционное управление моделями».


  1. GoldenStar
    16.01.2017 19:58

    Хорошая статья. Если поставить два диода встречно-параллельно в цепи ОС и эмиттерный повторитель на составном транзисторе и т.п., то можно сделать регулятор оборотов коллекторного двигателя. Регулятор получается отличный так как мощность двигателя почти не теряется даже на очень малых оборотах…


  1. safer
    16.01.2017 21:30

    Просто и сердито.


  1. federalkosmos
    16.01.2017 21:30

    БП от ПК годится для этих целей?


    1. scolonel
      16.01.2017 21:34

      Любой блок питания с выходным напряжением 5В и током 500мА и более. Практически любая зарядка от современных смартфонов.
      Сервопривод под ощутимой нагрузкой в импульсе потреблял до 300 мА.


  1. Gryphon88
    17.01.2017 00:10

    А от серийного или последовательного порта получится одновременно запитать и управлять? Вроде из ВинХР и никсов можно дергать пины напрямую…


    1. scolonel
      17.01.2017 22:32

      Не получиться, там токи маленькие выходные. А сервопривод по питанию потребляет прилично, как я говорил, до 300мА.


      1. Gryphon88
        17.01.2017 22:41

        Т.е. отводку от БП и рулить через транзистор? Мотивация примерно такая же как у автора: иметь возможность покрутить мотором туда-сюда без микроконтроллера, надоело на каждый чих LUFA использовать. Serial/CDC не подходит, если физических и виртуальных портов больше 10, на компе Win, и нет уверенности, что дрова под все устройства на серийных портах писал разумный человек, который помнит, что начиная с 10 порта есть нюансы


  1. instalator
    17.01.2017 06:26

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


    1. scolonel
      17.01.2017 22:35

      Нет, не снимается. Это как бы схема для «быстрого» тестирования сервопривода.


    1. follow39
      17.01.2017 23:15

      Сервопривод и нужен для постоянного поддержания заданного угла. Что вы собираетесь спалить в нем?


    1. Alyoshka1976
      18.01.2017 09:36

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