Управляйте сервоприводом SG90 для вращения вперед и назад в зависимости от угла с помощью микроконтроллера 51.
Управляйте сервоприводом SG90 для вращения вперед и назад в зависимости от угла с помощью микроконтроллера 51.

1. Предисловие

В этой статье рассказывается, как управлять сервоприводом SG90 через микроконтроллер 51 для достижения угла поворота вперед и назад. Рулевой механизм SG90 является широко используемым микрорулевым механизмом. Он имеет небольшой размер, легкий вес и простую конструкцию. Он широко используется в роботах, моделях дистанционного управления и различных системах автоматического управления.

Используйте микроконтроллер 51 (STC89C52) в качестве контроллера и используйте его мощный порт ввода-вывода и функции таймера для управления сервоприводом SG90. Благодаря программному управлению сервоприводом можно точно управлять для вращения вперед или назад на заданный угол.

Управление рулевым механизмом достигается за счет широтно-импульсной модуляции (ШИМ). При управлении рулевым механизмом на рулевой механизм необходимо подавать серию импульсных сигналов. Ширина импульса определяет угловое положение рулевого механизма. Обычно период управляющего импульса сервопривода SG90 составляет 20 миллисекунд, ширина импульса составляет от 0,5 до 2,5 миллисекунды, а соответствующий диапазон угла составляет от 0 до 180 градусов.

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

Далее будет описано, как генерировать сигналы ШИМ, подходящие для сервопривода SG90, через порт ввода-вывода и таймер микроконтроллера 51. Напишите соответствующую программу, реализующую вращение сервопривода вперед и назад путем регулировки ширины импульса, и предоставьте пример кода.

2. Знакомство с двигателем SG90.

Двигатель SG90 — это миниатюрный рулевой механизм, обычно используемый в моделях, роботах и ​​других небольших механических устройствах.

1. Принцип работы: Двигатель SG90 основан на принципе двигателя постоянного тока и управляет углом поворота рулевого механизма посредством сигналов ШИМ (широтно-импульсной модуляции). Он состоит из двигателя, редуктора и цепи обратной связи по положению. Эта схема обратной связи использует потенциометр для определения текущего положения сервопривода и передачи его обратно в схему управления.

2. Особенности:

  • Компактный размер: двигатель SG90 очень компактен и легок, что делает его пригодным для применения в условиях ограниченного пространства.
  • Широкий диапазон угла поворота: обычно двигатель SG90 может вращаться примерно на 180 градусов, но конкретный диапазон вращения можно регулировать с помощью управляющего сигнала.
  • Высокая точность: двигатель SG90 обладает высокой точностью вращения и стабильностью, что делает его пригодным для применений, требующих точного управления.
  • Низкое энергопотребление: двигатель SG90 имеет низкое энергопотребление и может работать при низком напряжении.
  • Относительно экономичный: по сравнению с большими сервоприводами или шаговыми двигателями двигатель SG90 относительно недорог и подходит для использования в проектах с ограниченным бюджетом.

3. Метод управления: Для управления двигателем SG90 требуется сигнал ШИМ. Вот основные шаги по управлению двигателем SG90:

  • Подключите вывод VCC двигателя SG90 к положительному источнику питания (обычно 5 В).,Подключите контакт GND к земле.
  • Подключите сигнальный провод (например, контакт, управляющий углом сервопривода) к цифровому выходному контакту микроконтроллера или другого устройства управления.
  • Установите указанный выходной контакт ШИМ на устройстве управления.,И отправьте сигнал ШИМ, используя соответствующий язык программирования или библиотеку. Период работы ШИМ обычно составляет 20 мс.,Диапазон ширины импульса можно регулировать от 0,5 мс до 2,5 мс.
  • В соответствии с отправленным сигналом ШИМ двигатель SG90 будет вращаться в соответствующее угловое положение. Вообще говоря, ширина импульса 0,5 мс соответствует крайнему левому углу, ширина импульса 2,5 мс соответствует крайнему правому углу, а ширина импульса 1,5 мс соответствует среднему положению. Конкретный диапазон ширины импульса и соответствующий угол можно регулировать в соответствии с моделью двигателя и требованиями.

Номинальное рабочее напряжение двигателя SG90 составляет 4,8–6 В. Превышение этого диапазона может привести к повреждению двигателя. Во время работы сервопривод будет генерировать определенный пик тока. При его использовании необходимо убедиться, что источник питания обеспечивает достаточный ток.

3. Реализуйте код

3.1 Прямая и обратная задержка моделирования реализации

Ниже приводится Управляйте сервоприводом SG90 для вращения вперед и назад в зависимости от угла с помощью микроконтроллера 51. Код реализации,Инкапсуляторфункциявызов:

Язык кода:javascript
копировать
#include <reg51.h>

// Определите контакты порта ввода-вывода для подключения сервопривода
sbit servoPin = P1^0;

// Функция задержки времени
void delay(unsigned int time) {
    unsigned int i, j;
    for(i = 0; i < time; i++) {
        for(j = 0; j < 1000; j++);
    }
}

// Управляйте рулевым механизмом для поворота вперед на заданный угол.
void rotateClockwise(unsigned int angle) {
    unsigned int pulseWidth = 500 + angle * 11.11;
    unsigned int i;
    for(i = 0; i < 50; i++) {
        servoPin = 1; // Выходной высокий уровень
        delay(pulseWidth);
        servoPin = 0; // Выходной низкий уровень
        delay(20000 - pulseWidth);
    }
}

// Управляйте рулевым механизмом для движения задним ходом под заданным углом.
void rotateCounterclockwise(unsigned int angle) {
    unsigned int pulseWidth = 2500 - angle * 11.11;
    unsigned int i;
    for(i = 0; i < 50; i++) {
        servoPin = 1; // Выходной высокий уровень
        delay(pulseWidth);
        servoPin = 0; // Выходной низкий уровень
        delay(20000 - pulseWidth);
    }
}

void main() {
    while(1) {
        // Поворот вперед на 90 градусов
        rotateClockwise(90);
        delay(2000); // Оставайтесь в течение 2 секунд

        // Перевернуть на 90 градусов
        rotateCounterclockwise(90);
        delay(2000); // Оставайтесь в течение 2 секунд
    }
}

3.2 Управление прямым и обратным углом – ШИМ-управление

Ниже приведен код реализации, который использует таймер 0 STC89C52 и порт GPIO для имитации генерации сигналов ШИМ:

Язык кода:javascript
копировать
#include <reg52.h>

#define FREQ_OSC 11059200UL   // Микроконтроллер Работачастота
#define PWM_FREQ 50           // Частота ШИМ-сигнала
#define PWM_RESOLUTION 100    // Разрешение ШИМ-сигнала

sbit Servo = P1^0;   // Штифт управления сервоприводом SG90

unsigned int pwmWidth = 0;   // Ширина импульса ШИМ

// таймер0инициализацияфункция
void Timer0Init() {
    EA = 0;   // Отключить общее количество прерываний
    TMOD &= 0xF0;   // Очистить бит управления T0
    TMOD |= 0x01;   // Установите T0 в Режим работы 1 (16-битный таймер)
    TH0 = (65536 - (FREQ_OSC / 12 / PWM_FREQ)) / 256;   // Вычислите и установите старшие 8 бит начального значения счетчика.
    TL0 = (65536 - (FREQ_OSC / 12 / PWM_FREQ)) % 256;   // Вычислите и установите младшие 8 бит начального значения счетчика.
    TR0 = 1;   // запускатьтаймер0    ET0 = 1;   // Разрешить прерывание таймера 0
    EA = 1;   // Включить полное прерывание
}

// таймер0Прерывание сервиснаяфункция
пустота Timer0Interrupt() interrupt 1 {
    if (pwmWidth > PWM_RESOLUTION) {
        Servo = 0;   // Сброс сервопривода
    } else {
        Servo = 1;   // Положение сервопривода
    }
    TH0 = (65536 - (FREQ_OSC / 12 / PWM_FREQ)) / 256;   // Сброс старших 8 бит значения счетчика.
    TL0 = (65536 - (FREQ_OSC / 12 / PWM_FREQ)) % 256;   // Сброс младших 8 бит значения счетчика.
    pwmWidth++;   // Каждое прерывание увеличивает ширину импульса ШИМ
}

// хозяинфункция
void main() {
    Timer0Init();   // инициализациятаймер0    while (1) {
        if (pwmWidth > PWM_RESOLUTION) {
            pwmWidth = 0;
        }
    }
}

В коде вывод P1^0 используется в качестве управляющего вывода сервопривода SG90, а сигнал ШИМ генерируется через таймер 0.

В функции Timer0Init установите для таймера 0 режим работы 16-битного таймера 1, рассчитайте и установите начальное значение счетчика, запустите таймер 0 и разрешите прерывание таймера 0.

В функции Timer0Interrupt регулируйте состояние уровня контакта сервоуправления каждый раз, когда Таймер 0 прерывается, и обновляйте значение счетчика Таймера 0.

В основной функции цикл определяет, достигает ли ширина импульса ШИМ установленного разрешения. Если она превышает, отсчет начинается снова с 0.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода