Опубликовано 2026-02-13
Вы когда-нибудь сталкивались с такой ситуацией: у вас естьсервоприводс огромной радостью и хотели заставить его двигаться, но в результате вы написали много кода исервоприводлибо не шевелился, либо трясся, как в судороге? Не волнуйтесь, возможно, это потому, что я не понимаю ШИМ (широтно-импульсной модуляции). Проще говоря, ШИМ — это своеобразный «сигнал», посылаемый на рулевой механизм. Изменяя ширину импульса, он приказывает ему «повернуться на этот угол» или «повернуться на тот угол». В этой статье мы досконально разберемся в этом «тайном сигнале» и сделаем ваш рулевой механизм послушным.
Если вы хотите, чтобы сервопривод повернулся на заданный угол, ядро должно послать ему ШИМ-сигнал с периодом 20 миллисекунд (мс), а затем отрегулировать длительность высокого уровня, то есть ширину импульса. Обычно импульс длительностью 1 мс соответствует -90°, 1,5 мс соответствует 0°, а 2 мс соответствует +90°.
В коде вам не нужно вручную считать эти десятки микросекунд. Большинство макетных плат (вроде) имеют готовые библиотечные функции. Например, используяСерво.чбиблиотеке, вам нужно только.писать(90), и он автоматически рассчитает для вас соответствующую ширину импульса и продолжит выводить сигнал, а сервопривод будет плавно поворачиваться на 90 °.
Джиттер определенно больше всего раздражает новичков. Наиболее вероятная причина в том, что тока, подаваемого на сервопривод, недостаточно. Сервоприводу требуется относительно большой ток при вращении. Если вы напрямую используете контакт 5 В на плате разработки для его питания, напряжение легко станет нестабильным, что приведет к путанице сигналов и сервоприводу, который начнет дергаться. В это время подготовьте отдельный внешний источник питания для сервопривода, например, несколько батарей, и подключите заземляющий провод источника питания к заземляющему проводу платы разработки, и проблема в принципе может быть решена.
Другая распространенная причина – помехи в сигнальной линии. Если ваша линия подключения очень длинная или поблизости находится сильное электрическое оборудование, такое как двигатели и трансформаторы, сигналы помех будут смешиваться. Решение состоит в том, чтобы использовать как можно более короткие линии DuPont или держать линии сервосигналов вдали от источников помех.
Есть три параметра ШИМ, наиболее важные для работы сервопривода: частота, рабочий цикл и разрешение. Частота ШИМ, необходимая для сервопривода, фиксирована и составляет 50 Гц, что составляет период 20 мс, и ее нельзя изменить случайным образом.
Рабочий цикл — это доля времени высокого уровня ко всему циклу. Например, при высоком уровне 2 мс рабочий цикл составляет 10%. Мы регулируем угол сервопривода, изменяя это соотношение. Разрешение означает, на сколько частей ваша панель управления может разделить цикл. Например, 8-битное разрешение разделено на 256 частей. Чем выше разрешение, тем плавнее и точнее будет вращение сервопривода, без ощущения прыжков от кадра к кадру.
Когда вы впервые начинаете писать код, самая распространенная ошибка — это забыть про инициализацию. я только написал.(9), но забыл это написатьнастраивать()функции, либо номер контакта был написан неправильно, и, конечно, сервопривод не ответил. Не забудьте проверить свой код, чтобы убедиться, что сервообъект правильно подключен к контакту, к которому вы его фактически подключили.
Еще одна ошибка связана с функцией времени. Если вы хотите реализовать принцип «сначала поверните на 90°, подождите 2 секунды, а затем поверните на 0°», не используйте многозадерживать()вдляцикл, чтобы добиться медленного вращения, иначе вся программа зависнет. Правильный подход – использовать()функция для синхронизации или использования.писать()с неблокирующим методом постепенного увеличения значения угла, чтобы сервопривод мог выполнять другие задачи, совершая при этом плавный переход.
Когда вам нужно сделать руку для робота и одновременно управлять несколькими сервоприводами, можно просто соединить пины один за другим, но это отнимет много ресурсов пинов, и код будет очень сложно писать. Лучшим вариантом будет использование платы сервопривода, такой как эта.
Он может управлять до 16 сервоприводами по двум сигнальным линиям (протокол I2C), причем импульсы каждого канала можно регулировать независимо. В коде вам нужно только вызвать соответствующую библиотечную функцию, напримерШИМ.(0, 0, 300), для управления сервоприводом на канале 0. Таким образом, ваша основная плата управления освобождается, структура кода становится намного понятнее, и можно легко управлять десятками сервоприводов.
Как быстро узнать, корректен ли код после того, как он написан? Самое простое — написать программу «размашистой ноги»: медленно поворачивать сервопривод от 0° до 180°, а затем обратно, и цикл продолжается. Если во время вращения нет задержки или дрожания, а диапазон углов точен, это означает, что ваше базовое аппаратное соединение и логика кода в основном в порядке.
️ Конкретные шаги очень просты:
1. Внастраивать(), подключите сервопривод к указанному контакту.
2. Впетля(), сначала используйтедляцикл для увеличения угла от 0 до 180, каждый раз увеличиваясь на 1 градус и добавляя небольшую задержку.
3. Используйте другойдляцикл, чтобы уменьшить угол со 180 до 0, а также добавить задержку.
Наблюдение своими глазами за плавным покачиванием сервопривода вперед и назад дает гораздо большее чувство выполненного долга, чем непосредственная фиксация его под углом, а также помогает понять суть ШИМ-управления.
Увидев это, вы должны иметь хорошее представление о том, как использовать ШИМ для управления сервоприводом. Поторопитесь и попробуйте. Если в вашем проекте используется сервопривод, как вы думаете, самая большая головная боль — это проблема с питанием или кодированием многоканального управления? Добро пожаловать, поделитесь своим мнением в области комментариев, не забудьте поставить лайк и поделиться этой полезной информацией с большим количеством друзей, которым она нужна!
Время обновления: 13 февраля 2026 г.
Свяжитесь со специалистом по продукции Kpower, чтобы порекомендовать подходящий двигатель или редуктор для вашего продукта.