motor-shield-pwm.py
# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Пример ШИМ на плате расширения для моторов
#
# Этот пример показывает, как управлять платой расширения для моторов на вашей
# камере OpenMV Cam. Плата расширения для моторов управляется с помощью модуля PYB,
# который позволяет использовать ШИМ для управления скоростью и задавать состояния цифровых выводов
# ввода-вывода. Плате расширения для моторов требуется 6 выводов ввода-вывода для обоих двигателей.
import pyb
# Эти выводы управляют направлением, а другие выводы ШИМ
# ниже управляют скоростью. Направление каждого двигателя
# задаётся H-мостом, где A0/1 — это две стороны
# одного драйвера H-моста. B0/1 — это другой H-мост.
pinADir0 = pyb.Pin("P3", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
pinADir1 = pyb.Pin("P2", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
pinBDir0 = pyb.Pin("P1", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
pinBDir1 = pyb.Pin("P0", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE)
# Dir0/1 должны отличаться друг от друга для движения вперёд или назад,
# иначе, если они равны, это будет означать торможение.
# Если они не равны, двигатель будет вращаться в ту или иную сторону
# в зависимости от подключения и значения dir 0.
pinADir0.value(0)
pinADir1.value(1)
# Dir0/1 должны отличаться друг от друга для движения вперёд или назад,
# иначе, если они равны, это будет означать торможение.
# Если они не равны, двигатель будет вращаться в ту или иную сторону
# в зависимости от подключения и значения dir 0.
pinBDir0.value(0)
pinBDir1.value(1)
# Создать объект таймера с частотой 1 кГц, который будет питать
# выход ШИМ на вашей камере OpenMV Cam. Нужно создать только один раз.
tim = pyb.Timer(4, freq=1000)
# Использовать объект таймера для создания двух выходов ШИМ на камере OpenMV Cam.
# Эти таймеры управляют скоростью двигателей. Вы будете многократно
# устанавливать процент заполнения ШИМ этих таймеров в цикле.
chA = tim.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"))
chB = tim.channel(2, pyb.Timer.PWM, pin=pyb.Pin("P8"))
while True:
for i in range(100):
pyb.delay(100)
chA.pulse_width_percent(i)
chB.pulse_width_percent(99 - i)
for i in range(100):
pyb.delay(100)
chA.pulse_width_percent(99 - i)
chB.pulse_width_percent(i)