motor-shield-pwm.py
# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemplo de PWM com Motor Shield
#
# Este exemplo mostra como controlar o motor shield da sua
# OpenMV Cam. O motor shield é controlado usando o módulo PYB
# que permite fazer PWM para controlar a velocidade e definir os estados
# dos pinos digitais de I/O. O motor shield precisa de 6 pinos de I/O para os dois motores.
import pyb
# Estes pinos controlam nossa direção enquanto os outros pinos PWM
# abaixo controlam a velocidade. A direção de cada motor
# é definida por uma ponte H, onde A0/1 são os dois lados de
# um driver de ponte H. B0/1 são outra ponte 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 devem ser diferentes entre si para operação para frente ou para trás
# Se forem iguais, isso é uma operação de freio.
# Se forem diferentes, o motor vai girar em um sentido ou outro
# dependendo da sua fiação e do valor de dir 0.
pinADir0.value(0)
pinADir1.value(1)
# Dir0/1 devem ser diferentes entre si para operação para frente ou para trás
# Se forem iguais, isso é uma operação de freio.
# Se forem diferentes, o motor vai girar em um sentido ou outro
# dependendo da sua fiação e do valor de dir 0.
pinBDir0.value(0)
pinBDir1.value(1)
# Cria um objeto timer rodando a 1KHz que vai alimentar a
# saída PWM na sua OpenMV Cam. Só precisa ser criado uma vez.
tim = pyb.Timer(4, freq=1000)
# Usa o objeto timer para criar duas saídas PWM na OpenMV Cam.
# Estes timers controlam a velocidade dos motores. Você vai definir
# a porcentagem de PWM desses timers repetidamente no seu loop.
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)