Урок 32. Следящий электропривод с шаговым двигателем.

Программа следящего электропривода

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

Предыдущий урок     Список уроков     Следующий урок

В уроке я разработал две следящие системы с шаговым двигателем в качестве электропривода.

  • Одна использует драйвер на базе платы Ардуино из предыдущего урока и управляется от компьютера.
  • Второй следящий электропривод представляет собой автономное устройство, в котором положение вала двигателя задается переменным резистором.

 

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

 

Следящий электропривод.

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

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

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

В общем случае структурная схема следящей системы электропривода выглядит так.

Схема следящего электропривода

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

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

 

Принцип реализации следящего электропривода на шаговом двигателе.

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

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

К достоинствам следящего привода на базе шагового двигателя следует отнести:

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

Недостатки:

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

 

Следящий электропривод с управлением от компьютера.

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

Весь алгоритм управления реализован в программе верхнего уровня на компьютере.

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

Программу я назвал Tracker. Загрузить ее можно по этой ссылке:

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Варианты подключения, первый запуск, установка номера порта абсолютно такие же, как в программе Thermometer  (Урок 24). Для проверки удобнее использовать виртуальный порт, который создает драйвер Ардуино при подключении платы к компьютеру. Запускать программу Arduino IDE для этого не надо.

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

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

Следящий электропривод

Прищепка выполняет роль стрелки положения вала двигателя.

Окно программы Tracker выглядит так.

Программа следящего электропривода

Часть графических элементов управления аналогичны компонентам программы StepMotor из предыдущего урока.

  • Панель ”Скорость” позволяет задать скорость вращения.
  • С помощью панели “Режим” можно задать режим коммутации фаз и остановки двигателя.
  • Панель “Шаги” позволяет сделать произвольное количество шагов.

Надо только помнить, что данные с этих трех панелей передается в драйвер нажатием кнопок ”-->” рядом с соответствующими панелями.

  • Через панель “Параметры двигателя” можно задать число шагов двигателя на полный оборот и период коммутации фаз в программе драйвера (в моей программе 250 мкс).
  • Светодиод ”Обмен” сигнализирует о состоянии связи компьютера с драйвером. В нормальном режиме должен светиться зеленым.
  • Кнопки “– 1 шаг” и “+ 1 шаг” позволяют сделать по одному шагу по часовой и против часовой стрелки.

В программе появились новые элементы для управления следящим приводом.

Прежде всего, это шкала угла положения вала двигателя. На ней два указателя:

  • Заданного угла – треугольник зеленого цвета;
  • Реального угла – треугольник красного цвета.

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

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

Активная птичка ”Слежение” означает, что при перемещении указателя заданного угла двигатель оперативно (в реальном времени) отрабатывает положение. Т.е. вал реального двигателя следует за зеленым указателем.

Если птички  ”Слежение” нет, то заданное значение отслеживается только по нажатию кнопки ”Пуск”.

Кнопка “Синхронизация” устанавливает оба указателя в нулевое положение. Используется для задания начального положения двигателя.

Я снял короткий фильм о работе следящего привода.

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

Только надо помнить, что в режиме фиксации ротора при остановке через драйверы всегда течет ток. На транзисторы драйвера должны быть установлены радиаторы. Иначе они могут перегреться и сгореть.

 

Ардуино проект следящего электропривода с управлением от переменного резистора.

Второй вариант следящего электропривода без обратной связи я решил реализовать как автономное устройство, в котором заданный угол устанавливается переменным резистором.

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

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

Схема подключения переменного резистора

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

Следящий электропривод

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

 

Резидентная программа следящего электропривода на Ардуино.

Скетч программы можно загрузить по этой ссылке:

Зарегистрируйтесь и оплатитеВсего 60 руб. в месяц за доступ ко всем ресурсам сайта!

Надеюсь, у Вас уже установлены библиотеки TimerOne.h и StepMotor.h.

Скетч программы небольшой.

// программа следящего электропривода без обратной связи
 
#include <TimerOne.h>
#include <StepMotor.h>

#define MEASURE_PERIOD 80  // время периода измерения (* 250 мкс)
#define numStepsMotor 400  // число шагов двигателя на оборот

int timeCount;  // счетчик времени
long  sumU; // переменные для суммирования кодов АЦП
long  averageU; // сумма кодов АЦП (среднее значение * 80)
int currentStep;  // текущее положение двигателя
int setStep;  // заданное положение двигателя

StepMotor myMotor(10, 11, 12, 13);  // создаем объект типа StepMotor, задаем выводы для фаз

