3.15. Controle de motor DC¶
Um motor DC com escovas é uma bobina de fio em um eixo dentro de um campo magnético. Faça a corrente passar pela bobina e o campo exerce uma força sobre ela; essa força se torna torque no eixo. Escovas dentro do motor invertem o sentido da corrente na bobina conforme o eixo gira, de modo que o torque sempre empurra o eixo no mesmo sentido. Aplique uma tensão DC nos dois terminais do motor e o eixo gira; inverta a polaridade e ele gira no sentido contrário.
Motores normalmente exigem de centenas de miliampères a vários ampères, em tensões de alimentação acima do trilho lógico de 3,3 V da câmera. Um pino GPIO consegue fornecer cerca de 25 mA e não pode inverter a polaridade – ele só pode acionar seus dois trilhos. O estágio de acionamento entre a câmera e o motor precisa conduzir a corrente do motor, rotear uma alimentação de motor separada e de tensão mais alta, e permitir que a câmera inverta a polaridade sob comando. A ponte H de quatro transistores é a resposta padrão.
3.15.1. A ponte H¶
Uma ponte H é composta por quatro chaves dispostas em forma de H ao redor do motor:
A ponte H: quatro chaves (S1 – S4) conectam o motor M entre Vmotor e o terra.¶
Fechar diferentes pares de chaves seleciona o que o motor vê em seus terminais:
S1 + S4 fechadas, S2 + S3 abertas. A corrente flui de Vmotor através de
S1, para dentro deA, atravessa o motor atéBe passa porS4até o terra. O motor gira em um sentido.S2 + S3 fechadas, S1 + S4 abertas. A corrente flui no sentido oposto pelo motor. O motor gira no sentido contrário.
Todas as quatro abertas. Ambos os terminais do motor ficam flutuando; o motor gira por inércia.
S3 + S4 fechadas (ou S1 + S2 fechadas). Ambos os terminais do motor ficam ligados ao mesmo trilho; a própria energia cinética do motor gera uma corrente que o par fechado dissipa como calor em curto. O motor freia.
A combinação proibida é fechar ambas as chaves de uma mesma coluna – S1 + S3 ou S2 + S4 – o que forma um curto-circuito de Vmotor direto para o terra. Isso é shoot-through, e o código da câmera não deve permitir.
Na prática, as quatro chaves são MOSFETs (apresentados na página Conversão de nível) dentro de um CI driver integrado. O chip expõe dois ou três pinos de entrada em nível lógico que se mapeiam internamente para as quatro chaves e inclui uma lógica de intertravamento que impede o shoot-through, de modo que o código da câmera não precisa gerenciá-lo diretamente.
3.15.2. PWM e a indutância do motor¶
Definir a velocidade do motor exige mais do que apenas ligado total e desligado total. O truque é o mesmo usado para LEDs em Dimerização de LED com PWM: pulsar o acionamento em alta frequência e deixar a carga fazer a média do resultado. Para um LED, quem fazia a média era o olho; para um motor, é a própria bobina.
A bobina de um motor tem indutância considerável. A corrente através de um indutor não pode mudar instantaneamente; ela muda a uma taxa proporcional à tensão sobre ele. Pulsar a ponte ligando e desligando a 20 kHz faz a corrente da bobina subir durante cada fase ligada e, durante a fase desligada, a corrente precisa continuar fluindo – a bobina inverte a tensão sobre si mesma para mantê-la.
Sem um caminho por onde ir, essa corrente provocaria um pico de tensão na chave recém-aberta e poderia danificar o transistor. Diodos de roda livre sobre cada chave – muitas vezes apenas os próprios diodos de corpo dos MOSFETs dentro do chip driver – dão à corrente o caminho de que ela precisa. Ela flui por um diodo e retorna por uma das chaves ainda fechadas, completando um laço de roda livre no qual a corrente decai gradualmente através das pequenas resistências da ponte e do próprio motor. O diodo também mantém a tensão sobre a chave aberta dentro de uma queda de diodo em relação ao trilho ao qual o laço retorna, bem dentro da área de operação segura do MOSFET.
A média da corrente ao longo de cada período de PWM é o que produz torque, e essa média acompanha o ciclo de trabalho de forma linear – dobrar o ciclo de trabalho aproximadamente dobra o torque e, sob carga constante, aproximadamente dobra a velocidade. Diferentemente do dimerização de LED, em que a resposta não linear do olho exige uma curva, uma varredura linear de duty_u16 já corresponde a uma varredura linear do esforço do motor.
A frequência de PWM só precisa superar dois limiares:
Acima de ~20 kHz a portadora fica fora da faixa audível humana. Abaixo disso, a força magnética sobre a bobina sobe e desce a cada pulso de PWM e os enrolamentos e as lâminas vibram fisicamente na frequência da portadora – o motor efetivamente se torna um pequeno alto-falante emitindo um tom na altura do PWM.
Muito acima de ~50 kHz os MOSFETs e seus drivers de gate começam a perder eficiência por causa das perdas de chaveamento. Durante cada transição liga-desliga, o MOSFET conduz brevemente tanto uma tensão significativa quanto uma corrente significativa, dissipando uma pequena rajada de potência na forma de calor; a capacitância de gate dos MOSFETs também precisa ser carregada e descarregada a cada ciclo, o que o chip driver paga. Ambos os custos crescem com a frequência de PWM, então em taxas altas o calor do chaveamento pode rivalizar com o calor da condução da corrente do motor.
20 kHz é o padrão confortável para motores de porte de hobby.
3.15.3. Acionando uma ponte H¶
Um chip driver de ponte H com duas entradas mapeia IN1 e IN2 para as quatro chaves mais ou menos assim:
IN1 = 0, IN2 = 0– inércia (todas as quatro chaves abertas).IN1 = 1, IN2 = 0– aciona em um sentido.IN1 = 0, IN2 = 1– aciona no outro sentido.IN1 = 1, IN2 = 1– frear.
Acionar as duas entradas como saídas PWM permite que a câmera defina o sentido escolhendo qual dos dois pinos carrega o ciclo de trabalho, e a velocidade pelo próprio valor do ciclo de trabalho:
import time
from machine import PWM, Pin
in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)
def drive_a(speed): # speed: 0..65535
in1.duty_u16(speed)
in2.duty_u16(0)
def drive_b(speed):
in1.duty_u16(0)
in2.duty_u16(speed)
def coast():
in1.duty_u16(0)
in2.duty_u16(0)
def brake():
in1.duty_u16(65535)
in2.duty_u16(65535)
drive_a(32768) # half speed in direction A
time.sleep(2)
drive_b(16384) # quarter speed in direction B
time.sleep(2)
coast()
Uma rampa de desligado até o máximo e de volta proporciona uma partida e uma parada suaves:
for d in range(0, 65535, 256):
in1.duty_u16(d)
time.sleep_ms(10)
for d in range(65535, 0, -256):
in1.duty_u16(d)
time.sleep_ms(10)
3.15.4. Drivers de sentido e velocidade¶
Uma segunda família de chips de ponte H expõe uma interface mais conveniente: uma entrada digital de sentido (frequentemente rotulada DIR ou PH de “phase”) mais uma entrada de velocidade (frequentemente PWM ou EN de “enable”). O pino de sentido escolhe para qual lado a ponte aciona; o ciclo de trabalho no pino de velocidade define a corrente média.
Isso é mais fácil de acionar por software do que o esquema de duas entradas PWM. Os dois sinais correspondem à forma como o problema costuma ser enunciado – “gire para este lado, nesta velocidade” – de modo que o código pode dizer set_direction(forward); set_speed(50) em vez de fazer ramificações entre in1 e in2. Apenas um canal de PWM é necessário, o que libera o outro canal do mesmo timer para uma tarefa não relacionada. E o pino de sentido pode permanecer estacionado entre mudanças sem reacionar a ponte, então mudar a velocidade com sentido fixo afeta apenas um registrador.
import time
from machine import PWM, Pin
dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)
def drive(direction, speed_u16):
dir_pin.value(direction) # 0 or 1
speed.duty_u16(speed_u16) # 0..65535
drive(0, 32768) # direction A at half speed
time.sleep(2)
drive(1, 16384) # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0) # stop
O que “parar” de fato faz nesse tipo de driver – girar por inércia ou frear – depende do chip. Com um driver de duas entradas, o código da câmera escolhe (ambas as entradas em nível baixo para inércia, ambas em nível alto para frear); com um driver de sentido e velocidade, o chip decide, então vale a pena dar uma olhada na folha de dados antes de depender de qualquer um dos comportamentos.