Опубликовано 2026-02-24
Играя ссервопривод: Эта статья поможет вам от начала до реального боя с 51 MCU!
Вы думаете о том, чтобы добавить к вашему инновационному продукту «сустав», который мог бы точно качаться? Рулевой механизм звучит очень профессионально, но на самом деле это не так сложно, как вы думаете. Особенно подключение его к классическому микроконтроллеру 51 — отличный путь для производителей начального уровня. Когда многие друзья впервые столкнулись с ним, самой большой головной болью было то, что они не могли понять, как он движется и как я могу использовать код для управления им. Не волнуйтесь, сегодня мы подробно об этом поговорим, и я позабочусь о том, чтобы вы почувствовали себя уверенно после прочтения.
Говоря прямо,сервоприводпохож на особенно послушного «маленького вращающегося охранника». Он объединяет двигатель, редуктор и схему управления. Вы указываете ему, на какой угол повернуть, и он будет усердно работать, чтобы достичь этого положения и устойчиво остановиться.
Эта команда передается через сигнал, называемый ШИМ (широтно-импульсная модуляция). Вы можете думать об этом как о повторяющихся импульсах высокого и низкого уровня, а ширина импульса, то есть продолжительность высокого уровня, является «сигналом действия» для рулевого механизма.
Общийсервоприводs, такие как небольшие сервоприводы, такие как SG90, распознают импульсы с периодом 20 миллисекунд. Среди них время высокого уровня около 1,5 миллисекунд соответствует среднему положению (90 градусов). Когда ширина импульса изменяется от 0,5 до 2,5 миллисекунды, ось сервопривода будет вращаться в диапазоне от 0 до 180 градусов. Чем точнее вы зададите ширину импульса, тем точнее он будет работать.
Сам микроконтроллер 51 не будет напрямую выдавать такой точный сигнал ширины импульса, но мы можем «смоделировать» его посредством программирования. Для этого необходимо использовать таймер внутри микроконтроллера, который является очень точным «таймером».
Мы можем установить таймер на генерацию прерывания каждые 10 микросекунд или 100 микросекунд. В программе обслуживания прерываний мы используем переменную для подсчета и в соответствии со значением этого счетчика изменяем уровень порта ввода-вывода (например, P1.0), подключенного к сервоприводу.
Например, для вывода высокого уровня в течение 1,5 миллисекунды, если таймер прерывается каждые 100 микросекунд, высокий уровень необходимо поддерживать в течение 15 прерываний. Таким образом, мы можем «собрать воедино» волну ШИМ, которую может распознать сервопривод. Когда вы впервые начинаете писать код, это может показаться немного запутанным, но как только вы успешно отладите его самостоятельно, чувство выполненного долга станет беспрецедентным.
На рынке представлено множество типов сервоприводов. Выбор «партнера» для микроконтроллера 51 в основном зависит от двух моментов: рабочего напряжения и требований к сигналу. Наиболее часто используются аналоговые сервоприводы, такие как SG90. Их требования к сигналу — это стандартная ШИМ, о которой мы упоминали выше, и она очень удобна.
Эти сервоприводы обычно работают при напряжении 5 В, что точно соответствует стандартному рабочему напряжению микроконтроллера 51. Могу ли я напрямую использовать драйвер порта ввода-вывода микроконтроллера? Лучше этого не делать, поскольку ток при работе сервопривода относительно велик, что приведет к повреждению контактов микроконтроллера.
Более безопасный подход — использовать для изоляции триод или специализированную микросхему преобразования уровня. Порт ввода-вывода микроконтроллера выводит управляющий сигнал на схему привода, а затем схема привода «командует» рулевому механизму вращаться. Таким образом, микроконтроллер отвечает только за выдачу «мозговых» инструкций, оставляя тяжелую работу драйверной части, что делает систему более стабильной и надежной.
Когда многие друзья впервые поворачивают сервопривод, они могут обнаружить, что он сильно трясется или реагирует на полтакта медленнее. Скорее всего это проблема с питанием. Влияние тока при запуске и блокировке сервопривода нельзя недооценивать. Если источника питания недостаточно, напряжение будет понижено, что приведет к сбросу микроконтроллера или ненормальной работе сервопривода.
Решение простое: включите сервопривод отдельно! Используйте источник питания 5 В более высокого качества и соедините землю питания (GND) и землю микроконтроллера вместе, чтобы убедиться, что они имеют общий опорный потенциал. Тогда источник питания микроконтроллера и источник питания сервопривода можно разделить, чтобы эффективно избежать помех.
Также убедитесь, что период ШИМ строго стабилен и составляет 20 миллисекунд. Если программа заблокирована из-за других задач, что приводит к неточному периоду импульса, сервопривод также будет вибрировать. Обеспечение достаточно высокого приоритета прерывания таймера является ключом к генерации стабильного сигнала.
Я хочу, чтобы сервопривод медленно поворачивался от 0 градусов до 180 градусов и обратно. Как мне написать код? Мы можем определить функцию отображения угла и ширины импульса. Например, 0 градусов соответствует высокому уровню 0,5 мс, а 180 градусов соответствуют 2,5 мс. Тогда 90 градусов — это 1,5 мс.
В основном цикле мы можем использовать цикл for для увеличения переменной угла от 0 до 180 и сбрасывать значение сравнения ШИМ каждый раз, когда оно изменяется на один градус. Обратите внимание, что между каждым углом должно быть оставлено немного времени для физического вращения сервопривода, например, задержка в 15-20 миллисекунд. Таким образом, действие выглядит последовательным и плавным.
Чтобы быть более гибким, вы можете инкапсулировать управление сервоприводом в функцию, например:void (угол символа), передайте значение угла, и параметры ШИМ будут автоматически рассчитаны и обновлены внутри функции. Таким образом, если вы хотите контролировать, какое действие оно предпримет позже, например, поднятие руки или поворот камеры, вам нужно всего лишь вызвать эту функцию, и основная программа станет очень освежающей.
Когда ваш проект требует одновременного управления несколькими сервоприводами, например, создание роботизированной руки с несколькими степенями свободы, все становится немного сложнее. Поскольку микроконтроллер 51 имеет ограниченные ресурсы, невозможно оснастить каждый сервопривод независимым аппаратным ШИМ.
Но не волнуйтесь, мы все равно можем использовать программное моделирование. Основная идея по-прежнему заключается в использовании концепции «кванта времени» в прерывании таймера. Например, мы задаем период 10 миллисекунд, и в течение этого периода каждый сервопривод по очереди выдает импульс необходимой ширины. После обработки импульса первого сервомотора сразу переключитесь на импульсный выход второго сервопривода.
Для этого требуется, чтобы ваша функция обработки прерываний таймера была очень эффективной и не могла выполнять в ней задержки или сложные вычисления. Обычный подход заключается в создании массива для хранения текущей целевой ширины импульса каждого сервопривода. В прерывании проверьте таблицу, чтобы установить порт ввода-вывода в соответствии с серийным номером сервопривода, который в данный момент работает, и точно задайте время для него. Таким образом, один таймер может «отдельно» управлять несколькими сервоприводами. Хотя они не могут полностью перемещаться одновременно, человеческий глаз не может обнаружить эту крошечную разницу во времени.
Видя это, у вас уже есть четкое представление о том, как использовать микроконтроллер 51 для управления сервоприводом? От принципа до выбора и реализации кода — каждый шаг на самом деле очень интересен. Если у вас возникла идея прямо сейчас, вы можете включить компьютер, вынуть плату разработки микроконтроллера и попробовать подключить ее самостоятельно. Прекрасное чувство, когда сервопривод впервые вращается точно по команде вашего кода, — это радость творчества.
Хочу у вас спросить, какой гаджет вам больше всего хотелось бы собрать с помощью сервопривода и микроконтроллера? Это гаджет, автоматически отслеживающий солнечный свет, или маленький робот, умеющий рисовать? Добро пожаловать, оставьте сообщение в области комментариев, чтобы поделиться своими мыслями. Давайте общаться вместе и, возможно, мы сможем создать лучшие искры! Если эта статья оказалась для вас полезной, не забудьте поставить лайк и поделиться ею с друзьями, которым она нужна.
Время обновления: 24 февраля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.