Опубликовано 2026-04-09
В этом руководстве представлен полный и практический метод управлениясервоприводугол двигателя с помощью микроконтроллера STM32 и стандартного инфракрасного (ИК) пульта дистанционного управления. Вы узнаете точную проводку, декодирование ИК-сигнала, генерацию ШИМ длясервоприводи готовый к использованию пример кода. Никаких компонентов конкретной марки не требуется; инструкции работают с обычными ИК-приемниками (например, 1838B) и любыми стандартными 5В.сервопривод. Типичный вариант использования — удаленная регулировка наклона камеры или шарнира руки робота.
Система работает на двух фундаментальных принципах:
ИК-пульт дистанционного управленияизлучает модулированный сигнал частотой 38 кГц. ИК-приемник демодулирует его и выдает последовательную последовательность импульсов (наиболее распространен протокол NEC).
Серводвигательположение задается сигналом ШИМ с периодом 20 мс. Ширина импульса варьируется от 0,5 мс (0°) до 2,5 мс (180°).
Ваш STM32 декодирует код ИК-ключа и сопоставляет его с целевым углом сервопривода, а затем соответствующим образом обновляет рабочий цикл ШИМ.
Подключите точно так, как описано ниже. Неправильная проводка приведет к повреждению компонентов.
Важный: Если ваш сервопривод потребляет >500 мА, используйте отдельный источник питания 5 В с общим заземлением для STM32.
Протокол NEC используется более чем 90% потребительских ИК-пультов дистанционного управления. При каждом нажатии клавиши отправляется: лидерный пакет длительностью 9 мс, интервал 4,5 мс, затем 32 бита (адрес + команда), за которыми следует стоповый бит.
Шаг за шагом для захвата кодов вашего пульта:
1. Подключите выход IR-приемника к GPIO (например, PB1), настроенному как внешнее прерывание по заднему фронту.
2. Измерьте ширину импульса с помощью таймера в режиме захвата.
3. Типичный логический 0 имеет высокий уровень 0,56 мс + низкий уровень 0,56 мс; Логическая 1 имеет высокий уровень 0,56 мс + низкий уровень 1,69 мс.
Используйте следующий проверенный фрагмент кода (библиотека HAL, но логика применима к любой настройке):
// Обработчик прерывания для IR-сигнала void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t длительность = getPulseWidth(); // измеряем в нас // Декодируем логику NEC – сохраняем 32-битный код } }
После нажатия клавиши (например, цифры «1» или «ВВЕРХ») прочтите декодированное значение команды. Запишите коды ключей, которые вы хотите использовать.
Сервоприводы ожидают сигнала частотой 50 Гц (период 20 мс). Используйте TIM2 или TIM3 в режиме ШИМ.
Расчет для 0° (импульс 0,5 мс) и 180° (импульс 2,5 мс):
Тактовая частота таймера = 72 МГц, частота прескалера = 7200-1 → тактовая частота счетчика 10 кГц.
Период (ARR) = 200 → период 20 мс (2000,1 мс = 20 мс).
Рабочий цикл для 0,5 мс = 5 → (0,5 мс / 0,1 мс = 5)
Рабочий цикл для 2,5 мс = 25 → (2,5 мс / 0,1 мс = 25)
Шаги настройки:
1. Включите таймер и альтернативную функцию GPIO.
2. Установите TIMx->PSC = 7199, TIMx->ARR = 200.
3. Установите значение CCR канала от 5 до 25.
4. Запустите выход ШИМ.
Пример функции для установки угла:
void setServoAngle(uint8_t angular) { // угол: от 0 до 180 uint16_tpulse = 5 + (угол 20/180); // линейная карта: от 5 (0°) до 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,pulse); }
Обычный реальный случай: управление платформой панорамирования камеры с помощью четырех кнопок (Влево, Вправо, Центр, Стоп). Предположим, вы захватили:
Код клавиши «Левый» = 0x10
Код клавиши «Вправо» = 0x11
Код клавиши «Центр» = 0x12
Реализуйте основной цикл:
uint32_t последнийIRCode = 0; в то время как (1) {если (newIRCodeAvailable) {lastIRCode = decodedIRCode; новыйIRCodeAvailable = 0; переключатель (lastIRCode) { случай 0x10: setServoAngle (0); перерыв; // Влево – 0°, случай 0x11: setServoAngle(180); перерыв; // Вправо – 180°, случай 0x12: setServoAngle(90); перерыв; // Центр – 90° по умолчанию: разрыв; } } }
Для плавного пошагового управления вы можете увеличивать/уменьшать угол на 5° каждый раз, когда нажимаете «ВВЕРХ» или «ВНИЗ».
Основной вывод: Чтобы управлять сервоприводом с помощью ИК-пульта дистанционного управления на STM32, вам нужно только (1) правильно декодировать протокол NEC IR с использованием внешнего прерывания и таймера, (2) сгенерировать ШИМ-сигнал частотой 50 Гц с регулируемым рабочим циклом (0,5–2,5 мс) и (3) сопоставить захваченные коды клавиш с нужными углами.
Немедленные действия для вашего проекта:
1. Подключите цепь, как показано в разделе 3.
2. Загрузите простой эскиз ИК-декодера (используйте логику, описанную в разделе 4), чтобы записать уникальные коды клавиш вашего пульта дистанционного управления.
3. Проверьте движение сервопривода с фиксированными углами, используя код ШИМ из раздела 5.
4. Объедините обе функции и назначьте захваченные коды определенным углам.
5. Добавьте небольшую задержку (50 мс) после каждого движения, чтобы избежать переполнения команд.
Точно следуя этому руководству, вы получите надежную сервосистему с инфракрасным управлением менее чем за 30 минут. Для расширенных функций (например, сохранения позиций, изменения скорости) используйте тот же принцип сопоставления. Этот подход работает для всех серий STM32 и любого NEC-совместимого пульта дистанционного управления.
Время обновления: 9 апреля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.