Оглавление:
- Шаг 1. Требования к оборудованию и программному обеспечению
- Шаг 2: Конфигурация STM32CubeMX
- Шаг 3. Кодирование Keil UVision
- Шаг 4: Результат:)
Видео: Управление серводвигателем с помощью MCU STM32F4 ARM: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
И снова здравствуйте, друзья:) Итак, в этом проекте мы будем управлять серводвигателем с помощью микроконтроллера ARM STM32F4. В моем случае я буду использовать доску обнаружения, но если вы понимаете суть проблемы, вы можете применить ее для каждого MCU. Так. Давайте начнем:)
Шаг 1. Требования к оборудованию и программному обеспечению
В аппаратном плане нам понадобятся:
- MCU, который в моем случае является платой STM32f4 Discovery.
- Обычный серводвигатель, как SG90 или любой другой
Что касается программного обеспечения, нам потребуется:
- STM32CubeMX
- Keil uVision
Если все это у вас есть, переходите к следующему шагу:)
Шаг 2: Конфигурация STM32CubeMX
Как известно, для управления серводвигателем нам нужен сигнал ШИМ. Требования к ШИМ-сигналу таковы:
- Период ШИМ должен быть 20 мс.
- По времени должно быть от 0,5 до 2,5 мСм. Когда время составляет 0,5 мс, сервопривод повернется на 0 градусов, 1,5 мс на 90 градусов и 2,5 мс на 180 градусов.
Итак, нам нужно настроить PWM, и для этого мы будем использовать Timer1.
- Сначала выберите TIM1 в разделе Таймеры. Этот шаг
-
Затем из раздела Mode
- Выберите внутренние часы на этом шаге
- PWM Generation CH1 Этот шаг
-
Затем из раздела "Конфигурация"
- Установите предделитель на 160 На этом шаге
- Установите Период счетчика на 2000 На этом шаге
- Установите Pulse на 50 На этом шаге
- Кроме того, в разделе «Конфигурация часов» установите тактовую частоту таймера APB1 на 16 МГц. Этот шаг
Теперь поговорим немного об этом шаге:
Тактовая частота нашего таймера APB1 составляет 16 МГц. Значит, для получения 1 секунды требуется 16 000 000 тиков. Однако мы установили наш предварительный делитель на 160. Это означает, что мы делим нашу частоту на это число и уменьшаем количество тактов до 100 000. Итак, на 1 секунду нам нужно 100 000 тактов. Однако, как мы заявляли ранее, нам потребуется 20 мс периода ШИМ. Итак, исходя из простой математики, нам нужно 2000 тиков для 20 мс. Итак, установив Counter Period на 2000, мы определяем период сигнала PWM, который составляет 20 мс. Теперь нам нужно определить количество тиков для времени включения от 0,5 мс до 2,5 мс. Мы можем получить это уравнение с помощью простой математики:
On_Time = (Номер тика / 100). Имейте в виду, что это время включения, которое изменяет угол серводвигателя. Итак, на изображении ниже я резюмирую этот шаг. Если у вас есть вопросы, пишите в комментариях, и я отвечу как можно быстрее.
Изображение расчетов
После выполнения всего этого сгенерируйте код:)
Шаг 3. Кодирование Keil UVision
Итак, давайте сначала определимся, что мы хотим сделать? Мы хотим написать функцию, которая принимает степень и записывать ее в сервопривод. Итак, как мы это сделаем? Как мы уже говорили ранее, чтобы изменить угол, нам нужно вовремя изменить угол. Наши углы изменяются между [0, 180] и нашим количеством тактов, которое определяет временные изменения между [50, 250]. Итак, нам нужна функция отображения, которая отображает заданный угол в диапазон количества отметок. Например, для 0 градусов 50 делений, для 180 градусов 250 делений и так далее… Итак, давайте напишем нашу функцию отображения:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1.0 * (value-st1)) / ((fn1-st1) * 1.0) * (fn2-st2) + st2; }
Это наша функция отображения. Вам интересно, как это получается? Тогда прочтите это. Итак, мы берем наши диапазоны и значение, которое хотим отобразить.
Теперь давайте напишем функцию, которая принимает угол и сопоставляет его с диапазоном тиков:
void servo_write (int angle) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, угол); }
Как видите, этот код принимает угол и сопоставляет его с диапазоном количества отметок. Затем количество тактов передается в регистр CCR1, который контролирует время включения и, следовательно, угол.
Однако, чтобы все это работало, мы сначала запускаем pwm, что можно сделать с помощью всего лишь строчки кода:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Итак, у нас есть функция, которая принимает угол и записывает его в сервопривод. Давайте протестируем это и напишем нашу функцию развертки, которая очень проста:
void servo_sweep (void) {для (int я = 0; я <= 180; я ++) {servo_write (я); HAL_Delay (10); } для (int я = 180; я> = 0; я--) {servo_write (я); HAL_Delay (10); }}
Итак, он просто считает до 180, а затем до 0 и записывает эти значения в сервопривод:) Итак, посмотрим на результат!
Шаг 4: Результат:)
Итак, это конец. Если у вас есть вопросы, спрашивайте. Буду рад ответить на них. Большое спасибо за чтение и надеюсь до встречи в следующем проекте:)
Рекомендуемые:
УПРАВЛЕНИЕ СЕРВОДВИГАТЕЛЕМ С ПОМОЩЬЮ WIFI И BLYNK: 5 шагов
УПРАВЛЕНИЕ СЕРВОДВИГАТЕЛЕМ С ПОМОЩЬЮ WIFI И BLYNK: Привет, ребята, в этой инструкции давайте узнаем, как управлять движением серводвигателя через WiFi с помощью Node MCU и приложения Blynk
Учебное пособие по Arduino - управление серводвигателем с помощью джойстика: 4 шага
Учебное пособие по Arduino - управление сервомотором с помощью джойстика: в этом руководстве мы узнаем, как использовать сервопривод с джойстиком. Мы будем управлять 1 серводвигателем с помощью 1 джойстика. Вы можете реализовать свои проекты роботизированной руки со ссылкой на это руководство. Конечно, при выполнении
Учебное пособие по Arduino - управление серводвигателем с помощью потенциометра: 5 шагов
Учебное пособие по Arduino - Управление серводвигателем с помощью потенциометра: Это руководство является письменной версией моей книги «Arduino: Как управлять серводвигателем с помощью потенциометра». Видео на YouTube, которое я недавно загрузил. Я настоятельно рекомендую вам это проверить. Посетите канал YouTube
Учебное пособие по Arduino - Управление серводвигателем с помощью Arduino: 5 шагов
Учебное пособие по Arduino - Управление серводвигателем с помощью Arduino: Это руководство представляет собой письменную версию моей статьи «Arduino: Как управлять серводвигателем с помощью Arduino»; Видео на YouTube, которое я недавно загрузил. Я настоятельно рекомендую вам это проверить. Посетите канал YouTube
Управление серводвигателем RC с помощью Arduino и двух мгновенных переключателей: 4 шага
Управление серводвигателем RC с помощью Arduino и двух мгновенных переключателей: название говорит само за себя. Управление автомобильным серводвигателем RC с помощью Arduino и некоторых резисторов, перемычек и двух тактильных переключателей. Я сделал это на второй день, когда получил свой Arduino, поэтому я очень горжусь собой