Интернет-лаборатория роботов ZiZiBOT.RU

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

г. Юрга,
ул.Ленинградская 38/83

+7 923-503-6074

Как работает сервопривод

 

1. Программа для Arduino IDE (arduino nano) для скачивания

2. Дополнительная информация по теме

 

 

 

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

 

Соберем сервопривод используя подручные компоненты.

В качестве системы управления и контроля будем использовать Arduino Nano, думаю её скорости работы и ресурсов будет достаточно.

 

В качестве двигателя с энкодером будет использован довольно мощный привод, купленный на AliExpress . Двигатель работает от 24вольт, имеет понижающий червячный редуктор и двунаправленный (позволяющий определять направление вращения) энкодер на датчиках Холла.

 

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

 

 

 

 


 

 

 

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

Отличие от L298N в функциях управляющих контактов:

EN – включает драйвер;

DIR – задает направление вращения;

PWM – служит для широтно-импульсного регулирования мощности подаваемой на мотор.

Драйвер позволяет управлять парой мощных коллекторных моторов, может работать с напряжением до 36 вольт и током 16А.

 

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

 

 

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

А для питания Arduino и цепей управления я применю связку из понижающего импульсного стабилизатора и линейного 5вольтового стабилизатора. Импульсным стабилизатором снижу напряжение с 36 до 8 вольт, а затем, понижу до 5вольт линейным стабилизатором, заодно уберу колебания, которые как правило присутствуют на выходе импульсных стабилизаторов.

 

 


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

 

 

Перейдем к схеме

Схема довольно проста, 8 и 9 пин считывают показания с энкодера мотора, 2 пин включает/отключает драйвер, 3 пин управляет направлением вращения, 5 пин регулирует подачу мощности драйвером на мотор посредством широтно-импульсной модуляции сигнала (ШИМ) .

 

ПИД

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

С энкодера мотора можно получить информацию о перемещении в виде подсчета количества срабатываний энкодера. Это будет происходить в фоне по прерыванию один раз в 20 микросекунд. Алгоритм обработки показаний энкодера довольно простой используется предыдущее показание и текущее:

 

switch (encoder_old_L)

{

case 2:

{

if (encoder_new_L == 3) encoder_L++;

if (encoder_new_L == 0) encoder_L--;

break;

}

case 0:

{

if (encoder_new_L == 2) encoder_L++;

if (encoder_new_L == 1) encoder_L--;

break;

}

case 1:

{

if (encoder_new_L == 0) encoder_L++;

if (encoder_new_L == 3) encoder_L--;

break;

}

case 3:

{

if (encoder_new_L == 1) encoder_L++;

if (encoder_new_L == 2) encoder_L--;

break;

}

}

encoder_old_L = encoder_new_L;

 

 

Основной цикл опроса и управления

Один раз в 10 миллисекунд происходит опрос и корректировка работы двигателя

 

 

ENC_cel – целевое значение перемещения в тиках энкодера;

ENC_tec - текущее значение положения энкодера.

 

Otklonenye - отклонение от целевого положения энкодера,

.

 

Realspeed — реальная скорость в тиках энкодера в секунду ,

 

,

 

ENC_OLD – значение энкодера в прошлом опросе;

Dt – время, которое прошло с прошлого опроса.

 

,

 

Speed – разница между реальной скоростью и заданной скоростью (с которой нужно двигаться), использование данного параметра в ПИД регуляторе является ключевым и имеет максимальное влияние на результат.

motor_Speed — заданная скорость мотора, та с которой должно происходить перемещение

 

 

,

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

oldSpeed - разница между реальной скоростью и заданной скоростью рассчитанная в прошлом опросе

 

 

,

 

IntegraSpeed - интеграл по отклонению скорости от заданной на время этого отклонения. Интеграл работает так, что если реальная скорость постоянно меньше/больше чем заданная, значение интеграла растет в сторону этого отклонения. Это значение начинает влиять на общий результат в расчете PWM, что приводит к увеличению/уменьшению мощности отдаваемой на мотор. Интегральная составляющая должна работать на анализе большого колчества итераций, работает по среднему значению за длительный период. Неправильная настройка интегрального звена приводит к низкочастотным колебаниям.

 

,

 

PWM_motor — ШИМ, который будет подан на мотор;

oldPWM_motor — ШИМ , поданный на мотор в прошлой итерации (по результатам предыдущего опроса);

Kd — коэффициент пропорциональности по отклонению скорости;

Kdd — коэффициент пропорциональности по ускорению;

Ki — коэффициент пропорциональности по интегральной составляющей.

 

 

Как работает ШИМ регулирование

 

Дополнителная информация по теме энкодеры

 

 

X

Написать сообщение:

Укажите свой номер телефона И e-mail для обратной связи
- e-mail
И
- номер телефона

Текст сообщения: