- Какво е серво мотор?
- Взаимодействие на сервомотори с микроконтролери:
- Програмиране на серво мотор с PICF877A PIC микроконтролер:
- Електрическа схема:
- Симулация и настройка на хардуер:
Това е нашият 11-и урок за обучение на PIC микроконтролери, използващи MPLAB и XC8. В този урок ще научим как да управляваме серво мотора с PIC микроконтролер. Ако вече сте работили със серво мотори, можете да пропуснете първата половина на този урок, но ако сте нов в самия серво мотор, продължете да четете.
Досега разгледахме много основни уроци като LED мигане с PIC, таймери в PIC, свързване на LCD, свързване на 7 сегмента, ADC с използване на PIC и др. Ако сте абсолютно начинаещ, моля, посетете пълния списък с PIC уроци тук и започнете да учите.
В нашия предишен урок научихме как да генерираме ШИМ сигнали с помощта на микроконтролера PIC, сигналите се генерираха въз основа на стойността, отчетена от потенциометъра. Ако тогава сте разбрали всички програми, Поздравления, вече сте кодирали и серво мотор. ДА, Сервомоторите реагират на PWM сигналите (които създаваме с помощта на таймери тук), ще научим защо и как в този урок. Ще симулираме и изградим хардуерната настройка за този проект и можете да намерите подробното видео в края на този урок.
Какво е серво мотор?
Серво мотор е тип задвижващ механизъм (предимно кръгъл), който позволява ъглово управление. Налични са много видове серво мотори, но в този урок нека се концентрираме върху хоби серво моторите, показани по-долу.
Хоби серво серво са популярни, защото те са евтиният метод за контрол на движението. Те осигуряват готово решение за повечето нужди на R / C и роботизиран любител. Те също така премахват необходимостта от индивидуално проектиране на система за контрол за всяко приложение.
Повечето хоби серво мотори имат ротационен ангел от 0-180 °, но можете да получите и 360 ° серво мотор, ако се интересувате. Този урок използва серво мотор от 0 до 180 °. Има два вида серво мотори, базирани на предавката, единият е серво мотор с пластмасова предавка, а другият е серво мотор с метални зъбни колела. Метални зъбни колела се използват на места, където двигателят е подложен на по-голямо износване, но се предлага само на висока цена.
Серво моторите се оценяват в kg / cm (килограм на сантиметър). Повечето хоби серво мотори се оценяват на 3 kg / cm или 6 kg / cm или 12 kg / cm. Този kg / cm ви казва колко тегло може да повдигне вашият серво мотор на определено разстояние. Например: Серво мотор с 6 кг / см трябва да може да повдига 6 кг, ако товарът е окачен на 1 см от шахтата на мотора, колкото по-голямо е разстоянието, толкова по-малка е товароносимостта. Научете тук основите на серво мотора.
Взаимодействие на сервомотори с микроконтролери:
Свързването на хоби серво мотори с MCU е много лесно. Сервомашините имат три жици, излизащи от тях. От които две ще се използват за доставка (положителна и отрицателна) и една ще се използва за сигнала, който трябва да бъде изпратен от MCU. В този урок ще използваме серво мотор MG995 Metal Gear, който се използва най-често за RC автомобили хуманоидни ботове и др. Картината на MG995 е показана по-долу:
Цветовото кодиране на вашия серво мотор може да се различава, следователно проверете за съответния лист с данни.
Всички серво мотори работят директно с вашите захранващи релси + 5V, но трябва да внимаваме с количеството ток, което двигателят би консумирал, ако планирате да използвате повече от два серво мотора, трябва да бъде проектиран подходящ серво щит. В този урок просто ще използваме един серво мотор, за да покажем как да програмираме нашия PIC MCU за управление на двигателя. Проверете връзките по-долу за свързване на сервомотора с друг микроконтролер:
- Връзка на серво мотор с микроконтролер 8051
- Управление на серво мотора с помощта на Arduino
- Урок за серво мотор за Raspberry Pi
- Серво мотор с AVR микроконтролер
Програмиране на серво мотор с PICF877A PIC микроконтролер:
Преди да започнем програмирането на серво мотора, трябва да знаем какъв тип сигнал трябва да бъде изпратен за управление на серво мотора. Трябва да програмираме MCU да изпраща PWM сигнали към сигналния проводник на серво мотора. Вътре в сервомотора има контролна схема, която отчита работния цикъл на ШИМ сигнала и позиционира вала на сервомоторите на съответното място, както е показано на снимката по-долу
Всеки серво мотор работи на различни PWM честоти (най-често срещаната честота е 50 HZ, която се използва в този урок), така че вземете таблицата с данни на вашия двигател, за да проверите в кой PWM период работи вашият серво мотор.
Подробностите за ШИМ сигнала за нашия Tower pro MG995 са показани по-долу.
От това можем да заключим, че нашият двигател работи с ШИМ период от 20ms (50Hz). Така че честотата на нашия ШИМ сигнал трябва да бъде настроена на 50Hz. Честотата на ШИМ, която бяхме задали в предишния ни урок, беше 5 KHz, като използването на същото няма да ни помогне тук.
Но тук имаме проблем. В PIC16F877A не може да генерира нискочестотни сигнали PWM използват модула ССР. Според листа с данни най-ниската възможна стойност, която може да бъде зададена за ШИМ честотата, е 1,2 KHz. Затова трябва да се откажем от идеята за използване на CCP модул и да намерим начин да направим наши собствени PWM сигнали.
Следователно, в този урок ще използваме таймерния модул, за да генерираме ШИМ сигнали с честота 50 Hz и да променяме техния работен цикъл, за да контролираме ангела на серво мотора. Ако не сте запознати с таймери или ADC с PIC, моля, върнете се към този урок, защото ще пропусна повечето от нещата, тъй като вече сме ги покрили там.
Инициализираме нашия модул Timer с прескалер 32 и го преливаме за всеки 1us. Според нашия фиш за данни ШИМ трябва да има период от 20 ms. Така че нашето време за почивка и почивка заедно трябва да бъде точно равно на 20ms.
OPTION_REG = 0b00000100; // Таймер0 с външна честота и 32 като предскалиращ TMR0 = 251; // Заредете стойността на времето за 1us delayValue може да бъде между 0-256 само TMR0IE = 1; // Активиране на бит за прекъсване на таймера в регистър PIE1 GIE = 1; // Активиране на глобално прекъсване PEIE = 1; // Активиране на периферното прекъсване
Така че вътре в нашата рутинна функция за прекъсване, ние включваме щифта RB0 за определеното време и го изключваме за времето за повторно разгръщане (20ms - on_time). Стойността на времето за включване може да бъде определена с помощта на потенциометъра и модула ADC. Прекъсването е показано по-долу.
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 ние просто четем стойността на потенциометъра с помощта на модула ADC и актуализираме времето за включване на ШИМ, като използваме прочетената стойност.
докато (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
По този начин създадохме ШИМ сигнал, чийто период е 20ms и има променлив работен цикъл, който може да се настрои с помощта на потенциометър. Пълният код е даден по-долу в раздела за кодове.
Сега, нека проверим резултата, използвайки симулация на proteus и продължим към нашия хардуер.
Електрическа схема:
Ако вече сте попаднали на урока за ШИМ, тогава схемите на този урок ще бъдат същите, с изключение на които ще добавим серво мотор вместо LED светлината.
Симулация и настройка на хардуер:
С помощта на симулация на Proteus можем да проверим ШИМ сигнала с помощта на осцилоскоп и също така да проверим въртящия се ангел на серво мотора. По-долу са показани няколко моментални снимки на симулацията, където може да се забележи, че въртящият се ангел на серво мотора и работния цикъл на ШИМ се променят въз основа на потенциометъра. По-нататък проверете Пълното видео, завъртане при различна ШИМ, в края.
Както виждаме ангелът на серво въртенето се променя въз основа на стойността на потенциометъра. Сега нека пристъпим към нашата хардуерна настройка.
В хардуерната настройка току-що премахнахме LED платката и добавихме серво мотора, както е показано в схемите по-горе.
Хардуерът е показан на снимката по-долу:
На видеото по-долу показва как серво двигателя реагира на различните позиции на потенциометъра.
Това е!! Свързахме серво мотор с PIC микроконтролер, сега можете да използвате собствената си креативност и да намерите приложения за това. Има много проекти, които използват серво мотор.