- Що таке сервомотор?
- Взаємодія серводвигунів з мікроконтролерами:
- Програмування сервомотора з мікроконтролером PIC PICF877A:
- Кругова діаграма:
- Моделювання та налаштування обладнання:
Це наш 11-й підручник з вивчення мікроконтролерів PIC за допомогою MPLAB та XC8. У цьому уроці ми дізнаємося, як керувати сервомотором за допомогою мікроконтролера PIC. Якщо ви вже працювали з сервомоторами, ви можете пропустити першу половину цього посібника, але якщо ви новачок у сервомоторі, продовжуйте читати.
До цього часу ми розглянули багато основних навчальних посібників, таких як світлодіодне блимання за допомогою PIC, таймери в PIC, взаємодія РК-дисплея, взаємодія 7-сегментних, АЦП за допомогою PIC тощо. Якщо ви абсолютно новачок, відвідайте повний перелік навчальних посібників з PIC тут і розпочати навчання.
У нашому попередньому підручнику ми дізналися, як генерувати ШІМ-сигнали за допомогою мікроконтролера PIC, сигнали генерувались на основі значення, зчитаного з потенціометра. Якщо ви тоді зрозуміли всі програми, вітаємо, ви вже закодували і сервомотор. ТАК, сервомотори реагують на ШІМ-сигнали (які ми створюємо за допомогою таймерів тут); ми дізнаємось, чому і як у цьому посібнику. Ми змоделюємо та побудуємо апаратне налаштування для цього проекту, і ви знайдете детальне відео в кінці цього посібника.
Що таке сервомотор?
Сервомотор - це тип виконавчого механізму (переважно кругового), що дозволяє управляти кутом. Доступно багато типів сервомоторів, але в цьому посібнику ми зупинимось на сервомоторах для хобі, показаних нижче.
Сервоприводи для хобі популярні, оскільки вони є недорогим методом управління рухом. Вони пропонують готове рішення для більшості потреб R / C та роботизованого любителя. Вони також усувають необхідність у спеціальному проектуванні системи управління для кожного додатка.
Більшість сервомоторів для хобі мають обертальний ангел 0-180 °, але ви також можете отримати сервомотор на 360 °, якщо вам цікаво. У цьому посібнику використовується серводвигун від 0 до 180 °. Існує два типи серводвигунів, заснованих на передачах, один - це серводвигун із пластиковою шестернею, а інший - сервомотор із металевою шестернею. Металеві шестерні застосовуються в місцях, де двигун піддається більшому зносу, але це поставляється лише за високою ціною.
Сервомотори розраховані в кг / см (кілограм на сантиметр). Більшість сервомоторів для хобі оцінюються в 3 кг / см або 6 кг / см або 12 кг / см. Цей кг / см говорить вам, скільки ваги ваш сервомотор може підняти на певній відстані. Наприклад: Сервомотор 6 кг / см повинен піднімати 6 кг, якщо вантаж підвішений на 1 см від валу двигуна, чим більша відстань, тим менша вантажопідйомність. Вивчіть тут основи сервомотора.
Взаємодія серводвигунів з мікроконтролерами:
Взаємодія сервомоторів хобі з MCU дуже проста. У сервоприводів з них виходять три дроти. З них два будуть використовуватися для подачі (позитивні та негативні), а один - для сигналу, який повинен бути надісланий від MCU. У цьому підручнику ми будемо використовувати сервомотор із металевим редуктором MG995, який найчастіше використовується для гуманоїдних ботів RC автомобілів тощо. Зображення MG995 показано нижче:
Кольорове кодування вашого сервомотора може відрізнятися, отже, перевірте відповідну таблицю даних.
Всі серводвигуни працюють безпосередньо з вашими напрямками живлення + 5 В, але ми повинні бути обережними щодо величини струму, який споживає двигун, якщо ви плануєте використовувати більше двох сервомоторів, слід розробити відповідний сервопривід. У цьому посібнику ми просто використаємо один серводвигун, щоб показати, як запрограмувати наш PIC MCU для управління двигуном. Перевірте посилання нижче для взаємодії серводвигуна з іншим мікроконтролером:
- Інтерфейс сервомотора з мікроконтролером 8051
- Управління сервомотором за допомогою Arduino
- Підручник з сервомотора Raspberry Pi
- Сервомотор з мікроконтролером AVR
Програмування сервомотора з мікроконтролером PIC PICF877A:
Перш ніж ми можемо розпочати програмування для сервомотора, ми повинні знати, який тип сигналу повинен надсилатися для управління сервомотором. Ми повинні запрограмувати MCU для передачі ШІМ-сигналів на сигнальний провід сервомотора. Всередині серводвигуна є схема керування, яка зчитує робочий цикл ШІМ-сигналу і розміщує вал сервомотора у відповідному місці, як показано на малюнку нижче
Кожен серводвигун працює на різних частотах ШІМ (найпоширеніша частота - 50 Гц, що використовується в цьому посібнику), тому отримайте технічну таблицю вашого двигуна, щоб перевірити, в який період ШІМ працює ваш сервомотор.
Подробиці щодо сигналу ШІМ для нашого Tower pro MG995 показані нижче.
З цього можна зробити висновок, що наш двигун працює з ШІМ-періодом 20 мс (50 Гц). Тож частоту нашого ШІМ-сигналу слід встановити на 50 Гц. Частота ШІМ, яку ми встановили в попередньому навчальному посібнику, становила 5 кГц, і використання цього самого нам тут не допоможе.
Але у нас тут проблема. PIC16F877A не може генерувати сигнали низьких частот Ших з допомогою модуля КПК. Згідно з таблицею даних, найнижче можливе значення, яке можна встановити для частоти ШІМ, становить 1,2 кГц. Тому ми повинні відмовитися від ідеї використання модуля CCP і знайти спосіб створювати власні ШІМ-сигнали.
Отже, в цьому керівництві ми будемо використовувати модуль таймера для генерування ШІМ - сигналів з частотою 50 Гц частоти і варіювати їх робочого циклу, щоб контролювати ангел серводвігателя. Якщо ви не знайомі з таймерами або АЦП з PIC, поверніться до цього посібника, тому що я пропускаю більшість матеріалів, оскільки ми вже їх там розглядали.
Ми ініціалізуємо наш модуль таймера прескалером 32 і робимо його переповненням для кожного 1us. Згідно з нашим технічним описом, ШІМ повинен мати період лише 20 мс. Отже, час спільного та вихідного часу повинні точно дорівнювати 20 мс.
OPTION_REG = 0b00000100; // Таймер0 із зовнішніми частотами та 32 як прескалер TMR0 = 251; // Завантажуємо значення часу для 1us delayValue може бути між 0-256 TMR0IE = 1; // Увімкнути біт переривання таймера в регістрі PIE1 GIE = 1; // Увімкнути глобальне переривання PEIE = 1; // Увімкнути периферійне переривання
Отже, всередині нашої функції переривання переривання, ми вмикаємо штифт RB0 на вказаний час і вимикаємо його на час розгортання (20 мс - час_на_потоку). Значення часу включення можна вказати за допомогою потенціометра та модуля АЦП. Переривання показано нижче.
oid interrupt timer_isr () {if (TMR0IF == 1) // Таймер перелетів {TMR0 = 252; / * Завантажте значення таймера, (Примітка: Timervalue дорівнює 101 з 100, оскільки TImer0 потребує двох циклів інструкцій, щоб почати нарощувати TMR0 * / TMR0IF = 0; // Очистити кількість прапорів переривання таймера ++;} if (count> = on_time) { RB0 = 1; // доповнюємо значення блимання світлодіодів} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Всередині нашого в той час як петлі ми тільки зчитувати значення потенціометра за допомогою модуля АЦП і поновлення на час ШІМ, використовуючи значення зчитування.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Таким чином ми створили ШІМ-сигнал, період якого становить 20 мс і має змінний робочий цикл, який можна встановити за допомогою потенціометра. Повний код наведено нижче в розділі коду.
Тепер, давайте перевіримо вихідні дані за допомогою моделювання proteus і перейдемо до нашого обладнання.
Кругова діаграма:
Якщо ви вже зустрічали підручник з ШІМ, то схеми цього посібника будуть однаковими, за винятком того, що ми додамо сервомотор замість світлодіодного індикатора.
Моделювання та налаштування обладнання:
За допомогою моделювання Proteus ми можемо перевірити ШІМ-сигнал за допомогою осцилографа, а також перевірити обертовий ангел сервомотора. Нижче наведено декілька знімків моделювання, де можна помітити обертається ангел сервомотора та робочий цикл ШІМ, які змінюються на основі потенціометра. Далі перевірте Повне відео, обертання при різній ШІМ, в кінці.
Як ми бачимо, ангел сервообертання змінюється залежно від значення потенціометра. Тепер приступимо до налаштування обладнання.
В апаратній установці ми щойно видалили світлодіодну плату та додали сервомотор, як показано на схемі вище.
Апаратне забезпечення показано на малюнку нижче:
На відео нижче показано, як сервомотор реагує на різні положення потенціометра.
Ось воно !! Ми поєднали сервомотор з мікроконтролером PIC, тепер ви можете використовувати свою власну творчість і знаходити для цього додатки. Є багато проектів, в яких використовується сервомотор.