51 одночиповая программа управления сервоприводом для выполнения вращения сервопривода в три этапа_Custom Drive_Industry Insights_Kpower
Дом > Обзор отрасли >Пользовательский диск
ТЕХНИЧЕСКАЯ ПОДДЕРЖКА

51 одночиповая программа управления сервоприводом для управления вращением сервопривода в три этапа

Опубликовано 2026-05-06

Вы когда-нибудь сталкивались с такой ситуацией?

После подключения сервопривода к источнику питания реакции нет. После написания программы возникали случайные дрожания. Я, очевидно, следовал инструкциям, но просто не мог повернуть его.

Не паникуйте. Вы не одиноки.

Сегодня в этой статье с помощью микроконтроллера 51 мы подробно объясним управление сервоприводом. Никакого сложного математического содержания, никакой непонятной таблицы регистров, только самые прямые идеи и самая практичная структура кода.

Помните этот ключевой момент: если сервопривод остается неподвижным, это во многом связано с проблемой синхронизации; если сервопривод движется беспорядочно, это, вероятно, вызвано недостаточным питанием.

Вы готовы?

01 Что такое рулевой механизм?

Многие люди впервые получают сервопривод и думают, что это мотор. Его можно включить при подаче электричества.

Неправильный.

Рулевой механизм – это не обычный мотор. Это больше похоже на маленького робота с «мозгом».

Вы даете ему команду, и он поворачивается на заданный угол. Тогда остановись. Остановитесь как вкопанный.

Как это достигается с помощью небольшого потенциометра и платы управления внутри? Когда вы посылаете импульс, он делает несколько жестов и фиксируется, достигнув нужного положения.

Следовательно, для управления рулевым механизмом нет необходимости записывать ПИД или выполнять вычисления с обратной связью. Вам просто нужно усвоить одну вещь: посылать импульс.

02 Основной принцип: одно число может изменить угол

Откройте свой паспорт. Найдите это предложение: Ширина импульса высокого уровня соответствует углу.

Говоря простым языком: высокий уровень в 0,5 миллисекунды превратится в 0 градусов, если он будет длиться 1,5 миллисекунды, то он повернется на 90 градусов, а если он будет длиться 2,5 миллисекунды, то он повернется на 180 градусов.

Период фиксирован и равен 20 миллисекундам.

Это ясно? Управление сервоприводом на самом деле означает управление портом ввода-вывода, поднятие его вверх, ожидание в течение определенного периода времени, затем опускание его вниз и затем ожидание оставшегося времени.

Это так просто.

Например, импульс, поворачивающийся на 90 градусов:

Сначала выполните операцию подтягивания вверх, затем выполните задержку длительностью 1,5 миллисекунды, затем выполните операцию опускания вниз, а затем выполните задержку длительностью 18,5 миллисекунд, а затем повторите вышеуказанные шаги в бесконечном цикле.

Это полный цикл управления.

03 Прежде чем писать программу, сначала настройте среду

Вам не нужно дорогое оборудование.

Микроконтроллер 51 (достаточно STC89C52)

单片机控制舵机来回摆动_舵机控制程序51单片机_单片机程序控制舵机原理

Сервопривод (подойдет обычный SG90 или MG995)

Несколько проводов Dupont

Имеется источник питания 5 В, поэтому не ждите, что он будет питаться от микроконтроллера. Позвольте мне трижды сказать важные вещи, не ждите, что он будет работать от микроконтроллера.

Сервомашинки у многих людей трясутся и не вращаются должным образом. Это не ошибка программы, а недостаточная мощность.

Когда сервопривод находится в момент запуска, ток может достигать более 1 А, и небольшое количество энергии, потребляемой USB, не может полностью его питать.

что делать? Внешний источник питания. Общая земля. Общая земля. Общая земля.

Положительная клемма источника питания должна быть VCC, а отрицательная клемма источника питания должна быть GND. Земля микроконтроллера также должна быть подключена к источнику питания GND, а затем сигнальная линия должна быть подключена к порту ввода-вывода микроконтроллера.

Цепь подключена? Поздравляю. Самая трудная половина пройдена.

04 Практическое программирование: начните с самого простого

Мы не играем в фейки. Прямо дайте код, который можно запустить.

Ключевые моменты: Используйте таймер для генерации прерывания с периодом 20мс и гибко управляйте длительностью высокого уровня во время прерывания.

Идея:

Определите переменную для хранения требуемого в данный момент времени высокого уровня, например, 15, и это 15 представляет 1500 микросекунд, что составляет 1,5 мс.

В начале каждого периода 20 мс сначала поднимите порт ввода-вывода на высокий уровень.

Задержка времени высокого уровня.

Опустите порт ввода-вывода.

Отложите оставшееся время.

Написано как псевдокод:

void main() { Инициализировать таймер (установить прерывание на 20 мс); while(1) { // Ничего не делать, полагаться на прерывания } } void timer прерывание () прерывание 1 { Pull high; задержка (время высокого уровня); тянуть низко; задержка (20 мс – время высокого уровня); }

Важно: Точные задержки микросекундного уровня требуют использования функций задержки. Когда основная частота 51 микроконтроллера составляет 11,0592 МГц, один nop примерно эквивалентен 1,085 микросекунды. Чтобы написать функцию задержки_us, ей необходимо передать количество микросекунд и реализовать его, вычитая его через цикл while.

Не бойтесь неприятностей. Этот вид отладки методом последовательного приближения является нормой во встроенных системах.

05 Позвольте рулю двигаться: вперед, назад, под любым углом.

Теперь нужно добиться: нажать кнопку 1, повернуть на 0 градусов; нажать кнопку 2, повернуть на 90 градусов; нажмите кнопку 3, поверните на 180 градусов.

Добавьте обнаружение ключей в псевдокоде:

если (нажата кнопка 1) время высокого уровня = 500; // 0,5 мс -> 0 градусов, если (нажата кнопка 2) время высокого уровня = 1500; // 1,5 мс -> 90 градусов, если (нажата кнопка 3) время высокого уровня = 2500; // 2,5 мс -> 180 градусов

单片机程序控制舵机原理_单片机控制舵机来回摆动_舵机控制程序51单片机

Важно: единицей времени высокого уровня являются микросекунды. 500, 1500, 2500.

Не пишите 1, 2, 3. Это миллисекунды. В 1000 раз хуже.

Что тогда? Тогда сервопривод послушно повернется на соответствующий угол.

Не верите? Вы попробуйте.

06 ловушек, на которые вы могли наступить (вопрос-ответ)

В: Сервопривод не крутится, а просто жужжит?

Во-первых, А, недостаточный ток источника питания или неточная ширина импульса. Необходимо заменить источник питания на источник питания выше 5 В/2 А, а затем проверить, находится ли время высокого уровня между 500 и 2500 мкс.

Вопрос: Сервопривод может вращаться, но его сильно трясет?

Добавьте большой конденсатор (номиналом 470 мкФ) на оба конца источника питания сервопривода из-за ситуации, упомянутой в пункте А, то есть существует чрезмерная разница между двумя соседними циклами управления или в источнике питания имеются пульсации.

В: Нет реакции при прошивке программы, но отворачивается при отключении сигнального кабеля?

О: Состояние уровня порта ввода-вывода в начале неопределенно, или период времени, когда он находится на высоком уровне, превышает указанный диапазон. При включении устройства необходимо сначала понизить уровень порта ввода-вывода, а затем дать ему начальное значение.

Вопрос: Хотите контролировать непрерывное вращение (например, сервопривод на 360 градусов)?

Если это не сработает, вам необходимо заменить его сервоприводом, который может непрерывно вращаться на 360 градусов. Если высокий уровень составляет 1,5 мс, сервопривод перестанет вращаться. Если оно превышает 1,5 мс, сервопривод будет вращаться вперед. Если оно меньше 1,5 мс, сервопривод будет вращаться в обратном направлении.

В: Если у меня под рукой нет осциллографа, как я могу убедиться в правильности импульсов?

Запрограммируйте сервопривод на переключение между 0 и 90 градусами каждую 1 секунду. Используйте логический анализатор или простой светодиодный метод, чтобы проверить, является ли его колебание регулярным.

07 Обновление: позвольте серводвигателю двигаться в соответствии с нарисованной вами кривой.

Программа с жестко запрограммированными углами слишком элементарна.

Более продвинутый способ игры: позвольте сервоприводу медленно поворачиваться от 0 до 180 градусов, а затем медленно возвращайтесь обратно.

Как это сделать?

Используйте переменную цикла, называемую углом, для увеличения от 0 до 180, при этом значение шага не должно быть слишком большим. Например, каждый раз увеличивать на 1 градус.

Для каждого приращения на 1 градус пересчитываем время высокого уровня:

Время высокого уровня равно 500 плюс угол, умноженный на 2000, разделенный на 180.

Следует отметить, что 500 соответствует 0 градусам, 2500 соответствует 180 градусам, а общий диапазон составляет 2000 микросекунд, который делится на 180 равных частей.

Затем задержка 20 мс. Сделайте это снова.

Эффект — плавное качание. Как робот, машущий рукой.

Вы можете назвать это так называемой «сервокинематикой», но не пугайтесь этого названия. По сути, это своего рода линейная интерполяция.

08 Сделайте еще один шаг вперед: используйте последовательный порт для удаленного управления сервоприводом.

Добавьте последовательную связь. Компьютер отправляет число, и сервопривод поворачивается на соответствующий угол.

Например, произнесите «0» и поверните на 0 градусов. Скажите «90» и поверните на 90 градусов.

Ключевые моменты:

В прерывании приема последовательного порта микроконтроллера строка анализируется.

Примечание. Возможно, вам не удастся собрать все сразу. Чтобы определить, получен ли символ новой строки.

После получения полного номера диапазон ограничивается 0–180.

Преобразуйте во время высокого уровня и обновите переменную.

Таким образом, ваш сервопривод становится программируемым приводом. После подключения к модулю Bluetooth им может управлять даже ваш мобильный телефон.

09 Краткое описание: Три элемента управления рулевым механизмом

источник питания. Обеспечьте достаточный ток и стабилизируйте напряжение на общей земле.

Сроки. Период 20 мс, высокий уровень 500-2500 мкс.

Не выполняйте операции блокировки, используйте прерывания по таймеру вместо задержек, которые продолжают ждать, иначе вы ничего не сможете сделать.

Как только вы овладеете этими тремя вещами, вы сможете контролировать 99% сервоприводов, представленных на рынке.

Помните: при написании программы подумайте еще на шаг о том, «что будет, если блок питания вдруг трясется», а не «этого достаточно, чтобы программа работала плавно».

10 Теперь ваша очередь действовать.

Не рассматривайте эту статью просто как сборник. Включите Keil, правильно подключите плату разработки и введите приведенный выше код один раз.

Есть большая вероятность, что первые три раза не получится. Не спешите. Возьмите мультиметр для измерения напряжения и используйте логический анализатор для захвата формы сигнала. Если другого выхода действительно нет, попробуйте поменять сервопривод.

Каждый раз, когда вы решаете проблему, ваше понимание встроенности углубляется.

Оглядываясь назад несколько лет спустя, вы обнаружите, что тот день, когда вы освоили рулевое управление, стал отправной точкой для вашего истинного понимания «управления физическим миром с помощью кода».

Маленький жужжащий сервопривод в вашей руке — первый ключ к миру роботов.

Не ждите больше. Включите питание сейчас.

Попробуйте.

Время обновления: 6 мая 2026 г.

Энергия будущего

Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.

Написать письмо в Kpower
Отправить запрос
Сообщение WhatsApp
+86 0769 8399 3238
 
kpowerMap