void setup() {
  Timer1.initialize(250);  // инициализация таймера 1, период 250 мкс
  Timer1.attachInterrupt(timerInterrupt, 250);  // обработчик прерываний
  myMotor.setMode(0, false);  // шаговый режим, без фиксации при остановке
  myMotor.setDivider(15);     // делитель частоты 15
}

void loop() {
  // проверка остановки двигателя
  if( myMotor.readSteps() == 0) {
    // двигатель остановился

    // вычисление заданного положения
    setStep = averageU * (numStepsMotor - 1) / 1023 / MEASURE_PERIOD;

    // определение сколько шагов надо сделать
    int stepsToDo;  // сколько шагов надо сделать

    stepsToDo = currentStep - setStep; // ошибка рассогласования

    if( abs(stepsToDo) >= (numStepsMotor / 2) ) {

      if((stepsToDo) > 0) stepsToDo -= numStepsMotor;
      else                stepsToDo += numStepsMotor;     
    }
 
    myMotor.step(stepsToDo);  // запуск двигателя
    currentStep = setStep;  // перегрузка текущего положения   
  }
}

//-------------------------------------- обработчик прерывания 250 мкс
void  timerInterrupt() {
  myMotor.control(); // управвление двигателем

  sumU += analogRead(A0);  // суммирование кодов АЦП
  timeCount++;  // +1 счетчик выборок усреднения

  // проверка числа выборок усреднения
  if ( timeCount >= MEASURE_PERIOD ) {
    timeCount= 0;
    averageU= sumU; // перегрузка среднего значения
    sumU= 0;
    }
}

В программе измеряется и усредняется значение напряжения на аналоговом входе A0. Этот блок описан в уроке 13.

При остановленном двигателе проверяется, есть ли разница между заданным и реальным углами положения ротора. При необходимости вызывается функция step() для поворота вала двигателя.

Вот короткий фильм о работе устройства.

У моего двигателя 400 шагов на оборот. Если Вы используете другой привод, то надо изменить строку

#define numStepsMotor 400  // число шагов двигателя на оборот

Двигатель работает в шаговом режиме без фиксации ротора при остановке. Режим задан в блоке setup, его  легко можно изменить. В полу шаговом режиме число шагов двигателя надо задать в два раза большим. В моем случае:

#define numStepsMotor 800  // число шагов двигателя на оборот

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

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

Я так понял, что в окончательном варианте устройство будет оформлено в виде больших стрелочных индикаторов.

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

Вот ссылка на реальный проект следящей системы, реализованный таким образом.

К плате Arduino Nano подключены два двигателя, которые отслеживают положение по данным, заданным с интерфейса DMX.

 

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

 

Предыдущий урок     Список уроков     Следующий урок

1

Автор публикации

не в сети 2 недели

Эдуард

280
Комментарии: 1936Публикации: 197Регистрация: 13-12-2015

Один комментарий на «Урок 32. Следящий электропривод с шаговым двигателем.»

  1. Здравствуйте Эдуард! Прочёл Вашу статью и был поражен Вашей работоспособностью и глубиной знаний предмета.На таких людях и держится наша Россия. У меня маленькая просьба,в программе tracker можно ли добавить одну опцию-задать величину угла с клавиатуры и затем её повторять 26 раз или более по количеству зубцов шестерни.Ваша программа хорошо подойдёт для делительной головки к токарному станку. По цене комплектующих -бюджетный вариант. Драйвер сам соберу,а за программу сколько назначите. С уважением Смолин А.Н.

    0
  2. Здравствуйте!
    Повторил схему следящего ШД, но результат отличен от того, что получилоь у Вас.
    Вал двигателя постоянно дёргается и при неизменном положении ручки переменника, и даже когда вход АЦП прижат к земле.
    Проблема в том, что значения setStep постоянно меняются
    setStep= 64
    setStep= 64
    setStep= 27
    setStep= 60
    setStep= 65
    В стандартном скетче показания АЦП передаются правильно.
    плата Nano на 168 Меге.
    В чём может быть проблема?

    0
    • Здравствуйте! А что значит «В стандартном скетче показания АЦП передаются правильно»? Вы изменили программу?

      0
      • Попробуйте поставить конденсатор 0,1 — 1 мкФ между аналоговым входом и землей. Разместить его надо на контактах разъема.
        Попробуйте вывести setStep на компьютер и проверьте работу АЦП с отключенным двигателем. Возможно у вас слабый блок питания или двигатель дает помехи.

        0
        • Здравствуйте! стандартным я называл скетч из «примеров» ардуино.

          Спасибо за совет- запитал ШД от отдельного источника и поставил конденсатор, теперь работает правильно)

          0
  3. Здравствуйте.
    Программа «StepMotor» из урока 31 работает нормально.
    Программа «Tracker» не работает, светодиод горит красным. При нажатии стрелочек кратковременно вспыхивает зелёным. На Адруине светодиоды Тх, Rx моргают нормально.
    В чём может быть причина?
    ОС — Win 7.

    0
    • Здравствуйте!
      Не знаю. У меня тоже Windows 7. Все работает. Может компьютер совсем медленный? В программе Tracker чаще обращения к драйверу происходят.

      0
  4. Следящий режим работает.
    Светодиод постоянно красный.
    Режим шаг не работает.

    0
    • Не знаю, что сказать. Странно. Может все-таки компьютер совсем медленный? Передать успевает, а ответ пропускает.

      0
  5. Программа следящего электропривода без обратной связи.
    Шаговик двигаеться в одну или другую сторону без останоки,изменяя направление в среднем положении ручки и все. Подключал чере драйвер
    Drv 8825 двумя выходами.подскажите прграмма очень нужна.

    0
    • Здравствуйте!
      У вас STEP/DIR драйвер. Поэтому вы должны использовать программы из урока 35. Сначала следует проверить, что двигатель правильно работает под управлением от программы компьютера StepMotor. Дальше я бы проверил работу следящей системы с управлением от компьютера.
      И только затем разрабатывал бы автономную систему. В программе из урока 32 надо сделать изменения, подобные тем, какие я сделал в программе драйвера с управлением AT командами, т.е. использовать другую библиотеку -StepDirDriver. Еще надо правильно задать в программе число шагов двигателя на оборот с учетом микрошагов, если включен режим микрошага.

      0
  6. У меня скетч не читаем ! перехожу по указанной ссылке и вот что вижу ! // программа следящего электропривода
    // без обратной связи

    0
      • Здравствуйте!
        Проверяйте подключили ли библиотеки. Скетч должен быть размещен в папке с именем на латинице. У некоторых проблемы с Windows XP бывают. А какую ошибку выдает?

        0
  7. Здравствуйте.
    Неподскажите комплектующие для урока 32.из партнерского магазина. Библиотека 35 урока непоходит к уроку 32.

    0
    • Здравствуйте!
      Там много вариантов STEP/DIR драйверов. Например, DRV8825. Во втором магазине есть шаговые двигатели. Выбирайте биполярный, например, 17HS4401S.

      0
  8. И снова здравствуйте! Эдуард, подскажите как с помошью этой библиотеки сделать так чтобы например на 1000 шагов одного двигателя второй за это же время делал скажем 5000 шагов???

    0
      • Не могу придумать как вывести формулу зависимости этих скоростей от числа шагов

        0
        • Есть время шага. Величина обратная скорости, и определяемая коэффициентом деления. Необходимо, чтобы время шага одного двигателя было в нужное число раз меньше времени шага другого двигателя. Например:
          Время периода прерывания 250 мкс.
          У первого двигателя время шага 5 мс, делитель равен 20.
          Чтобы второй двигатель делал 5 шагов за один шаг первого, необходимо установить время шага 1 мс, делитель 4.

          0
          • Эдуард, в итоге непонятно как вычисляется время шага. Ведь если период 0.25мс, а делитель 20 получаем 0.0125 откуда берутся 5мс. Помогите!!!

            0
          • Здравствуйте!
            Надо умножать время. 0,25 мс * 20 = 5 мс. Делитель частоты умножает время периода. Частота и время периода обратные функции. Делитель отсчитывает временные периоды. Насчитает 20 и сделает шаг.

            0
    • Нет. Представьте, идут импульсы с определенным периодом. В нашем случае 250 мкс. Делитель = 1, каждый импульс переходит в шаг. Делитель = 2, каждый второй, получается 500 мкс. Делитель = 3, каждый третий, тогда период шагов 750 мкс. И т.д.

      0
      • Получается мне необходимо округлять результаты расчётов? Как тогда выставить скорость если скажем отношение шагов одного двигателя к другому получается 32000 к 4000 у первого задан делитель 20 второй задаём исходя из расчётов получаем скорость шага 0.625 что двигатель должен двигаться в 8 раз быстрее теперь 0.625/0.25=2.5 или я чего-то не понимаю?

        0
  9. Эдуард, подскажи пожалуйста, как мне прикрутить библиотеку StepDirDriverN к этому уроку? МНе нужно крутить двигатель через драйвер степ/дир переменным резистром, т.е. поворачивать его пропорционально углу поворота резистора.

    0
    • Здравствуйте!
      Посмотрите в уроке 35 раздел Проверка драйвера шагового двигателя с AT командами. Там «прикручена» библиотека StepDirDriver. Две строчки надо заменить: объявление объекта StepDirDriver и другую библиотеку подключить(#include).

      0
  10. Добрый день. Понравились Ваши уроки по arduino. Подскажите можно ли управлять мотором не переменником а скважностью импульсов. То есть чем больше импульсов на входе тем больше угол поворота.

    0
    • Здравствуйте!
      Надо сделать преобразователь частоты в код и использовать его для задания угла положения.
      Есть вариант использовать преобразователь частоты в напряжение, которое подать вместо сигнала переменного резистора.

      0
    • Здравствуйте!
      Пишет, что в классе нет метода setMode.
      У меня единственное предположение, что у вас установлена другая библиотека с таким же именем. Такое случается при обновлении с библиотекой Button. Возможно появилась другая библиотека StepMotor.
      Установите библиотеку с моего сайта. Можете проверить так. Открыть файл библиотеки StepMotor.h, посмотреть какие там методы и сравнить с методами из урока 29.

      0
  11. Здравствуйте, Эдуард! Не могли бы вы подробнее пояснить, как работает ниже приведенная часть кода?

    if( abs(stepsToDo) >= (numStepsMotor / 2) ) {

    //вот это условие! Для чего оно? Исходя из него приращение числа шагов происходит только если рассогласование по
    модулю превышает половину оборота двигателя?

    if((stepsToDo) > 0) stepsToDo -= numStepsMotor;
    else stepsToDo += numStepsMotor;
    }

    0
    • Извините за невнимательность. Разобрался сам. Это всего лишь корректировка на тот случай если рассогласование выходит за границы одного оборота двигателя.

      0
    • Здравствуйте!
      Насколько я помню, это условие выбирает направление движения, чтобы путь был кратчайший. Например, если текущий угол 10 градусов, а надо попасть в 300 градусов, то ближе будет вращаться против часовой стрелки.

      0
  12. Полуоборота двигателя. При рассогласовании превышающем половину оборота двигатель теоретически должен устранять его идя по меньшему пути. Но на практике при резком повороте подстроечного резистора мой двигатель «теряет координаты»(

    0
  13. Увеличил период опроса и слегка увеличил величину делителя частоты вызова процедуры управления двигателем. Всё заработало. При этом двигатель при достижении заданной точки перестал дёргаться.

    0
  14. Эдуард, добрый день! У меня регулятор холостого хода ваз, у него шток выдвигается и задвигается обратно, как сделать чтобы при напряжении в 2.5В шток был выдвинут наполовину,а при уменьшении напряжения двигался в одну сторону, при увеличении в другую сторону?

    0
    • Здравствуйте!
      У вас двигатель должен делать несколько оборотов, а не один, как в программе. Кроме того у него другое число шагов на оборот. Для начала, я бы поставил нужное число шагов на оборот двигателя и попробовал, как это работает во всем диапазоне.
      #define numStepsMotor 400 // число шагов двигателя на оборот
      Возможно, необходимо подкорректировать этот параметр.
      Во время проверки при включении необходимо каждый раз в ручную выставлять двигатель в начальное положение.

      Дальше надо сделать начальную синхронизацию. Если без использования датчика, то это можно сделать выполнив заведомо большое число шагов, чтобы установить двигатель в начальное положение.
      myMotor.step(numStepsMotor);

      0
      • А как в этой строке (myMotor.step(numStepsMotor)) прописывать количество шагов, чтобы вернуть шток в начальное положение и как задать направление движения штока?

        0
        • А ещё мне необходимо отключить функцию возврата вала в заданное положение по «кратчайшему пути», поскольку в моем случае это приведет к сбою в позиционировании штока, как это сделать?

          0
        • myMotor.step(500); — 500 шагов против часовой стрелки
          Motor.step(-500); — 500 шагов по часовой стрелке
          Попробуйте сначала программу в том виде, какая она есть с измененным числом шагов двигателя на оборот.

          1
  15. Эдуард, здравствуйте! Честно признаюсь, не совсем разобрался как отключить движение по короткому пути. Буду признателен, если поможете. Спасибо!

    0
    • Боюсь ошибиться, но достаточно убрать блок вычисления короткого пути (4 строки).

      // вычисление заданного положения
      setStep = averageU * (numStepsMotor — 1) / 1023 / MEASURE_PERIOD;

      // определение сколько шагов надо сделать
      int stepsToDo; // сколько шагов надо сделать

      stepsToDo = currentStep — setStep; // ошибка рассогласования

      // if( abs(stepsToDo) >= (numStepsMotor / 2) ) {

      // if((stepsToDo) > 0) stepsToDo -= numStepsMotor;
      // else stepsToDo += numStepsMotor;
      // }

      myMotor.step(stepsToDo); // запуск двигателя
      currentStep = setStep; // перегрузка текущего положения
      }
      }

      0
  16. Здравствуйте, Эдуард! У меня так и не получилось заставить работать рхх ваз, при вращении потенциометра шток хаотично дергается вперёд — назад. Что посоветуете делать?

    0
    • Здравствуйте!
      Надо искать причину, почему хаотично дергается. У меня не дергается.
      Возможно, у вас какая-то аппаратная ошибка. Проверьте как вращается двигатель под управлением от компьютера (урок 31).

      0
    • Здравствуйте!
      Проверьте, как работает двигатель. Загрузите программу из урока 31 и запустите вращение от компьютера.

      0
      • Сломав голову я все же понял в чем проблема. Оказалось нужно было поменять последовательность цифровых контактов в скетче. У меня осталась пара нюансов: 1 — мне нужно, чтобы двигатель работал в диапазоне АЦП от 512 до 1023, а все что ниже игнорировалось. 2 — как сделать, чтобы вращение осуществлялось ступенями, к примеру, чтобы в диапазоне от 550 до 750 двигатель сделал 10 шагов и остановился и пока АЦП изменяется в этом диапазоне двигатель не вращался, соответственно при значении АЦП в диапазоне от 751 до 900 и тд…
        За помощь буду очень признателен!

        0
        • Сделать рабочим половину диапазона АЦП не проблема. А второй пункт я не понял. Что значит в определенном диапазоне сделать 10 шагов. Это следящая система. У нее есть заданное положение ротора, и она приводит текущее положение к заданному. Может вам какой-то другой алгоритм нужен.

          0
          • Попробую описать для чего мне это и чего хочу добиться…
            Конструирую бензиновый генератор из 4-х тактного двигателя китайского скутера 139QMB. С помощью ардуино, РХХ ВАЗ и датчика тока ACS 712 хочу реализовать автоматическое управление дроссельной заслонкой. Датчик тока без нагрузки выдает напряжение 2.5В, когда ток через датчик протекает в одном направлении — напряжение увеличивается пропорционально от 2.5В до 5В, когда в другом напряжение уменьшается пропорционально от 2.5В до 0В, у меня датчик тока с диапазоном измерения 30А, то есть при нулевом токе выдает напряжение 2.5В, при токе 30А напряжение 5В, при токе -30А напряжение 0В. Я хочу чтобы при нагрузке от 5 до 10 ампер шток рхх выдвинулся на какое-то количество шагов и тем самым прибавил обороты двигателя, при нагрузке от 10 до 15 еще выдвинулся на какое-то количество шагов и т.д., при уменьшении нагрузки задвигался соответственно обратно. Но чтобы при кратковременных скачках тока РХХ не делал «ложные» шаги нужно чтобы управление осуществлялось ступеньками, к примеру от 0 до 5 ампер шток не выдвигается, при 5.1 выдвигается на какое-то количество шагов и остается неподвижным вплоть до 10 ампер и т.д. Соответственно в обратном порядке при уменьшении нагрузки… Таким образом получится плавное автоматическое регулирование мощности двигателя в зависимости от нагрузки. В перспективе Хочу реализовать управление от смартфона через блютуз с отображением всех параметров (напряжение, ток нагрузки, обороты двигателя, температура двигателя и т.д.).
            Надеюсь получилось передать основную идею.

            0
          • Здравствуйте!
            Сейчас в программе заданное положение вала двигателя поступает от измерителя напряжения. Вам необходимо передать его через таблицу. Если напряжение на аналоговом входе находится в определенном диапазоне, то вал надо установить в определенное положение.
            Но надо реализовать начальную установку при включении питания. Если по какой-то причине положение двигателя собъется, то система будет работать неправильно.
            Может вам не нужна следящая система? Может необходим регулятор? Завести обратную связь от датчика оборотов и поддерживать этот параметр поворотом двигателя.

            0

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".