Съдържание:
- Стъпка 1: Изисквания към хардуера и софтуера
- Стъпка 2: Конфигурация на STM32CubeMX
- Стъпка 3: Кодиране на Keil UVision
- Стъпка 4: Резултатът:)
Видео: Управление на серво мотора със STM32F4 ARM MCU: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Здравейте отново приятели:) И така, в този проект ще управляваме серво мотор със STM32F4 ARM MCU. В моя случай ще използвам борда за откриване, но ако схванете същността на проблема, тогава можете да го приложите за всеки MCU. Така. Да започваме:)
Стъпка 1: Изисквания към хардуера и софтуера
По отношение на хардуера ще ни трябва:
- MCU, което в моя случай е STM32f4 Discovery board
- Обикновен серво мотор, като SG90 или всеки друг
По отношение на софтуера ще ни трябва:
- STM32CubeMX
- Keil uVision
Ако имате всичко това, преминете към следващата стъпка:)
Стъпка 2: Конфигурация на STM32CubeMX
Както знаете, за управление на серво мотор се нуждаем от ШИМ сигнал. Изискванията по отношение на ШИМ сигнала са такива:
- PWM периодът трябва да бъде 20 mS
- Навреме трябва да бъде между 0,5 mS до 2,5 mS. Когато времето за включване е 0,5 mS, тогава сервото ще се завърти на 0 градуса, 1,5 mS за 90 градуса и 2,5 mS за 180 градуса.
Така че, трябва да конфигурираме PWM и за тази цел ще използваме Timer1.
- Първо изберете TIM1 от секцията Таймери. Тази стъпка
-
След това от раздела Режим
- Изберете Вътрешен часовник Тази стъпка
- ШИМ поколение CH1 Тази стъпка
-
След това от раздела Конфигурация
- Задайте Предсказващо устройство на 160 Тази стъпка
- Задайте Counter Period на 2000 Тази стъпка
- Задайте Pulse на 50 Тази стъпка
- Освен това, от Конфигурацията на часовника, задайте APB1 Timer clocks на 16MHz. Тази стъпка
Сега, нека поговорим малко за тази стъпка:
Честотата на нашия APB1 таймер е 16MHz. Това означава, че са необходими 16 000 000 кърлежи, за да получите 1 секунда. Въпреки това, ние зададохме нашия предварително делител на 160. Това означава, че разделяме нашата честота на този брой и намалихме броя на кърлежите до 100 000. Така че, за 1 секунда се нуждаем от 100 000 кърлежи. Нуждаем се обаче от 20mS PWM период, както посочихме по -рано. Така че, въз основа на проста математика, имаме нужда от 2000 кърлежи за 20 mS. Така че, като зададем Counter Period на 2000, ние определяме периода на PWM сигнала, който е 20mS. Сега трябва да определим номера на отметката за време на включване от 0.5mS до 2.5mS. Можем да получим това уравнение от проста математика и то е:
On_Time = (Tick_Number / 100). Имайте предвид, че това е времето за включване, което променя ъгъла на серво мотора. Така че, под изображението обобщавам тази стъпка. Ако имате някакви въпроси, пишете в коментарите и аз ще отговоря възможно най -бързо.
Изображение на изчисленията
След като направите всичко това, генерирайте код:)
Стъпка 3: Кодиране на Keil UVision
И така, нека първо да определим какво искаме да направим? Искаме да напишем функция, която приема степен и да я запишем в серво. И така, как ще го направим? Както казахме по -рано, за да променим ъгъла, трябва да променим времето за включване. Нашите ъгли се променят между [0, 180] и броя на отметките, което определя промените във времето между [50, 250]. И така, имаме нужда от функция за картографиране, която картографира зададения ъгъл в обхвата на броя на отметките. Например, за 0 степен 50 кърлежи, за 180 градуса 250 кърлежи и така нататък … Така че нека напишем нашата функция за картографиране:
int карта (int st1, int fn1, int st2, int fn2, int стойност) {връщане (1.0*(стойност-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Това е нашата функция за картографиране. Интересува ли ви как се получава? След това прочетете това. Така че, ние вземаме нашите диапазони и стойността, която искаме да картографираме.
Сега, нека напишем функция, която приема ъгъла и я картографира в диапазона от отметки:
void servo_write (int ъгъл) {htim1. Instance-> CCR1 = карта (0, 180, 50, 250, ъгъл); }
Както можете да видите, този код приема ъгъл и го съпоставя с обхвата на броя на отметките. След това броят на отметките се дава на регистъра CCR1, който контролира времето за включване и така ъгъл.
Въпреки това, за да работи всичко това, първо стартираме pwm, което може да се направи само с ред код:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
И така, имаме функция, която приема ъгъла и го записва в серво. Нека да го тестваме и да напишем нашата функция за почистване, която е много лесна:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Закъснение (10); } for (int i = 180; i> = 0; i--) {servo_write (i); HAL_Закъснение (10); }}
Така че, той просто брои до 180, а след това надолу до 0 и записва тези стойности в серво:) Така че, нека видим резултата!
Стъпка 4: Резултатът:)
И така, това е краят. Ако имате някакви въпроси, моля попитайте. Ще се радвам да им отговоря. Благодаря ви много за четенето и се надявам да се видим в следващия проект:)
Препоръчано:
Направи си сам Как да контролирате ъгъла на серво мотора с помощта на компонент на Visuino Sequence: 10 стъпки
Направи си сам Как да контролираме ъгъла на серво мотора с помощта на компонент на последователността на Visuino: В този урок ще използваме серво мотор и Arduino UNO и Visuino за управление на ъгъла на серво мотора, използвайки компонент на последователността. Компонентът на последователността е идеален за ситуации, в които искаме да задействаме няколко събития в последователност в нашия случай серво мотор degr
Управление на 3 серво мотора с 3 потенциометра и Arduino: 11 стъпки (със снимки)
Управление на 3 серво мотора с 3 потенциометра и Arduino: Здравейте. Това е първият ми инструктаж, така че се надявам да бъдете търпеливи с мен, ако направя някакви грешки при настройването му. Той е написан за начинаещи, така че по -напредналите сред вас могат да пропуснат много от това и просто да го свържат. Целта, която си поставих
Урок за Arduino - Управление на серво мотора с джойстик: 4 стъпки
Урок за Arduino - Управление на серво мотора с джойстик: В този урок ще научим как да използваме серво с джойстика. Ние ще контролираме 1 бр. Серво мотор с 1 джойстик. Можете да реализирате вашите проекти за роботизирани ръце позовавайки се на този урок. Разбира се, че ще използваме външна батерия / захранване, когато правим
Урок за Arduino - Управление на серво мотора с потенциометър: 5 стъпки
Урок за Arduino - Управление на серво мотора с потенциометър: Тази инструкция е писмената версия на моя " Ардуино: Как да управлявам серво мотор с потенциометър " Видеоклип в YouTube, който качих наскоро. Силно ви препоръчвам да го проверите. Посетете YouTube канала
Урок за Arduino - Управление на серво мотора с Arduino: 5 стъпки
Урок за Arduino - Управление на серво мотора с Arduino: Тази инструкция е писмената версия на моя " Arduino: Как да управлявам серво мотор с Arduino " Видеоклип в YouTube, който качих наскоро. Силно ви препоръчвам да го проверите. Посетете YouTube канала