- Что такое серводвигатель?
- Взаимодействие серводвигателей с микроконтроллерами:
- Программирование серводвигателя с помощью микроконтроллера PICF877A PIC:
- Принципиальная электрическая схема:
- Моделирование и настройка оборудования:
Это наш 11-й учебник по изучению микроконтроллеров PIC с использованием MPLAB и XC8. В этом руководстве мы узнаем, как управлять серводвигателем с помощью микроконтроллера PIC. Если вы уже работали с серводвигателями, вы можете пропустить первую половину этого руководства, но если вы новичок в самом серводвигателе, продолжайте чтение.
До сих пор мы рассмотрели множество базовых руководств, таких как мигание светодиодов с помощью PIC, таймеры в PIC, сопряжение с ЖК-дисплеем, сопряжение с 7-сегментным интерфейсом, АЦП с использованием PIC и т. Д. Если вы абсолютный новичок, посетите полный список руководств по PIC здесь и начать учиться.
В нашем предыдущем руководстве мы узнали, как сгенерировать сигналы PWM с помощью микроконтроллера PIC, сигналы были сгенерированы на основе значения, считанного с потенциометра. Если вы поняли все программы, поздравляем, вы уже написали код для серводвигателя. ДА, серводвигатели реагируют на сигналы ШИМ (которые мы создаем с помощью таймеров здесь), мы узнаем, почему и как, в этом руководстве. Мы смоделируем и построим установку оборудования для этого проекта, и вы можете найти подробное видео в конце этого руководства.
Что такое серводвигатель?
Сервомотор - это тип привода (в основном круглый), который позволяет регулировать угол. Доступно много типов серводвигателей, но в этом руководстве мы сконцентрируемся на серводвигателях для хобби, показанных ниже.
Сервоприводы для хобби популярны, потому что они являются недорогим методом управления движением. Они представляют собой готовое решение для большинства потребностей дистанционного управления и роботов-любителей. Они также устраняют необходимость в индивидуальной разработке системы управления для каждого приложения.
Большинство серводвигателей для хобби имеют угол поворота от 0 до 180 °, но вы также можете получить серводвигатель на 360 °, если вам интересно. В этом руководстве используется серводвигатель 0–180 °. Существует два типа серводвигателей на основе шестерен: один - сервомотор с пластмассовой шестерней, а другой - серводвигатель с металлической шестерней. Металлические шестерни используются там, где двигатель подвержен большему износу, но это дорогое удовольствие.
Серводвигатели рассчитаны на кг / см (килограмм на сантиметр), большинство серводвигателей для хобби рассчитаны на 3 кг / см, 6 кг / см или 12 кг / см. Этот кг / см показывает, какой вес ваш серводвигатель может поднять на определенное расстояние. Например: Серводвигатель 6 кг / см должен быть в состоянии поднять 6 кг, если груз подвешен на расстоянии 1 см от вала двигателя. Чем больше расстояние, тем меньше грузоподъемность. Изучите здесь основы серводвигателя.
Взаимодействие серводвигателей с микроконтроллерами:
Подключить любительские серводвигатели к MCU очень просто. Из сервоприводов выходят три провода. Два из них будут использоваться для питания (положительный и отрицательный), а один будет использоваться для сигнала, который должен быть отправлен от MCU. В этом уроке мы будем использовать серводвигатель MG995 Metal Gear, который чаще всего используется для гуманоидных роботов радиоуправляемых машин и т. Д. Изображение MG995 показано ниже:
Цветовая кодировка вашего серводвигателя может отличаться, поэтому проверьте соответствующий лист данных.
Все серводвигатели работают напрямую с вашими шинами питания + 5V, но мы должны быть осторожны с количеством тока, который будет потреблять двигатель. Если вы планируете использовать более двух серводвигателей, необходимо спроектировать надлежащий сервозащитный экран. В этом уроке мы просто будем использовать один серводвигатель, чтобы показать, как запрограммировать наш PIC MCU для управления двигателем. Проверьте ссылки ниже для взаимодействия серводвигателя с другим микроконтроллером:
- Интерфейс серводвигателя с микроконтроллером 8051
- Управление серводвигателем с помощью Arduino
- Учебное пособие по сервомотору Raspberry Pi
- Серводвигатель с микроконтроллером AVR
Программирование серводвигателя с помощью микроконтроллера PICF877A PIC:
Прежде чем мы сможем начать программирование серводвигателя, мы должны знать, какой тип сигнала должен быть отправлен для управления серводвигателем. Мы должны запрограммировать MCU на отправку сигналов ШИМ на сигнальный провод серводвигателя. Внутри серводвигателя есть схема управления, которая считывает рабочий цикл сигнала ШИМ и позиционирует вал серводвигателя в соответствующем месте, как показано на рисунке ниже.
Каждый серводвигатель работает на разных частотах ШИМ (наиболее распространенная частота - 50 Гц, которая используется в этом руководстве), поэтому получите техническое описание вашего двигателя, чтобы проверить, на каком периоде ШИМ работает ваш серводвигатель.
Подробная информация о сигнале PWM для нашего Tower pro MG995 показана ниже.
Из этого можно сделать вывод, что наш двигатель работает с периодом ШИМ 20 мс (50 Гц). Таким образом, частота нашего ШИМ-сигнала должна быть установлена на 50 Гц. Частота ШИМ, которую мы установили в нашем предыдущем уроке, составляла 5 кГц, ее использование здесь нам не поможет.
Но здесь у нас проблема. PIC16F877A не может генерировать сигналы низких частот ШИХ с помощью модуля КПК. Согласно таблице данных, минимально возможное значение, которое может быть установлено для частоты ШИМ, составляет 1,2 кГц. Поэтому мы должны отказаться от идеи использования модуля CCP и найти способ создавать собственные сигналы PWM.
Следовательно, в этом руководстве мы будем использовать модуль таймера для генерации сигналов ШИМ с частотой 50 Гц и изменения их рабочего цикла для управления углом наклона серводвигателя. Если вы новичок в таймерах или АЦП с PIC, вернитесь к этому руководству, потому что я пропущу большую часть материала, поскольку мы уже рассмотрели их там.
Мы инициализируем наш модуль таймера с предварительным делителем 32 и заставляем его переполняться каждые 1 мкс. Согласно нашим данным, период ШИМ должен составлять всего 20 мсек. Таким образом, наше рабочее и нерабочее время вместе должно быть точно равно 20 мс.
OPTION_REG = 0b00000100; // Таймер 0 с внешней частотой и 32 в качестве предделителя TMR0 = 251; // Загрузить значение времени для 1 мкс. DelayValue может находиться в диапазоне 0–256 только TMR0IE = 1; // Разрешить бит прерывания таймера в регистре PIE1 GIE = 1; // Разрешить глобальное прерывание PEIE = 1; // Включить периферийное прерывание
Итак, внутри нашей функции обработки прерывания мы включаем вывод RB0 на указанное время и выключаем его на время расширения (20 мс - on_time). Значение времени включения можно указать с помощью модуля потенциометра и АЦП. Прерывание показано ниже.
oid interrupt timer_isr () {if (TMR0IF == 1) // Таймер переполнился {TMR0 = 252; / * Загрузить значение таймера, (Примечание: значение таймера равно 101 и 100, так как TImer0 требуется два цикла инструкций для начала увеличения TMR0 * / TMR0IF = 0; // Сброс флага прерывания таймера count ++;} if (count> = on_time) { RB0 = 1; // дополняем значение для мигания светодиодов} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Внутри нашего в то время как петли мы только считывать значение потенциометра с помощью модуля АЦП и обновления на время ШИМ, используя значение считывания.
а (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Таким образом, мы создали ШИМ-сигнал с периодом 20 мс и переменной скважностью, которую можно установить с помощью потенциометра. Полный код приведен ниже в разделе кода.
Теперь давайте проверим вывод с помощью моделирования Proteus и перейдем к нашему оборудованию.
Принципиальная электрическая схема:
Если вы уже знакомы с учебником по ШИМ, то схемы этого руководства будут такими же, за исключением того, что мы добавим серводвигатель вместо светодиодной лампы.
Моделирование и настройка оборудования:
С помощью моделирования Proteus мы можем проверить сигнал ШИМ с помощью осциллографа, а также проверить угол поворота серводвигателя. Ниже показано несколько снимков моделирования, на которых можно заметить, что угол поворота серводвигателя и рабочий цикл ШИМ изменяются на основе потенциометра. Далее проверьте полное видео вращения при разных ШИМ в конце.
Как мы видим, угол поворота сервопривода изменяется в зависимости от значения потенциометра. Теперь приступим к настройке оборудования.
При настройке оборудования мы только что удалили плату светодиодов и добавили серводвигатель, как показано на схемах выше.
Оборудование показано на рисунке ниже:
На видео ниже показано, как серводвигатель реагирует на различные положения потенциометра.
Вот и все !! Мы связали серводвигатель с микроконтроллером PIC, теперь вы можете проявить свой творческий потенциал и найти для этого приложения. Есть много проектов, в которых используется серводвигатель.