Пид регулятор на atmega8 своими руками

Добавил пользователь Валентин П.
Обновлено: 19.09.2024

В прошлом уроке мы разобрались с работой ПД-регулятора.

Пропорциональный регулятор возвращает результат, который
пропорционален текущему значению ошибки.

Это достигается простым умножением текущей ошибки на коэффициент kP:



P = ОШИБКА * kP

П-регулятор указывает машине повернуть в сторону линии. Чем дальше линия от центра бампера, итем сильнее ошибка отличается от 0, тем круче поворот машины.

Недостатком П-регулятора является то, что он не может работать на больших скоростях.

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

Дифференциальная составляющая (от лат. differentia – разность) — это разность между текущей и предыдущей ошибкой.

Дифференциальный регулятор возвращает результат, который
зависит от скорости изменения текущей ошибки.

Это достигается умножением разности ошибок на коэффициент kD:
D = (ОШИБКА – предыдущая ОШИБКА) * кD

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

Чем выше скорость изменения ошибки, тем сильнее влияние Д-регулятора.

Недостатком Д-регулятора является его чувствительность к шумам (некорректным данным).

Для борьбы с указанными недостатками в одном регуляторе совмещают пропорциональную (П), интегральную (И) и дифференциальную (Д) составляющую, получается ПИД-регулятор.

Интегральная составляющая (от лат. integra – составной) — это сумма нескольких последних ошибок.

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

Это достигается умножением суммы ошибок на коэффициент kI.
I = СУММА ПОСЛЕДНИХ ОШИБОК * кI

Количество ошибок в сумме определяет скорость реакции И-регулятора:

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

И-регулятор помогает ПД-регулятору выровнять центр бампера с центром линии как на прямых участках, так и на поворотах.

Пример: представим, что машина едет по дуге, и бампер выдаёт ошибку 0,5. П-регулятор слабо доворачивает вправо, — этого хватает для движения по линии, но ошибка сохраняется на прежнем уровне до завершения поворота. Значит, весь путь центр бампера был смещён от центра линии. Сумма из 10 ошибок по 0,5 уже равна 5, и И-регулятор поможет П-регулятору скорректировать путь так, что центр бампера пройдёт по центру линии на протяжении всей дуги.

Пример: предположим, что на линии трассы появилась царапина, — это будет шумом для Д-регулятора, который резко среагирует, и машина "дёрнется" на линии. Но И-регулятор сгладит воздействие Д-регулятора, так как изменение всего 1 из 10 ошибок является незначительным.

ПИД регулятор возвращает результат, который является суммой
пропорциональной, интегральной и дифференциальной составляющих:
PID = P + I + D

Поведение составляющих ПИД-регулятора:

Поведение составляющих ПД-регулятора было рассмотрено в предыдущем уроке. Ниже представлена картинка движения машины по линии с ПД-регулятором:


Как видно из картинки выше, у ПД-регулятора есть два слабых места: на прямой линии машина едет с небольшими отклонениями, и на повороте видно отклонение центра бампера от центра линии.

После добавления интегральной составляющей, картинка станет такой:


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

Код ПИД-регулятора:

  • До цикла определяем массив ERR для хранения 10 последних ошибок;
  • Предполагается, что остальные переменные кода также объявлены;
  • Первая строка цикла увеличивает значение i на 1, со сбросом в 0 при достижении 10;
  • Вторая строка сохраняет текущую ошибку в элемент ERR[i];
  • Третьей строкой мы получаем в переменную SUM сумму последних 10 ошибок;
  • Следующие три строки определяют составляющие ПИД регулятора;
  • Предпоследняя строка получает результат PID как сумму составляющих P + I + D;
  • Последней строкой значение i сохраняется в j . Значит, при каждом новом проходе цикла элемент ERR[i] хранит текущую ошибку, а ERR[j] хранит предыдущую ошибку.

Настройка ПИД-регулятора:

  • Настройка ПИД-регулятора сводится к поиску коэффициентов для пропорциональной, интегральной и дифференциальной составляющих.
  • Сброс любого из коэффициентов в 0 приводит к отключению его составляющей:
    • Спрос kP в ПИД-регуляторе приведёт к получению ИД-регулятора;
    • Спрос kI в ПИД-регуляторе приведёт к получению ПД-регулятора;
    • Спрос kD в ПИД-регуляторе приведёт к получению ПИ-регулятора.
    • Слишком высокий kD приведёт к тому, что машина начнёт "дрожать" на прямой линии;
    • Слишком низкий kD не избавит от "виляний" машины на прямых участках и не улучшит прохождение крутых поворотов;
    • Оптимальным является kD, при котором бампер машины не покидает линию на всех поворотах трассы. При этом машина не "виляет" и не "дрожит" на прямых участках;
    • После настройки kD можно снизить kP, если это не ухудшит движение машины;
    • Слишком высокий kI похож на перерегулировку kP — машина начнёт "вилять";
    • В процессе настройки kI можно снизить подобранные ранее kP и kD.

    Коэффициент регулятора определяет силу воздействия регулятора.

    Чем больше коэффициент, тем сильнее меняется выходная величина.

    • Обычно kD >kP, так как разность ошибок меньше одной ошибки, значит, коэффициент больше.
    • Обычно kI setSpeed () в процентах.
      Выберем скорость машины, равную 60%. Именно эту скорость мы и указываем обоим колёсам.
      Предположим, что при kI = 0, kD = 0, kP = 8 машина не покидает повороты трассы.
      Предположим, что при kI = 0, kD = 14.4, kP = 8 машина перестала "вилять" на прямых участках.
      Предположим, что при kI = 0.1, kD = 14.4, kP = 8 бампер не покидает центр линии на поворотах.

    Немного пояснений к коду loop ():

    • Текущая ошибка сохраняется в элемент ERR[i] ;
    • Цикл for(auto j:ERR) проходит по всем элементам массива ERR , копируя их значения в переменную j . В теле цикла выполняется суммирование всех значений в SUM ;
    • Запись ERR[(i+9)%10] равносильна записи ERR[i-1] , только при i=0 получим ERR[9] . Эта запись позволяет получить предыдущую ошибку.

    Дополнительное задание.

    Попробуйте изменить коэффициент И-регулятора kI и посмотрите на результат.

    Скетч для диапазона скоростей:

    В предыдущем скетче все коэффициенты были найдены для скорости 60%. Если уменьшить скорость движения машины speed с 60% до 30%, то найденные ранее коэффициенты будут слишком велики, и мы получим перерегулирование.

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

    Теперь можно написать скетч, у которого скорость можно менять от 20 до 60%:

    Этот скетч отличается от предыдущего только тем, что значения kP и kD определены не числами, а формулами.

    При изменении значений скорости speed в пределах от 20% до 60%, будут автоматически пересчитываться коэффициенты kP и kD, и машина продолжит корректно двигаться по линии

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

    Это руководство описывает простую реализацию дискретного пропорционально-интегрально-дифференциального (ПИД) контроллера.

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


    В течение долгого времени в области управления использовались многие решения, но ПИД-регуляторы могут стать "промышленным стандартом" из-за своей простоты и хорошей производительности.

    Для получения дополнительной информации о ПИД-регуляторах и их применении читатель должен обратиться к другим источникам, например, PID Controllers by K. J. Astrom & T. Hagglund (1995)


    На рисунке 2-1 показана схема системы с ПИД-регулятором. ПИД-регулятор сравнивает измеренное значение процесса Y с заданным опорным значением Y0. Затем разница, или ошибка, E, обрабатывается для расчета нового входного процесса U. Этот новый входной процесс будет пытаться приблизить значение измеряемого процесса к заданному значению.

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



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

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

    Рисунок 2-2 показывает схемное решение ПИД-регулятора, где Тр, Ti, и Td обозначают постоянные времени пропорциональной, интегральной и дифференциальной составляющих соответственно.


    Пропорциональная составляющая (П) дает управляющий сигнал пропорционально вычисленной ошибке. Использование только одного пропорционального управления дает стационарную ошибку всегда, кроме случаев, когда управляющий сигнал равен нулю, а значение системного процесса равно требуемой величине. На рис. 2-3 стационарная ошибка в значении системного процесса появляется после изменения опорного сигнала (ref). Использование слишком большого П-члена даст неустойчивую систему.



    Интегральная составляющая (И) представляет собой предыдущих ошибок. Суммирование ошибки будет продолжаться до тех пор, пока значение системного процесса не станет равно нужному значению. Обычно интегральную составляющую используют вместе с пропорциональной, в так называемых ПИ-регуляторах. Использование только интегральной составляющей дает медленный отклик и часто колебательную систему. Рисунок 2-4 показывает ступенчатый отклик И и ПИ-регуляторов. Как видите отклик ПИ-регулятора не имеет стационарной ошибки, а отклик И-регулятора очень медленной.

    Рисунок 2-4. Отклик И- и ПИ-контроллера на ступенчатое изменение контролируемой величины


    Дифференциальная составляющая (Д) представляет собой скорость изменения ошибки. Добавление этой составляющей улучшает отклик системы на внезапное изменение ее состояния. Дифференциальная составляющая Д обычно используется с П или ПИ алгоритмами, как ПД или ПИД контроллеры. Большая дифференциальная составляющая Д обычно дает неустойчивую систему. Рисунок 2-5 показывает отклики Д и ПД- контроллера. Отклик ПД-контроллера дает быстрый рост значения процесса, чем П контроллер. Обратите внимание, что дифференциальная составляющая Д ведет себя по существу как фильтр верхних частот для сигнала ошибки и, таким образом легко делает систему нестабильной и более чувствительной к шуму.

    Рисунок 2-5. Отклик Д- и ПД-контроллера на ступенчатое изменение опорного сигнала


    ПИД-регулятор дает лучшую производительность, поскольку использует все составляющие вместе. Рисунок 2-6 сравнивает П, ПИ, и ПИД-регуляторы. ПИ улучшает П, удалив стационарную ошибку, и ПИД улучшает ПИ более быстрым откликом.


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

    Существуют некоторые методы для настройки ПИД-регулятора. Выбор метода будет зависеть в значительной степени от того, может ли быть процесс автономным для настройки или нет. Метод Циглера-Николса это известный не автономная метод настройки. Первым шагом в этом методе является установка И и Д коэффициентов усиления в нуль, увеличивая усиление П до устойчивого и стабильного колебаний (как можно ближе). Тогда критический коэффициент усиления Кс и период колебаний Pc записывается и П, И и Д значения корректируются с использованием Таблицы 2-1.

    Таблица 2-1. Расчет параметров по методу Циглера-Николса


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

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

    В отличие от простых алгоритмов управления, ПИД-регулятор способен манипулировать управляющим сигналом на основе истории и скорости изменения измеряемого сигнала. Это дает более точный и стабильный метод управления.

    На рисунке 2-2 показано схемное решение ПИД-регулятора, где Тр, Ti, и Td обозначают постоянные времени пропорциональной, интегральной, и дифференциальной составляющих соответственно.


    Это дает U по отношению к e в интервале времени




    Где n является дискретным шагом времени t.

    Это дает контроллер:



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


    К этому документу прилагается рабочее приложение, реализованное на C. Полную описание исходного кода и информации о компиляции можно найти в файле "readme.html".

    Рисунок 3-1. Блок-схема демонстрационного приложения


    На рисунке 3-1 показана упрощенная схема демо приложения.

    ПИД-регулятор использует структуру для хранения своего статуса и параметров. Эта структура инициализируется функцией main, и только указатель на него передается функциям Init_PID() и PID().

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

    Для повышения точности p_factor, i_factor и d_factor увеличиваются в 128 раз. Результат ПИД алгоритма позже уменьшается путем деления на 128. Значение 128 используется для обеспечения оптимизации при компиляции.


    Кроме того, влияние Ifactor и Dfactor будет зависеть от времени T.


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

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

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

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

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

    K. J. Astrom & T. Hagglund, 1995: PID Controllers: Theory, Design, and Tuning.
    International Society for Measurement and Con.

    Эту тему я решил выложить, потому, что долго искал простое описание и практическую реализацию ПИД регулятора. Толкового описания для “чайников” я так и не нашел, а практическая реализация сводится либо к использованию библиотек, либо сравнима с запуском ракеты на луну. Про подбор коэффициентов для регулятора вообще скромно умолчу, потому что это сродни танцам с бубном. Причем в каждом конкретном случае и недай бог изменятся какие-то начальные условия…

    Выношу на ваш суд своё видение и реализацию ПИД регулятора. Может я и изобрел влосипед… Но если все попробуют и протестируют предложенный тип регулятора, а потом выскажут свое мнение, будет очень интересно. Возможно это облегчит кому-нибудь жизнь.

    Алгоритм работы ПИД регулятора.

    Теория:

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

    Предлагаемый регулятор имеет следующие особенности и характеристики;

    1. Высокая скорость нарастания выхода мощности регулирования при большой разнице между заданной величиной и измеренной.
    2. Высокая точность и плавность изменения мощности при небольшой разнице между заданной величиной и измеренной.
    3. Стабильность работы на всех краях диапазона регулирования.
    4. Простота математического расчёта.
    5. Малая зависимость от способа и типа прикладываемой мощности и количества или обьема регулируемого тела.

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

    В классическом ПИД регуляторе применяются три вычисляемых коэффициента, не считая временных переменных. Это П – пропорциональная составляющая, И – интегральная составляющая, Д – интегральная составляющая.

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

    Практическое описание:

    Рассмотрим классический пример регулировании температуры от 0 до 100* при регулировании прилагаемой мощности от 0 до 100% с временем интегррования 1сек. При регулировании неважно количество, масса, теплоемкость и тепло потери нагреваемого тела, а также прилагаемая мощность нагрева. Главное условие, что при прилагаемой мощности нагрева равной 100% , нагрев нагреваемого обьекта достигает или превышает заданное значение температуры, а при прилагаемой мощьности равной 0% происходит остывание обьекта.

    При начальных условия температура нагреваемого объекта относительно мала, а заданная температура относительно высокая. Поэтому пропорциональная составляющая - П будет высокой. П = (Т.заданная-Т.реальная)*П.коэффицент

    Приращение температуры – И, сначала будет небольшое и будет проверяться с начала времени интервала интегррования и по окончании. В нашем случае время интегрирования принято 1 сек. И = (Т.нач.интегр. - Т.кон.интегр.)*И.коэффициент

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

    Полная формула расчета будет выглядеть следующим образом:

    Р.вых = Р.вых + П – И

    Р.вых = Р.вых + (Т.зад-Т.реал)*П.коэф – (Т.нач.интегр. - Т.кон.интегр.)*И.коэф

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

    Мотор постоянного тока

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

    Игорь из Москвы заказал мне разработку контроллера- регулятора скорости вращения двигателя постоянного тока.

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

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

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

    Должен получиться учебный материал на несколько разных тем:

    • аппаратное подключение двигателя постоянного тока к Ардуино;
    • измерение частоты и периода сигнала ;
    • управление нагрузкой с помощью ШИМ;
    • ПИД-регулятор;
    • этапы разработки подобных устройств.

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

    У Игоря используется достаточно мощный мотор 500 Вт, с номинальным напряжением питания 100 В. У меня такого двигателя нет. Поэтому я проведу разработку и испытания на компьютерном вентиляторе с номинальным напряжением 12 В. Не сомневаюсь, что все написанное и разработанное будет справедливо и для гораздо более мощных устройств. По крайней мере, Игорь проверит контроллер на 500 ваттном моторе.

    Аппаратное подключение двигателя постоянного тока к Ардуино.

    Существуют две основные задачи:

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

    Сошлюсь на Урок 39, раздел ”Общие сведения о регуляторах”. Там написано, что необходимо выделить:

    • регулируемый параметр – что мы регулируем;
    • регулирующий элемент – с помощью чего мы регулируем.

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

    Подключение двигателя к ШИМ Arduino.

    Естественно для управления двигателем будем использовать ШИМ. Это значительно упростит схему, повысит КПД. Практически, независимо от мощности и напряжения мотора, для управления им достаточно одного ключа. Конечно, передельно-допустимые параметры ключа должны соответствовать двигателю. Для моего двигателя-вентилятора я выбрал такие элементы.

    Подключение мотора к ШИМ Ардуино

    ШИМ с выхода Ардуино открывает и закрывает ключ, собранный на MOSFET-транзисторе. Можно, конечно, использовать и биполярный транзистор, но:

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

    Я выбрал MOSFET-транзистор IRF7341: N-канал, 55 В, 4 А. Кроме предельно-допустимых параметров необходимо учитывать то, что транзистор должен быть низкопороговым, т.е. открываться при небольшом напряжении (не более 5 В). Иначе необходимо использовать дополнительный элемент – драйвер.

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

    В некоторых подобных схемах используют низкочастотные выпрямительные диоды, например, 1N4007. Это допустимо только для дискретного управления двигателем: включить или выключить. При управлении с помощью ШИМ, особенно с высокой частотой, диод должен быть высокочастотным, лучше с барьером Шоттки.

    При закрытом транзисторе диод находится в открытом состоянии, через него течет ток размагничивания обмотки двигателя. Затем транзистор открывается. А диод закрывается только через время восстановления обратного сопротивления. Даже у “быстрых” (FR307) диодов это время составляет 150-500 нс, у “супербыстрых” 35 нс, а у выпрямительных 1N4007 этот параметр не нормируется. Представьте себе, что при частоте ШИМ 100 кГц 100000 раз в секунду будет происходить короткое замыкание. Это приведет к жутким помехам, уменьшению КПД и нагреву диода и транзистора.

    При высоком напряжении все значительно усугубиться. В общем рекомендации по выбору диода:

    • Лучше всего диод Шоттки.
    • Если высокое напряжение (более 150 В) не позволяет использовать диод Шоттки, то лучшим вариантом будет карбидокремиевые диоды Шоттки.
    • Следующим приемлемым вариантом могут быть HEXFRED-диоды с ограничением обратного тока обратного восстановления;
    • На крайний случай остаются супербыстрые и ультрабыстрые диоды.

    У меня напряжение всего 12 В. Я выбрал диод Шоттки SS16.

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

    Измерение скорости вращения.

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

    Конструкции измерителей скорости могут быть самыми разными. Можно закрепить на валу двигателя металлический диск с радиальными прорезями и использовать автомобильный датчик Холла.

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

    Я поступил проще. Использовал дешевый, миниатюрный датчик Холла TLE4905L. В самых дорогих магазинах он стоит до 50 руб, а на АлиЭкспресс от 25 руб.

    Это цифровой датчик Холла, настроенный на определенный порог магнитного поля. Он прекрасно срабатывает на расстоянии 8 мм от миниатюрного магнита диаметром 5 мм и толщиной 1 мм.

    TLE4905L

    Конструкция измерителя очевидна. Я приклеил 2 магнита к диску вентилятора и над линией, по которой они двигаются при вращении, расположил датчик Холла.

    Конструкция измерителя

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

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

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

    TLE4905L к Ардуино

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

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

    С учетом всего вышесказанного окончательная схема контроллера-регулятора оборотов двигателя будет выглядеть так.

    Схема ПИД-регулятора оборотов мотора на Ардуино

    В реальных приложениях обороты можно задавать напряжением на аналоговом входе A0. Получится стандартный аналоговый интерфейс 0…5 В. Если необходим диапазон 0…10 В, то достаточно добавить резисторный делитель напряжения.

    Состояние контроллера для отладки ПИД-регулятора будем передавать на компьютер через последовательный порт. Я разработаю программу верхнего уровня с регистрацией данных и отображением их в графическом виде. Регистратор значительно облегчает настройку любого ПИД-регулятора.

    Читайте также: