Рубрики
Проекты на Raspberry Pi

Подключение сервомотора к Raspberry Pi Pico с помощью MicroPython

Ранее на нашем сайте мы уже рассмотрели серию статей про набирающую сейчас популярность плату Raspberry Pi Pico: подключение к ней ЖК дисплея и OLED дисплея, использование в ней АЦП и подключение ультразвукового датчика для определения расстояний.

В этой же статье мы рассмотрим подключение сервомотора (серводвигателя) к плате Raspberry Pi Pico и управление им с помощью широтно-импульсной модуляции (ШИМ). Программирование платы будет осуществляться на языке MicroPython.

Необходимые компоненты

  1. Плата Raspberry Pi Pico (купить на AliExpress).
  2. Сервомотор SG90 (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Основные принципы ШИМ

Широтно-импульсная модуляция (на англ. Pulse-width modulation – PWM) – это технология, которая изменяет амплитуду цифрового сигнала таким образом, чтобы обеспечить на нагрузке необходимое среднее значение напряжения. Изменяя коэффициент заполнения (цикл занятости, duty cycle) широтно-импульсной модуляции, можно регулировать значение мощности сигнала, поступающего на нагрузку. На следующем рисунке показан пример ШИМ сигнала.

На представленном рисунке показан ШИМ сигнал с коэффициентом заполнения 50%. Мы можем изменять коэффициент заполнения ШИМ сигнала в пределах от 0% to 100%. Период ШИМ сигнала – это сумма длительности моментов ON и OFF как показано на рисунке. Частота ШИМ сигнала показывает как быстро в ШИМ сигнала протекает один период. Формула для ее расчета выглядит следующим образом:

Frequency = 1/Time Period
Time Period = On time + Off time

Более подробно про технологию широтно-импульсной модуляции вы можете прочитать в статье про использование ШИМ в плате Arduino.

В данном проекте мы, изменяя коэффициент заполнения ШИМ сигнала, будем управлять сервомотором (серводвигателем), подключенным к плате Raspberry Pi Pico.

Схема проекта

Схема подключения сервомотора к плате Raspberry Pi Pico представлена на следующем рисунке.

Как видите, схема соединений очень проста. Мы знаем, что у сервомотора три провода. Черный или коричневый провод – для подключения к земле (ground), красный – для подачи питания (VCC), желтый или оранжевый – для подачи управляющего импульсного сигнала. В схеме мы подключили провод VCC серводвигателя к контакту VBUS платы Raspberry Pi Pico, сигнальный провод сервомотора подключен к контакту GPIO0 платы, а земля сервомотора – к земле платы.

Объяснение программы для Raspberry Pi Pico

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

Для начала вам необходимо скачать с репозитория GitHub каталог обучающих программ для платы Raspberry Pi Pico. В этом каталоге вам нужен будет подкаталог с именем “T6_How to Control a Servo Motor using Pico”. Внутри этого подкаталога вы найдете подкаталог “code”, а в нем файл программы “main.py”, который вам нужно открыть в редакторе Thonny (или другом аналогичном).

Вначале в программе мы подключаем (импортируем) необходимые библиотеки.

Функции Pin() и PWM() описаны в импортированный библиотеке machine.py. Функция Pin() в нашем случае используется для объявления сигнального (управляющего) контакта сервомотора.

Поскольку у нас сигнальный контакт сервомотора подключен к контакту GPIO0 платы, то с помощью функции PWM() мы его сделали ШИМ контактом, то есть контактом, на котором будет формироваться ШИМ сигнал. Переменная pwm у нас в коде используется в качестве объекта. Далее мы назначили частоту для ШИМ сигнала равную 50Hz с помощью функции pwm.freq(50).

Затем мы используем функцию setServoCycle(position) для установки позиции сервомотора изменяя параметр позиции в диапазоне от 1000 до 9000. Дело в том, что в данном случае позиция сервомотора задается не в градусах, как мы привыкли для других микроконтроллерных платах, а в микросекундах. И значения 1000-9000 соответствуют диапазону градусов 0-180.

Мы в бесконечном цикле while будем использовать два цикла. Первый из них используется для установки позиции оси сервомотора от 0 до 180, что соответствует значениям микросекунд от 1000 до 9000. А второй цикл используется для установки позиции оси сервомотора от 180 до 0, что соответствует значениям микросекунд от 9000 до 1000.

Теперь, код у нас код программы полностью готов, откройте в Thonny IDE файл “main.py”. Начните его сохранение при помощи нажатия комбинации кнопок “ctrl+shift+s” на клавиатуре. Перед сохранением файла убедитесь в том, что плата Raspberry Pi Pico подключена к вашему компьютеру. После нажатия клавиш “ctrl+shift+s” у вас откроется диалоговое окно как показано на приведенном ниже рисунке. В этом диалоговом окне выберите Raspberry Pi Pico, введите имя файла “main.py” и сохраните его на плате. Это приведет к тому, что программа в файле “main.py” будет исполняться всегда, когда на плату Raspberry Pi Pico будет подаваться питание.

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

Исходный код программы на MicroPython

Видео, демонстрирующее работу проекта

Источник статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *