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

Довелось трохи попрацювати з сервоприводами, вирішив поділитися інформацією.

Думаю будь-яка людина уявляє собі, що таке електродвигун, немає? - тоді згадайте який-небудь вентилятор. Яка характерна риса? Правильно, подали напругу він крутиться, зняли напругу - не крутиться. Сервопривод, це теж движок, але на відміну від інших, на скільки скажеш йому повернутися, на стільки він і повернеться і зупиниться. Поки тримається керуючий сигнал, сервопривід буде фіксувати своє становище. Можете його хоч руками покриття, він все одно повернеться в задане положення.

Кут на який повертається серва, задається шириною імпульсу. Варто уточнити невелику тонкість, сервоприводи бувають різні. Бувають такі, які крутяться постійно в певну сторону, при цьому ширина імпульсу впливає тільки на швидкість повороту. Бувають многооборотістие. Ті про які йтиметься далі, на сайті виробника мають явну маркування, в якій вказано кут повороту. Тому врахуйте якщо серва, не має явної маркування, то може виявитися так, що вона тупо постійно обертається. Не плутайте, написи 0.20 sec / 60 ° означають швидкість обертання, вони ніяк не пов'язані з максимальним кутом повороту.

Перейдемо до теорії. Представляємо собі мікроконтролер з підключеним до АЦП входу резистором R і якийсь движок, який крутиться по ШИМ сигналу PWM. Припустимо рівень сигналу АЦП безпосередньо пов'язаний з ШІМ виходом, тоді коли ми будемо крутити резистор, то швидкість буде змінюватися, коли напруга АЦП стане рівним 0, движок зупиниться.

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

Тепер розглянемо варіант 2. Ручка резистора насаджена на вал двигуна, таким чином, що коли двигун обертається, він змінює опір резистора, отже і напруга, що подається на вхід АЦП. При цьому, якщо є ще одне джерело сигналу, то мікроконтролер порівнює напруга на входах і якщо воно більше, то крутить в одну сторону, якщо менше, то в іншу. Рано чи пізно напруги вирівняти і движок зупиниться. Тому серва включає в себе все що намальовано: резистор, мікроконтролер, двигун. Зовнішній сигнал природно подавати повинні ми, щоб управляти.

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

Типові кишки виглядають так:

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

На фотке видно що резистор і моторчик з'єднується через купу шестерень, тому якщо полізе всередину будьте готові що на вас висипется все це добро. Вигляд знизу

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

Найчастіше ширина імпульсу коливається в діапазоні від 1100мкс до 1900мкс, при періоді 20мс, але цифри можуть відрізнятися, причому досить сильно. Приклад з даташіта:
Control System: + Pulse Width Control 1520usec Neutral
Required Pulse: 3-5 Volt Peak to Peak Square Wave
Operating Voltage: 4.8 Volts
Operating Speed ​​(6V): 0.20sec / 60 degrees at no load
Operating Angle: 45 Deg. one side pulse traveling 400usec
Continuous Rotation Modifiable: No
Direction: Counter Clockwise / Pulse Traveling 1520-1900usec

Звідси чітко видно, що середня точка 1520мкс, щоб повернути таку серв на 45градусов, вже потрібно подати імпульс 1900мкс, відповідно інші кути розраховуються пропорцією. Щоб повернути на -45 градусів потрібно подати імпульс 1100мкс. Тобто діапазон 90град. Ще видно, що під Continuous Rotation цей девайс НЕ заточений, що добре.

Перейдемо до практики. Є поціент Futaba S3152, яким потрібно покрутити туди - сюди.

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

Також можна цю справу потестить в протеус. Звичайне підключення по трьох проводах червоний +5, чорний - земля, білий - керуючий.

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

В останніх версіях CAVR, в Codewizard з'явилося багато ніштяк, наприклад можна вбити цифри в папуг і побачити період і імпульс в секундах. Власне нам важливий режим fast pwm top ICR. Примітний цей режим тим, що ICR задає період, а OCR ширину імпульсу.

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

Період обчислюється дуже просто:
ICR = (Частота таймера / 50Hz) -1

Тоді потрібну ширину імпульсу можна легко обчислити по пропорції:
20ms = ICR
?ms = OCR

У підсумку можна переписати так:
OCR = (x * ICR) / 20; де x це необхідна тривалість імпульсу. Наприклад, потрібна тривалість імпульсу в 1мс, значить OCR = (1 * 9C3) / 20 = 0x7C.

Власне і все. Тепер виходимо з того, що нейтральна точка = 1524мкс або OCR1 = (1.524 * 9C3) / 20 = 0xBE і залежно від тогу куди нам потрібно повернути перераховуємо OCR. Простенький приклад, повертаємо на -45, потім 0 ​​і потім +45.

Схожі статті